MCP tools, resources, and permission profiles
Switchyard’s MCP server makes local project operations available to Codex, Claude Code, and other MCP clients without asking them to guess Docker or shell commands. It uses stdio and connects to the ordinary Switchyard daemon over its privileged local IPC endpoint.
Install
Build or install the switchyard binary, then from a repository root run:
switchyard agent install codex --profile developswitchyard agent install claude --profile developRun only the installer matching the client you use. observe is the safer
default and has no mutation tools. Use --project PROJECT_ID one or more times
to constrain reads and mutations to explicit registered projects. A restricted
server cannot scan/register a new project, and proposal acceptance resolves the
proposal’s owner before authorization. Inspect all options with
switchyard agent install --help.
To configure another MCP client directly:
{ "type": "stdio", "command": "/absolute/path/to/switchyard", "args": [ "--data-dir", "/absolute/path/to/data", "mcp", "serve", "--transport", "stdio", "--provider", "generic", "--agent-id", "my-client", "--profile", "observe" ]}MCP owns stdout while running. Diagnostics go to stderr.
Tools
All tool names are stable and prefixed with switchyard_. Inputs reject
unknown fields through SDK-generated JSON Schemas. Identifiers are opaque;
obtain project, service, action, proposal, and operation IDs from read tools.
Observe
| Tool | Key input | Bound or behavior |
|---|---|---|
switchyard_system_info |
none | Daemon/API/schema readiness |
switchyard_projects_list |
limit |
Default 50, maximum 100 |
switchyard_project_get |
projectId |
One catalog project |
switchyard_project_status |
projectId |
Catalog + runtime + health |
switchyard_project_services |
projectId |
Maximum 100 services |
switchyard_project_logs_query |
filters, tail |
Redacted; default 100, maximum 500 |
switchyard_project_health |
projectId |
Current persisted health |
switchyard_project_health_wait |
projectId, timeoutSeconds |
Wait for healthy; maximum 30 seconds |
switchyard_project_git_status |
projectId |
Bounded structured Git facts |
switchyard_ports_list |
optional projectId, limit |
Maximum 500 facts and 100 conflicts |
switchyard_ports_suggest |
range, protocol, requestId |
At most 10,001 candidates; no reservation |
switchyard_actions_list |
projectId |
Maximum 100 accepted actions |
switchyard_operation_get |
operationId |
Durable current state |
switchyard_operation_wait |
operationId, timeoutSeconds |
Terminal-state wait; maximum 30 seconds |
switchyard_manifest_explain |
projectId |
Effective manifest and provenance |
Develop and above
switchyard_project_start, switchyard_project_stop,
switchyard_project_restart, switchyard_project_pause, and
switchyard_project_resume accept:
{ "projectId": "project-opaque-id", "serviceIds": ["api"], "requestId": "stable-request-123"}Omit serviceIds for the whole project. A targeted start includes required
native-process dependencies. Targeted Compose operations use only declared
service names. Teardown cannot be targeted.
switchyard_action_run accepts projectId, actionId, requestId, and the
explicit confirmRisk and allowOutsideRoot gates. The develop profile cannot
run a destructive action even when confirmation is supplied.
switchyard_operation_cancel accepts an operation ID and request ID. It asks
the durable coordinator to cancel and returns the updated operation.
Maintain and admin
Maintain adds switchyard_project_rebuild and
switchyard_manifest_proposal_create. Proposal creation performs deterministic
safe reads and does not execute repository code.
Admin adds switchyard_manifest_proposal_accept and
switchyard_project_teardown. Teardown accepts removeVolumes; the boolean
must be explicit and the tool is annotated destructive. Accepting a proposal
is an explicit trust transition and never happens during proposal creation.
Resources and prompts
Static resources are switchyard://system and switchyard://projects.
Project templates provide catalog, status, manifest, services, Git, ports, and
at most 50 recent redacted errors under
switchyard://projects/{projectId}/....
The server publishes four prompts:
switchyard_onboard_projectswitchyard_diagnose_projectswitchyard_start_and_verifyswitchyard_resolve_port_conflict
Prompts describe safe tool workflows; they grant no extra capability.
Typical lifecycle
- Call
switchyard_projects_listand select an opaque project ID. - Call
switchyard_project_status. - Call
switchyard_project_startwith a new stable request ID. - Call
switchyard_operation_waitwith the returned operation ID. - Call
switchyard_project_health_wait. - If unhealthy, read
switchyard_project_healthand bounded redacted logs. - To restart one declared service, call
switchyard_project_restartwith its service ID, wait for the operation, and verify health again.
Never retry a different mutation with the same request ID.
Inspector
The repository pins the smoke-test version and runs it with:
make test-mcp-inspectorThe test builds the production binary, starts an isolated daemon, invokes the MCP Inspector CLI over stdio, and validates discovery plus default destructive tool omission.