Skip to content

v1.30.0

Choose a tag to compare

@a-akimov a-akimov released this 31 Oct 08:06
7d59a6f

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 --stdio command. --smoke then 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 (allowlist or
    deny-private) in a [smoke.network] table. --smoke then starts two
    local HTTP listeners and asks the tool for the denied one directly, as
    localhost, [::1] and 0.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. With allowlist, put
    {mcpscore_allowed_origin} in the --stdio command or an --env value,
    and the tool must fetch it first; deny-private has 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.node moves from
    >=18 to >=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 bundle SSL_CERT_FILE /
    SSL_CERT_DIR names.
  • 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: pydantic 2.14.2, pydantic-core 2.50.2 and
    opentelemetry-api 1.45.2 (through the MCP SDK). The mcp==2.3.0 pin is
    the latest SDK release.