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.
EndpointAuthPurposePOST /api/mcp/gatewayNone (per-call)Gateway — auth_register & auth_verify_email run without token for new account setup; all other tools read Bearer from headerPOST /api/v2/mcp/rpcBearer tokenRPC — authenticated-only endpoint for all 31 workspace tools
bash
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.
mcp.json)#json
{
"mcpServers": {
"flowyteam": {
"transport": "http",
"url": "https://flowyteam.com/api/v2/mcp/rpc",
"headers": {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
}
}
POST https://flowyteam.com/api/mcp/gatewayPOST https://flowyteam.com/api/v2/mcp/rpcAuthorization: Bearer <api_token> (not required for auth_register / auth_verify_email)2024-11-05All workspace tools share a method parameter to select the HTTP verb:
methodOperationGETRead / list recordsPOSTCreate a new recordPUTUpdate an existing recordDELETEDelete a record
Account setup tools ( auth_register, auth_verify_email) only use POST and do not need a method field.
Always require explicit user confirmation before any write or delete action.
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.GET to show the user what exists before offering to change it.All tools require a valid
FLOWYTEAM_API_TOKENBearer token. See Setup above.
tasks (requires Bearer token)#Manage tasks and assignments
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringTask ID — required for PUT / DELETEproject_idinteger | stringFilter by project (GET) or assign to project (POST)headingstringTask title — required for POSTdescriptionstringTask descriptionstatusstringTask status (e.g. incomplete, complete)prioritystringlow / medium / high / urgent``assigned_tointeger | stringEmployee user ID to assignuser_idinteger | stringAlternative employee ID fielddue_datestringDue date YYYY-MM-DD``task_category_idinteger | stringTask category IDsearchstringSearch by keyword
Examples:
json
// 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 }
projects#Manage projects and project workflow
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringProject ID — required for PUT / DELETEproject_namestringProject name — required for POSTstatusstringnot started / in progress / on hold / finished``start_datestringStart date YYYY-MM-DD``deadlinestringDeadline YYYY-MM-DD``client_idinteger | stringClient IDcategory_idinteger | stringProject category IDproject_summarystringShort descriptionnotesstringAdditional notessearchstringSearch by keyword
Examples:
json
// 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 }
employees#Manage employees and team members
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringEmployee ID — required for PUT / DELETEnamestringFull name — required for POSTemailstringEmail — required for POSTpasswordstringOptional — new employee sets their own on first logindepartment_idinteger | stringDepartment IDdesignation_idinteger | stringJob designation IDemployee_idstringCustom employee ID/codejoining_datestringJoining date YYYY-MM-DD``statusstringactive / inactive``searchstringSearch by name or email
Examples:
json
// 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 }
objectives#Manage OKR objectives
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringObjective ID — required for PUT / DELETEheadingstringObjective title — required for POSTdescriptionstringObjective descriptionlevelstringcompany / department / individual``typestringqualitative / quantitative``statusstringon track / at risk / behind / achieved``cycle_idinteger | stringPerformance cycle IDdepartment_idinteger | stringFilter by departmentsearchstringSearch by keyword
Examples:
json
// 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 }
key-result#Manage OKR key results linked to objectives
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringKey result ID — required for PUT / DELETEobjective_idinteger | stringFilter by objective (GET)krs_ownerinteger | stringObjective ID owning this KR — required for POSTkrs_titlestringKey result titlekrs_descriptionstringDescriptionkrs_initnumber | stringInitial valuekrs_tarnumber | stringTarget valuekrs_nownumber | stringCurrent valuekrs_weightnumber | stringWeight (1–100)krs_unitstringUnit (default %)krs_leaderinteger | stringEmployee details ID for KR ownerkrs_confstringConfidence levelkrs_remarksstringRemarksassociate_kpisarrayArray of indicator IDs to linkper_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
indicators#Manage KPIs and performance indicators
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringKPI ID — required for PUT / DELETEnamestringKPI name — required for POSTtargetnumber | stringTarget valueunitstringUnit (e.g. %, USD, count)frequencystringdaily / weekly / monthly / quarterly / yearly``category_idinteger | stringIndicator category IDemployee_idinteger | stringAssign to employeesearchstringSearch by keyword
Examples:
json
// 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 }
indicator-record#Manage KPI actual values per period
Methods: GET POST DELETE
POST maps to
indicator-record/update-record(upsert by period). GET withidreturns a single record; GET withoutidreturns a list.
ParameterTypeDescriptionmethodstringGET / POST / DELETE``idinteger | stringRecord ID — GET single / DELETEindicator_idinteger | stringKPI indicator ID — required for GET list and POSTperiod_keystringPeriod date dd-m-YYYY e.g. 01-6-2026 — required for POSTcurrent_valuenumber | stringActual value for the periodtarget_valuenumber | stringTarget value for the periodremarkstringNotesscorenumber | stringComputed scoremonthinteger | 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 paginationper_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
leads#Manage sales leads and prospects
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringLead ID — required for PUT / DELETEclient_namestringLead contact name — required for POSTcompany_namestringCompany nameemailstringContact emailmobilestringContact mobilewebsitestringCompany websiteaddressstringAddressnotestringNotesagent_idinteger | stringAssign to sales agentsource_idinteger | stringLead source ID (POST)status_idinteger | stringLead status ID (POST)statusinteger | stringLead status ID (PUT)sourceinteger | stringLead source ID (PUT)meeting_datestringScheduled meeting datenext_follow_upstringyes or no``clientstringlead or client filter (GET)followUpstringFilter follow-up required (GET)startDatestringFilter from date (GET)endDatestringFilter to date (GET)sort_fieldstringSort columnsort_directionstringasc / desc``per_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
clients#Manage clients and customer relationships
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringClient ID — required for PUT / DELETEnamestringContact name — required for POSTemailstringEmail — required for POSTcompany_namestringCompany namewebsitestringCompany websiteaddressstringAddressmobilestringPhone numbersend_emailstringyes / no — send welcome emailskypestring | nullSkype handlelinkedinstring | nullLinkedIn URLtwitterstring | nullTwitter handlefacebookstring | nullFacebook URLgst_numberstring | nullTax/GST numbernotestring | nullNotessearchstringSearch by name or company
Examples:
json
// 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 }
tickets#Manage support tickets and issues
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringTicket ID — required for PUT / DELETEsubjectstringTicket subject — required for POSTdescriptionstringTicket descriptionstatusstringopen / pending / resolved / closed``prioritystringlow / medium / high / urgent``type_idinteger | stringTicket type IDchannel_idinteger | stringTicket channel IDagent_idinteger | stringAssign to agentuser_idinteger | stringReporter user IDsearchstringSearch by keyword
Examples:
json
// 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 }
attendance#Manage attendance records and time tracking
Methods: GET POST PUT
POST → clock in (
attendance/clock-in) PUT → clock out (attendance/clock-out) GET withtoday: true→ today's attendance summary
ParameterTypeDescriptionmethodstringGET / POST / PUT``idinteger | stringAttendance record ID — required for PUT (clock-out)employee_idinteger | stringEmployee IDdatestringSpecific date YYYY-MM-DD``monthstringFilter by monthyearstringFilter by yearclock_in_timestringClock-in time HH:MM:SS``clock_out_timestringClock-out time HH:MM:SS``working_fromstringoffice / home / other``late_reasonstringReason if arriving latetodayboolean | stringSet true to get today's records (GET)
Examples:
json
// 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 }
leave#Manage employee leave requests
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringLeave ID — required for PUT / DELETEuser_idinteger | stringEmployee user ID — required for POSTleave_type_idinteger | stringLeave type ID — required for POST / PUTleave_datestringLeave start date YYYY-MM-DD — required for POSTdurationstringfull day / half day / multiple``reasonstringLeave reasonstatusstringpending / approved / rejected (PUT for approval)multi_datestringComma-separated dates for multiple durationuserIdinteger | stringFilter by employee (GET)startDatestringFilter from date (GET)endDatestringFilter to date (GET)searchstringSearch keywordallboolean | stringReturn all records without paginationper_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
department#Manage departments and teams
Methods: GET POST PUT DELETE
Supports lookup by
name(string) in addition toidfor PUT / DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringDepartment IDnamestringCurrent department name — for lookup (PUT / DELETE)team_namestringDepartment name — required for POST / PUTdescriptionstringDepartment descriptionparent_idinteger | stringParent department IDleader_idinteger | stringDepartment leader employee IDsearchstringSearch by namesort_fieldstringSort columnsort_directionstringasc / desc
Examples:
json
// 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 }
designation#Manage job designations and roles
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringDesignation ID — required for PUT / DELETEnamestringDesignation name — required for POST / PUTsearchstringSearch by keyword
Examples:
json
// 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 }
performance-cycle#Manage performance / OKR cycles
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringCycle ID — required for PUT / DELETEnamestringCycle name — required for POST / PUTcycle_typestringCycle type — required for POST / PUT (e.g. quarterly, annual)started_atstringStart date YYYY-MM-DD — required for POST / PUTfinished_atstringEnd date YYYY-MM-DD — required for POST / PUTsort_fieldstringSort columnsort_directionstringasc / desc``per_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
holiday#Manage company holidays
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringHoliday ID — required for PUT / DELETEoccasionstringHoliday name — required for POST / PUTdatestringDate in dd/mm/yyyy format — required for POST / PUTyearinteger | stringFilter by year (GET)statusstringupcoming / past / all (GET)searchstringSearch by keywordallboolean | stringReturn all records without paginationsort_fieldstringSort columnsort_directionstringasc / desc``per_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
project-category#Manage project categories and classifications
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringCategory ID — required for PUT / DELETEcategory_namestringCategory name — required for POST / PUTsearchstringSearch by keyword
Examples:
json
// 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 }
task-category#Manage task categories and types
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringCategory ID — required for PUT / DELETEcategory_namestringCategory name — required for POST / PUTsearchstringSearch by keyword
Examples:
json
// 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 }
ticket-type#Manage ticket types and classifications
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringTicket type ID — required for PUT / DELETEtypestringTicket type name — required for POST / PUTsearchstringSearch by keyword
Examples:
json
// GET
{ "method": "GET", "search": "bug" }
// POST
{ "method": "POST", "type": "Feature Request" }
// PUT
{ "method": "PUT", "id": 1, "type": "Critical Bug" }
// DELETE
{ "method": "DELETE", "id": 1 }
ticket-channel#Manage ticket channels and submission methods
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringChannel ID — required for PUT / DELETEchannel_namestringChannel name — required for POST / PUTsearchstringSearch by keyword
Examples:
json
// 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 }
ticket-agent#List ticket agents and their groups
Methods: GET
ParameterTypeDescriptionmethodstringGET
Example:
json
// GET — list all ticket agents
{ "method": "GET" }
Response:
json
{
"status": "success",
"data": [
{ "id": 7, "name": "Sarah Lee", "email": "sarah@company.com", "group": "Technical Support" }
]
}
indicator-category#Manage KPI / indicator categories
Methods: GET POST PUT DELETE
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idinteger | stringCategory ID — required for PUT / DELETEindicator_type_namestringCategory name — required for POST / PUTstatusstringFilter by status; omit or all for no filter (GET)searchstringSearch by keywordallboolean | stringReturn all records without paginationsort_fieldstringSort columnsort_directionstringasc / desc``per_pageintegerPage sizepageintegerPage number
Examples:
json
// 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 }
leave-type#Manage leave types (Annual, Sick, etc.)
Methods: GET POST PUT DELETE
Write operations (POST/PUT/DELETE) are admin-only. Lookup by
idortype_name(partial match) for PUT/DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringLeave type ID — or use type_name to look uptype_namestringLeave type name — required for POSTdaysnumberNumber of allowed days per yearcolorstringColor code e.g. #FF0000``is_paidbooleanIs this a paid leave type? Default: true``searchstringSearch by name
Examples:
json
// 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" }
invoices#Manage client invoices
Methods: GET POST PUT DELETE
Requires
invoicesmodule enabled. POST/PUT/DELETE are admin-only. Lookup byidorinvoice_number(e.g.INV#0001) for PUT/DELETE. Employees see only invoices linked to projects they are members of.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringInvoice IDinvoice_numberstringDisplay number e.g. INV#0001 — used to look up for PUT/DELETEclient_idstringClient user IDclient_namestringClient company or contact name — auto-resolved to IDproject_idstringLink to projectissue_datestringIssue date YYYY-MM-DD (defaults to today)due_datestringDue date YYYY-MM-DD``sub_totalnumberSubtotal amounttotalnumberTotal amount — required for POSTcurrency_idstringCurrency IDnotestringInvoice notessearchstringSearch by invoice number or client namestartDatestringFilter from issue dateendDatestringFilter to issue date
Examples:
json
// 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" }
estimates#Manage client estimates and quotes
Methods: GET POST PUT DELETE
Requires
estimatesmodule enabled. POST/PUT/DELETE are admin-only. Lookup byidorestimate_number(e.g.EST#0001) for PUT/DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringEstimate IDestimate_numberstringDisplay number e.g. EST#0001 — look up for PUT/DELETEclient_idstringClient user IDclient_namestringClient company or contact name — auto-resolved to IDvalid_tillstringExpiry date YYYY-MM-DD``sub_totalnumberSubtotaltotalnumberTotal amount — required for POSTdiscountnumberDiscount amountdiscount_typestringpercent or fixed``currency_idstringCurrency IDnotestringNotesstatusstringdraft / sent / declined / accepted``searchstringSearch by number or clientstartDatestringFilter from valid_till``endDatestringFilter to valid_till
Examples:
json
// 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" }
contracts#Manage client contracts
Methods: GET POST PUT DELETE
Requires
contractsmodule enabled. POST/PUT/DELETE are admin-only. Lookup byidorsubject(partial match) for PUT/DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringContract IDsubjectstringContract title — required for POST; also used for lookupclient_idstringClient user IDclient_namestringClient company name — auto-resolved to IDcontract_type_idstringContract type IDstart_datestringStart date YYYY-MM-DD``end_datestringEnd date YYYY-MM-DD``amountnumberContract valuecurrency_idstringCurrency IDdescriptionstringContract notessearchstringSearch by contract subjectstartDatestringFilter by start_date fromendDatestringFilter by end_date to
Examples:
json
// 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" }
events#Manage company calendar events
Methods: GET POST PUT DELETE
Requires
eventsmodule enabled. POST/PUT/DELETE are admin-only. Lookup byidorevent_name(partial match) for PUT/DELETE. Distinct fromholiday— useeventsfor internal company events, meetings, etc.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringEvent IDevent_namestringEvent name — required for POST; also used for lookupwherestringEvent locationdescriptionstringEvent descriptionstart_date_timestringStart date/time YYYY-MM-DD HH:mm — required for POSTend_date_timestringEnd date/time YYYY-MM-DD HH:mm — required for POSTrepeatstringyes / no (default: no)repeat_everyintegerRepeat interval (e.g. every 2 weeks)repeat_cyclesintegerNumber of repetitionsrepeat_typestringdaily / weekly / monthly / yearly``label_colorstringBootstrap class or hex color (default: bg-info)monthstringFilter by month number 1–12yearstringFilter by yearstartDatestringFilter events from dateendDatestringFilter events to datesearchstringSearch by event name
Examples:
json
// 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" }
expenses#Manage expenses and claims
Methods: GET POST PUT DELETE
Requires
expensesmodule enabled. DELETE is admin-only. Employees can create/update their own pending expenses. Admin-created expenses default toapproved; employee-submitted default topending. Lookup byidoritem_name(partial match) for PUT/DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringExpense IDitem_namestringExpense item name — required for POST; also used for lookuppurchase_datestringPurchase date YYYY-MM-DD — required for POSTpricenumberExpense amount — required for POSTpurchase_fromstringWhere it was purchasedcurrency_idstringCurrency ID (defaults to company currency)expense_category_idstringExpense category IDuser_idstringEmployee user ID (admin only; defaults to self)employee_namestringEmployee name — auto-resolved to user_id``project_idstringLink to projectdescriptionstringAdditional notesstatusstringpending / approved / rejected — filter (GET) or update (PUT, admin only)can_claiminteger | boolean1 = reimbursement claim, 0 = regular expensestartDatestringFilter from purchase dateendDatestringFilter to purchase date
Examples:
json
// 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" }
expense-category#Manage expense categories
Methods: GET POST PUT DELETE
Requires
expensesmodule enabled. Write operations are admin-only. Lookup byidorcategory_name(partial match) for PUT/DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringCategory IDcategory_namestringCategory name — required for POST; also used for lookupsearchstringSearch by category name
Examples:
json
// 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" }
notices#Manage company notice board
Methods: GET POST PUT DELETE
Requires
noticesmodule enabled. POST/PUT/DELETE are admin-only. Employees see only notices addressed toalloremployee. Lookup byidorheading(partial match) for PUT/DELETE.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringNotice IDheadingstringNotice title — required for POST; also used for lookupdescriptionstringNotice content body — required for POSTtostringTarget audience: all / employee / client (default: all)searchstringSearch by headingstartDatestringFilter from created dateendDatestringFilter to created date
Examples:
json
// 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" }
timelogs#Manage project and task time logs
Methods: GET POST PUT DELETE
Requires
timelogsmodule enabled. DELETE is admin-only. POST starts a timer (setsend_time = null). PUT stops a running timer by providingend_time, or edits any field. PUT withoutidfinds the active (running) timer for the target user. Employees see only their own time logs. Supports lookup by name:project_name→project_id,task_name→task_id,employee_name→user_id.
ParameterTypeDescriptionmethodstringGET / POST / PUT / DELETE``idstringTime log ID — required for DELETEproject_idstringProject IDproject_namestringProject name — auto-resolved to project_id``task_idstringTask IDtask_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 timermemostringOptional note for the time logdatestringFilter by specific date (GET)monthstringFilter by month number 1–12 (GET)yearstringFilter by year (GET)active_onlyboolean | stringtrue = return only running timers (GET)
Examples:
json
// 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" }
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.
ParameterTypeRequiredDescriptionnamestring✓Full name of the admin useremailstring✓Email addresscompany_namestring✓Company / organisation namephonestring—Phone 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.
ParameterTypeRequiredDescriptionverification_codestring✓6-digit code from the verification email
Response: Returns api_token — use this as the Bearer token and reconfigure the MCP connection.
CodeMeaning200Success401Unauthenticated — missing or invalid Bearer token403Forbidden — authenticated but lacks permission404Resource not found422Validation error — check the errors object in the response429Too many requests — rate limit exceeded500Server error
Once connected, you can ask Claude:
text
"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"