Bring-your-own MCP
Coro’s executor (@coro-ai/llm-anthropic) receives multiple MCP servers concurrently:
| Source | Behaviour |
|---|---|
In-process coro server | SCM, tracker, log, lifecycle, observability (loki_*, tempo_*), self-improvement — always present. |
| Plugin-provided MCPs | SCM plugins expose provider-native namespaces (mcp__github__*, …) when manifests declare them. |
| BYO user servers | Defined under mcpServers in config — edited in the dashboard. |
The merge helper collectUserMcpServers() documents invariants (packages/runner/src/jobs/runner.ts): reserved IDs coro / a5 collide with internal servers and are rejected with warnings.
Dashboard setup (recommended)
Open Settings → Extensions → MCP servers:

- Paste or edit your
mcpServersJSON in the text area (live validation shows parse errors before save). - Toggle Inherit Claude Code MCP servers to merge definitions from Claude Code config files (
~/.claude.json,~/.claude/settings.json). - Click Save all changes.
Use Refresh under the Claude Code panel to preview inherited servers before enabling inheritance.
Defining servers
Entries are keyed by alphanumeric ids (become mcp__<id>__toolName prefixes in prompts). Supported transport shapes mirror Claude Code definitions:
stdio bridge
{ "mcpServers": { "frigate": { "type": "stdio", "command": "/usr/local/bin/frigate-mcp", "args": ["--config", "${HOME}/.frigate.toml"], "env": {"FRIGATE_API_KEY": "{{SECRET}}"} } }}HTTP / SSE
{ "mcpServers": { "payments": { "type": "http", "url": "https://mcp.payments.example.com/mcp", "headers": { "Authorization": "Bearer ${PAYMENTS_MCP_TOKEN}" } }, "search": { "type": "sse", "url": "https://search.company.net/sse" } }}Both optional arrays allowedTools / disallowedTools scope what the Claude Agent SDK exposes—use them to avoid flooding prompts with seldom-used MCP verbs.
Toggle individual servers via "enabled": false without deleting the block entirely.
Inherit Claude Code entries — inheritClaudeCodeMcps
Enable the toggle on the MCP servers settings page (writes inheritClaudeCodeMcps": true to config):
- Inherited servers load first (
Object.assign). - Explicit
mcpServersfrom the dashboard editor override colliding IDs last.
This preserves operator control: mute a noisy Claude Code MCP by masking it locally with "enabled": false.
Security reminder: Claude Code bundles may originate from unmanaged machines — treat inheritance as convenience, not policy.
Guardrails interplay
Broad MCP surfaces widen blast radius (read_file style tools inadvertently touching secrets directories). Align with /guides/configure-guardrails/ (tool.before script checks) plus organisational reviews before enabling destructive remote MCP adapters.
Related reading
- /guides/claude-code-auth/ — BYO MCP is often configured alongside auth setup.
- /guides/team-setup/ — mandate allowed server lists centrally if compliance demands.
- /reference/configuration/ —
mcpServersandinheritClaudeCodeMcpskeys.