Skip to content

MCP

MCP is the operator Model Context Protocol surface the agent hosts so an MCP client can connect. It is an extra client, not a second control plane. The TUI and GUI stay. Work still goes through issues. Chat still does not implement.

The peer is an MCP client (an operator), not a worker and not the agent.

Off by default. Turn it on from Config → Settings (mcp_enabled) or STEELFRAME_MCP=1 in the environment. Env wins over config: STEELFRAME_MCP=0 forces the surface off even when Settings is on.

When off, POST/GET/DELETE /mcp return 404 JSON { "error": "mcp disabled" } and never reach the MCP handler.

Canonical transport is Streamable HTTP at /mcp on the agent (same operator gate as /api/*). Stdio-only hosts use the CLI proxy:

Terminal window
steelframe mcp --project local
{
"mcpServers": {
"steelframe-local": {
"command": "steelframe",
"args": ["mcp", "--project", "local"]
}
}
}

--print-config prints that snippet and a Streamable HTTP variant; the bearer token is redacted. Token comes from projects.toml or --token-file. See CLI and Auth.

steelframe mcp requires a running agent. It does not start the Coordinator.

v1 tools on this agent:

ToolPurpose
get_statusAgent heartbeat: project, version, Coordinator liveness, workers, tasks in progress, capacity.
get_boardBoard cards (issue / backlog / Intake). Optional column filter.
get_taskGitHub issue/PR preview plus the current Task run.
get_workflow_runWorkflow run plus step log.
list_workflowsWorkflow summary counts by kind and status.
retrieveRetrieve session memory (agent-wide).
list_chat_sessionsList Chat sessions on this agent.
get_chat_sessionChat session messages (reasoning stripped).
new_chatOpen a new Chat session. Does not bind the TUI current session.
discuss_issueOpen a Discuss Chat focused on one issue. Does not send a message.
chat_sendSend a Chat message. May file an issue (Pickup) or park in the Board backlog when Chat chooses those intents. decide does not post.
chat_stopStop the in-flight Chat turn.
file_workFile a new GitHub issue with Pickup labels. Not a substitute for route_intake file.
publish_decisionPublish a Decision comment. Chat decide does not post.
route_intakeRoute an Intake card: file (Pickup), park (Backlog), or decline.

steelframe://status, steelframe://board, steelframe://dashboard, steelframe://issue/{n}, steelframe://run/{id}, steelframe://chat/{session}.

PromptPurpose
operator_briefOperator posture for this agent: Chat, Pickup, Park, Decision, Retrieve, Intake.
discussDiscuss a parked issue until a Decision draft exists, then Publish.
  • MCP Chat sessions are not the TUI current Chat session. Missing session_id on chat_send opens a fresh session.
  • A missing Mcp-Session-Id is success (stateless protocol 2026-07-28).
  • Host/Origin allowlists are process-lifetime; changing external_url needs a restart.
  • 401 means the proxy needs a projects.toml token or STEELFRAME_TUI_TOKEN.