Documentation

Coroid as an MCP server

Connect Hermes, Codex, Claude Code or another MCP client, and work with Coroid through governed tools.

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/mcp

The 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.

CapabilityOn coroid.ai
OAuth sign-inOn
Read toolsOn
Personal access tokensOn
Tools that create, change, run or deliver workOn
Administration tools, including organization settingsNot 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 coroid

With an access token instead:

hermes mcp add coroid --url https://api.coroid.ai/mcp --auth header

Give 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.delivery

With 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_TOKEN

Claude Code

claude mcp add --transport http --scope user coroid https://api.coroid.ai/mcp
/mcp

Run 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/mcp

Other 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.

ScopeWhat it unlocksLowest role
mcp.readReading projects, tasks, plans, sprints, reports, dependencies, capacity, agent runs, factory lanes, promotions and releasesReviewer
mcp.work.writeCreating and changing tasks, plans, sprints, dependencies and reportsMember
mcp.executeStarting, stopping, retrying, pausing, resuming and cancelling workMember
mcp.deliveryApproving plans, closing sprints, promotions, lane validation and releasesMember
mcp.projects.adminCreating, updating, archiving and restoring projects, and release versioningAdmin
mcp.schedules.adminReading, creating, updating, triggering and deleting schedulesAdmin
mcp.integrations.adminReading, testing, switching on or off and deleting integrationsAdmin
mcp.secrets.writeCreating integrations that hold credentialsOwner
mcp.organization.adminMembers, invitations, the organization profile and organization settingsOwner
mcp.billing.readReserved. No tools use it yet—
mcp.billing.writeReserved. No tools use it yetOwner

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:

ApprovalWhat happens
NoneThe tool runs at once
PolicyThe call waits for approval, unless an automation policy covers it
AlwaysThe 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.

AreaTools
Projectslist_projects, get_project, get_project_dependencies, list_project_branches
Taskslist_tasks, get_task, get_workflow_status, get_execution_status, check_task_can_start
Planslist_plans, get_plan, get_plan_progress, list_plan_tasks
Sprintslist_sprints, get_sprint, get_sprint_status
Dependenciesanalyze_dependencies, get_dependency_graph, get_global_dependency_graph, get_cross_project_blockers
Reportslist_reports, get_report, export_report, explain_report_execution, list_report_folders, list_report_subscriptions, list_report_templates
Capacity and activityget_capacity_dashboard, get_queue_eta, get_mission_control_activity, get_global_execution_stats, get_global_execution_actions, list_global_execution_runs
Agent runslist_agent_executions, get_agent_execution, get_agent_execution_state, get_execution_conversation, list_tool_executions
Factory lanes and promotionslist_factory_lanes, get_factory_lane, list_factory_lane_tasks, get_factory_lane_gate_context, list_promotions, get_promotion
Code historyexplain_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.

AreaToolsApproval
Taskscreate_task, update_taskNone
Planscreate_plan, update_planNone
Plansdelete_planAlways
Sprintscreate_sprint, plan_sprint, add_task_to_sprintNone
Sprintsremove_task_from_sprintAlways
Dependenciescreate_dependencyNone
Reportscreate_report, update_report, create_report_folder, update_report_folder, create_report_subscription, update_report_subscriptionNone
Reportsbatch_update_reports, delete_report, delete_report_folder, delete_report_subscriptionAlways

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.

AreaToolsApproval
Tasksstart_task_execution, retry_task_executionPolicy
Tasksstop_task_executionAlways
Plansstart_planning_workflow, execute_plan, retry_plan_task_integrationPolicy
Planscancel_planAlways
Sprintsstart_sprintPolicy
Reportspause_report, resume_report, cancel_report, retry_report_generationPolicy
Factorystart_global_execution, pause_global_execution, resume_global_execution, pause_factory_lane, resume_factory_lanePolicy
Factorycancel_global_execution, set_agent_execution_stateAlways

Delivery

These tools need the Member role and this scope: mcp.delivery. Releases have their own section below.

ToolsApproval
approve_plan, close_sprint, create_promotion, approve_promotion, request_promotion_changes, validate_factory_lanePolicy
force_merge_promotionAlways

Administration

These tools change how the organization and its projects are set up.

ToolsScopeLowest roleApproval
create_project, update_project, restore_projectmcp.projects.adminAdminNone
archive_projectmcp.projects.adminAdminAlways
list_schedules, get_schedule, create_schedule, update_schedulemcp.schedules.adminAdminNone
trigger_schedulemcp.schedules.adminAdminPolicy
delete_schedulemcp.schedules.adminAdminAlways
list_integrations, get_integrationmcp.integrations.adminAdminNone
test_integrationmcp.integrations.adminAdminPolicy
set_integration_status, delete_integrationmcp.integrations.adminAdminAlways
create_integrationmcp.secrets.writeOwnerAlways
list_organization_members, list_organization_invitationsmcp.organization.adminOwnerNone
invite_organization_member, update_organization_member_role, remove_organization_member, revoke_organization_invitation, update_organizationmcp.organization.adminOwnerAlways

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.

ToolWhat it doesApproval
describe_organization_settings_schemaReturns the settings format, its sections and mapping hintsNone
export_organization_settingsExports the current settings, with secrets as placeholdersNone
preview_organization_settings_importShows what a bundle would change, without writing anythingNone
apply_organization_settings_importApplies a bundle, merged into the current settings by default or replacing themAlways

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:

ToolScopeApproval
list_releases, get_release, list_release_commits, preview_release, get_release_settings, list_release_pull_requestsmcp.readNone
create_release, update_release, run_release_checks, draft_release_notesmcp.deliveryNone
approve_release, request_release_deployment, bundle_release_pull_requestsmcp.deliveryAlways
update_release_versioningmcp.projects.adminNone

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:

ToolWhat it does
get_operationReturns an operation's status and result
wait_for_operationWaits up to 25 seconds for an operation to change
cancel_operationCancels an operation that has not started
get_approvalReturns an approval's status and result

The server also provides these resources:

ResourceContents
coroid://contextWho the connection acts as, with its role, scopes and projects
coroid://capabilitiesThe 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.