Re-add MCP bridge so Hermes can delegate to the real Claude Code CLI
Recreates the PR #17 change (closed without merging, then asked for back after confirming a real ANTHROPIC_API_KEY would mean separate/duplicate billing rather than actually using the Pro/Max subscription). New POST /mcp endpoint (Streamable HTTP transport, stateless — fresh McpServer+transport per request) exposing one tool, ask_claude_code: runs the real `claude` binary against a prompt, billed against the subscription rather than API credits. Works specifically because it's the actual CLI making the request server-side. Read-only — no Edit/Write/git-push/ git-commit tools. Also removes litellm-config.yaml's "anthropic-claude" model entry: it only ever worked when the real claude CLI itself was the caller (proven earlier), so having it listed as a selectable model was actively misleading — Hermes picking it directly is exactly what produced the '401: Missing Anthropic API Key' confusion that led back to this bridge. The MCP tool is the actual working path now; general_settings.forward_client_headers_to_llm_api is also removed since nothing uses it anymore. Tested end-to-end locally again before pushing (built the image, ran it, full MCP handshake via curl) — real 'pong' from the real claude CLI.
This commit is contained in:
+7
-3
@@ -120,9 +120,10 @@ services:
|
||||
- "traefik.http.services.hermes-dashboard.loadbalancer.server.port=9119"
|
||||
|
||||
claude-agent:
|
||||
# Gitea PR-review only now — no Matrix presence (see hermes above; only one agent
|
||||
# is meant to be in Matrix). Still triggered by Gitea's pull_request webhook and
|
||||
# posts review comments there, entirely independent of Matrix/LiteLLM.
|
||||
# No Matrix presence (see hermes above; only one agent is meant to be in Matrix).
|
||||
# Two things call this now: Gitea's pull_request webhook (PR review), and Hermes,
|
||||
# over MCP (POST /mcp), to delegate a question to the real `claude` CLI when it
|
||||
# specifically wants the Claude subscription instead of whatever LiteLLM routed it to.
|
||||
image: ${GITEA_REGISTRY_IMAGE}
|
||||
container_name: claude-agent
|
||||
restart: unless-stopped
|
||||
@@ -136,6 +137,9 @@ services:
|
||||
# Claude subscription (Pro/Max) auth via `claude setup-token`, not API billing —
|
||||
# Claude Code reads this in preference to ANTHROPIC_API_KEY when both could apply.
|
||||
CLAUDE_CODE_OAUTH_TOKEN: ${CLAUDE_CODE_OAUTH_TOKEN}
|
||||
# Shared secret for the /mcp bridge endpoint (internal network only either way, but
|
||||
# this keeps it from being callable by anything that merely reaches the container).
|
||||
MCP_BRIDGE_KEY: ${MCP_BRIDGE_KEY}
|
||||
volumes:
|
||||
- agent_workspace:/workspace
|
||||
networks:
|
||||
|
||||
Reference in New Issue
Block a user