state-hub/mcp_server
tegwick 6d04544368
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
feat(mcp): deploy the MCP layer on central instead of tunnelling to a workstation
No MCP server ran on central, so remote agents reached dev-hub only through a
reverse tunnel back to the workstation — routing a request for a service on
their own machine out to another host and back.

Adds a gated mcp Deployment and ClusterIP Service running the same image with
`-m mcp_server.server`, API_BASE defaulted to the in-cluster API Service, and
tcpSocket probes. No Ingress: the MCP layer proxies an unauthenticated API and
must not be reachable from outside the cluster.

Two fixes were needed before the manifests could work:

- server.py hardcoded host="127.0.0.1". A Service routes to the pod IP, so a
  loopback bind is unreachable. Now MCP_HOST, still defaulting to loopback so
  local runs do not silently expose an unauthenticated proxy.
- The container runs `-m mcp_server.server`, not the file path, so /app lands
  on sys.path rather than /app/mcp_server.

mcp.enabled stays false in the deploy values: the running image predates
MCP_HOST, so enabling it before the tag is bumped would ship a pod that never
becomes reachable.

Refs CUST-WP-0067-T08

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-24 22:54:24 +02:00
..
__init__.py Add state-hub v0.1 — local-first state service for the Custodian 2026-02-24 17:47:49 +01:00
codex_server.py Prepare State Hub retirement baseline 2026-08-09 16:19:53 +02:00
constants.py Rename MCP server identifier from state-hub to dev-hub 2026-06-22 20:46:14 +02:00
server.py feat(mcp): deploy the MCP layer on central instead of tunnelling to a workstation 2026-08-24 22:54:24 +02:00
TOOLS.md docs: residual handoff in hub docs, AGENTS, and templates 2026-07-22 18:15:45 +02:00