Flowyteam Mcp

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

Audits

Pass

Install

openclaw skills install flowyteam-mcp

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)Gatewayauth_register & auth_verify_email run without token for new account setup; 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)
  • 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

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


Safety Guidelines

Always require explicit user confirmation before any write or delete action.

  • Use a limited-permission token. Connect with an Employee token for self-service tasks; request an Admin token only when admin operations are explicitly needed.
  • Require explicit confirmation. Never execute POST (create), PUT (update), or DELETE without a direct instruction from the user in the current turn — this applies to all records including employees, HR data, contracts, invoices, expenses, notices, and client data.
  • Never act autonomously. Do not infer or anticipate write actions. Only act on what the user has explicitly asked for.
  • Prefer read-first. When intent is ambiguous, default to GET to show the user what exists before offering to change it.

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
passwordstringOptional — new employee sets their own on first login
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 (password is set by the new employee on first login)
{ "method": "POST", "name": "John Doe", "email": "john@company.com",
  "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" }

Account Setup (no API token yet?)

Existing account: Go to FlowyTeam → Settings → MCP & AI Integration → copy your API token, then use the Recommended setup above.

New account: Use auth_register + auth_verify_email below. Both tools are available via https://flowyteam.com/api/mcp/gateway without a token, and must only be invoked when the user explicitly requests it — never autonomously.

auth_register

Create a new FlowyTeam company account. Call only when the user explicitly requests account creation. A verification email with a 6-digit code is sent immediately. No setup password needed — one is generated and delivered via the verification email.

ParameterTypeRequiredDescription
namestringFull name of the admin user
emailstringEmail address
company_namestringCompany / organisation name
phonestringPhone number

Response: Returns status: pending_verification. Ask the user to check their email for the 6-digit code, then call auth_verify_email.


auth_verify_email

Activate account and retrieve API token. Call after auth_register once the user shares the 6-digit code from their verification email.

ParameterTypeRequiredDescription
verification_codestring6-digit code from the verification email

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