← 返回 Skills 市场
agungksidik

Flowyteam Mcp

作者 Agung Sidik Muhamad · GitHub ↗ · v1.1.2 · MIT-0
cross-platform ⚠ suspicious
171
总下载
0
收藏
1
当前安装
6
版本数
在 OpenClaw 中安装
/install flowyteam-mcp
功能描述
Manage FlowyTeam projects, tasks, OKRs, KPIs, HR, CRM, finance, support tickets, attendance, and more via MCP — 34 tools for complete workspace management.
使用说明 (SKILL.md)

\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
安全使用建议
This skill is largely coherent with its stated purpose (controlling FlowyTeam via MCP), but check two things before proceeding: (1) metadata mismatch — confirm the registry/installer will prompt you to provide FLOWYTEAM_API_TOKEN as SKILL.md requires (the package metadata you saw omitted it), and (2) credential handling — prefer using an API token (RPC endpoint) rather than giving the agent your email/password via the Gateway flow. If you must use the Gateway/login path, avoid pasting long‑term passwords into shared or persistent contexts, and verify the agent/runtime will not persist or transmit your token to unexpected places. Because the package is instruction-only, there is no installed code to inspect — if you need higher assurance, request an updated package manifest or a signed release from the publisher and confirm the endpoints (https://flowyteam.com/api/...) are the official ones.
功能分析
Type: OpenClaw Skill Name: flowyteam-mcp Version: 1.1.2 The FlowyTeam MCP skill bundle is a legitimate integration for the FlowyTeam SaaS platform, providing 34 tools for workspace management (tasks, OKRs, HR, CRM, and finance). The skill uses standard HTTP-based MCP protocols (JSON-RPC 2.0) and requires a user-provided API token for most operations, with clear documentation in SKILL.md and README.md regarding authentication flows and tool parameters. No evidence of data exfiltration, malicious execution, or prompt injection was found; the bundle includes explicit instructions to the AI agent to only invoke account-related tools (registration/login) upon explicit user request.
能力标签
cryptocan-make-purchasesrequires-oauth-tokenrequires-sensitive-credentials
能力评估
Purpose & Capability
The name/description match the SKILL.md: it is an MCP integration for FlowyTeam and the instructions use the platform's RPC/gateway endpoints. However the registry metadata shown above lists no required env vars while the included SKILL.md declares a required FLOWYTEAM_API_TOKEN — this metadata mismatch is unexpected and should be corrected.
Instruction Scope
Instructions are instruction-only and confined to calling FlowyTeam MCP endpoints (auth_register, auth_verify_email, auth_login, and authenticated RPC calls). They explicitly tell the agent how to accept user email/password and verification codes (for Gateway-based login flows). That behavior is consistent with an integration but implies the agent will handle sensitive credentials and one-time verification codes in plaintext, which is privacy-sensitive and worth attention.
Install Mechanism
No install spec and no code files — the skill is instruction-only and does not download or write software to disk (lowest install risk).
Credentials
The SKILL.md declares FLOWYTEAM_API_TOKEN as a required env var (appropriate for this API). But the top-level registry requirements reported earlier show no required env vars — an incoherence that may be a packaging/metadata bug. No other unrelated credentials are requested.
Persistence & Privilege
The skill is not always-enabled and uses default agent invocation permissions. It does not request system-wide config paths or elevated privileges in the provided instructions.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install flowyteam-mcp
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /flowyteam-mcp 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.1.2
flowyteam-mcp v1.1.2 - Added support for 1 new tool (now 34 tools total) for workspace management. - Updated authentication endpoints: now includes `auth_verify_email` (no token required). - Revised setup instructions to recommend direct API token connection and clarified configuration for Desktop/Cursor usage. - Improved protocol and endpoint documentation for clarity.
v1.1.1
flowyteam-mcp 1.1.1 - Clarified that login and registration tools require explicit user action and credentials. - Updated documentation to reflect that the API token is now required in the environment for most operations. - Added homepage and source fields to metadata for easier reference. - Minor text and formatting tweaks for improved clarity and setup guidance.
v1.0.3
- Added two new public tools: `auth_register` (register new account) and `auth_login` (log in to existing account) — enabling zero-token bootstrap via gateway endpoint. - Updated setup instructions to support both direct token authentication and new tokenless registration/login flow. - Expanded toolset from 31 to 33 tools; full workspace coverage remains. - All authentication and metadata fields updated for better clarity and onboarding. - File structure simplified: metadata moved to root, redundant skill files removed.
v1.0.2
flowyteam-mcp v1.0.2 - Added skill files in the skills/flowyteam-mcp directory. - Updated protocol base URL in documentation from app.flowyteam.com to flowyteam.com. - Updated sample configuration blocks and endpoints for consistency with the new base URL. - No changes to tool definitions or API structure.
v1.0.1
flowyteam-mcp 1.0.1 changelog - Initial public release connecting MCP-compatible agents to FlowyTeam workspace - Supports managing projects, tasks, OKRs, KPIs, HR, CRM, finance, support tickets, attendance, and more (31 integrated tools) - Provides complete setup instructions for different clients (CLI, Desktop, API) - Includes detailed documentation for each API method and tool parameter - Requires only a FlowyTeam API token for authentication
v1.0.0
FlowyTeam MCP 1.0.0 – Initial Release - Introduces MCP integration for FlowyTeam, covering projects, tasks, OKRs, KPIs, HR, CRM, finance, support tickets, attendance, and more (31 tools total). - Provides detailed setup instructions for connecting MCP-compatible agents to FlowyTeam. - Documents JSON-RPC 2.0 API protocol, endpoints, and authentication. - Includes full parameter reference and usage examples for main resources like tasks, projects, employees, objectives, and key results.
元数据
Slug flowyteam-mcp
版本 1.1.2
许可证 MIT-0
累计安装 1
当前安装数 1
历史版本数 6
常见问题

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。

💬 留言讨论