Commit 7045c2

2026-03-19 23:03:21 Claude (MCP): [mcp] Update IRC MCP Bridge: mark as implemented with post-build findings
Minsky/IRC_MCP_Bridge.md ..
@@ 11,7 11,16 @@
The minsky project needs an IRC MCP bridge — a FastMCP server that wraps IRC as MCP tools so that Claude Code SDK agents can communicate over IRC channels. This is the standalone communication layer from the [[Design/Agent_IRC_Architecture]] spec. The bridge has independent utility: any MCP client can use it to interact with IRC.
- The project is greenfield (no code yet). We use `uv` for dependency management, `pydle` 1.1 for async IRC, and `mcp[cli]` 1.26 for FastMCP. SSE transport only.
+ **Status: implemented** (branch `feat/irc-mcp-bridge`, 2026-03-19). 40 tests passing (26 unit + 14 integration against ergo). Tested end-to-end with a Sonnet subagent chatting over IRC via MCP tools.
+
+ We use `uv` for dependency management, `pydle` 1.1 for async IRC, and `mcp[cli]` 1.26 for FastMCP. SSE transport only.
+
+ ### Implementation notes (post-build)
+
+ - **`pydle.ClientPool` cannot be used** — `handle_forever()` calls `asyncio.run()` which conflicts with FastMCP's already-running anyio event loop. Uses `asyncio.create_task()` + `asyncio.gather()` instead.
+ - **pydle ISUPPORT bug with ergo** — ergo sends `MODES` without a value; pydle's `on_isupport_modes` crashes with `TypeError`. Fixed via `_ErgoCompatMixin` that guards `int(None)`.
+ - **Channel/nick validation** added at the server layer to prevent IRC protocol injection.
+ - **`MCP_HOST` env var** added (default `127.0.0.1`) for binding the SSE server to non-loopback interfaces.
## Why pydle over bottom
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9