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_partitionruns_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