FlowyTeam Cloud Connector
Connect your FlowyTeam workspace to Claude (Desktop, web, and mobile) and to ChatGPT, where FlowyTeam is an approved plugin. Authorize once with OAuth, then manage tasks, projects, employees, attendance, and OKRs in natural language. No API token to copy or paste.
FlowyTeam offers two ways to connect an AI assistant. They use different endpoints and sign-in methods. Pick the one that matches your assistant.
Cloud Connector
- Sign in with OAuth, one-click authorize
- No API token to manage
- 53 tools: tasks, projects, employees, attendance, OKRs
- Added from the assistant's Connectors settings
Claude Code (CLI)
- Sign in with a Bearer API token
- For developers working in the terminal
- Wider tool set including CRM, finance, tickets
- Not compatible with Claude Desktop or the ChatGPT plugin
You need a FlowyTeam account (free personal tier or any paid plan). Tools respect your existing role and permissions. The same endpoint serves both apps under the name each one uses: Claude calls it a connector, ChatGPT calls it a plugin. You authorize once in each app, and no API token is copied.
Connect from Claude
- Open Settings, then Connectors.
- Find FlowyTeam and click Connect.
You are sent to the FlowyTeam sign-in page.
- Log in and click Authorize.
The consent screen shows what the connector can access. Nothing is shared until you approve.
- Ask in natural language.
"List my tasks", "Show this quarter's objectives".
Connect from ChatGPT
- Find the FlowyTeam plugin.
Search the plugin directory in ChatGPT, or open the listing directly.
- Click Connect.
Available on ChatGPT plans that support plugins.
- Log in and click Authorize.
The same OAuth consent screen as Claude. Nothing is shared until you approve.
- Ask in natural language.
The same 53 tools are available.
https://flowyteam.com/api/mcp/cloud/rpcEvery tool call is scoped to your workspace and permissions. Read tools fetch data; write tools change it. Tools that overwrite or delete existing records are labelled destructive, so the assistant can ask you to confirm first.
Each tool is a single operation. Parameters below come straight from the live connector.
Tasks
List tasks in your workspace. Filter by status, priority, project, assignee, due date, or search by title. Returns 50 tasks per page by default, most recent first. archived=true lists archived tasks instead, with archived_at and archived_by.
| Parameter | Type | Required | Description |
|---|---|---|---|
status |
string | Optional | Filter tasks by completion status. |
priority |
string | Optional | Filter tasks by priority level. |
project_id |
string | Optional | Filter tasks belonging to a specific project (project ID). |
assigned_to |
string | Optional | Filter tasks assigned to a specific user. Accepts user ID or partial name/email. Admin only for filtering by others. |
due_date |
string | Optional | Filter tasks due on this date (Y-m-d format). |
search |
string | Optional | Search tasks by title/heading (partial match). |
archived |
boolean | Optional | true lists archived tasks instead: every task for admins and those with the delete tasks permission, else your own and those you created. restore_task brings one back. |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get full details of a single task by ID, title, or heading. Returns subtasks, comments, files, and assigned user.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | The numeric ID of the task. |
heading |
string | Optional | The task heading/title (partial match), used when the id is unknown. If more than one task matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
title |
string | Optional | Alias for heading. |
Create a new task. Requires a heading/title and, as on the web form, the person to assign it to (assigned_to); members who can only create tasks for themselves get their own task. Optionally link to a project or a key result, set priority and due date.
| Parameter | Type | Required | Description |
|---|---|---|---|
heading |
string | Required | The task title/heading (required). |
description |
string | Optional | Detailed description of the task. |
priority |
string | Optional | Task priority. Defaults to medium. |
project_id |
string | Optional | ID of the project to link this task to. |
assigned_to |
string | Optional | User to assign the task to: a user ID, or a name or email (partial match). Required, as on the web form, except for members who can only create tasks for themselves, whose tasks are their own. |
key_result_id |
integer | Optional | ID of the key result this task works toward (list_key_results). Pass 0 to unlink. A key result can have several tasks. |
due_date |
string | Optional | Due date in Y-m-d format. Defaults to 7 days from today. |
start_date |
string | Optional | Start date in Y-m-d format. Defaults to today. |
task_category_id |
string | Optional | ID of the task category. |
Update an existing task. Look up by ID or heading/title. Updatable fields: heading, description, status, priority, due_date, start_date, project_id, task_category_id, assigned_to.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | Task ID to look up and update. |
heading |
string | Optional | Current task heading used to locate the task by name (partial match). If more than one task matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
title |
string | Optional | Alias for heading (used to locate the task). |
new_heading |
string | Optional | New title to replace the existing task heading. |
description |
string | Optional | New task description. Pass null to clear. |
status |
string | Optional | New status for the task. |
priority |
string | Optional | New priority level. |
due_date |
string | Optional | New due date (Y-m-d). Pass null to clear. |
start_date |
string | Optional | New start date (Y-m-d). Pass null to clear. |
project_id |
string | Optional | Link or re-link the task to a project by ID. Pass null to unlink. |
task_category_id |
string | Optional | Task category ID. Pass null to clear. |
assigned_to |
string | Optional | Re-assign the task to a user (ID or name/email). Admin or users with add_tasks permission only. |
key_result_id |
integer | Optional | ID of the key result this task works toward (list_key_results). Pass 0 to unlink. A key result can have several tasks. |
Archive a task by ID or heading, where restore_task can bring it back with its sub-tasks, comments, files and time logs. dry_run=true shows what would happen and changes nothing. permanent=true removes an already archived task for good, with its time logs (admins only; needs the id). Admins, users with the delete tasks permission and, where members manage their own tasks, the task's creator can archive it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | The numeric ID of the task. |
heading |
string | Optional | The task heading (partial match) to locate it. If more than one task matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
title |
string | Optional | Alias for heading. |
dry_run |
boolean | Optional | Optional. True shows what would be archived, unlinked or removed, and how progress would change, and changes nothing. |
permanent |
boolean | Optional | Optional. True removes an item that is already archived, for good, with what was archived with it. Admins only; archive it first. |
Bring back an archived task by ID, under the key result it was linked to unless that key result is archived. Admins, users with the delete tasks permission and, where members manage their own tasks, the task's creator can restore it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The archived task ID. |
Projects
List projects in your workspace. Filter by status, client name, or search by project name. Members see only their assigned projects unless they have view_projects permission. Returns 50 projects per page by default.
| Parameter | Type | Required | Description |
|---|---|---|---|
search |
string | Optional | Search projects by name (partial match). |
status |
string | Optional | Filter projects by status. |
client_name |
string | Optional | Filter projects by client company name or contact name (partial match). |
category_name |
string | Optional | Filter projects by category name (partial match). |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get full details of a single project by name, including members count, client, category, budget, and timeline.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | Project ID to retrieve. |
project_name |
string | Optional | The name (partial match) of the project to retrieve. If more than one project matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
Create a new project. Requires project_name and start_date. Optionally set deadline, status, client, category, and budget.
| Parameter | Type | Required | Description |
|---|---|---|---|
project_name |
string | Required | Name of the new project. |
start_date |
string | Required | Project start date in Y-m-d format (e.g. 2025-06-01). |
deadline |
string | Optional | Project deadline in Y-m-d format. Leave blank if without_deadline is true. |
without_deadline |
boolean | Optional | Set to true if the project has no fixed deadline. |
status |
string | Optional | Initial project status. Defaults to "not started". |
project_summary |
string | Optional | Short summary or description of the project. |
notes |
string | Optional | Additional internal notes for the project. |
client_name |
string | Optional | Client company name or contact name to associate with this project (partial match). |
category_name |
string | Optional | Project category name to assign (partial match). |
project_budget |
number | Optional | Budget allocated for this project. |
hours_allocated |
number | Optional | Total hours allocated for this project. |
client_view_task |
string | Optional | Whether clients can view tasks in this project. |
manual_timelog |
string | Optional | Whether manual time logging is allowed on this project. |
Update an existing project. Look up by project_name. Update name, status, dates, budget, client, category, or settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | Project ID to look up and update. |
project_name |
string | Optional | Name (partial match) of the project to look up and update. If more than one project matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
new_project_name |
string | Optional | Rename the project to this new name. |
status |
string | Optional | New project status. |
start_date |
string | Optional | Updated start date in Y-m-d format. |
deadline |
string | Optional | Updated deadline in Y-m-d format. |
without_deadline |
boolean | Optional | Set to true to mark the project as having no fixed deadline. |
project_summary |
string | Optional | Updated project summary or description. |
notes |
string | Optional | Updated internal notes. |
feedback |
string | Optional | Feedback or review notes for the project. |
client_name |
string | Optional | Client company name or contact name to associate (partial match). Replaces existing client. |
category_name |
string | Optional | Category name to assign (partial match). Replaces existing category. |
project_budget |
number | Optional | Updated project budget. |
hours_allocated |
number | Optional | Updated hours allocated. |
completion_percent |
integer | Optional | Overall completion percentage (0–100). |
client_view_task |
string | Optional | Whether clients can view tasks in this project. |
manual_timelog |
string | Optional | Whether manual time logging is allowed. |
Archive (soft-delete) a project by name. Admin only. The project can be restored from the Projects Archive page.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | Project ID to archive. |
project_name |
string | Optional | Name (partial match) of the project to archive. If more than one project matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
Employees
Get the signed-in user and workspace this connector acts as: name, work email, roles, company, and which OKR objective types they may create. Call it to confirm the account before creating or changing records.
No parameters.
List employees in your workspace. Filter by status, department name, designation name, or search by name/email. Returns 50 employees per page by default, ordered by name.
| Parameter | Type | Required | Description |
|---|---|---|---|
search |
string | Optional | Search employees by name or email (partial match). |
status |
string | Optional | Filter employees by status. |
department_name |
string | Optional | Filter employees by department name (partial match). |
designation_name |
string | Optional | Filter employees by designation name (partial match). |
role |
string | Optional | Filter by role name (partial match, e.g. "admin" or "employee"). |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get the workspace record of a single employee by name or email: department, designation, job title, work location and employment dates. Members look up their own record, or anyone's with the view employees permission. Pay, identity documents and home address are never returned.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string | Optional | Look up employee by user ID. |
name |
string | Optional | Look up employee by name (partial match). If more than one employee matches, the tool returns an error listing them and does nothing — use email to target exactly one. |
email |
string | Optional | Look up employee by exact email address (recommended — the unambiguous identifier). |
Create a new employee account from a name and a work email. Assigns the 'employee' role automatically and emails the new employee their sign-in details. Available to admins, and to members with the add employees permission, who set only name, email, employee ID, department and designation. Personal data such as pay, identity documents and home address is not handled here; set those in FlowyTeam.
| Parameter | Type | Required | Description |
|---|---|---|---|
new_name |
string | Required | Full name of the new employee. |
new_email |
string | Required | Work email address for the new employee account. The sign-in invitation is sent here. |
timezone |
string | Optional | Timezone identifier (e.g. Asia/Kuala_Lumpur). |
login |
string | Optional | Whether the employee can log in. Defaults to enable. |
department_name |
string | Optional | Department name to assign (partial match). |
designation_name |
string | Optional | Designation/job title name to assign (partial match). |
employee_type_name |
string | Optional | Employment type name (partial match). |
joining_date |
string | Optional | Date the employee joined (Y-m-d format). Defaults to today. |
employee_id |
string | Optional | Internal employee ID / badge number. |
preferred_name |
string | Optional | Preferred display name. Defaults to full name if not provided. |
location |
string | Optional | Work location. |
employment_type |
string | Optional | Employment type (e.g. full-time, part-time, contract). |
Update an employee's name, work email, account status, department, designation, work location or employment dates. Look up by name or email. Members can change their own name, timezone and work location; with the edit employees permission also another non-admin employee's name, email, department and designation. Status, login and employment dates need an admin. Pay, identity documents and home address are not editable here; change those in FlowyTeam.
| Parameter | Type | Required | Description |
|---|---|---|---|
email |
string | Optional | Identify the employee by their exact work email address (recommended — unambiguous). Provide either email or name; if both are given, email wins. |
name |
string | Optional | Identify the employee by name (partial match). If the name matches more than one employee the tool returns an error listing them and changes nothing — use email to target exactly one. |
new_name |
string | Optional | New full name for the employee. |
new_email |
string | Optional | New work email address for the employee. |
status |
string | Optional | Set employee status. |
timezone |
string | Optional | Timezone identifier (e.g. Asia/Kuala_Lumpur). |
login |
string | Optional | Whether the employee can log in. |
department_name |
string | Optional | Department name to assign (partial match). |
designation_name |
string | Optional | Designation/job title name to assign (partial match). |
joining_date |
string | Optional | Date the employee joined (Y-m-d format). |
last_date |
string | Optional | Last working date / offboarding date (Y-m-d format). |
location |
string | Optional | Work location. |
employment_type |
string | Optional | Employment type (e.g. full-time, part-time, contract). |
Attendance
List attendance records. Filter by employee name, date, month, or year. Members see only their own records. Returns 50 records per page by default, most recent clock-in first.
| Parameter | Type | Required | Description |
|---|---|---|---|
employee_name |
string | Optional | Filter by employee name (partial match). Admin only. |
employee_id |
string | Optional | Filter by employee ID. Admin only. |
date |
string | Optional | Filter records for a specific date in Y-m-d format. |
month |
string | Optional | Filter records by month number (1–12). |
year |
string | Optional | Filter records by year (e.g. 2026). |
today |
boolean | Optional | If true, return only today's attendance records. |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get a single attendance record by its ID. Members can only access their own records. Returns clock-in/out times, late status, and working location.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The attendance record ID. |
Record a clock-in for the current user (or any employee if admin). Automatically detects late and half-day status based on attendance settings.
| Parameter | Type | Required | Description |
|---|---|---|---|
working_from |
string | Optional | Location where the employee is working from. Defaults to office. |
employee_name |
string | Optional | Clock in on behalf of an employee by name (partial match). Admin only. If more than one employee matches, the tool returns an error listing them and does nothing — use employee_id to target exactly one. |
employee_id |
string | Optional | Clock in on behalf of an employee by ID (recommended — the unambiguous identifier). Admin only. |
clock_in_datetime |
string | Optional | Explicit clock-in datetime in Y-m-d H:i:s or H:i format. Admin only. |
Record a clock-out for the current user (or any employee if admin). Finds the most recent open clock-in from today.
| Parameter | Type | Required | Description |
|---|---|---|---|
employee_name |
string | Optional | Clock out on behalf of an employee by name (partial match). Admin only. If more than one employee matches, the tool returns an error listing them and does nothing — use employee_id to target exactly one. |
employee_id |
string | Optional | Clock out on behalf of an employee by ID (recommended — the unambiguous identifier). Admin only. |
attendance_id |
string | Optional | Target a specific attendance record by ID. Admin only. |
clock_out_datetime |
string | Optional | Explicit clock-out datetime in Y-m-d H:i:s or H:i format. Admin only. |
Performance Cycles
List OKR performance cycles in your workspace, most recent start date first. Optionally filter by type or search by name. Marks the cycle the workspace is in today as current. Returns 50 cycles per page by default.
| Parameter | Type | Required | Description |
|---|---|---|---|
search |
string | Optional | Search cycles by name (partial match). |
cycle_type |
string | Optional | Filter by cycle type: annually, semiannually, quarterly, monthly, biweekly, weekly. |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get a single performance cycle by ID or name. Returns cycle details including type, status, start date, and end date. scorecard=true adds the end-of-cycle scorecard: each objective and key result with its baseline, target, final value, live progress, final and suggested score, note and retro notes, and averages per objective type and per team (no figure per person). history=true adds who changed the cycle's status, name or dates.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Optional | Performance cycle ID. |
name |
string | Optional | Performance cycle name (partial match). Used if id is not provided. If more than one cycle matches, the tool returns an error listing them and does nothing — use id to target exactly one. |
scorecard |
boolean | Optional | Add the scorecard: company and team objectives, and personal ones with include_personal, 50 per page. |
include_personal |
boolean | Optional | With scorecard: also list personal objectives. |
page |
integer | Optional | With scorecard: page of objectives, from 1. |
history |
boolean | Optional | Add the cycle's change history. |
Create a new OKR performance cycle. Requires a name, start date and end date. Optionally set the cycle type (default quarterly). Admin only.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | Required | Name of the performance cycle, e.g. "Q3 2026". |
cycle_type |
string | Optional | Cycle type: annually, semiannually, quarterly, monthly, biweekly, weekly. Default quarterly. |
started_at |
string | Required | Cycle start date in Y-m-d format (required, e.g. "2026-07-01"). |
finished_at |
string | Required | Cycle end date in Y-m-d format (required, e.g. "2026-09-30"). |
checkin_cadence |
string | Optional | How often key results in the cycle are checked in: weekly (the default), biweekly (fortnights from the week the cycle starts) or monthly. Missing check-ins and reminders follow it. |
Update an existing performance cycle by ID. Only provided fields are updated. Admin only. status moves the cycle through planning, active, scoring and closed, in a call of its own: scoring opens final scores on its key results; closed freezes the objective scores and locks its objectives, key results and check-ins everywhere. Closing needs every key result scored and checked in within two weeks; dry_run=true lists what is missing, and fill_missing=true gives unscored key results their suggested score. Setting scoring reopens a closed cycle.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | Performance cycle ID to update. |
name |
string | Optional | New name for the cycle. |
cycle_type |
string | Optional | New cycle type: annually, semiannually, quarterly, monthly, biweekly, weekly. |
started_at |
string | Optional | New start date in Y-m-d format. |
finished_at |
string | Optional | New end date in Y-m-d format. |
checkin_cadence |
string | Optional | How often key results in the cycle are checked in: weekly (the default), biweekly (fortnights from the week the cycle starts) or monthly. Missing check-ins and reminders follow it. |
status |
string | Optional | Cycle status, set by admins: planning, active, scoring or closed (unset reads as active). scoring opens final scores on its key results. closed freezes the objective scores and locks its objectives, key results and check-ins everywhere, the web included; it needs every key result scored and checked in within the last two weeks, unless fill_missing=true stores the suggested score for the unscored ones. dry_run=true with closed lists what is missing. A closed cycle reopens by setting scoring. |
dry_run |
boolean | Optional | With status: report what the change would do (with closed, what is missing) and change nothing. |
fill_missing |
boolean | Optional | With status closed: give every unscored key result its suggested score (live progress rounded to 0.1), marked automatic, and close. |
OKR Objectives
List OKR objectives in your workspace. Filter by type (personal, company, team), performance cycle, leader, or search by title. Members see every company and team objective, their own personal objectives and those of their direct reports. Returns 50 objectives per page by default; the result says the total and the next page. archived=true lists the archived objectives instead.
| Parameter | Type | Required | Description |
|---|---|---|---|
objective_type |
string | Optional | Filter by objective type. Omit to list every type the caller may read. |
performance_cycle_id |
integer | Optional | Filter objectives belonging to a specific performance cycle. |
search |
string | Optional | Search objectives by title (partial match). |
leader_id |
integer | Optional | Only records led by this user ID, as returned by list_employees or get_current_user. Pass 0 to list the ones with no leader. |
archived |
boolean | Optional | true lists archived objectives instead, newest first, with archived_at and archived_by. restore_objective brings one back. |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get a single OKR objective by ID, including its key results, progress score, final score and retro notes. history=true adds every change to it with who made it, when and how. Members can read company and team objectives, their own personal objectives and those of their direct reports.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The objective ID. |
history |
boolean | Optional | Add its change history: title, weight, owner, leader, alignment, cycle and score changes, archive and restore, newest first. |
Create a new OKR objective. Requires a title and objective type (personal, company, or team). Optionally link to a performance cycle and set start/end dates. Members create personal objectives; team and company objectives follow the workspace's OKR settings, as in the member portal.
| Parameter | Type | Required | Description |
|---|---|---|---|
title |
string | Required | The objective title. |
objective_type |
string | Required | Scope of the objective. "personal" = the caller's own objective. "company" = org-wide. "team" = department/team. Team and company need the matching permission in the workspace's OKR settings. |
team_id |
integer | Optional | Team (department) ID for a team objective. Defaults to the caller's own department. |
description |
string | Optional | Detailed description of the objective. |
performance_cycle_id |
integer | Optional | ID of the performance cycle this objective belongs to. |
started_at |
string | Optional | Start date in Y-m-d format. |
finished_at |
string | Optional | End date in Y-m-d format. |
weight |
number | Optional | Weight of this objective (1–100). Default 1. Used for weighted scoring. A value outside 1–100 is refused. |
status |
string | Optional | draft creates it as a draft: seen only by its owner, its leader and admins until it is approved (update_objective status). |
leader_id |
integer | Optional | User ID of the leader (owner), as returned by list_employees or get_current_user. Pass 0 to remove the leader. Admins can set it on any objective; members only on their own personal objectives. |
collaborator_ids |
array | Optional | User IDs of the collaborators (contributors), as returned by list_employees. Replaces the current list; pass an empty array to remove all. Admins can set it on any objective; members only on their own personal objectives. |
parent_objective_id |
integer | Optional | ID of the parent objective this objective aligns to. Team objectives align to company or parent-team objectives; personal objectives to company, own-department or other-department objectives. Pass 0 to remove the alignment. Company objectives cannot have a parent. |
parent_key_result_id |
integer | Optional | ID of the parent key result this objective contributes to, instead of a parent objective. Same rules as parent_objective_id. Pass 0 to remove the alignment. The key result then takes its progress from the objectives aligned to it instead of its own value, so a new objective with no progress yet can take it to 0%; the result warns with the before and after. Its own value comes back when no objective is aligned to it. |
Update an existing OKR objective by ID, including its leader (owner) and collaborators. Only provided fields are updated. retro writes the objective's retro notes once its cycle is being scored. dry_run=true returns the objective as the update would leave it, with the progress an alignment change would move, and saves nothing. Members can update their own personal objectives and objectives they lead or collaborate on, as in the web app.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The objective ID to update. |
title |
string | Optional | New title for the objective. |
description |
string | Optional | New description. |
performance_cycle_id |
integer | Optional | New performance cycle ID. |
started_at |
string | Optional | New start date in Y-m-d format. |
finished_at |
string | Optional | New end date in Y-m-d format. |
weight |
number | Optional | New weight (1–100). A value outside 1–100 is refused. |
leader_id |
integer | Optional | User ID of the leader (owner), as returned by list_employees or get_current_user. Pass 0 to remove the leader. Admins can set it on any objective; members only on their own personal objectives. |
collaborator_ids |
array | Optional | User IDs of the collaborators (contributors), as returned by list_employees. Replaces the current list; pass an empty array to remove all. Admins can set it on any objective; members only on their own personal objectives. |
parent_objective_id |
integer | Optional | ID of the parent objective this objective aligns to. Team objectives align to company or parent-team objectives; personal objectives to company, own-department or other-department objectives. Pass 0 to remove the alignment. Company objectives cannot have a parent. |
parent_key_result_id |
integer | Optional | ID of the parent key result this objective contributes to, instead of a parent objective. Same rules as parent_objective_id. Pass 0 to remove the alignment. The key result then takes its progress from the objectives aligned to it instead of its own value, so a new objective with no progress yet can take it to 0%; the result warns with the before and after. Its own value comes back when no objective is aligned to it. |
dry_run |
boolean | Optional | true shows the objective as the update would leave it and the progress it would move, and changes nothing. |
status |
string | Optional | Objective status: draft (seen only by its owner, its leader and admins, and left out of reminders, alignment, the health check and scorecards), approved or committed (unset reads as committed). Leaving draft is an approval, by an admin or the owner or leader of the objective it is aligned to. |
retro |
object | Optional | Retro notes: an object with any of went_well, didnt_go_well, learned and carry_over, each text ("" clears it). Written while the cycle is in scoring or closed; returned in the scorecard. |
Archive an OKR objective by ID, where restore_objective can bring it back. An objective with key results, or tasks linked to them, needs cascade=true: its key results are archived with it, and the tasks stay in their projects, unlinked. Objectives aligned to it or its key results are unlinked, and the progress it fed is recalculated. dry_run=true shows all of that first and changes nothing. permanent=true removes an already archived objective for good (admins only). Admins and the objective's owner or leader can archive it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The objective ID. |
cascade |
boolean | Optional | Optional. True archives the objective's key results with it. Required when it has key results or tasks linked to them; those tasks stay in their projects, unlinked. |
dry_run |
boolean | Optional | Optional. True shows what would be archived, unlinked or removed, and how progress would change, and changes nothing. |
permanent |
boolean | Optional | Optional. True removes an item that is already archived, for good, with what was archived with it. Admins only; archive it first. |
Bring back an archived objective by ID, with the key results archived with it, its collaborators, check-ins and comments. Tasks and aligned objectives it unlinked are linked back unless they have been linked elsewhere since, and progress is recalculated. Admins and the objective's owner or leader can restore it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The archived objective ID. |
Update up to 50 objectives and key results in one call, all saved or none: for example the weights or leaders of every key result under an objective. Every item is checked first, and one bad item refuses the whole batch and says which. Objectives take title, description, weight and leader_id; key results also take initial_value, target_value and unit_value. Values and confidence are not taken: record those with create_checkin. The result shows each objective's progress and weight total before and after; dry_run=true shows that first and changes nothing.
| Parameter | Type | Required | Description |
|---|---|---|---|
objectives |
array | Optional | Objectives to update. |
key_results |
array | Optional | Key results to update. |
dry_run |
boolean | Optional | true shows what would change and the new progress and weight totals, and saves nothing. |
Carry an objective over into another performance cycle, with all its key results or the ones in key_result_ids. The copy takes the owner, leader, collaborators, weight and description, and each key result's leader, contributors, weight, unit and target. Progress starts again from the old starting value, or with baseline_from_current from where each key result ended. Check-ins, comments, tasks and alignment stay with the original; the result says what to re-align. The copy links back to the original, and a second copy into the same cycle is refused. dry_run=true previews it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The objective to copy. |
target_cycle_id |
integer | Required | The performance cycle to copy it into (list_performance_cycles). |
key_result_ids |
array | Optional | Only these key results. Default: all of them. |
baseline_from_current |
boolean | Optional | Start each copied key result from the value it ended at, instead of its old starting value. |
carry_over_note |
string | Optional | Why it carries over, put at the top of the copy's description. |
dry_run |
boolean | Optional | Show what would be created and change nothing. |
Key Results
List key results for an objective, a performance cycle, or every key result a person leads. Give an objective_id, a cycle_id or a leader_id, in any combination. Finds key results at risk with confidence_max, status and stale_weeks, and archived ones with archived=true. Returns current progress, target value and completion percentage, 50 per page by default.
| Parameter | Type | Required | Description |
|---|---|---|---|
objective_id |
integer | Optional | The objective ID to list key results for. |
cycle_id |
integer | Optional | Only key results of objectives in this performance cycle (list_performance_cycles), across every objective you can read. |
leader_id |
integer | Optional | Only records led by this user ID, as returned by list_employees or get_current_user. Pass 0 to list the ones with no leader. Without objective_id, lists them across every objective you can read. |
confidence_max |
integer | Optional | GET: only key results whose confidence is at most this (1-10). The web calls 1 not started and 2-3 at risk, so 3 lists both; key results with no confidence yet (0) are left out. |
status |
string | Optional | GET: only key results whose latest check-in has this status. |
stale_weeks |
integer | Optional | GET: only key results with no check-in for at least this many weeks (1-52), including ones never checked in. |
archived |
boolean | Optional | true lists archived key results instead, with archived_at and archived_by, including those archived with their objective. restore_key_result brings one back. |
page |
integer | Optional | Page of a list, starting at 1. Default 1. A list result gives next_page while more rows remain. |
per_page |
integer | Optional | Rows per page of a list, 1-100. Default 50. |
Get a single key result by ID, including current progress, accomplish rate, final score, contributors and the parent objective summary. history=true adds every change to it with who made it, when and how.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The key result ID. |
history |
boolean | Optional | Add its change history: target, weight, leader, objective and score changes, archive and restore, newest first. |
Add a new key result to an existing objective. Requires objective_id and title. Set initial, target, and unit values to enable automatic progress tracking.
| Parameter | Type | Required | Description |
|---|---|---|---|
objective_id |
integer | Required | The objective this key result belongs to. |
title |
string | Required | The key result title/description. |
description |
string | Optional | Additional details about the key result. |
initial_value |
number | Optional | Starting value (default 0). Up to 4 decimal places. |
target_value |
number | Optional | Target value to achieve (default 100). Up to 4 decimal places. |
current_value |
number | Optional | Current value. Defaults to initial_value. Up to 4 decimal places. |
unit_value |
string | Optional | Unit label, e.g. "%" or "deals" or "$". Defaults to "%". |
weight |
number | Optional | Weight of this KR within the objective (1–100). Default 100. A value outside 1–100 is refused. |
confidence |
integer | Optional | Confidence score 0–10 indicating likelihood of achieving the target. A value outside 0–10 is refused. |
leader_id |
integer | Optional | User ID of the leader (owner), as returned by list_employees or get_current_user. Pass 0 to remove the leader. Admins can set it on any objective; members only on their own personal objectives. |
indicator_ids |
array | Optional | IDs of the KPIs (indicators) to associate with the key result, as the web form's KPI picker does. Replaces the current list; an empty list removes them all. Members can link the KPIs they own or have access to. Linking does not change the key result's value. |
contributor_ids |
array | Optional | User IDs of the people who help with this key result (list_employees). Informational: it gives no rights, which come from the objective's collaborators. Replaces the list; an empty list removes them all. |
measurement_type |
string | Optional | How progress is measured: omit (or "") for start to target, whichever way it runs; "maintain" keeps the value within threshold_min..threshold_max, 100% inside the range and 0% outside it. A milestone is a key result from 0 to 1, set to 1 when done. |
threshold_min |
number | Optional | With measurement_type maintain: the lowest acceptable value. |
threshold_max |
number | Optional | With measurement_type maintain: the highest acceptable value. |
Update a key result by ID: title, target, weight, confidence and leader (owner), or record progress by updating current_value. An update that sets current_value, confidence, remarks, status, blockers or source saves today's check-in; a title, target, weight or leader change alone does not. create_checkin records one with only the check-in fields. current_value is refused on a key result whose progress comes from aligned objectives. In a cycle being scored, final_score and score_note record the end-of-cycle score; contributor_ids names who helps (no rights). move_to_objective_id, sent on its own, moves the key result to another objective in its cycle with its check-ins, comments and tasks. dry_run=true shows the result and the progress it would move without saving. Members can update KRs on objectives they own, lead or collaborate on, and KRs they lead, as in the web app.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The key result ID to update. |
title |
string | Optional | New title. |
description |
string | Optional | New description. |
current_value |
number | Optional | Updated current value, the primary way to record progress. Up to 4 decimal places. Refused while the value comes from a KPI. |
initial_value |
number | Optional | Updated starting value. Up to 4 decimal places. |
target_value |
number | Optional | Updated target value. Up to 4 decimal places. |
measurement_type |
string | Optional | How progress is measured: omit (or "") for start to target, whichever way it runs; "maintain" keeps the value within threshold_min..threshold_max, 100% inside the range and 0% outside it. A milestone is a key result from 0 to 1, set to 1 when done. |
threshold_min |
number | null | Optional | With measurement_type maintain: the lowest acceptable value. |
threshold_max |
number | null | Optional | With measurement_type maintain: the highest acceptable value. |
progress_source |
string | Optional | PUT: "indicator" makes the key result take its value from one KPI (indicator_id): the KPI's own total (sum, average, max, min or count, as it is set up) of its records dated within the cycle. Each new or changed record updates the value and today's check-in, noted with the KPI. "own" ends it. Refused while objectives are aligned to the key result. |
indicator_id |
integer | Optional | PUT with progress_source=indicator: the KPI (indicators) the value comes from. It is linked to the key result too. |
unit_value |
string | Optional | Updated unit label. |
weight |
number | Optional | Updated weight (1–100). A value outside 1–100 is refused. |
confidence |
integer | Optional | Updated confidence score (0–10). A value outside 0–10 is refused. |
remarks |
string | Optional | Check-in note for this update, saved on today's check-in. |
status |
string | Optional | The owner's status on today's check-in, separate from confidence. |
blockers |
string | Optional | What is blocking progress, saved on today's check-in. |
source |
string | Optional | Where the current value came from (a report, a system), saved on today's check-in. |
leader_id |
integer | Optional | User ID of the leader (owner), as returned by list_employees or get_current_user. Pass 0 to remove the leader. Admins can set it on any objective; members only on their own personal objectives. |
indicator_ids |
array | Optional | IDs of the KPIs (indicators) to associate with the key result, as the web form's KPI picker does. Replaces the current list; an empty list removes them all. Members can link the KPIs they own or have access to. Linking does not change the key result's value. |
final_score |
number | null | Optional | Final score from 0.0 to 1.0 in steps of 0.1, kept apart from live progress. Set while the cycle is in scoring, by the key result's leader, the objective's owner or leader, or an admin. null clears it. |
score_note |
string | Optional | Why the key result got its final score. Same rules as final_score. |
contributor_ids |
array | Optional | User IDs of the people who help with this key result (list_employees). Informational: it gives no rights, which come from the objective's collaborators. Replaces the list; an empty list removes them all. |
move_to_objective_id |
integer | Optional | ID of the objective to move the key result to, in the same cycle. Its check-ins, comments, tasks and the objectives aligned to it go with it, and both objectives are recalculated. Needs edit rights on both objectives. Send it on its own, with dry_run=true to preview the progress change. |
dry_run |
boolean | Optional | true returns the key result as the update or move would leave it, with the progress it would move in the message, and saves nothing. |
Archive a key result by ID, where restore_key_result can bring it back with its check-ins and comments. Tasks linked to it stay in their projects, unlinked, and objectives aligned to it are unlinked. Its objective's progress, key result count and weight total are recalculated. dry_run=true shows all of that first and changes nothing. permanent=true removes an already archived key result for good (admins only). Admins and the objective's owner or leader can archive it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The key result ID. |
dry_run |
boolean | Optional | Optional. True shows what would be archived, unlinked or removed, and how progress would change, and changes nothing. |
permanent |
boolean | Optional | Optional. True removes an item that is already archived, for good, with what was archived with it. Admins only; archive it first. |
Bring back an archived key result by ID, with its check-ins and comments. Tasks and aligned objectives it unlinked are linked back unless they have been linked elsewhere since, and its objective's progress is recalculated. A key result archived with its objective comes back with restore_objective instead. Admins and the objective's owner or leader can restore it.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The archived key result ID. |
Turn a key result that is really an initiative into a task working toward another key result in the same cycle, so it stops counting toward its objective's key results and weight total. The task takes the key result's title and description, goes to its leader unless assigned_to names someone else, is due at the end of the cycle, and is created completed when the key result was at 100%. The key result's own tasks move to the target, and the key result is archived with its check-ins and comments; restore_key_result brings it back (the task stays). Refused while objectives are aligned to it. dry_run=true shows all of that first and changes nothing. Admins and the objective's owner or leader can convert.
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
integer | Required | The key result to convert. |
target_key_result_id |
integer | Required | The key result the new task works toward, in the same cycle and one you can edit. |
assigned_to |
string | Optional | Who the task is assigned to: a user ID, name or email. Defaults to the key result's leader; required when it has none. |
due_date |
string | Optional | Due date (Y-m-d). Defaults to the end of the cycle. |
project_id |
integer | Optional | Project to put the task in. Optional. |
dry_run |
boolean | Optional | true shows the task that would be created and what would move or be archived, and changes nothing. |
Common issues and how to resolve them.
FlowyTeam does not appear in my assistant's connector list
https://flowyteam.com/api/mcp/cloud/rpc. The same endpoint serves Claude Desktop, Claude web and mobile, and ChatGPT.
The sign-in page does not load or the authorization fails
The assistant says it is not connected or asks me to authorize again
A tool returns "permission denied" or an empty result
I use Claude Code in the terminal, not Claude Desktop
Which data can the connector reach?
Connect FlowyTeam to your AI assistant
Manage your whole workspace in natural language. Free personal tier available.
Create a free account Using the terminal? Claude Code (CLI) docs