workspace
workspace.create
Create Workspace
Effects: write
Create a new team workspace owned by the calling user. Returns its id and slug — pass either to workspace.switch to start working inside it. slug is derived from name when omitted. NOT idempotent: calling twice with the same name yields two workspaces (the second gets a -1 slug suffix), so check workspace.list first if the workspace may already exist. A user may own at most 10 team workspaces.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
description | string | no | Optional workspace description. |
name | string | yes | Workspace display name, e.g. 'TUI BLUE'. |
slug | string | no | URL-friendly slug: lowercase letters, digits and single dashes between them (e.g. 'tui-blue'), max 100 chars. Omit to derive one from name (lowercased, spaces to dashes, uniqueness suffix added when taken). An explicit slug is NOT auto-uniquified — a collision is an error. |
workspace.current
Current Workspace
Effects: read
Return the workspace this MCP API key is currently routed to, with the caller's role inside it. Use this to confirm context before/after workspace.switch.
Arguments
No arguments.
workspace.desktops
Connected Desktops
Effects: read
List the Claude Code sessions currently connected to this workspace over a channel. Each one can be handed a task by name. Use this before assigning work to a claude_channels agent when more than one session may be open, so the task goes to the machine you mean.
Arguments
No arguments.
workspace.invite
Invite To Workspace
Effects: write
Invite a person to the active workspace (or one named by workspace_id) by email address. Requires owner or admin role. The backend emails them a join link and the invite expires in 7 days; the same link is returned as invite_url so you can pass it on yourself. Inviting an address that already has an account works too — they see the invitation in the app once logged in. Use workspace.invites to see what is still pending.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
email | string | yes | Email address to invite. |
role | string | no | Role to grant on acceptance. OMIT to invite as a regular member. 'admin' additionally lets them manage members and workspace settings. (one of member, admin) |
workspace_id | integer | no | Numeric workspace id to invite into. Omit to target the currently-routed workspace (workspace.current). |
workspace.invite_revoke
Revoke Workspace Invite
Effects: delete
Revoke a pending invitation to the active workspace (or one named by workspace_id) so its link stops working. Requires owner or admin role. Get the invite id from workspace.invites. An invite that is already accepted, expired or revoked answers not_found.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
invite_id | integer | yes | Id of the pending invite, from workspace.invites. |
workspace_id | integer | no | Numeric workspace the invite belongs to. Omit to target the currently-routed workspace (workspace.current). |
workspace.invites
List Workspace Invites
Effects: read
List the invitations to the active workspace (or one named by workspace_id) that are still pending — who was invited, as what role, and when the invite expires. Requires owner or admin role. Join links are not returned; revoke with workspace.invite_revoke or re-send with workspace.invite.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
workspace_id | integer | no | Numeric workspace id to read. Omit to target the currently-routed workspace (workspace.current). |
workspace.list
List Workspaces
Effects: read
List every workspace the caller is a member of, with is_current marking the workspace this MCP key is currently routed to. Pair with workspace.switch to change the active workspace without reconnecting.
Arguments
No arguments.
workspace.member_remove
Remove Workspace Member
Effects: delete
Remove a person from the active workspace (or one named by workspace_id), and revoke the channel shares they had granted into it. Requires owner or admin role. Name them by email, username or numeric user id — workspace.members lists them. The workspace owner cannot be removed.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
member | string | yes | Who to remove: a member's email, username, or numeric user id. Call workspace.members to see who is in the workspace. |
workspace_id | integer | no | Numeric workspace id. Omit to target the currently-routed workspace (workspace.current). |
workspace.member_update
Update Workspace Member
Effects: write
Change a member's role in the active workspace (or one named by workspace_id). Requires owner or admin role. Name the person by email, username or numeric user id — workspace.members lists them. Promoting to 'admin' also grants member management; ownership is moved separately and cannot be set here.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
member | string | yes | Who to change: a member's email, username, or numeric user id. Call workspace.members to see who is in the workspace. |
role | string | yes | New role for this member. (one of member, admin) |
workspace_id | integer | no | Numeric workspace id. Omit to target the currently-routed workspace (workspace.current). |
workspace.members
Workspace Members
Effects: read
List the members of the current workspace with their roles, so you know who can be assigned a task. Set include_agents to also list the workspace's AI agents, which can hold tasks too.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
include_agents | boolean | no | Also list this workspace's AI agents (default: true). Agents can be task assignees just like people. |
workspace.switch
Switch Workspace
Effects: write
Switch the workspace THIS MCP session works in. Pass exactly one of workspace_id or slug (find them via workspace.list). Takes effect on the very next tool call — no MCP reconnect, no new API key. The switch is scoped to the current MCP session (the response says scope: session): other sessions using the same API key are not affected, and the key's own workspace stays the default for new sessions. A client that sends no MCP session id CANNOT switch — the call is refused rather than re-pointing the API key, because that would move every session that starts on the key from then on. Use a key belonging to the target workspace instead. Sequential checkpoint: do not parallelize tool calls across a switch — calls already in flight when the switch commits will run against the previous workspace. Keys created with workspace_locked=true refuse to switch in either scope (they are pinned to their workspace); use a key belonging to the target workspace instead.
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
slug | string | no | Workspace slug to switch to. Resolved within the caller's memberships, so cross-tenant slug collisions are not possible. Mutually exclusive with workspace_id. |
workspace_id | integer | no | Numeric workspace id to switch to. Mutually exclusive with slug. |
workspace.update
Update Workspace
Effects: write
Edit the active workspace (or one named by workspace_id): its name, description, logo_url, and/or settings. Requires ADMIN role in that workspace. settings is MERGED, not replaced — send only the keys you want to change (e.g. {"translation_glossary": "..."} or {"translation_tts_provider": "cartesia"}); other keys are left intact. Omit workspace_id to target the workspace this MCP key is currently routed to (see workspace.current).
Arguments
| Argument | Type | Required | Description |
|---|---|---|---|
description | string | no | New workspace description. Omit to leave unchanged. |
logo_url | string | no | New workspace logo URL. Omit to leave unchanged. |
name | string | no | New workspace name. Omit to leave unchanged. |
settings | object | no | Partial settings object, MERGED into the existing workspace.settings JSONB (PATCH semantics). Only the keys you send change. Common keys: translation_glossary, translation_mt_provider, translation_tts_provider, translation_tts_voice, translation_languages, translation_default_lang. |
workspace_id | integer | no | Numeric workspace id to update. Omit to target the currently-routed workspace (workspace.current). |