Flowyteam Mcp
/install flowyteam-mcp
\r \r
FlowyTeam MCP\r
\r Connect Claude Code (or any MCP-compatible AI agent) to your FlowyTeam workspace.\r Manage projects, tasks, OKRs, KPIs, employees, leads, clients, tickets, attendance,\r leave, invoices, estimates, contracts, expenses, events, notices, time logs, and more\r — all via natural language.\r \r Platform: flowyteam.com — All-in-one SaaS for team\r productivity and performance management. 7,000+ organizations, 140+ countries.\r \r ---\r \r
Endpoints\r
\r
| Endpoint | Auth | Purpose |\r
|---|---|---|\r
| POST /api/mcp/gateway | None (per-call) | Gateway — single URL for everything; auth_register, auth_verify_email & auth_login run without token, all other tools read Bearer from header |\r
| POST /api/v2/mcp/rpc | Bearer token | RPC — authenticated-only endpoint for all 31 workspace tools |\r
\r
---\r
\r
Setup\r
\r
Recommended — Connect with API token\r
\r
claude mcp add flowyteam \\r
--transport http \\r
--url https://flowyteam.com/api/v2/mcp/rpc \\r
--header "Authorization: Bearer $FLOWYTEAM_API_TOKEN"\r
```\r
\r
Get your token: FlowyTeam → **Settings → MCP & AI Integration** → copy token.\r
\r
### Claude Desktop / Cursor (`mcp.json`)\r
\r
```json\r
{\r
"mcpServers": {\r
"flowyteam": {\r
"transport": "http",\r
"url": "https://flowyteam.com/api/v2/mcp/rpc",\r
"headers": {\r
"Authorization": "Bearer YOUR_API_TOKEN"\r
}\r
}\r
}\r
}\r
```\r
\r
---\r
\r
## Protocol\r
\r
- **Gateway:** `POST https://flowyteam.com/api/mcp/gateway`\r
- **RPC:** `POST https://flowyteam.com/api/v2/mcp/rpc`\r
- **Transport:** Streamable HTTP (JSON-RPC 2.0)\r
- **Auth:** `Authorization: Bearer \x3Capi_token>` (not required for `auth_register` / `auth_verify_email` / `auth_login`)\r
- **Protocol Version:** `2024-11-05`\r
\r
All workspace tools share a `method` parameter to select the HTTP verb:\r
\r
| `method` | Operation |\r
|---|---|\r
| `GET` | Read / list records |\r
| `POST` | Create a new record |\r
| `PUT` | Update an existing record |\r
| `DELETE` | Delete a record |\r
\r
Auth tools (`auth_register`, `auth_verify_email`, `auth_login`) only use `POST` and do not need a `method` field.\r
\r
---\r
\r
## Tools (34)\r
\r
> All tools require a valid `FLOWYTEAM_API_TOKEN` Bearer token. See [Setup](#setup) above.\r
\r
---\r
\r
### 1. `tasks` *(requires Bearer token)*\r
\r
**Manage tasks and assignments**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Task ID — required for PUT / DELETE |\r
| `project_id` | integer \| string | Filter by project (GET) or assign to project (POST) |\r
| `heading` | string | Task title — required for POST |\r
| `description` | string | Task description |\r
| `status` | string | Task status (e.g. `incomplete`, `complete`) |\r
| `priority` | string | `low` / `medium` / `high` / `urgent` |\r
| `assigned_to` | integer \| string | Employee user ID to assign |\r
| `user_id` | integer \| string | Alternative employee ID field |\r
| `due_date` | string | Due date `YYYY-MM-DD` |\r
| `task_category_id` | integer \| string | Task category ID |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — list incomplete tasks in project 12\r
{ "method": "GET", "project_id": 12, "status": "incomplete" }\r
\r
// POST — create task\r
{ "method": "POST", "heading": "Write API docs", "project_id": 12,\r
"due_date": "2026-05-10", "priority": "medium", "assigned_to": 7 }\r
\r
// PUT — mark complete\r
{ "method": "PUT", "id": 101, "status": "complete" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 101 }\r
```\r
\r
---\r
\r
### 2. `projects`\r
\r
**Manage projects and project workflow**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Project ID — required for PUT / DELETE |\r
| `project_name` | string | Project name — required for POST |\r
| `status` | string | `not started` / `in progress` / `on hold` / `finished` |\r
| `start_date` | string | Start date `YYYY-MM-DD` |\r
| `deadline` | string | Deadline `YYYY-MM-DD` |\r
| `client_id` | integer \| string | Client ID |\r
| `category_id` | integer \| string | Project category ID |\r
| `project_summary` | string | Short description |\r
| `notes` | string | Additional notes |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — list in-progress projects\r
{ "method": "GET", "status": "in progress" }\r
\r
// POST — create project\r
{ "method": "POST", "project_name": "Mobile App v2",\r
"start_date": "2026-06-01", "deadline": "2026-09-30", "client_id": 3 }\r
\r
// PUT — update status\r
{ "method": "PUT", "id": 12, "status": "on hold" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 12 }\r
```\r
\r
---\r
\r
### 3. `employees`\r
\r
**Manage employees and team members**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Employee ID — required for PUT / DELETE |\r
| `name` | string | Full name — required for POST |\r
| `email` | string | Email — required for POST |\r
| `password` | string | Password — required for POST |\r
| `department_id` | integer \| string | Department ID |\r
| `designation_id` | integer \| string | Job designation ID |\r
| `employee_id` | string | Custom employee ID/code |\r
| `joining_date` | string | Joining date `YYYY-MM-DD` |\r
| `status` | string | `active` / `inactive` |\r
| `search` | string | Search by name or email |\r
\r
**Examples:**\r
\r
```json\r
// GET — list active employees in department 4\r
{ "method": "GET", "department_id": 4, "status": "active" }\r
\r
// POST — create employee\r
{ "method": "POST", "name": "John Doe", "email": "[email protected]",\r
"password": "secret123", "department_id": 4, "designation_id": 2,\r
"joining_date": "2026-06-01" }\r
\r
// PUT — deactivate\r
{ "method": "PUT", "id": 7, "status": "inactive" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 7 }\r
```\r
\r
---\r
\r
### 4. `objectives`\r
\r
**Manage OKR objectives**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Objective ID — required for PUT / DELETE |\r
| `heading` | string | Objective title — required for POST |\r
| `description` | string | Objective description |\r
| `level` | string | `company` / `department` / `individual` |\r
| `type` | string | `qualitative` / `quantitative` |\r
| `status` | string | `on track` / `at risk` / `behind` / `achieved` |\r
| `cycle_id` | integer \| string | Performance cycle ID |\r
| `department_id` | integer \| string | Filter by department |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — company-level objectives in cycle 3\r
{ "method": "GET", "cycle_id": 3, "level": "company" }\r
\r
// POST — create objective\r
{ "method": "POST", "heading": "Improve NPS Score",\r
"level": "company", "cycle_id": 3, "type": "qualitative" }\r
\r
// PUT — update status\r
{ "method": "PUT", "id": 20, "status": "at risk" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 20 }\r
```\r
\r
---\r
\r
### 5. `key-result`\r
\r
**Manage OKR key results linked to objectives**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Key result ID — required for PUT / DELETE |\r
| `objective_id` | integer \| string | Filter by objective (GET) |\r
| `krs_owner` | integer \| string | Objective ID owning this KR — required for POST |\r
| `krs_title` | string | Key result title |\r
| `krs_description` | string | Description |\r
| `krs_init` | number \| string | Initial value |\r
| `krs_tar` | number \| string | Target value |\r
| `krs_now` | number \| string | Current value |\r
| `krs_weight` | number \| string | Weight (1–100) |\r
| `krs_unit` | string | Unit (default `%`) |\r
| `krs_leader` | integer \| string | Employee details ID for KR owner |\r
| `krs_conf` | string | Confidence level |\r
| `krs_remarks` | string | Remarks |\r
| `associate_kpis` | array | Array of indicator IDs to link |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — key results for objective 20\r
{ "method": "GET", "objective_id": 20 }\r
\r
// POST — create key result\r
{ "method": "POST", "krs_owner": 20, "krs_title": "Reduce churn to \x3C 5%",\r
"krs_init": 8, "krs_tar": 5, "krs_now": 8, "krs_weight": 100, "krs_unit": "%" }\r
\r
// PUT — update current value\r
{ "method": "PUT", "id": 30, "krs_now": 4.2 }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 30 }\r
```\r
\r
---\r
\r
### 6. `indicators`\r
\r
**Manage KPIs and performance indicators**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | KPI ID — required for PUT / DELETE |\r
| `name` | string | KPI name — required for POST |\r
| `target` | number \| string | Target value |\r
| `unit` | string | Unit (e.g. `%`, `USD`, `count`) |\r
| `frequency` | string | `daily` / `weekly` / `monthly` / `quarterly` / `yearly` |\r
| `category_id` | integer \| string | Indicator category ID |\r
| `employee_id` | integer \| string | Assign to employee |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — monthly KPIs for employee 7\r
{ "method": "GET", "employee_id": 7, "frequency": "monthly" }\r
\r
// POST — create KPI\r
{ "method": "POST", "name": "Customer Satisfaction Score",\r
"target": 90, "unit": "%", "frequency": "monthly",\r
"employee_id": 7, "category_id": 2 }\r
\r
// PUT — update target\r
{ "method": "PUT", "id": 40, "target": 95 }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 40 }\r
```\r
\r
---\r
\r
### 7. `indicator-record`\r
\r
**Manage KPI actual values per period**\r
\r
Methods: `GET` `POST` `DELETE`\r
\r
> **POST** maps to `indicator-record/update-record` (upsert by period).\r
> **GET with `id`** returns a single record; **GET without `id`** returns a list.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `DELETE` |\r
| `id` | integer \| string | Record ID — GET single / DELETE |\r
| `indicator_id` | integer \| string | KPI indicator ID — required for GET list and POST |\r
| `period_key` | string | Period date `dd-m-YYYY` e.g. `01-6-2026` — required for POST |\r
| `current_value` | number \| string | Actual value for the period |\r
| `target_value` | number \| string | Target value for the period |\r
| `remark` | string | Notes |\r
| `score` | number \| string | Computed score |\r
| `month` | integer \| string | Filter by month number (GET list) |\r
| `year` | integer \| string | Filter by year (GET list) |\r
| `start_date` | string | Filter from date (GET list) |\r
| `end_date` | string | Filter to date (GET list) |\r
| `all` | boolean \| string | Return all records without pagination |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — records for KPI 40 in May 2026\r
{ "method": "GET", "indicator_id": 40, "month": 5, "year": 2026 }\r
\r
// POST — submit/update actual value for a period\r
{ "method": "POST", "indicator_id": 40, "period_key": "01-6-2026",\r
"current_value": 112000, "target_value": 100000, "remark": "Exceeded target" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 200 }\r
```\r
\r
---\r
\r
### 8. `leads`\r
\r
**Manage sales leads and prospects**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Lead ID — required for PUT / DELETE |\r
| `client_name` | string | Lead contact name — required for POST |\r
| `company_name` | string | Company name |\r
| `email` | string | Contact email |\r
| `mobile` | string | Contact mobile |\r
| `website` | string | Company website |\r
| `address` | string | Address |\r
| `note` | string | Notes |\r
| `agent_id` | integer \| string | Assign to sales agent |\r
| `source_id` | integer \| string | Lead source ID (POST) |\r
| `status_id` | integer \| string | Lead status ID (POST) |\r
| `status` | integer \| string | Lead status ID (PUT) |\r
| `source` | integer \| string | Lead source ID (PUT) |\r
| `meeting_date` | string | Scheduled meeting date |\r
| `next_follow_up` | string | `yes` or `no` |\r
| `client` | string | `lead` or `client` filter (GET) |\r
| `followUp` | string | Filter follow-up required (GET) |\r
| `startDate` | string | Filter from date (GET) |\r
| `endDate` | string | Filter to date (GET) |\r
| `sort_field` | string | Sort column |\r
| `sort_direction` | string | `asc` / `desc` |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — list leads with pagination\r
{ "method": "GET", "client": "lead", "per_page": 20, "page": 1 }\r
\r
// POST — create lead\r
{ "method": "POST", "client_name": "PT Maju Jaya",\r
"email": "[email protected]", "mobile": "+6281234567890",\r
"status_id": 1, "agent_id": 7 }\r
\r
// PUT — update status and add note\r
{ "method": "PUT", "id": 55, "status": 3, "note": "Proposal sent" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 55 }\r
```\r
\r
---\r
\r
### 9. `clients`\r
\r
**Manage clients and customer relationships**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Client ID — required for PUT / DELETE |\r
| `name` | string | Contact name — required for POST |\r
| `email` | string | Email — required for POST |\r
| `company_name` | string | Company name |\r
| `website` | string | Company website |\r
| `address` | string | Address |\r
| `mobile` | string | Phone number |\r
| `send_email` | string | `yes` / `no` — send welcome email |\r
| `skype` | string \| null | Skype handle |\r
| `linkedin` | string \| null | LinkedIn URL |\r
| `twitter` | string \| null | Twitter handle |\r
| `facebook` | string \| null | Facebook URL |\r
| `gst_number` | string \| null | Tax/GST number |\r
| `note` | string \| null | Notes |\r
| `search` | string | Search by name or company |\r
\r
**Examples:**\r
\r
```json\r
// GET — search clients\r
{ "method": "GET", "search": "acme" }\r
\r
// POST — create client\r
{ "method": "POST", "name": "Alice Johnson",\r
"email": "[email protected]", "company_name": "New Client Ltd",\r
"mobile": "+0987654321", "send_email": "yes" }\r
\r
// PUT — update website\r
{ "method": "PUT", "id": 3, "website": "https://acme-new.com" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 3 }\r
```\r
\r
---\r
\r
### 10. `tickets`\r
\r
**Manage support tickets and issues**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Ticket ID — required for PUT / DELETE |\r
| `subject` | string | Ticket subject — required for POST |\r
| `description` | string | Ticket description |\r
| `status` | string | `open` / `pending` / `resolved` / `closed` |\r
| `priority` | string | `low` / `medium` / `high` / `urgent` |\r
| `type_id` | integer \| string | Ticket type ID |\r
| `channel_id` | integer \| string | Ticket channel ID |\r
| `agent_id` | integer \| string | Assign to agent |\r
| `user_id` | integer \| string | Reporter user ID |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — high-priority open tickets\r
{ "method": "GET", "status": "open", "priority": "high" }\r
\r
// POST — create ticket\r
{ "method": "POST", "subject": "Cannot export report",\r
"description": "Export button not responding",\r
"priority": "medium", "type_id": 1, "channel_id": 2, "user_id": 7 }\r
\r
// PUT — resolve and reassign\r
{ "method": "PUT", "id": 500, "status": "resolved", "agent_id": 8 }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 500 }\r
```\r
\r
---\r
\r
### 11. `attendance`\r
\r
**Manage attendance records and time tracking**\r
\r
Methods: `GET` `POST` `PUT`\r
\r
> **POST** → clock in (`attendance/clock-in`)\r
> **PUT** → clock out (`attendance/clock-out`)\r
> **GET with `today: true`** → today's attendance summary\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` |\r
| `id` | integer \| string | Attendance record ID — required for PUT (clock-out) |\r
| `employee_id` | integer \| string | Employee ID |\r
| `date` | string | Specific date `YYYY-MM-DD` |\r
| `month` | string | Filter by month |\r
| `year` | string | Filter by year |\r
| `clock_in_time` | string | Clock-in time `HH:MM:SS` |\r
| `clock_out_time` | string | Clock-out time `HH:MM:SS` |\r
| `working_from` | string | `office` / `home` / `other` |\r
| `late_reason` | string | Reason if arriving late |\r
| `today` | boolean \| string | Set `true` to get today's records (GET) |\r
\r
**Examples:**\r
\r
```json\r
// GET — today's attendance\r
{ "method": "GET", "today": true }\r
\r
// GET — by month/year\r
{ "method": "GET", "employee_id": 7, "month": "5", "year": "2026" }\r
\r
// POST — clock in\r
{ "method": "POST", "employee_id": 7, "working_from": "office" }\r
\r
// PUT — clock out\r
{ "method": "PUT", "id": 300 }\r
```\r
\r
---\r
\r
### 12. `leave`\r
\r
**Manage employee leave requests**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Leave ID — required for PUT / DELETE |\r
| `user_id` | integer \| string | Employee user ID — required for POST |\r
| `leave_type_id` | integer \| string | Leave type ID — required for POST / PUT |\r
| `leave_date` | string | Leave start date `YYYY-MM-DD` — required for POST |\r
| `duration` | string | `full day` / `half day` / `multiple` |\r
| `reason` | string | Leave reason |\r
| `status` | string | `pending` / `approved` / `rejected` (PUT for approval) |\r
| `multi_date` | string | Comma-separated dates for `multiple` duration |\r
| `userId` | integer \| string | Filter by employee (GET) |\r
| `startDate` | string | Filter from date (GET) |\r
| `endDate` | string | Filter to date (GET) |\r
| `search` | string | Search keyword |\r
| `all` | boolean \| string | Return all records without pagination |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — pending leaves for employee 7\r
{ "method": "GET", "userId": 7, "status": "pending" }\r
\r
// POST — apply for leave\r
{ "method": "POST", "user_id": 7, "leave_type_id": 1,\r
"leave_date": "2026-05-15", "duration": "full day", "reason": "Family event" }\r
\r
// PUT — approve leave\r
{ "method": "PUT", "id": 88, "status": "approved" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 88 }\r
```\r
\r
---\r
\r
### 13. `department`\r
\r
**Manage departments and teams**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Supports lookup by `name` (string) in addition to `id` for PUT / DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Department ID |\r
| `name` | string | Current department name — for lookup (PUT / DELETE) |\r
| `team_name` | string | Department name — required for POST / PUT |\r
| `description` | string | Department description |\r
| `parent_id` | integer \| string | Parent department ID |\r
| `leader_id` | integer \| string | Department leader employee ID |\r
| `search` | string | Search by name |\r
| `sort_field` | string | Sort column |\r
| `sort_direction` | string | `asc` / `desc` |\r
\r
**Examples:**\r
\r
```json\r
// GET — search departments\r
{ "method": "GET", "search": "marketing" }\r
\r
// POST — create department\r
{ "method": "POST", "team_name": "Product Design",\r
"description": "UI/UX and product design team" }\r
\r
// PUT — rename by ID\r
{ "method": "PUT", "id": 4, "team_name": "Digital Marketing & SEO" }\r
\r
// PUT — rename by name (auto-resolves ID)\r
{ "method": "PUT", "name": "Digital Marketing", "team_name": "Digital Marketing & SEO" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 4 }\r
```\r
\r
---\r
\r
### 14. `designation`\r
\r
**Manage job designations and roles**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Designation ID — required for PUT / DELETE |\r
| `name` | string | Designation name — required for POST / PUT |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — search designations\r
{ "method": "GET", "search": "engineer" }\r
\r
// POST — create designation\r
{ "method": "POST", "name": "DevOps Engineer" }\r
\r
// PUT — rename\r
{ "method": "PUT", "id": 2, "name": "Principal Software Engineer" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 2 }\r
```\r
\r
---\r
\r
### 15. `performance-cycle`\r
\r
**Manage performance / OKR cycles**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Cycle ID — required for PUT / DELETE |\r
| `name` | string | Cycle name — required for POST / PUT |\r
| `cycle_type` | string | Cycle type — required for POST / PUT (e.g. `quarterly`, `annual`) |\r
| `started_at` | string | Start date `YYYY-MM-DD` — required for POST / PUT |\r
| `finished_at` | string | End date `YYYY-MM-DD` — required for POST / PUT |\r
| `sort_field` | string | Sort column |\r
| `sort_direction` | string | `asc` / `desc` |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — list cycles\r
{ "method": "GET", "per_page": 10, "page": 1 }\r
\r
// POST — create quarterly cycle\r
{ "method": "POST", "name": "Q3 2026", "cycle_type": "quarterly",\r
"started_at": "2026-07-01", "finished_at": "2026-09-30" }\r
\r
// PUT — rename cycle\r
{ "method": "PUT", "id": 3, "name": "Q2 2026 Revised" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 3 }\r
```\r
\r
---\r
\r
### 16. `holiday`\r
\r
**Manage company holidays**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Holiday ID — required for PUT / DELETE |\r
| `occasion` | string | Holiday name — required for POST / PUT |\r
| `date` | string | Date in `dd/mm/yyyy` format — required for POST / PUT |\r
| `year` | integer \| string | Filter by year (GET) |\r
| `status` | string | `upcoming` / `past` / `all` (GET) |\r
| `search` | string | Search by keyword |\r
| `all` | boolean \| string | Return all records without pagination |\r
| `sort_field` | string | Sort column |\r
| `sort_direction` | string | `asc` / `desc` |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — upcoming holidays in 2026\r
{ "method": "GET", "year": 2026, "status": "upcoming" }\r
\r
// POST — add holiday\r
{ "method": "POST", "occasion": "New Year's Day", "date": "01/01/2027" }\r
\r
// PUT — rename holiday\r
{ "method": "PUT", "id": 10, "occasion": "National Independence Day" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 10 }\r
```\r
\r
---\r
\r
### 17. `project-category`\r
\r
**Manage project categories and classifications**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Category ID — required for PUT / DELETE |\r
| `category_name` | string | Category name — required for POST / PUT |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — search categories\r
{ "method": "GET", "search": "web" }\r
\r
// POST\r
{ "method": "POST", "category_name": "Mobile Development" }\r
\r
// PUT\r
{ "method": "PUT", "id": 1, "category_name": "Web & PWA Development" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 1 }\r
```\r
\r
---\r
\r
### 18. `task-category`\r
\r
**Manage task categories and types**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Category ID — required for PUT / DELETE |\r
| `category_name` | string | Category name — required for POST / PUT |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET\r
{ "method": "GET", "search": "bug" }\r
\r
// POST\r
{ "method": "POST", "category_name": "Feature Request" }\r
\r
// PUT\r
{ "method": "PUT", "id": 1, "category_name": "Critical Bug Fix" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 1 }\r
```\r
\r
---\r
\r
### 19. `ticket-type`\r
\r
**Manage ticket types and classifications**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Ticket type ID — required for PUT / DELETE |\r
| `type` | string | Ticket type name — required for POST / PUT |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET\r
{ "method": "GET", "search": "bug" }\r
\r
// POST\r
{ "method": "POST", "type": "Feature Request" }\r
\r
// PUT\r
{ "method": "PUT", "id": 1, "type": "Critical Bug" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 1 }\r
```\r
\r
---\r
\r
### 20. `ticket-channel`\r
\r
**Manage ticket channels and submission methods**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Channel ID — required for PUT / DELETE |\r
| `channel_name` | string | Channel name — required for POST / PUT |\r
| `search` | string | Search by keyword |\r
\r
**Examples:**\r
\r
```json\r
// GET — list all channels\r
{ "method": "GET" }\r
\r
// POST\r
{ "method": "POST", "channel_name": "WhatsApp" }\r
\r
// PUT\r
{ "method": "PUT", "id": 1, "channel_name": "Email Support" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 1 }\r
```\r
\r
---\r
\r
### 21. `ticket-agent`\r
\r
**List ticket agents and their groups**\r
\r
Methods: `GET`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` |\r
\r
**Example:**\r
\r
```json\r
// GET — list all ticket agents\r
{ "method": "GET" }\r
```\r
\r
**Response:**\r
\r
```json\r
{\r
"status": "success",\r
"data": [\r
{ "id": 7, "name": "Sarah Lee", "email": "[email protected]", "group": "Technical Support" }\r
]\r
}\r
```\r
\r
---\r
\r
### 22. `indicator-category`\r
\r
**Manage KPI / indicator categories**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | integer \| string | Category ID — required for PUT / DELETE |\r
| `indicator_type_name` | string | Category name — required for POST / PUT |\r
| `status` | string | Filter by status; omit or `all` for no filter (GET) |\r
| `search` | string | Search by keyword |\r
| `all` | boolean \| string | Return all records without pagination |\r
| `sort_field` | string | Sort column |\r
| `sort_direction` | string | `asc` / `desc` |\r
| `per_page` | integer | Page size |\r
| `page` | integer | Page number |\r
\r
**Examples:**\r
\r
```json\r
// GET — list all categories\r
{ "method": "GET", "all": true }\r
\r
// POST\r
{ "method": "POST", "indicator_type_name": "Engineering" }\r
\r
// PUT\r
{ "method": "PUT", "id": 1, "indicator_type_name": "Revenue & Sales" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": 1 }\r
```\r
\r
---\r
\r
### 23. `leave-type`\r
\r
**Manage leave types (Annual, Sick, etc.)**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Write operations (POST/PUT/DELETE) are admin-only.\r
> Lookup by `id` or `type_name` (partial match) for PUT/DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Leave type ID — or use `type_name` to look up |\r
| `type_name` | string | Leave type name — required for POST |\r
| `days` | number | Number of allowed days per year |\r
| `color` | string | Color code e.g. `#FF0000` |\r
| `is_paid` | boolean | Is this a paid leave type? Default: `true` |\r
| `search` | string | Search by name |\r
\r
**Examples:**\r
\r
```json\r
// GET — list all leave types\r
{ "method": "GET" }\r
\r
// POST\r
{ "method": "POST", "type_name": "Maternity Leave", "days": 90, "is_paid": true }\r
\r
// PUT — update days allowed\r
{ "method": "PUT", "type_name": "Annual Leave", "days": 14 }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "3" }\r
```\r
\r
---\r
\r
### 24. `invoices`\r
\r
**Manage client invoices**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `invoices` module enabled. POST/PUT/DELETE are admin-only.\r
> Lookup by `id` or `invoice_number` (e.g. `INV#0001`) for PUT/DELETE.\r
> Employees see only invoices linked to projects they are members of.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Invoice ID |\r
| `invoice_number` | string | Display number e.g. `INV#0001` — used to look up for PUT/DELETE |\r
| `client_id` | string | Client user ID |\r
| `client_name` | string | Client company or contact name — auto-resolved to ID |\r
| `project_id` | string | Link to project |\r
| `issue_date` | string | Issue date `YYYY-MM-DD` (defaults to today) |\r
| `due_date` | string | Due date `YYYY-MM-DD` |\r
| `sub_total` | number | Subtotal amount |\r
| `total` | number | Total amount — **required for POST** |\r
| `currency_id` | string | Currency ID |\r
| `note` | string | Invoice notes |\r
| `search` | string | Search by invoice number or client name |\r
| `startDate` | string | Filter from issue date |\r
| `endDate` | string | Filter to issue date |\r
\r
**Examples:**\r
\r
```json\r
// GET — list invoices\r
{ "method": "GET", "client_name": "Acme Corp" }\r
\r
// POST — create invoice\r
{ "method": "POST", "client_name": "Acme Corp", "total": 5000,\r
"issue_date": "2026-05-01", "due_date": "2026-05-31" }\r
\r
// PUT — update due date\r
{ "method": "PUT", "invoice_number": "INV#0001", "due_date": "2026-06-15" }\r
\r
// DELETE\r
{ "method": "DELETE", "invoice_number": "INV#0001" }\r
```\r
\r
---\r
\r
### 25. `estimates`\r
\r
**Manage client estimates and quotes**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `estimates` module enabled. POST/PUT/DELETE are admin-only.\r
> Lookup by `id` or `estimate_number` (e.g. `EST#0001`) for PUT/DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Estimate ID |\r
| `estimate_number` | string | Display number e.g. `EST#0001` — look up for PUT/DELETE |\r
| `client_id` | string | Client user ID |\r
| `client_name` | string | Client company or contact name — auto-resolved to ID |\r
| `valid_till` | string | Expiry date `YYYY-MM-DD` |\r
| `sub_total` | number | Subtotal |\r
| `total` | number | Total amount — **required for POST** |\r
| `discount` | number | Discount amount |\r
| `discount_type` | string | `percent` or `fixed` |\r
| `currency_id` | string | Currency ID |\r
| `note` | string | Notes |\r
| `status` | string | `draft` / `sent` / `declined` / `accepted` |\r
| `search` | string | Search by number or client |\r
| `startDate` | string | Filter from `valid_till` |\r
| `endDate` | string | Filter to `valid_till` |\r
\r
**Examples:**\r
\r
```json\r
// GET — list accepted estimates\r
{ "method": "GET", "status": "accepted" }\r
\r
// POST — create estimate\r
{ "method": "POST", "client_name": "Acme Corp", "total": 12000,\r
"valid_till": "2026-06-30", "status": "draft" }\r
\r
// PUT — mark as sent\r
{ "method": "PUT", "estimate_number": "EST#0003", "status": "sent" }\r
\r
// DELETE\r
{ "method": "DELETE", "estimate_number": "EST#0003" }\r
```\r
\r
---\r
\r
### 26. `contracts`\r
\r
**Manage client contracts**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `contracts` module enabled. POST/PUT/DELETE are admin-only.\r
> Lookup by `id` or `subject` (partial match) for PUT/DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Contract ID |\r
| `subject` | string | Contract title — **required for POST**; also used for lookup |\r
| `client_id` | string | Client user ID |\r
| `client_name` | string | Client company name — auto-resolved to ID |\r
| `contract_type_id` | string | Contract type ID |\r
| `start_date` | string | Start date `YYYY-MM-DD` |\r
| `end_date` | string | End date `YYYY-MM-DD` |\r
| `amount` | number | Contract value |\r
| `currency_id` | string | Currency ID |\r
| `description` | string | Contract notes |\r
| `search` | string | Search by contract subject |\r
| `startDate` | string | Filter by start_date from |\r
| `endDate` | string | Filter by end_date to |\r
\r
**Examples:**\r
\r
```json\r
// GET — list contracts for a client\r
{ "method": "GET", "client_name": "Acme Corp" }\r
\r
// POST — create contract\r
{ "method": "POST", "subject": "Annual Support Contract",\r
"client_name": "Acme Corp", "start_date": "2026-01-01",\r
"end_date": "2026-12-31", "amount": 24000 }\r
\r
// PUT — update amount\r
{ "method": "PUT", "subject": "Annual Support Contract", "amount": 30000 }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "7" }\r
```\r
\r
---\r
\r
### 27. `events`\r
\r
**Manage company calendar events**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `events` module enabled. POST/PUT/DELETE are admin-only.\r
> Lookup by `id` or `event_name` (partial match) for PUT/DELETE.\r
> Distinct from `holiday` — use `events` for internal company events, meetings, etc.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Event ID |\r
| `event_name` | string | Event name — **required for POST**; also used for lookup |\r
| `where` | string | Event location |\r
| `description` | string | Event description |\r
| `start_date_time` | string | Start date/time `YYYY-MM-DD HH:mm` — **required for POST** |\r
| `end_date_time` | string | End date/time `YYYY-MM-DD HH:mm` — **required for POST** |\r
| `repeat` | string | `yes` / `no` (default: `no`) |\r
| `repeat_every` | integer | Repeat interval (e.g. every 2 weeks) |\r
| `repeat_cycles` | integer | Number of repetitions |\r
| `repeat_type` | string | `daily` / `weekly` / `monthly` / `yearly` |\r
| `label_color` | string | Bootstrap class or hex color (default: `bg-info`) |\r
| `month` | string | Filter by month number 1–12 |\r
| `year` | string | Filter by year |\r
| `startDate` | string | Filter events from date |\r
| `endDate` | string | Filter events to date |\r
| `search` | string | Search by event name |\r
\r
**Examples:**\r
\r
```json\r
// GET — events in June 2026\r
{ "method": "GET", "month": "6", "year": "2026" }\r
\r
// POST — create event\r
{ "method": "POST", "event_name": "Q2 All-Hands Meeting",\r
"start_date_time": "2026-06-15 09:00",\r
"end_date_time": "2026-06-15 11:00", "where": "Main Conference Room" }\r
\r
// PUT — change location\r
{ "method": "PUT", "event_name": "Q2 All-Hands Meeting", "where": "Zoom" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "15" }\r
```\r
\r
---\r
\r
### 28. `expenses`\r
\r
**Manage expenses and claims**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `expenses` module enabled. DELETE is admin-only.\r
> Employees can create/update their own pending expenses.\r
> Admin-created expenses default to `approved`; employee-submitted default to `pending`.\r
> Lookup by `id` or `item_name` (partial match) for PUT/DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Expense ID |\r
| `item_name` | string | Expense item name — **required for POST**; also used for lookup |\r
| `purchase_date` | string | Purchase date `YYYY-MM-DD` — **required for POST** |\r
| `price` | number | Expense amount — **required for POST** |\r
| `purchase_from` | string | Where it was purchased |\r
| `currency_id` | string | Currency ID (defaults to company currency) |\r
| `expense_category_id` | string | Expense category ID |\r
| `user_id` | string | Employee user ID (admin only; defaults to self) |\r
| `employee_name` | string | Employee name — auto-resolved to `user_id` |\r
| `project_id` | string | Link to project |\r
| `description` | string | Additional notes |\r
| `status` | string | `pending` / `approved` / `rejected` — filter (GET) or update (PUT, admin only) |\r
| `can_claim` | integer \| boolean | `1` = reimbursement claim, `0` = regular expense |\r
| `startDate` | string | Filter from purchase date |\r
| `endDate` | string | Filter to purchase date |\r
\r
**Examples:**\r
\r
```json\r
// GET — pending expenses\r
{ "method": "GET", "status": "pending" }\r
\r
// POST — submit expense\r
{ "method": "POST", "item_name": "Team Lunch", "purchase_date": "2026-05-10",\r
"price": 250, "can_claim": 1, "description": "Client meeting lunch" }\r
\r
// PUT — approve expense (admin)\r
{ "method": "PUT", "id": "99", "status": "approved" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "99" }\r
```\r
\r
---\r
\r
### 29. `expense-category`\r
\r
**Manage expense categories**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `expenses` module enabled. Write operations are admin-only.\r
> Lookup by `id` or `category_name` (partial match) for PUT/DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Category ID |\r
| `category_name` | string | Category name — **required for POST**; also used for lookup |\r
| `search` | string | Search by category name |\r
\r
**Examples:**\r
\r
```json\r
// GET\r
{ "method": "GET" }\r
\r
// POST\r
{ "method": "POST", "category_name": "Travel & Accommodation" }\r
\r
// PUT\r
{ "method": "PUT", "category_name": "Travel", "category_name": "Travel & Accommodation" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "5" }\r
```\r
\r
---\r
\r
### 30. `notices`\r
\r
**Manage company notice board**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `notices` module enabled. POST/PUT/DELETE are admin-only.\r
> Employees see only notices addressed to `all` or `employee`.\r
> Lookup by `id` or `heading` (partial match) for PUT/DELETE.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Notice ID |\r
| `heading` | string | Notice title — **required for POST**; also used for lookup |\r
| `description` | string | Notice content body — **required for POST** |\r
| `to` | string | Target audience: `all` / `employee` / `client` (default: `all`) |\r
| `search` | string | Search by heading |\r
| `startDate` | string | Filter from created date |\r
| `endDate` | string | Filter to created date |\r
\r
**Examples:**\r
\r
```json\r
// GET — notices for employees\r
{ "method": "GET", "to": "employee" }\r
\r
// POST — create announcement\r
{ "method": "POST", "heading": "Office Closed on Friday",\r
"description": "The office will be closed this Friday for maintenance.",\r
"to": "all" }\r
\r
// PUT — update content\r
{ "method": "PUT", "heading": "Office Closed on Friday",\r
"description": "Updated: Office closed Friday AND Monday." }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "12" }\r
```\r
\r
---\r
\r
### 31. `timelogs`\r
\r
**Manage project and task time logs**\r
\r
Methods: `GET` `POST` `PUT` `DELETE`\r
\r
> Requires `timelogs` module enabled. DELETE is admin-only.\r
> **POST** starts a timer (sets `end_time = null`).\r
> **PUT** stops a running timer by providing `end_time`, or edits any field.\r
> PUT without `id` finds the active (running) timer for the target user.\r
> Employees see only their own time logs.\r
> Supports lookup by name: `project_name` → `project_id`, `task_name` → `task_id`, `employee_name` → `user_id`.\r
\r
| Parameter | Type | Description |\r
|---|---|---|\r
| `method` | string | `GET` / `POST` / `PUT` / `DELETE` |\r
| `id` | string | Time log ID — required for DELETE |\r
| `project_id` | string | Project ID |\r
| `project_name` | string | Project name — auto-resolved to `project_id` |\r
| `task_id` | string | Task ID |\r
| `task_name` | string | Task heading — auto-resolved to `task_id` |\r
| `user_id` | string | Employee user ID (admin only; defaults to self) |\r
| `employee_name` | string | Employee name — auto-resolved to `user_id` |\r
| `start_time` | string | Start datetime `YYYY-MM-DD HH:mm` (defaults to now on POST) |\r
| `end_time` | string | End datetime — provide on PUT to stop the timer |\r
| `memo` | string | Optional note for the time log |\r
| `date` | string | Filter by specific date (GET) |\r
| `month` | string | Filter by month number 1–12 (GET) |\r
| `year` | string | Filter by year (GET) |\r
| `active_only` | boolean \| string | `true` = return only running timers (GET) |\r
\r
**Examples:**\r
\r
```json\r
// GET — my time logs this month\r
{ "method": "GET", "month": "5", "year": "2026" }\r
\r
// GET — active running timers\r
{ "method": "GET", "active_only": true }\r
\r
// POST — start timer for a project\r
{ "method": "POST", "project_name": "Mobile App v2",\r
"task_name": "Design landing page", "memo": "Working on hero section" }\r
\r
// PUT — stop running timer\r
{ "method": "PUT", "end_time": "2026-05-10 17:30" }\r
\r
// PUT — stop timer by ID\r
{ "method": "PUT", "id": "88", "end_time": "2026-05-10 17:30" }\r
\r
// DELETE\r
{ "method": "DELETE", "id": "88" }\r
```\r
\r
---\r
\r
## Advanced: Account Tools (Gateway endpoint only)\r
\r
> 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](#recommended--connect-with-api-token) above.\r
\r
### `auth_register`\r
\r
**Create a new FlowyTeam company account.**\r
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.\r
\r
A verification email is sent — the account must be verified before it can be used. Two paths to complete verification:\r
\r
- **Path A (CLI):** Copy the code from the verification email link URL and call `auth_verify_email` → receive `api_token` immediately.\r
- **Path B (browser):** Click the verification link in the email, then call `auth_login` with email + password → receive `api_token`.\r
\r
| Parameter | Type | Required | Description |\r
|---|---|---|---|\r
| `name` | string | ✓ | Full name of the admin user |\r
| `email` | string | ✓ | Email address |\r
| `password` | string | ✓ | Password (minimum 8 characters) |\r
| `company_name` | string | ✓ | Company / organisation name |\r
| `phone` | string | — | Phone number (optional) |\r
\r
**Response:** Returns `status: pending_verification` — no `api_token` yet. Verify email first.\r
\r
---\r
\r
### `auth_verify_email`\r
\r
**Activate a pending account using the verification code from the email link.**\r
The code is the last segment of the verification URL, e.g. for `.../email-verification/ABC123XYZ` the code is `ABC123XYZ`.\r
Call this after `auth_register` when the user has copied the code from their verification email.\r
\r
| Parameter | Type | Required | Description |\r
|---|---|---|---|\r
| `verification_code` | string | ✓ | Code from the verification link URL |\r
\r
**Response:** Returns `api_token` — use this as the Bearer token and reconfigure the MCP connection.\r
\r
---\r
\r
### `auth_login`\r
\r
**Retrieve API token for an existing FlowyTeam account.**\r
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`).\r
\r
| Parameter | Type | Required | Description |\r
|---|---|---|---|\r
| `email` | string | ✓ | Registered email address |\r
| `password` | string | ✓ | Account password |\r
\r
**Response:** Returns `api_token` — use this as the Bearer token and reconfigure the MCP connection.\r
\r
---\r
\r
## Error Codes\r
\r
| Code | Meaning |\r
|---|---|\r
| `200` | Success |\r
| `401` | Unauthenticated — missing or invalid Bearer token |\r
| `403` | Forbidden — authenticated but lacks permission |\r
| `404` | Resource not found |\r
| `422` | Validation error — check the `errors` object in the response |\r
| `429` | Too many requests — rate limit exceeded |\r
| `500` | Server error |\r
\r
---\r
\r
## Natural Language Examples\r
\r
Once connected, you can ask Claude:\r
\r
```\r
"Create a task 'Review Q2 Report' in the Marketing project,\r
assign to Sarah, due April 30"\r
\r
"Show me all open high-priority tickets"\r
\r
"List company-level OKRs for Q2 2026"\r
\r
"Who is on leave this week?"\r
\r
"Add a new employee: John Doe, email [email protected],\r
Engineering department, joining June 1"\r
\r
"What are the KPI scores for the Sales team this month?"\r
\r
"Create a new lead: PT Maju Jaya, contact [email protected],\r
assign to agent ID 7"\r
\r
"Clock in employee 7 from office"\r
\r
"List all upcoming holidays in 2026"\r
\r
"Show me all pending expense claims"\r
\r
"Create an invoice for Acme Corp, total $5,000, due May 31"\r
\r
"What events do we have in June?"\r
\r
"Post an announcement: office closed Friday"\r
\r
"Log 8 hours on the Mobile App project for today"\r
\r
"Show me all running timers right now"\r
```\r
\r
---\r
\r
## Links\r
\r
- **Website:** [flowyteam.com](https://flowyteam.com)\r
- **MCP Docs:** [flowyteam.com/get/mcp-server](https://flowyteam.com/get/mcp-server)\r
- **API Reference:** [flowyteam.com/get/mcp-docs](https://flowyteam.com/get/mcp-docs)\r
- **Sign Up:** [app.flowyteam.com/register](https://flowyteam.com/register)\r
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install flowyteam-mcp - 安装完成后,直接呼叫该 Skill 的名称或使用
/flowyteam-mcp触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Flowyteam Mcp 是什么?
Manage FlowyTeam projects, tasks, OKRs, KPIs, HR, CRM, finance, support tickets, attendance, and more via MCP — 34 tools for complete workspace management. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 171 次。
如何安装 Flowyteam Mcp?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install flowyteam-mcp」即可一键安装,无需额外配置。
Flowyteam Mcp 是免费的吗?
是的,Flowyteam Mcp 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Flowyteam Mcp 支持哪些平台?
Flowyteam Mcp 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Flowyteam Mcp?
由 Agung Sidik Muhamad(@agungksidik)开发并维护,当前版本 v1.1.2。