Coroid exposes a remote Model Context Protocol (MCP) server. An external assistant or agent, such as Hermes, Codex or Claude Code, can use it to work with Coroid through the same governed tool registry the chat assistant uses.
Configure under Settings → Connections → Coroid MCP server, which covers Overview, Client setup, Access tokens, Approvals and Automation policies.
The endpoint
The MCP server runs on the API gateway, at this address:
https://api.coroid.ai/mcpThe transport is stateless Streamable HTTP. Authenticate with OAuth or a personal access token.
What is switched on
Coroid switches MCP capabilities on in stages, for every organization at once.
| Capability | On coroid.ai |
|---|---|
| OAuth sign-in | On |
| Read tools | On |
| Personal access tokens | On |
| Tools that create, change, run or deliver work | On |
| Administration tools, including organization settings | Not yet |
Until a capability is on, clients do not see its tools and Coroid refuses calls to them. The rest of this page describes the full set.
Connect a client
Use OAuth when your client supports it. You approve the connection in your browser and can revoke it at any time. Access tokens last 15 minutes and refresh tokens 30 days, and each refresh replaces the refresh token.
The client asks for scopes when it connects. Before you approve, you see the scopes and choose whether the client can reach every project or only some. A client that asks for no scopes gets read access only, so ask for the scopes you need, as the Codex example does.
Hermes
hermes mcp add coroid --url https://api.coroid.ai/mcp --auth oauth
hermes mcp login coroid
hermes mcp test coroidWith an access token instead:
hermes mcp add coroid --url https://api.coroid.ai/mcp --auth headerGive Hermes the token when it asks for one. Keep it in Hermes' credential store rather than its configuration file.
Codex
codex mcp add coroid --url https://api.coroid.ai/mcp
codex mcp login coroid --scopes mcp.read,mcp.work.write,mcp.execute,mcp.deliveryWith an access token instead:
export COROID_MCP_TOKEN="cmp_pat_…"
codex mcp add coroid --url https://api.coroid.ai/mcp --bearer-token-env-var COROID_MCP_TOKENClaude Code
claude mcp add --transport http --scope user coroid https://api.coroid.ai/mcp
/mcpRun the first command in your terminal. Then type the second in Claude Code, choose coroid and sign in in your browser.
With an access token instead:
export COROID_MCP_TOKEN="cmp_pat_…"
claude mcp add --transport http --scope user --header "Authorization: Bearer $COROID_MCP_TOKEN" coroid https://api.coroid.ai/mcpOther clients
Any client that supports remote MCP servers over Streamable HTTP can connect.
Coroid publishes OAuth metadata for the endpoint and supports dynamic client
registration with PKCE. A client without OAuth can send an access token as a
bearer token in this header: Authorization.
Before an agent changes anything, ask it to list Coroid's tools and to read
this resource: coroid://context. It shows who the agent acts as, with which
scopes and projects.
Access tokens
Tokens are created and managed under Access tokens. Like every other credential, they are shown once and never returned afterwards.
Issue one token per client rather than sharing one. Revoking a single client's access is then a contained action rather than an outage for everyone.
A token acts as the person who created it, and only a person signed in to the
portal can create one. Each token has its own scopes, expires after 30, 90 or
365 days, and reaches every project or only the projects you select. An owner
can also attach an automation policy. Every token starts with the same prefix:
cmp_pat_.
Keep a token in your client's environment or credential store. Never put it in a repository or a prompt.
Scopes and roles
A scope says what a connection may do. Your role in the organization sets the limit: a tool needs both its scope and at least its role. Coroid checks your current role on every call, so a connection never keeps rights you have lost.
| Scope | What it unlocks | Lowest role |
|---|---|---|
mcp.read | Reading projects, tasks, plans, sprints, reports, dependencies, capacity, agent runs, factory lanes, promotions and releases | Reviewer |
mcp.work.write | Creating and changing tasks, plans, sprints, dependencies and reports | Member |
mcp.execute | Starting, stopping, retrying, pausing, resuming and cancelling work | Member |
mcp.delivery | Approving plans, closing sprints, promotions, lane validation and releases | Member |
mcp.projects.admin | Creating, updating, archiving and restoring projects, and release versioning | Admin |
mcp.schedules.admin | Reading, creating, updating, triggering and deleting schedules | Admin |
mcp.integrations.admin | Reading, testing, switching on or off and deleting integrations | Admin |
mcp.secrets.write | Creating integrations that hold credentials | Owner |
mcp.organization.admin | Members, invitations, the organization profile and organization settings | Owner |
mcp.billing.read | Reserved. No tools use it yet | — |
mcp.billing.write | Reserved. No tools use it yet | Owner |
Only an admin or owner can grant a scope whose lowest role is Admin. Only an owner can grant a scope whose lowest role is Owner.
A connection limited to some projects cannot reach anything in other projects,
even through the ID of a task, plan, sprint, report or release. It cannot use
organization-wide tools either, such as these: list_plans,
get_capacity_dashboard.
Tools
Your client lists only the tools that are switched on and that your scopes and role allow. The approval column says what happens when a tool is called:
| Approval | What happens |
|---|---|
| None | The tool runs at once |
| Policy | The call waits for approval, unless an automation policy covers it |
| Always | The call always waits for an owner or administrator to approve it |
Reading
These tools need the Reviewer role and this scope: mcp.read. None of them
needs approval.
| Area | Tools |
|---|---|
| Projects | list_projects, get_project, get_project_dependencies, list_project_branches |
| Tasks | list_tasks, get_task, get_workflow_status, get_execution_status, check_task_can_start |
| Plans | list_plans, get_plan, get_plan_progress, list_plan_tasks |
| Sprints | list_sprints, get_sprint, get_sprint_status |
| Dependencies | analyze_dependencies, get_dependency_graph, get_global_dependency_graph, get_cross_project_blockers |
| Reports | list_reports, get_report, export_report, explain_report_execution, list_report_folders, list_report_subscriptions, list_report_templates |
| Capacity and activity | get_capacity_dashboard, get_queue_eta, get_mission_control_activity, get_global_execution_stats, get_global_execution_actions, list_global_execution_runs |
| Agent runs | list_agent_executions, get_agent_execution, get_agent_execution_state, get_execution_conversation, list_tool_executions |
| Factory lanes and promotions | list_factory_lanes, get_factory_lane, list_factory_lane_tasks, get_factory_lane_gate_context, list_promotions, get_promotion |
| Code history | explain_code |
For the release tools, see Releases over MCP.
Creating and changing work
These tools need the Member role and this scope: mcp.work.write.
| Area | Tools | Approval |
|---|---|---|
| Tasks | create_task, update_task | None |
| Plans | create_plan, update_plan | None |
| Plans | delete_plan | Always |
| Sprints | create_sprint, plan_sprint, add_task_to_sprint | None |
| Sprints | remove_task_from_sprint | Always |
| Dependencies | create_dependency | None |
| Reports | create_report, update_report, create_report_folder, update_report_folder, create_report_subscription, update_report_subscription | None |
| Reports | batch_update_reports, delete_report, delete_report_folder, delete_report_subscription | Always |
Work created over MCP does not go through Qualification. A plan-sized request sent to the task tool becomes a draft plan instead of a task. Plans created over MCP start as drafts.
Running work
These tools need the Member role and this scope: mcp.execute.
| Area | Tools | Approval |
|---|---|---|
| Tasks | start_task_execution, retry_task_execution | Policy |
| Tasks | stop_task_execution | Always |
| Plans | start_planning_workflow, execute_plan, retry_plan_task_integration | Policy |
| Plans | cancel_plan | Always |
| Sprints | start_sprint | Policy |
| Reports | pause_report, resume_report, cancel_report, retry_report_generation | Policy |
| Factory | start_global_execution, pause_global_execution, resume_global_execution, pause_factory_lane, resume_factory_lane | Policy |
| Factory | cancel_global_execution, set_agent_execution_state | Always |
Delivery
These tools need the Member role and this scope: mcp.delivery. Releases have
their own section below.
| Tools | Approval |
|---|---|
approve_plan, close_sprint, create_promotion, approve_promotion, request_promotion_changes, validate_factory_lane | Policy |
force_merge_promotion | Always |
Administration
These tools change how the organization and its projects are set up.
| Tools | Scope | Lowest role | Approval |
|---|---|---|---|
create_project, update_project, restore_project | mcp.projects.admin | Admin | None |
archive_project | mcp.projects.admin | Admin | Always |
list_schedules, get_schedule, create_schedule, update_schedule | mcp.schedules.admin | Admin | None |
trigger_schedule | mcp.schedules.admin | Admin | Policy |
delete_schedule | mcp.schedules.admin | Admin | Always |
list_integrations, get_integration | mcp.integrations.admin | Admin | None |
test_integration | mcp.integrations.admin | Admin | Policy |
set_integration_status, delete_integration | mcp.integrations.admin | Admin | Always |
create_integration | mcp.secrets.write | Owner | Always |
list_organization_members, list_organization_invitations | mcp.organization.admin | Owner | None |
invite_organization_member, update_organization_member_role, remove_organization_member, revoke_organization_invitation, update_organization | mcp.organization.admin | Owner | Always |
Organization settings
An agent such as Hermes can configure an organization from screenshots, files or
a description. It reads Coroid's settings format, writes what it has into a
bundle, previews the bundle and then applies it. These tools need the Owner
role and this scope: mcp.organization.admin.
| Tool | What it does | Approval |
|---|---|---|
describe_organization_settings_schema | Returns the settings format, its sections and mapping hints | None |
export_organization_settings | Exports the current settings, with secrets as placeholders | None |
preview_organization_settings_import | Shows what a bundle would change, without writing anything | None |
apply_organization_settings_import | Applies a bundle, merged into the current settings by default or replacing them | Always |
A bundle carries placeholders instead of secret values, and Coroid rejects a bundle that contains a secret. See Export and import settings.
Releases over MCP
The release tools are the same ones the chat assistant uses, and they go through the same Release API as the portal:
| Tool | Scope | Approval |
|---|---|---|
list_releases, get_release, list_release_commits, preview_release, get_release_settings, list_release_pull_requests | mcp.read | None |
create_release, update_release, run_release_checks, draft_release_notes | mcp.delivery | None |
approve_release, request_release_deployment, bundle_release_pull_requests | mcp.delivery | Always |
update_release_versioning | mcp.projects.admin | None |
create_release accepts a full commit SHA, a short SHA of a recent commit, or
latest, and leaves the version to the project's version source unless you
give one. get_release reports, per environment, the checks, the last
deployment, the version your pipeline reported and whether Coroid verified
the running version. A token limited to some projects cannot reach releases
in other projects. The Release API still applies its own approval rules, so
an approval through MCP counts exactly like one in the portal.
list_release_pull_requests returns a project's open pull requests in the
order Coroid proposes, with the reason for any it would leave out.
bundle_release_pull_requests creates a release from them: a release branch
with the pull requests merged in order and one release pull request. It pushes
a branch and opens a pull request, so it always waits for a person. Leave out
prNumbers to use Coroid's selection.
Approvals and automation policies
Approvals is a queue of actions waiting for a human. Automation policies decide what needs to be in that queue.
This is the control that matters. An external client acting on your behalf should be able to do routine things freely and consequential things only with a person agreeing. Set the policies before handing a token to anything that runs unattended.
When a call needs approval, the client gets an approval ID and a link instead of a result. An owner or administrator reviews the exact tool and arguments, then approves or rejects the call. Approving runs the call exactly as it was made, and the client cannot change it afterwards. A call that nobody approves within 10 minutes expires.
An automation policy lets an access token run tools marked Policy without waiting for approval. Only owners create policies and attach them to tokens. A policy names the exact tools, can be limited to some projects, and caps how many calls run per hour, per day and at the same time. It can also expire. Revoking a policy revokes every token attached to it. Tools marked Always are never covered by a policy.
An OAuth connection cannot carry a policy. Over OAuth, every tool marked Policy waits for approval.
Retries, operations and resources
Every tool that changes something requires this parameter: idempotencyKey.
Use a new key for each new action, and the same key when you retry one. Coroid
then returns the first result instead of acting twice. A key reused with
different arguments is refused.
A change also returns an operation that records its status and result. These four tools work for every connection:
| Tool | What it does |
|---|---|
get_operation | Returns an operation's status and result |
wait_for_operation | Waits up to 25 seconds for an operation to change |
cancel_operation | Cancels an operation that has not started |
get_approval | Returns an approval's status and result |
The server also provides these resources:
| Resource | Contents |
|---|---|
coroid://context | Who the connection acts as, with its role, scopes and projects |
coroid://capabilities | The tools this connection can use |
coroid://operations/{operationId} | One operation |
coroid://approvals/{approvalId} | One approval |
It also offers three prompts: create_and_run_task, investigate_failure,
prepare_release.
Each tool has limits per minute, per hour and per day. A call over a limit fails and says how long to wait before retrying.
What it deliberately does not expose
The tool registry is governed, and the exclusions are intentional. It provides none of these:
- a shell
- Git access
- the filesystem
- raw database access
- arbitrary internal HTTP
- Coroid's own outbound MCP administration tools
You are getting the ability to manage work — create and inspect tasks, plans, projects and releases — not a remote execution environment. An MCP client cannot use Coroid as a way to run arbitrary commands.
What it is good for
Driving Coroid from where you already work — an editor, an assistant, an internal tool — without switching to the portal. Creating a task from your terminal, or having an assistant check what is blocked, becomes a local action.