Skip to content

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 ​

bash
uv run daeda mcp

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

ToolArgsDelegates to
catalog_list_views(none)catalog.list_views
catalog_show_viewnamecatalog.show_view
service_list(none)service.list
service_shownameservice.show
pipeline_compileservicepipeline.compile
runs_materialize_partitionservice, partitionruns.materialize_partition
runs_getrun_idruns.get
runs_listservice?, limit?runs.list
runs_logsrun_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 ​