Repository navigation
v0.5.7
Package @prowl-ai/prowl-skill 0.5.7 · plugins prowl 0.4.4, prowl-cli 0.2.6
(unchanged).
A first run with no key opened a browser and left the operator holding a callback into
a port that had already died. It now refuses to start, and says what to do instead.
Fixed
-
The MCP launcher no longer strands the operator in a half-finished OAuth flow.
With no API key configured,plugins/prowl/.mcp.jsonused to handmcp-remotean
emptyAuthorization: Bearerheader. The server rejects that, andmcp-remote
falls back to OAuth — which opens a browser and starts alocalhostlistener to
catch the callback. An MCP server spawned at agent startup does not survive long
enough to be there when consent completes: the listener is gone, the redirect hits a
dead port, and the operator is left holding a URL with an authorization code that
expires before anything can be done with it.Measured on one machine on 2026-08-22: two such flows in a single day, both
stranded. The second left~/.mcp-auth/mcp-remote-0.1.43/…_lock.jsonrecording
{"pid": 68661, "port": 4333}for a process that no longer existed.The launcher now resolves the key, and refuses to start without one — printing
the two supported ways to supply it and exiting78(EX_CONFIG,sysexits.h)
rather than reachingmcp-remoteat all. A key that is present but empty or
whitespace-only counts as absent. -
The README said 22 MCP tools; the server registers 23.
npm run check:contract
reads the count offhttps://prowl.chat/mcp/and had no claim in the README to check
it against — the number sat one line below a heading no gate reads. The skill page
already said 23.
Added
-
test/mcp_launch_test.js— 12 checks that execute the real.mcp.jsonlauncher
rather than reading it. A fakenpxon the launcher's own PATH captures the argv, so
the suite can assert both halves: that no key meansnpxis never reached, and that
each documented key source (PROWL_MCP_TOKEN, the plugin file, the Codex file)
reachesmcp-remotecarrying that exact key, in that precedence.Shadowing
npxby PATH alone does not work here —sh -lcis a login shell, and on
macOS/etc/profilerunspath_helper, which pushes an injected PATH entry to the
end. A.profilein the fakeHOMEis sourced afterwards and does win; that is what
the suite uses. Nothing in it touches the network.Verified to have teeth: against the previous launcher, 6 of the 12 checks fail, and
the failure output is the defect itself —'Authorization: Bearer '. That proof is
now the fourteenth plant inscripts/negative-self-test.js, so every CI run removes
the refusal from.mcp.jsonand requires the suite to go red onnpx ran without a key— a suite that quietly stopped checking this would otherwise report the same
green as one that still does.