MCP Server
The MCP server (daedalus.mcp) exposes the training API as Model Context Protocol tools for external, non-Claude-Code agents. It is a FastMCP server (src/daedalus/mcp/server.py) that runs over stdio.
Each tool is a thin wrapper that delegates to daedalus.api.methods — the same METHOD_HANDLERS table the JSON-RPC API dispatches into. The tools therefore mirror the JSON-RPC methods one-for-one; there is no separate implementation to keep in sync.
Claude Code agents don't use this
Claude-Code agents reach Daedalus through the daeda CLI and the daeda-cli authoring skill instead. The MCP server exists for other agent runtimes that speak MCP. See Platform overview.
Starting the server
uv run daeda mcpThe process speaks MCP over stdio (create_server().run("stdio")), so it is launched and managed by the MCP client, not bound to a port.
No auth yet
Like the HTTP server, the MCP server has no authentication. Run it behind a trusted agent boundary only.
Tools
The tool names use underscores (e.g. catalog_list_views) and map directly to the dotted JSON-RPC method names. All tools are registered with structured_output=True.
| Tool | Args | Delegates to |
|---|---|---|
catalog_list_views | (none) | catalog.list_views |
catalog_show_view | name | catalog.show_view |
service_list | (none) | service.list |
service_show | name | service.show |
pipeline_compile | service | pipeline.compile |
runs_materialize_partition | service, partition | runs.materialize_partition |
runs_get | run_id | runs.get |
runs_list | service?, limit? | runs.list |
runs_logs | run_id, tail? | runs.logs |
assets_lineage | (none) | assets.lineage |
A typical agent flow: catalog_list_views / service_list to discover surfaces, service_show + pipeline_compile to understand execution shape, then runs_materialize_partition → runs_get / runs_logs to trigger and poll a run.
Error handling
When a delegated method raises an ApiError, the wrapper re-raises it as a FastMCP ToolError carrying the original {code, message, data} so the calling agent sees the same failure detail it would over JSON-RPC. Unknown method names also surface as a ToolError.
See also
- JSON-RPC API — the same methods over HTTP, with curl examples and the full error-code table.
- Dagster Orchestration — the runs backend behind the
runs_*tools. - Training Pipeline overview.