feat(mcp): CODEC as MCP client (bidirectional) + 25-beat demo script#239
Merged
Conversation
…237) PR #237 (a harmless ruff version bump) went red on CI/smoke with two failures that have nothing to do with ruff — both pass in isolation and are pre-existing timing flakes: * test_deadline_timeout: `assert len(timeouts) == 1` saw 2. ask() is synchronous and finalizes exactly one timeout per call, so the extra event came from a background-threaded ask() in a NEIGHBOURING test finalizing late into this test's audit log (_log_event reads the log path live at write-time). Now scoped: count only emit/timeout events whose extra.pending_question_id is THIS test's qid. * test_round_trip: "notification not written". ask() writes the pending record and the notification as two separate writes; the test polled for the record then asserted on the notification, which can lag under load. Now polls for the notification too. Both are test-only changes; runtime code untouched. Verified: the two tests pass 10/10 under repeated runs; full suite 2497 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…er beat Restores the full list I over-tightened, fixes status (Vision Mouse #7 = done; Pilot #14 = half-broken), and adds the 3 new beats: MCP client (#23, bidirectional with the MCP server #18), self-improve live (#24), Compare (#25). Each beat now carries an exact TRY/EXPECT so it doubles as the test sheet. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…(beat #23) CODEC already exposes its skills as an MCP *server* (Claude plugs into CODEC). This adds the other direction: CODEC reaches OUT to external MCP servers — the same public connectors Claude uses (Notion, GitHub, Linear, Stripe, Hugging Face, …) — and calls their tools. CODEC is now bidirectional MCP. - skills/mcp_connect.py: a bridge skill over fastmcp.Client (already a dependency — no new install). Servers declared in ~/.codec/mcp_servers.json, seeded on first use with a curated menu of popular servers (most ship disabled pending the operator's OAuth/API key — enabling is a one-line edit). Grammar: "list mcp" · "list tools on <server>" · 'call <server> <tool> {json}' · or any mention of a server → connect + list its tools. async fastmcp.Client is bridged to CODEC's sync skill contract via a fresh loop on a worker thread. Not exposed on CODEC's own outbound MCP server (SKILL_MCP_EXPOSE=False) so a remote client can't chain CODEC -> arbitrary third-party tools unattended. - Verified against a REAL public server: connected to huggingface.co/mcp and listed its live tools (hf_whoami, space_search, hub_repo_search, hf_fs, …). - 9 unit tests (fastmcp.Client faked — network-free): config seeding, list, call, disabled-server guard, bad-JSON, unknown-server, network-error. D-1 manifest regenerated (87 skills). ruff clean. Demo beat #23 (right after the MCP-server beat #18): "CODEC, connect to Notion and create a page" -> CODEC calls out to the external MCP. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two things:
1. CODEC as an MCP client (demo beat #23). CODEC already serves its skills to Claude over MCP; this adds the reverse — CODEC connects out to external MCP servers (Notion, GitHub, Linear, Stripe, Hugging Face…) and calls their tools. Bidirectional MCP. Built on
fastmcp.Client(existing dep). Servers live in~/.codec/mcp_servers.json(seeded with a popular-server menu; enabling one is a one-line edit). Verified against a real server — connected tohuggingface.co/mcpand listed its live tools. 9 network-free tests, manifest regenerated.2. Corrected 25-beat
DEMO_SCRIPT.mdwith an exact TRY/EXPECT per beat (fixes Vision Mouse=done, Pilot=half-broken; adds MCP-client/self-improve/Compare).Also fixed the #237-blocking flake separately (PR #238, merged).
🤖 Generated with Claude Code