mcptoon 0.7.16
A patch release that makes a failing MCP server tell you why it failed.
The bug
If a configured server's command dies at startup — most often npx pointed at a
package that no longer exists on npm (E404) — mcptoon wrote to the dead process's
stdin, which raises [Errno 22] on Windows, and then reported:
[PROCESS_DIED] MCP server process exited. stderr: (node:6035) Warning: Sett...
The real cause was there, but three stacked truncations hid it:
| Layer | What it did |
|---|---|
_stderr_tail()
| kept the first 500 bytes of stderr |
| error cell | capped the message at 100 chars |
| manifest printer | capped the line at 60 chars |
A failing npx prints a wall of Node NODE_TLS_REJECT_UNAUTHORIZED warnings
first and its npm error 404 ... Not found last — so the warning survived
and the diagnostic did not.
The fix
client._salient_stderr()drops the Node/npm boilerplate lines and keeps the
end of stderr, where process errors are actually printed._stderr_tail()now reads the tail (-2000) instead of the head.- Caps widened: data 100 → 300, display 60 → 200 (manifest, health, pool).
After the fix, the same failure reads:
docker: [error: [PROCESS_DIED] MCP server process exited. stderr:
//registry.npmjs.org/@modelcontextprotocol%2fserver-docker - Not found | npm error 404 | ...
Why it shipped now
Found on 2026-09-17 during the Windows first-install field test: 3 of 13
configured servers died this way, and every one of them reported the wrong reason.
A user's first experience with a mistyped or retired server was a Node TLS warning.
Notes
- Pinned by
tests/test_dead_server_diagnostics.py, which feeds a realistic npm
stderr (warning wall first, 404 last). The earlierdemo_dead_packagetest used
a 48-character stderr and never exercised the truncation. - Wheel re-measured: 159,942 bytes (156.2 KB), zero dependencies.
- Suite: 931 passed, 1 skipped.
Full changelog: CHANGELOG.md