Skip to content

feat(mcp): CODEC as MCP client (bidirectional) + 25-beat demo script#239

Merged
AVADSA25 merged 5 commits into
mainfrom
claude/mcp-client-and-demo
Jul 13, 2026
Merged

feat(mcp): CODEC as MCP client (bidirectional) + 25-beat demo script#239
AVADSA25 merged 5 commits into
mainfrom
claude/mcp-client-and-demo

Conversation

@AVADSA25

Copy link
Copy Markdown
Owner

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 to huggingface.co/mcp and listed its live tools. 9 network-free tests, manifest regenerated.

2. Corrected 25-beat DEMO_SCRIPT.md with 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

Mikarina13 and others added 5 commits July 13, 2026 15:05
…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>
@AVADSA25
AVADSA25 merged commit 06e4d47 into main Jul 13, 2026
1 check passed
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.

2 participants