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.
Enablement
Section titled “Enablement”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.
Connect
Section titled “Connect”Canonical transport is Streamable HTTP at /mcp on the agent (same operator
gate as /api/*). Stdio-only hosts use the CLI proxy:
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:
| Tool | Purpose |
|---|---|
get_status | Agent heartbeat: project, version, Coordinator liveness, workers, tasks in progress, capacity. |
get_board | Board cards (issue / backlog / Intake). Optional column filter. |
get_task | GitHub issue/PR preview plus the current Task run. |
get_workflow_run | Workflow run plus step log. |
list_workflows | Workflow summary counts by kind and status. |
retrieve | Retrieve session memory (agent-wide). |
list_chat_sessions | List Chat sessions on this agent. |
get_chat_session | Chat session messages (reasoning stripped). |
new_chat | Open a new Chat session. Does not bind the TUI current session. |
discuss_issue | Open a Discuss Chat focused on one issue. Does not send a message. |
chat_send | Send a Chat message. May file an issue (Pickup) or park in the Board backlog when Chat chooses those intents. decide does not post. |
chat_stop | Stop the in-flight Chat turn. |
file_work | File a new GitHub issue with Pickup labels. Not a substitute for route_intake file. |
publish_decision | Publish a Decision comment. Chat decide does not post. |
route_intake | Route an Intake card: file (Pickup), park (Backlog), or decline. |
Resources
Section titled “Resources”steelframe://status, steelframe://board, steelframe://dashboard,
steelframe://issue/{n}, steelframe://run/{id}, steelframe://chat/{session}.
Prompts
Section titled “Prompts”| Prompt | Purpose |
|---|---|
operator_brief | Operator posture for this agent: Chat, Pickup, Park, Decision, Retrieve, Intake. |
discuss | Discuss a parked issue until a Decision draft exists, then Publish. |
Gotchas
Section titled “Gotchas”- MCP Chat sessions are not the TUI current Chat session. Missing
session_idonchat_sendopens a fresh session. - A missing
Mcp-Session-Idis success (stateless protocol2026-07-28). - Host/Origin allowlists are process-lifetime; changing
external_urlneeds a restart. 401means the proxy needs aprojects.tomltoken orSTEELFRAME_TUI_TOKEN.