Repository navigation
mcptoon 0.7.18 — a first run that actually works
Two defects made the first mcptoon quickstart on a clean machine look broken: it recommended five npm packages that no longer exist, and a server that logged more than one pipe buffer deadlocked the spec="auto" probe (#19). Both are fixed.
Fixed
mcptoon quickstartproposed five dead npm packages. The zero-config list
sentnpxafter names that no longer exist on the npm registry —
@modelcontextprotocol/server-fetch,-time,-git,-dockerand
-sqlite— so on a clean machine the very firstquickstartcame back with
npm error 404/PROCESS_DIEDfor five of the eight servers it had just
recommended. The official reference servers are split by ecosystem:
filesystem,memoryandsequential-thinkingare npm packages, while
fetch,time,gitandsqliteare Python packages on PyPI. The npm list
now contains only packages verified to exist there, the Python servers are
offered throughuvxand only whenuvxis installed, the unmaintained
dockerguess is gone, andmcptoon init's sample config no longer ships the
deadfetchentry. This was the same bug class as the 2026-09-05demo.py
fix; that fix deliberately left the discovery candidates alone, which is why
quickstartkept advertising them.- A server that logged more than one pipe buffer deadlocked the
spec="auto"
probe (#19)._spawn_stdio()opened the child with
stderr=subprocess.PIPE, and nothing read that pipe while the server was
alive: a server logging more than a few KB blocked insidewrite(), stopped
reading stdin and stopped answering stdout, and every request then timed out
asRESPONSE_TIMEOUT ... server went silent. Oneserver/discoverprobe was
enough to trigger it — the Python reference servers answer that unknown method
with ~6.8 KB of pydantic validation warnings (measured: 6,793 bytes from
uvx mcp-server-time) — which madeuvx mcp-server-fetch|time|gitlook dead
on a fresh machine whilespec="legacy"worked, because legacy never probes.
stderr is now drained continuously on a background thread, in 8 KB chunks via
read1(so a single huge line with no newline is drained too, which line
iteration would not), and the bounded drained ring feeds_stderr_tail().
The post-mortem pipe read it replaces was both the reader that was missing and
a race against process exit.
The release also re-pins the footprint claims, because the fixes moved them: the
wheel is 189KB (194,028 bytes) and src/mcptoon/*.py is 15,697 physical
lines, and the suite total moves to 1,061 tests (1,060 passed, 1 skipped).
Both README badges, the landing pages, DEVELOPERS.md, ROADMAP.md,
docs/comparison.md, docs/tiktoken-benchmarks.md and the shipped skill cards
were updated together — the footprint guard reads all of them, so a partial
update is a red CI.
Verify: pip install --upgrade mcptoon (wheel 189KB, zero dependencies).