Repository navigation
v1.30.0
Two new security checks for --smoke: one tests that file tools stay inside
their root, the other that fetch tools reach only the URLs their policy
allows. Both are opt-in, run only against your own server, and never count in
the score, so no score moves. The npm package now needs Node.js 22 or newer.
Added
smoke_filesystem_boundary: check that file tools stay in their root.
Name your read and write tools in a[smoke.filesystem]table and put
{mcpscore_fs_root}in the--stdiocommand.--smokethen builds a
throwaway directory, starts the server with it as the root, and tries
parent traversal, absolute paths, a sibling sharing the root's prefix,
symlinks and Windows path forms. A read fails when it returns an outside
file's content and a write fails when a file changes outside the root. A
tool that cannot work inside the root first skips every attempt. Never
counted in the score.smoke_network_boundary: check that fetch tools reach only what they
should. Name your URL-fetching tool and its policy (allowlistor
deny-private) in a[smoke.network]table.--smokethen starts two
local HTTP listeners and asks the tool for the denied one directly, as
localhost,[::1]and0.0.0.0, through encoded IPv4 forms, URL-parser
confusion and a redirect from the allowed one. A request that reaches the
denied listener fails the attempt. Withallowlist, put
{mcpscore_allowed_origin}in the--stdiocommand or an--envvalue,
and the tool must fetch it first;deny-privatehas no such control, so
it reports failures only, and a request to either listener counts.
Nothing outside the machine is contacted. Never counted in the score.
Changed
- The npm package needs Node.js 22 or newer.
engines.nodemoves from
>=18to>=22; Node.js 18 is end of life. The Python CLI is unchanged. - Docs: Troubleshooting explains which certificates mcpscore trusts: the
operating system's trust store, or the bundleSSL_CERT_FILE/
SSL_CERT_DIRnames. - Docs: copy-paste examples pin mcpscore 1.29.1 instead of 1.20.0, and the
JSON report example on Stability is re-run on 1.29.1. A test now fails when
a docs example pins a version older than the previous minor release, or
names a superseded spec revision as the latest. - Dependencies refreshed:
pydantic2.14.2,pydantic-core2.50.2 and
opentelemetry-api1.45.2 (through the MCP SDK). Themcp==2.3.0pin is
the latest SDK release.