Skip to content

feat(mcp): restore full Hermes MCP roster (codebase-memory, comfyui, n8n, orchestration)#86

Merged
AlienWalker1995 merged 1 commit into
mainfrom
feat/restore-mcp-roster
Jul 10, 2026
Merged

feat(mcp): restore full Hermes MCP roster (codebase-memory, comfyui, n8n, orchestration)#86
AlienWalker1995 merged 1 commit into
mainfrom
feat/restore-mcp-roster

Conversation

@AlienWalker1995

Copy link
Copy Markdown
Owner

Why

The V1→V2 migration silently dropped Hermes' gateway MCP set from V1's 8 servers to 3 (memory-vault, qdrant-rag, searxng). Operator intent: "the agent should have full viz on mcp tools." This restores the servers whose backing service exists in V2, ported from V1's registry-custom.yaml (the per-server source of truth).

Per-server evidence (validated LIVE through the gateway)

Gateway log after docker restart of ordo-v2-mcp-gateway-1:
Those servers are enabled: codebase-memory, comfyui, memory-vault, n8n, orchestration, qdrant-rag, searxng

Server Status Tools Round-trip evidence
codebase-memory RESTORED 14 index_repository(/c/dev/ordo-ai-stack/v2/ordo)nodes:251, edges:936; search_graph("render mcp registry") returned real functions _render_mcp (render.py:390-417), _render_registry_custom, _mcp_gateway (compose.py:216-248), render
comfyui RESTORED 34 initialize + tools/list clean; gateway reached comfyui:8188 (34 tools enumerated)
n8n RESTORED 42 FULL set, not docs-only 23 — banner/telemetry suppression kept stdio JSON-RPC clean
orchestration RESTORED 28 orchestration_readinessok:true, all dashboard control-plane checks pass; reports gateway tool_count: 133
blog-mcp DEFERRED Targets the separate min-max blog stack (C:\dev\min-max-migration), not in this stack
playwright DEFERRED Generic browser tool with browser_run_code_unsafe (RCE-equivalent), no stack-service backing; operator's browser-validation uses a dedicated image

memory-vault (15), qdrant-rag (2), searxng (4+2 resources) — pre-existing, still working (no regression).

CODE_ROOT / gateway env wiring

  • CODE_ROOT was already rendered into the gateway env (${CODE_ROOT:-/c/dev}, site.CODE_ROOT=C:/dev).
  • Added MCP_GATEWAY_DOCKER_BIND_ALLOWED_PATHS=${CODE_ROOT:-/c/dev} — codebase-memory's read-only /c/dev bind is REJECTED by the gateway's hardened bind logic without it.
  • Added COMFY_MCP_DEFAULT_MODEL default. The three secrets the spawned servers need (OPS_CONTROLLER_TOKEN, DASHBOARD_AUTH_TOKEN, N8N_API_KEY) deliberately arrive via the secrets.env env_file, NOT the environment: block — a ${VAR:-} there interpolates from .env/host (empty) and would SHADOW the env_file value (caught + fixed during live validation).

server_id decoupling

render._render_mcp gained an optional mcp.server_id so the gateway registry key (= Hermes tool-namespace prefix) can differ from the plugin id. Needed because the comfyui SERVICE plugin already owns comfyui; the MCP plugin is comfyui-mcp but renders under server_id: comfyui to preserve the V1 comfyui__* tool namespace. Collision detection included.

Build contexts

v2/docker/{codebase-memory,comfyui,orchestration}-mcp follow the existing qdrant-rag-mcp convention: a README pointing at the operator's authoritative V1 source context (not duplicated — the V1 tree is CI-tested and duplicating it would create the exact drift the repo's #84 legacy-cleanup recorded). Images built + tagged ordo-v2/*.

Tests / render discipline

  • 221 passed / 6 skipped (baseline 209 → +12), ruff clean. New tests: gateway env wiring, server_id decoupling + collision, per-server wiring, n8n digest+banner, codebase-memory volumes/longLived, secrets.env.example includes N8N_API_KEY, servers.txt/registry-custom.yaml assertions; parity matrix updated 3→7 MCP.
  • Re-rendered in a --gpus all container from the live out/ordo.yaml: compose diff = only the 2 gateway env additions; llamacpp block byte-identical (cksum 400317179 773, GPU pin GPU-97fe65ee preserved). docker compose config exit 0.

Apply / attestation

  • Applied by recreating only ordo-v2-mcp-gateway-1 (new env needs a recreate). llamacpp / agent / comfyui / n8n and all other services untouched (verified by uptime). memory-vault / qdrant-rag / searxng still working.

🤖 Generated with Claude Code

…n8n, orchestration)

The V1->V2 migration silently dropped Hermes' gateway MCP set from V1's 8
servers to 3 (memory-vault, qdrant-rag, searxng). This restores the four whose
backing service exists in V2, as kind=mcp plugins ported from V1's
registry-custom.yaml (the per-server source of truth):

- codebase-memory: code knowledge graph over /c/dev (read-only), longLived +
  disableNetwork, named cache volume. Index-per-session (in-memory graph).
- comfyui: ComfyUI media tools. Plugin id `comfyui-mcp`, but mcp.server_id pins
  the gateway registry key to `comfyui` to preserve Hermes' `comfyui__*` tool
  namespace (the comfyui SERVICE plugin already owns the bare id).
- n8n: full czlonkowski catalog + n8n_* instance verbs. Banner/telemetry
  suppression (LOG_LEVEL=error, N8N_DIAGNOSTICS_ENABLED=false, DISABLE_TELEMETRY
  =true) keeps the stdio JSON-RPC clean -> full 42 tools, not docs-only 23.
  Image digest-pinned. N8N_API_KEY declared as a plugin secret.
- orchestration: stable verbs delegating to the dashboard /api/orchestration
  control plane (verified live in V2).

Render/compose changes:
- render._render_mcp: optional mcp.server_id decouples the gateway registry key
  (Hermes tool-namespace prefix) from the plugin id, with collision detection.
- compose._mcp_gateway: add MCP_GATEWAY_DOCKER_BIND_ALLOWED_PATHS=${CODE_ROOT}
  (codebase-memory's read-only /c/dev bind is rejected without it) and the
  COMFY_MCP_DEFAULT_MODEL default. The secrets the spawned servers need
  (OPS_CONTROLLER_TOKEN, DASHBOARD_AUTH_TOKEN, N8N_API_KEY) deliberately arrive
  via the secrets.env env_file, NOT the environment block -- a ${VAR:-} there
  interpolates from .env/host (empty) and would SHADOW the env_file value.

V2 build contexts (v2/docker/{codebase-memory,comfyui,orchestration}-mcp) follow
the qdrant-rag-mcp convention: a README pointing at the operator's authoritative
V1 source context (not duplicated, to avoid drift). Images built as ordo-v2/*.

Deferred (backing not in this stack): blog-mcp (separate min-max blog stack),
playwright (generic browser tool, RCE-equivalent, no stack-service backing;
operator's browser-validation uses a dedicated image).

Tests: +12 (compose gateway env, server_id decoupling + collision, per-server
wiring, n8n digest+banner, codebase-memory volumes/longLived, secrets.env.example
N8N_API_KEY, servers.txt/registry-custom.yaml assertions). Parity matrix updated
3->7 MCP. 221 passed / 6 skipped, ruff clean.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
@AlienWalker1995 AlienWalker1995 force-pushed the feat/restore-mcp-roster branch from e0ce1f7 to ae261c6 Compare July 10, 2026 13:29
@AlienWalker1995 AlienWalker1995 merged commit 7919532 into main Jul 10, 2026
6 checks passed
@AlienWalker1995 AlienWalker1995 deleted the feat/restore-mcp-roster branch July 10, 2026 13:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant