Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

Flowyteam Mcp

v1.1.2

Manage FlowyTeam projects, tasks, OKRs, KPIs, HR, CRM, finance, support tickets, attendance, and more via MCP — 34 tools for complete workspace management.

0· 150·1 current·1 all-time
byAgung Sidik Muhamad@agungksidik

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for agungksidik/flowyteam-mcp.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "Flowyteam Mcp" (agungksidik/flowyteam-mcp) from ClawHub.
Skill page: https://clawhub.ai/agungksidik/flowyteam-mcp
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install flowyteam-mcp

ClawHub CLI

Package manager switcher

npx clawhub@latest install flowyteam-mcp
Security Scan
Capability signals
CryptoCan make purchasesRequires OAuth tokenRequires sensitive credentials
These labels describe what authority the skill may exercise. They are separate from suspicious or malicious moderation verdicts.
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
medium confidence
Purpose & Capability
The name/description match the SKILL.md: it is an MCP integration for FlowyTeam and the instructions use the platform's RPC/gateway endpoints. However the registry metadata shown above lists no required env vars while the included SKILL.md declares a required FLOWYTEAM_API_TOKEN — this metadata mismatch is unexpected and should be corrected.
Instruction Scope
Instructions are instruction-only and confined to calling FlowyTeam MCP endpoints (auth_register, auth_verify_email, auth_login, and authenticated RPC calls). They explicitly tell the agent how to accept user email/password and verification codes (for Gateway-based login flows). That behavior is consistent with an integration but implies the agent will handle sensitive credentials and one-time verification codes in plaintext, which is privacy-sensitive and worth attention.
Install Mechanism
No install spec and no code files — the skill is instruction-only and does not download or write software to disk (lowest install risk).
!
Credentials
The SKILL.md declares FLOWYTEAM_API_TOKEN as a required env var (appropriate for this API). But the top-level registry requirements reported earlier show no required env vars — an incoherence that may be a packaging/metadata bug. No other unrelated credentials are requested.
Persistence & Privilege
The skill is not always-enabled and uses default agent invocation permissions. It does not request system-wide config paths or elevated privileges in the provided instructions.
What to consider before installing
This skill is largely coherent with its stated purpose (controlling FlowyTeam via MCP), but check two things before proceeding: (1) metadata mismatch — confirm the registry/installer will prompt you to provide FLOWYTEAM_API_TOKEN as SKILL.md requires (the package metadata you saw omitted it), and (2) credential handling — prefer using an API token (RPC endpoint) rather than giving the agent your email/password via the Gateway flow. If you must use the Gateway/login path, avoid pasting long‑term passwords into shared or persistent contexts, and verify the agent/runtime will not persist or transmit your token to unexpected places. Because the package is instruction-only, there is no installed code to inspect — if you need higher assurance, request an updated package manifest or a signed release from the publisher and confirm the endpoints (https://flowyteam.com/api/...) are the official ones.

Like a lobster shell, security has layers — review code before you run it.

latestvk975k9jjc17rdw9zvhse75113d85pjp3
150downloads
0stars
6versions
Updated 1h ago
v1.1.2
MIT-0

FlowyTeam MCP

Connect Claude Code (or any MCP-compatible AI agent) to your FlowyTeam workspace. Manage projects, tasks, OKRs, KPIs, employees, leads, clients, tickets, attendance, leave, invoices, estimates, contracts, expenses, events, notices, time logs, and more — all via natural language.

Platform: flowyteam.com — All-in-one SaaS for team productivity and performance management. 7,000+ organizations, 140+ countries.


Endpoints

EndpointAuthPurpose
POST /api/mcp/gatewayNone (per-call)Gateway — single URL for everything; auth_register, auth_verify_email & auth_login run without token, all other tools read Bearer from header
POST /api/v2/mcp/rpcBearer tokenRPC — authenticated-only endpoint for all 31 workspace tools

Setup

Recommended — Connect with API token

claude mcp add flowyteam \
  --transport http \
  --url https://flowyteam.com/api/v2/mcp/rpc \
  --header "Authorization: Bearer $FLOWYTEAM_API_TOKEN"

Get your token: FlowyTeam → Settings → MCP & AI Integration → copy token.

Claude Desktop / Cursor (mcp.json)

{
  "mcpServers": {
    "flowyteam": {
      "transport": "http",
      "url": "https://flowyteam.com/api/v2/mcp/rpc",
      "headers": {
        "Authorization": "Bearer YOUR_API_TOKEN"
      }
    }
  }
}

Protocol

  • Gateway: POST https://flowyteam.com/api/mcp/gateway
  • RPC: POST https://flowyteam.com/api/v2/mcp/rpc
  • Transport: Streamable HTTP (JSON-RPC 2.0)
  • Auth: Authorization: Bearer <api_token> (not required for auth_register / auth_verify_email / auth_login)
  • Protocol Version: 2024-11-05

All workspace tools share a method parameter to select the HTTP verb:

methodOperation
GETRead / list records
POSTCreate a new record
PUTUpdate an existing record
DELETEDelete a record

Auth tools (auth_register, auth_verify_email, auth_login) only use POST and do not need a method field.


Tools (34)

All tools require a valid FLOWYTEAM_API_TOKEN Bearer token. See Setup above.


1. tasks (requires Bearer token)

Manage tasks and assignments

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringTask ID — required for PUT / DELETE
project_idinteger | stringFilter by project (GET) or assign to project (POST)
headingstringTask title — required for POST
descriptionstringTask description
statusstringTask status (e.g. incomplete, complete)
prioritystringlow / medium / high / urgent
assigned_tointeger | stringEmployee user ID to assign
user_idinteger | stringAlternative employee ID field
due_datestringDue date YYYY-MM-DD
task_category_idinteger | stringTask category ID
searchstringSearch by keyword

Examples:

// GET — list incomplete tasks in project 12
{ "method": "GET", "project_id": 12, "status": "incomplete" }

// POST — create task
{ "method": "POST", "heading": "Write API docs", "project_id": 12,
  "due_date": "2026-05-10", "priority": "medium", "assigned_to": 7 }

// PUT — mark complete
{ "method": "PUT", "id": 101, "status": "complete" }

// DELETE
{ "method": "DELETE", "id": 101 }

2. projects

Manage projects and project workflow

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringProject ID — required for PUT / DELETE
project_namestringProject name — required for POST
statusstringnot started / in progress / on hold / finished
start_datestringStart date YYYY-MM-DD
deadlinestringDeadline YYYY-MM-DD
client_idinteger | stringClient ID
category_idinteger | stringProject category ID
project_summarystringShort description
notesstringAdditional notes
searchstringSearch by keyword

Examples:

// GET — list in-progress projects
{ "method": "GET", "status": "in progress" }

// POST — create project
{ "method": "POST", "project_name": "Mobile App v2",
  "start_date": "2026-06-01", "deadline": "2026-09-30", "client_id": 3 }

// PUT — update status
{ "method": "PUT", "id": 12, "status": "on hold" }

// DELETE
{ "method": "DELETE", "id": 12 }

3. employees

Manage employees and team members

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringEmployee ID — required for PUT / DELETE
namestringFull name — required for POST
emailstringEmail — required for POST
passwordstringPassword — required for POST
department_idinteger | stringDepartment ID
designation_idinteger | stringJob designation ID
employee_idstringCustom employee ID/code
joining_datestringJoining date YYYY-MM-DD
statusstringactive / inactive
searchstringSearch by name or email

Examples:

// GET — list active employees in department 4
{ "method": "GET", "department_id": 4, "status": "active" }

// POST — create employee
{ "method": "POST", "name": "John Doe", "email": "john@company.com",
  "password": "secret123", "department_id": 4, "designation_id": 2,
  "joining_date": "2026-06-01" }

// PUT — deactivate
{ "method": "PUT", "id": 7, "status": "inactive" }

// DELETE
{ "method": "DELETE", "id": 7 }

4. objectives

Manage OKR objectives

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringObjective ID — required for PUT / DELETE
headingstringObjective title — required for POST
descriptionstringObjective description
levelstringcompany / department / individual
typestringqualitative / quantitative
statusstringon track / at risk / behind / achieved
cycle_idinteger | stringPerformance cycle ID
department_idinteger | stringFilter by department
searchstringSearch by keyword

Examples:

// GET — company-level objectives in cycle 3
{ "method": "GET", "cycle_id": 3, "level": "company" }

// POST — create objective
{ "method": "POST", "heading": "Improve NPS Score",
  "level": "company", "cycle_id": 3, "type": "qualitative" }

// PUT — update status
{ "method": "PUT", "id": 20, "status": "at risk" }

// DELETE
{ "method": "DELETE", "id": 20 }

5. key-result

Manage OKR key results linked to objectives

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringKey result ID — required for PUT / DELETE
objective_idinteger | stringFilter by objective (GET)
krs_ownerinteger | stringObjective ID owning this KR — required for POST
krs_titlestringKey result title
krs_descriptionstringDescription
krs_initnumber | stringInitial value
krs_tarnumber | stringTarget value
krs_nownumber | stringCurrent value
krs_weightnumber | stringWeight (1–100)
krs_unitstringUnit (default %)
krs_leaderinteger | stringEmployee details ID for KR owner
krs_confstringConfidence level
krs_remarksstringRemarks
associate_kpisarrayArray of indicator IDs to link
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — key results for objective 20
{ "method": "GET", "objective_id": 20 }

// POST — create key result
{ "method": "POST", "krs_owner": 20, "krs_title": "Reduce churn to < 5%",
  "krs_init": 8, "krs_tar": 5, "krs_now": 8, "krs_weight": 100, "krs_unit": "%" }

// PUT — update current value
{ "method": "PUT", "id": 30, "krs_now": 4.2 }

// DELETE
{ "method": "DELETE", "id": 30 }

6. indicators

Manage KPIs and performance indicators

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringKPI ID — required for PUT / DELETE
namestringKPI name — required for POST
targetnumber | stringTarget value
unitstringUnit (e.g. %, USD, count)
frequencystringdaily / weekly / monthly / quarterly / yearly
category_idinteger | stringIndicator category ID
employee_idinteger | stringAssign to employee
searchstringSearch by keyword

Examples:

// GET — monthly KPIs for employee 7
{ "method": "GET", "employee_id": 7, "frequency": "monthly" }

// POST — create KPI
{ "method": "POST", "name": "Customer Satisfaction Score",
  "target": 90, "unit": "%", "frequency": "monthly",
  "employee_id": 7, "category_id": 2 }

// PUT — update target
{ "method": "PUT", "id": 40, "target": 95 }

// DELETE
{ "method": "DELETE", "id": 40 }

7. indicator-record

Manage KPI actual values per period

Methods: GET POST DELETE

POST maps to indicator-record/update-record (upsert by period). GET with id returns a single record; GET without id returns a list.

ParameterTypeDescription
methodstringGET / POST / DELETE
idinteger | stringRecord ID — GET single / DELETE
indicator_idinteger | stringKPI indicator ID — required for GET list and POST
period_keystringPeriod date dd-m-YYYY e.g. 01-6-2026 — required for POST
current_valuenumber | stringActual value for the period
target_valuenumber | stringTarget value for the period
remarkstringNotes
scorenumber | stringComputed score
monthinteger | stringFilter by month number (GET list)
yearinteger | stringFilter by year (GET list)
start_datestringFilter from date (GET list)
end_datestringFilter to date (GET list)
allboolean | stringReturn all records without pagination
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — records for KPI 40 in May 2026
{ "method": "GET", "indicator_id": 40, "month": 5, "year": 2026 }

// POST — submit/update actual value for a period
{ "method": "POST", "indicator_id": 40, "period_key": "01-6-2026",
  "current_value": 112000, "target_value": 100000, "remark": "Exceeded target" }

// DELETE
{ "method": "DELETE", "id": 200 }

8. leads

Manage sales leads and prospects

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringLead ID — required for PUT / DELETE
client_namestringLead contact name — required for POST
company_namestringCompany name
emailstringContact email
mobilestringContact mobile
websitestringCompany website
addressstringAddress
notestringNotes
agent_idinteger | stringAssign to sales agent
source_idinteger | stringLead source ID (POST)
status_idinteger | stringLead status ID (POST)
statusinteger | stringLead status ID (PUT)
sourceinteger | stringLead source ID (PUT)
meeting_datestringScheduled meeting date
next_follow_upstringyes or no
clientstringlead or client filter (GET)
followUpstringFilter follow-up required (GET)
startDatestringFilter from date (GET)
endDatestringFilter to date (GET)
sort_fieldstringSort column
sort_directionstringasc / desc
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — list leads with pagination
{ "method": "GET", "client": "lead", "per_page": 20, "page": 1 }

// POST — create lead
{ "method": "POST", "client_name": "PT Maju Jaya",
  "email": "info@majujaya.com", "mobile": "+6281234567890",
  "status_id": 1, "agent_id": 7 }

// PUT — update status and add note
{ "method": "PUT", "id": 55, "status": 3, "note": "Proposal sent" }

// DELETE
{ "method": "DELETE", "id": 55 }

9. clients

Manage clients and customer relationships

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringClient ID — required for PUT / DELETE
namestringContact name — required for POST
emailstringEmail — required for POST
company_namestringCompany name
websitestringCompany website
addressstringAddress
mobilestringPhone number
send_emailstringyes / no — send welcome email
skypestring | nullSkype handle
linkedinstring | nullLinkedIn URL
twitterstring | nullTwitter handle
facebookstring | nullFacebook URL
gst_numberstring | nullTax/GST number
notestring | nullNotes
searchstringSearch by name or company

Examples:

// GET — search clients
{ "method": "GET", "search": "acme" }

// POST — create client
{ "method": "POST", "name": "Alice Johnson",
  "email": "alice@newclient.com", "company_name": "New Client Ltd",
  "mobile": "+0987654321", "send_email": "yes" }

// PUT — update website
{ "method": "PUT", "id": 3, "website": "https://acme-new.com" }

// DELETE
{ "method": "DELETE", "id": 3 }

10. tickets

Manage support tickets and issues

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringTicket ID — required for PUT / DELETE
subjectstringTicket subject — required for POST
descriptionstringTicket description
statusstringopen / pending / resolved / closed
prioritystringlow / medium / high / urgent
type_idinteger | stringTicket type ID
channel_idinteger | stringTicket channel ID
agent_idinteger | stringAssign to agent
user_idinteger | stringReporter user ID
searchstringSearch by keyword

Examples:

// GET — high-priority open tickets
{ "method": "GET", "status": "open", "priority": "high" }

// POST — create ticket
{ "method": "POST", "subject": "Cannot export report",
  "description": "Export button not responding",
  "priority": "medium", "type_id": 1, "channel_id": 2, "user_id": 7 }

// PUT — resolve and reassign
{ "method": "PUT", "id": 500, "status": "resolved", "agent_id": 8 }

// DELETE
{ "method": "DELETE", "id": 500 }

11. attendance

Manage attendance records and time tracking

Methods: GET POST PUT

POST → clock in (attendance/clock-in) PUT → clock out (attendance/clock-out) GET with today: true → today's attendance summary

ParameterTypeDescription
methodstringGET / POST / PUT
idinteger | stringAttendance record ID — required for PUT (clock-out)
employee_idinteger | stringEmployee ID
datestringSpecific date YYYY-MM-DD
monthstringFilter by month
yearstringFilter by year
clock_in_timestringClock-in time HH:MM:SS
clock_out_timestringClock-out time HH:MM:SS
working_fromstringoffice / home / other
late_reasonstringReason if arriving late
todayboolean | stringSet true to get today's records (GET)

Examples:

// GET — today's attendance
{ "method": "GET", "today": true }

// GET — by month/year
{ "method": "GET", "employee_id": 7, "month": "5", "year": "2026" }

// POST — clock in
{ "method": "POST", "employee_id": 7, "working_from": "office" }

// PUT — clock out
{ "method": "PUT", "id": 300 }

12. leave

Manage employee leave requests

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringLeave ID — required for PUT / DELETE
user_idinteger | stringEmployee user ID — required for POST
leave_type_idinteger | stringLeave type ID — required for POST / PUT
leave_datestringLeave start date YYYY-MM-DD — required for POST
durationstringfull day / half day / multiple
reasonstringLeave reason
statusstringpending / approved / rejected (PUT for approval)
multi_datestringComma-separated dates for multiple duration
userIdinteger | stringFilter by employee (GET)
startDatestringFilter from date (GET)
endDatestringFilter to date (GET)
searchstringSearch keyword
allboolean | stringReturn all records without pagination
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — pending leaves for employee 7
{ "method": "GET", "userId": 7, "status": "pending" }

// POST — apply for leave
{ "method": "POST", "user_id": 7, "leave_type_id": 1,
  "leave_date": "2026-05-15", "duration": "full day", "reason": "Family event" }

// PUT — approve leave
{ "method": "PUT", "id": 88, "status": "approved" }

// DELETE
{ "method": "DELETE", "id": 88 }

13. department

Manage departments and teams

Methods: GET POST PUT DELETE

Supports lookup by name (string) in addition to id for PUT / DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringDepartment ID
namestringCurrent department name — for lookup (PUT / DELETE)
team_namestringDepartment name — required for POST / PUT
descriptionstringDepartment description
parent_idinteger | stringParent department ID
leader_idinteger | stringDepartment leader employee ID
searchstringSearch by name
sort_fieldstringSort column
sort_directionstringasc / desc

Examples:

// GET — search departments
{ "method": "GET", "search": "marketing" }

// POST — create department
{ "method": "POST", "team_name": "Product Design",
  "description": "UI/UX and product design team" }

// PUT — rename by ID
{ "method": "PUT", "id": 4, "team_name": "Digital Marketing & SEO" }

// PUT — rename by name (auto-resolves ID)
{ "method": "PUT", "name": "Digital Marketing", "team_name": "Digital Marketing & SEO" }

// DELETE
{ "method": "DELETE", "id": 4 }

14. designation

Manage job designations and roles

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringDesignation ID — required for PUT / DELETE
namestringDesignation name — required for POST / PUT
searchstringSearch by keyword

Examples:

// GET — search designations
{ "method": "GET", "search": "engineer" }

// POST — create designation
{ "method": "POST", "name": "DevOps Engineer" }

// PUT — rename
{ "method": "PUT", "id": 2, "name": "Principal Software Engineer" }

// DELETE
{ "method": "DELETE", "id": 2 }

15. performance-cycle

Manage performance / OKR cycles

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringCycle ID — required for PUT / DELETE
namestringCycle name — required for POST / PUT
cycle_typestringCycle type — required for POST / PUT (e.g. quarterly, annual)
started_atstringStart date YYYY-MM-DD — required for POST / PUT
finished_atstringEnd date YYYY-MM-DD — required for POST / PUT
sort_fieldstringSort column
sort_directionstringasc / desc
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — list cycles
{ "method": "GET", "per_page": 10, "page": 1 }

// POST — create quarterly cycle
{ "method": "POST", "name": "Q3 2026", "cycle_type": "quarterly",
  "started_at": "2026-07-01", "finished_at": "2026-09-30" }

// PUT — rename cycle
{ "method": "PUT", "id": 3, "name": "Q2 2026 Revised" }

// DELETE
{ "method": "DELETE", "id": 3 }

16. holiday

Manage company holidays

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringHoliday ID — required for PUT / DELETE
occasionstringHoliday name — required for POST / PUT
datestringDate in dd/mm/yyyy format — required for POST / PUT
yearinteger | stringFilter by year (GET)
statusstringupcoming / past / all (GET)
searchstringSearch by keyword
allboolean | stringReturn all records without pagination
sort_fieldstringSort column
sort_directionstringasc / desc
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — upcoming holidays in 2026
{ "method": "GET", "year": 2026, "status": "upcoming" }

// POST — add holiday
{ "method": "POST", "occasion": "New Year's Day", "date": "01/01/2027" }

// PUT — rename holiday
{ "method": "PUT", "id": 10, "occasion": "National Independence Day" }

// DELETE
{ "method": "DELETE", "id": 10 }

17. project-category

Manage project categories and classifications

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringCategory ID — required for PUT / DELETE
category_namestringCategory name — required for POST / PUT
searchstringSearch by keyword

Examples:

// GET — search categories
{ "method": "GET", "search": "web" }

// POST
{ "method": "POST", "category_name": "Mobile Development" }

// PUT
{ "method": "PUT", "id": 1, "category_name": "Web & PWA Development" }

// DELETE
{ "method": "DELETE", "id": 1 }

18. task-category

Manage task categories and types

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringCategory ID — required for PUT / DELETE
category_namestringCategory name — required for POST / PUT
searchstringSearch by keyword

Examples:

// GET
{ "method": "GET", "search": "bug" }

// POST
{ "method": "POST", "category_name": "Feature Request" }

// PUT
{ "method": "PUT", "id": 1, "category_name": "Critical Bug Fix" }

// DELETE
{ "method": "DELETE", "id": 1 }

19. ticket-type

Manage ticket types and classifications

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringTicket type ID — required for PUT / DELETE
typestringTicket type name — required for POST / PUT
searchstringSearch by keyword

Examples:

// GET
{ "method": "GET", "search": "bug" }

// POST
{ "method": "POST", "type": "Feature Request" }

// PUT
{ "method": "PUT", "id": 1, "type": "Critical Bug" }

// DELETE
{ "method": "DELETE", "id": 1 }

20. ticket-channel

Manage ticket channels and submission methods

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringChannel ID — required for PUT / DELETE
channel_namestringChannel name — required for POST / PUT
searchstringSearch by keyword

Examples:

// GET — list all channels
{ "method": "GET" }

// POST
{ "method": "POST", "channel_name": "WhatsApp" }

// PUT
{ "method": "PUT", "id": 1, "channel_name": "Email Support" }

// DELETE
{ "method": "DELETE", "id": 1 }

21. ticket-agent

List ticket agents and their groups

Methods: GET

ParameterTypeDescription
methodstringGET

Example:

// GET — list all ticket agents
{ "method": "GET" }

Response:

{
  "status": "success",
  "data": [
    { "id": 7, "name": "Sarah Lee", "email": "sarah@company.com", "group": "Technical Support" }
  ]
}

22. indicator-category

Manage KPI / indicator categories

Methods: GET POST PUT DELETE

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idinteger | stringCategory ID — required for PUT / DELETE
indicator_type_namestringCategory name — required for POST / PUT
statusstringFilter by status; omit or all for no filter (GET)
searchstringSearch by keyword
allboolean | stringReturn all records without pagination
sort_fieldstringSort column
sort_directionstringasc / desc
per_pageintegerPage size
pageintegerPage number

Examples:

// GET — list all categories
{ "method": "GET", "all": true }

// POST
{ "method": "POST", "indicator_type_name": "Engineering" }

// PUT
{ "method": "PUT", "id": 1, "indicator_type_name": "Revenue & Sales" }

// DELETE
{ "method": "DELETE", "id": 1 }

23. leave-type

Manage leave types (Annual, Sick, etc.)

Methods: GET POST PUT DELETE

Write operations (POST/PUT/DELETE) are admin-only. Lookup by id or type_name (partial match) for PUT/DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringLeave type ID — or use type_name to look up
type_namestringLeave type name — required for POST
daysnumberNumber of allowed days per year
colorstringColor code e.g. #FF0000
is_paidbooleanIs this a paid leave type? Default: true
searchstringSearch by name

Examples:

// GET — list all leave types
{ "method": "GET" }

// POST
{ "method": "POST", "type_name": "Maternity Leave", "days": 90, "is_paid": true }

// PUT — update days allowed
{ "method": "PUT", "type_name": "Annual Leave", "days": 14 }

// DELETE
{ "method": "DELETE", "id": "3" }

24. invoices

Manage client invoices

Methods: GET POST PUT DELETE

Requires invoices module enabled. POST/PUT/DELETE are admin-only. Lookup by id or invoice_number (e.g. INV#0001) for PUT/DELETE. Employees see only invoices linked to projects they are members of.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringInvoice ID
invoice_numberstringDisplay number e.g. INV#0001 — used to look up for PUT/DELETE
client_idstringClient user ID
client_namestringClient company or contact name — auto-resolved to ID
project_idstringLink to project
issue_datestringIssue date YYYY-MM-DD (defaults to today)
due_datestringDue date YYYY-MM-DD
sub_totalnumberSubtotal amount
totalnumberTotal amount — required for POST
currency_idstringCurrency ID
notestringInvoice notes
searchstringSearch by invoice number or client name
startDatestringFilter from issue date
endDatestringFilter to issue date

Examples:

// GET — list invoices
{ "method": "GET", "client_name": "Acme Corp" }

// POST — create invoice
{ "method": "POST", "client_name": "Acme Corp", "total": 5000,
  "issue_date": "2026-05-01", "due_date": "2026-05-31" }

// PUT — update due date
{ "method": "PUT", "invoice_number": "INV#0001", "due_date": "2026-06-15" }

// DELETE
{ "method": "DELETE", "invoice_number": "INV#0001" }

25. estimates

Manage client estimates and quotes

Methods: GET POST PUT DELETE

Requires estimates module enabled. POST/PUT/DELETE are admin-only. Lookup by id or estimate_number (e.g. EST#0001) for PUT/DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringEstimate ID
estimate_numberstringDisplay number e.g. EST#0001 — look up for PUT/DELETE
client_idstringClient user ID
client_namestringClient company or contact name — auto-resolved to ID
valid_tillstringExpiry date YYYY-MM-DD
sub_totalnumberSubtotal
totalnumberTotal amount — required for POST
discountnumberDiscount amount
discount_typestringpercent or fixed
currency_idstringCurrency ID
notestringNotes
statusstringdraft / sent / declined / accepted
searchstringSearch by number or client
startDatestringFilter from valid_till
endDatestringFilter to valid_till

Examples:

// GET — list accepted estimates
{ "method": "GET", "status": "accepted" }

// POST — create estimate
{ "method": "POST", "client_name": "Acme Corp", "total": 12000,
  "valid_till": "2026-06-30", "status": "draft" }

// PUT — mark as sent
{ "method": "PUT", "estimate_number": "EST#0003", "status": "sent" }

// DELETE
{ "method": "DELETE", "estimate_number": "EST#0003" }

26. contracts

Manage client contracts

Methods: GET POST PUT DELETE

Requires contracts module enabled. POST/PUT/DELETE are admin-only. Lookup by id or subject (partial match) for PUT/DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringContract ID
subjectstringContract title — required for POST; also used for lookup
client_idstringClient user ID
client_namestringClient company name — auto-resolved to ID
contract_type_idstringContract type ID
start_datestringStart date YYYY-MM-DD
end_datestringEnd date YYYY-MM-DD
amountnumberContract value
currency_idstringCurrency ID
descriptionstringContract notes
searchstringSearch by contract subject
startDatestringFilter by start_date from
endDatestringFilter by end_date to

Examples:

// GET — list contracts for a client
{ "method": "GET", "client_name": "Acme Corp" }

// POST — create contract
{ "method": "POST", "subject": "Annual Support Contract",
  "client_name": "Acme Corp", "start_date": "2026-01-01",
  "end_date": "2026-12-31", "amount": 24000 }

// PUT — update amount
{ "method": "PUT", "subject": "Annual Support Contract", "amount": 30000 }

// DELETE
{ "method": "DELETE", "id": "7" }

27. events

Manage company calendar events

Methods: GET POST PUT DELETE

Requires events module enabled. POST/PUT/DELETE are admin-only. Lookup by id or event_name (partial match) for PUT/DELETE. Distinct from holiday — use events for internal company events, meetings, etc.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringEvent ID
event_namestringEvent name — required for POST; also used for lookup
wherestringEvent location
descriptionstringEvent description
start_date_timestringStart date/time YYYY-MM-DD HH:mmrequired for POST
end_date_timestringEnd date/time YYYY-MM-DD HH:mmrequired for POST
repeatstringyes / no (default: no)
repeat_everyintegerRepeat interval (e.g. every 2 weeks)
repeat_cyclesintegerNumber of repetitions
repeat_typestringdaily / weekly / monthly / yearly
label_colorstringBootstrap class or hex color (default: bg-info)
monthstringFilter by month number 1–12
yearstringFilter by year
startDatestringFilter events from date
endDatestringFilter events to date
searchstringSearch by event name

Examples:

// GET — events in June 2026
{ "method": "GET", "month": "6", "year": "2026" }

// POST — create event
{ "method": "POST", "event_name": "Q2 All-Hands Meeting",
  "start_date_time": "2026-06-15 09:00",
  "end_date_time": "2026-06-15 11:00", "where": "Main Conference Room" }

// PUT — change location
{ "method": "PUT", "event_name": "Q2 All-Hands Meeting", "where": "Zoom" }

// DELETE
{ "method": "DELETE", "id": "15" }

28. expenses

Manage expenses and claims

Methods: GET POST PUT DELETE

Requires expenses module enabled. DELETE is admin-only. Employees can create/update their own pending expenses. Admin-created expenses default to approved; employee-submitted default to pending. Lookup by id or item_name (partial match) for PUT/DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringExpense ID
item_namestringExpense item name — required for POST; also used for lookup
purchase_datestringPurchase date YYYY-MM-DDrequired for POST
pricenumberExpense amount — required for POST
purchase_fromstringWhere it was purchased
currency_idstringCurrency ID (defaults to company currency)
expense_category_idstringExpense category ID
user_idstringEmployee user ID (admin only; defaults to self)
employee_namestringEmployee name — auto-resolved to user_id
project_idstringLink to project
descriptionstringAdditional notes
statusstringpending / approved / rejected — filter (GET) or update (PUT, admin only)
can_claiminteger | boolean1 = reimbursement claim, 0 = regular expense
startDatestringFilter from purchase date
endDatestringFilter to purchase date

Examples:

// GET — pending expenses
{ "method": "GET", "status": "pending" }

// POST — submit expense
{ "method": "POST", "item_name": "Team Lunch", "purchase_date": "2026-05-10",
  "price": 250, "can_claim": 1, "description": "Client meeting lunch" }

// PUT — approve expense (admin)
{ "method": "PUT", "id": "99", "status": "approved" }

// DELETE
{ "method": "DELETE", "id": "99" }

29. expense-category

Manage expense categories

Methods: GET POST PUT DELETE

Requires expenses module enabled. Write operations are admin-only. Lookup by id or category_name (partial match) for PUT/DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringCategory ID
category_namestringCategory name — required for POST; also used for lookup
searchstringSearch by category name

Examples:

// GET
{ "method": "GET" }

// POST
{ "method": "POST", "category_name": "Travel & Accommodation" }

// PUT
{ "method": "PUT", "category_name": "Travel", "category_name": "Travel & Accommodation" }

// DELETE
{ "method": "DELETE", "id": "5" }

30. notices

Manage company notice board

Methods: GET POST PUT DELETE

Requires notices module enabled. POST/PUT/DELETE are admin-only. Employees see only notices addressed to all or employee. Lookup by id or heading (partial match) for PUT/DELETE.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringNotice ID
headingstringNotice title — required for POST; also used for lookup
descriptionstringNotice content body — required for POST
tostringTarget audience: all / employee / client (default: all)
searchstringSearch by heading
startDatestringFilter from created date
endDatestringFilter to created date

Examples:

// GET — notices for employees
{ "method": "GET", "to": "employee" }

// POST — create announcement
{ "method": "POST", "heading": "Office Closed on Friday",
  "description": "The office will be closed this Friday for maintenance.",
  "to": "all" }

// PUT — update content
{ "method": "PUT", "heading": "Office Closed on Friday",
  "description": "Updated: Office closed Friday AND Monday." }

// DELETE
{ "method": "DELETE", "id": "12" }

31. timelogs

Manage project and task time logs

Methods: GET POST PUT DELETE

Requires timelogs module enabled. DELETE is admin-only. POST starts a timer (sets end_time = null). PUT stops a running timer by providing end_time, or edits any field. PUT without id finds the active (running) timer for the target user. Employees see only their own time logs. Supports lookup by name: project_nameproject_id, task_nametask_id, employee_nameuser_id.

ParameterTypeDescription
methodstringGET / POST / PUT / DELETE
idstringTime log ID — required for DELETE
project_idstringProject ID
project_namestringProject name — auto-resolved to project_id
task_idstringTask ID
task_namestringTask heading — auto-resolved to task_id
user_idstringEmployee user ID (admin only; defaults to self)
employee_namestringEmployee name — auto-resolved to user_id
start_timestringStart datetime YYYY-MM-DD HH:mm (defaults to now on POST)
end_timestringEnd datetime — provide on PUT to stop the timer
memostringOptional note for the time log
datestringFilter by specific date (GET)
monthstringFilter by month number 1–12 (GET)
yearstringFilter by year (GET)
active_onlyboolean | stringtrue = return only running timers (GET)

Examples:

// GET — my time logs this month
{ "method": "GET", "month": "5", "year": "2026" }

// GET — active running timers
{ "method": "GET", "active_only": true }

// POST — start timer for a project
{ "method": "POST", "project_name": "Mobile App v2",
  "task_name": "Design landing page", "memo": "Working on hero section" }

// PUT — stop running timer
{ "method": "PUT", "end_time": "2026-05-10 17:30" }

// PUT — stop timer by ID
{ "method": "PUT", "id": "88", "end_time": "2026-05-10 17:30" }

// DELETE
{ "method": "DELETE", "id": "88" }

Advanced: Account Tools (Gateway endpoint only)

These tools are available only via https://flowyteam.com/api/mcp/gateway and must only be invoked when the user explicitly requests it — never autonomously. After obtaining a token, reconfigure the MCP connection using the Recommended setup above.

auth_register

Create a new FlowyTeam company account. Call only when the user explicitly requests to create a new account and provides all required details. Requires allow_mcp_registration = true on the FlowyTeam instance.

A verification email is sent — the account must be verified before it can be used. Two paths to complete verification:

  • Path A (CLI): Copy the code from the verification email link URL and call auth_verify_email → receive api_token immediately.
  • Path B (browser): Click the verification link in the email, then call auth_login with email + password → receive api_token.
ParameterTypeRequiredDescription
namestringFull name of the admin user
emailstringEmail address
passwordstringPassword (minimum 8 characters)
company_namestringCompany / organisation name
phonestringPhone number (optional)

Response: Returns status: pending_verification — no api_token yet. Verify email first.


auth_verify_email

Activate a pending account using the verification code from the email link. The code is the last segment of the verification URL, e.g. for .../email-verification/ABC123XYZ the code is ABC123XYZ. Call this after auth_register when the user has copied the code from their verification email.

ParameterTypeRequiredDescription
verification_codestringCode from the verification link URL

Response: Returns api_token — use this as the Bearer token and reconfigure the MCP connection.


auth_login

Retrieve API token for an existing FlowyTeam account. Call only when the user explicitly provides their email and password and requests a login. Also use after the user has clicked the web verification link (Path B of auth_register).

ParameterTypeRequiredDescription
emailstringRegistered email address
passwordstringAccount password

Response: Returns api_token — use this as the Bearer token and reconfigure the MCP connection.


Error Codes

CodeMeaning
200Success
401Unauthenticated — missing or invalid Bearer token
403Forbidden — authenticated but lacks permission
404Resource not found
422Validation error — check the errors object in the response
429Too many requests — rate limit exceeded
500Server error

Natural Language Examples

Once connected, you can ask Claude:

"Create a task 'Review Q2 Report' in the Marketing project,
 assign to Sarah, due April 30"

"Show me all open high-priority tickets"

"List company-level OKRs for Q2 2026"

"Who is on leave this week?"

"Add a new employee: John Doe, email john@company.com,
 Engineering department, joining June 1"

"What are the KPI scores for the Sales team this month?"

"Create a new lead: PT Maju Jaya, contact info@majujaya.com,
 assign to agent ID 7"

"Clock in employee 7 from office"

"List all upcoming holidays in 2026"

"Show me all pending expense claims"

"Create an invoice for Acme Corp, total $5,000, due May 31"

"What events do we have in June?"

"Post an announcement: office closed Friday"

"Log 8 hours on the Mobile App project for today"

"Show me all running timers right now"

Links

Comments

Loading comments...