Serve Echo's turn over MCP, so fleet clients call it natively #119

Closed
opened 2026-08-11 23:05:41 +00:00 by coilyco-ops · 0 comments
Member

Echo speaks MCP as a client only. Callers reach it through POST /v1/turn, a bespoke JSON contract that every caller has to learn (docs/sirens-echo-http.md). Every other agent surface in the fleet is reachable over MCP, so Echo is the odd one out and cannot be dropped into an mcporter inventory or a harness roster the way node-stats-mcp or ward-mcp can.

Serving MCP would expose the same runTurn path as a tool, so a Claude or Codex session could call Echo directly with no bespoke client.

Why it is cheap now

The listener stopped carrying an application credential in 10ec199 (#105). Reachability is decided at the network layer by the Tailscale sidecar in front of a private ClusterIP Service. An MCP server surface on that same listener inherits that boundary exactly and raises no new auth question, which was the main thing that would have made this expensive.

Shape

  • Streamable HTTP on the existing listener, alongside POST /v1/turn rather than replacing it, since deploy and existing tailnet callers depend on the current route.
  • One tool over runTurn, carrying the same admission, response validation, and grounding path. Nothing bypasses the checks the HTTP entrypoint already runs.
  • The existing per-caller admission budget keyed off the MCP client identity the way X-Sirens-Caller works today.
  • Health and tracing unchanged, with the server span parented the same way.

Priority

Explicitly lower than #114, #115, #116, #117, and #118 per Kai. This is reach, and those are correctness, availability, and placement. Filed so the idea is tracked rather than re-derived, not to be picked up next.

Echo speaks MCP as a client only. Callers reach it through `POST /v1/turn`, a bespoke JSON contract that every caller has to learn (`docs/sirens-echo-http.md`). Every other agent surface in the fleet is reachable over MCP, so Echo is the odd one out and cannot be dropped into an mcporter inventory or a harness roster the way `node-stats-mcp` or `ward-mcp` can. Serving MCP would expose the same `runTurn` path as a tool, so a Claude or Codex session could call Echo directly with no bespoke client. ## Why it is cheap now The listener stopped carrying an application credential in `10ec199` (#105). Reachability is decided at the network layer by the Tailscale sidecar in front of a private ClusterIP Service. An MCP server surface on that same listener inherits that boundary exactly and raises no new auth question, which was the main thing that would have made this expensive. ## Shape * Streamable HTTP on the existing listener, alongside `POST /v1/turn` rather than replacing it, since deploy and existing tailnet callers depend on the current route. * One tool over `runTurn`, carrying the same admission, response validation, and grounding path. Nothing bypasses the checks the HTTP entrypoint already runs. * The existing per-caller admission budget keyed off the MCP client identity the way `X-Sirens-Caller` works today. * Health and tracing unchanged, with the server span parented the same way. ## Priority Explicitly lower than #114, #115, #116, #117, and #118 per Kai. This is reach, and those are correctness, availability, and placement. Filed so the idea is tracked rather than re-derived, not to be picked up next.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo#119
No description provided.