v1.3.0
Any-language release: local MCP servers in Go, Java, C#, Rust — any runtime —
can now be audited over stdio via --stdio, with secret-safe --env
configuration. Plus resource-template collection with three new catalog
rules, a new readiness rule for supportedVersions, and a tightened
unsupported-version error check.
Added
-
--stdio: audit local MCP servers written in any language. The flag
launches an arbitrary stdio command — a compiled Go binary,
java -jar server.jar,dotnet run --project …— and audits it exactly
like a.py/.jstarget. It consumes the rest of the command line (the
server's own flags included), runs the command directly with no shell, and
pairs with the new repeatable--envfor server configuration
(merged over the SDK's minimal default environment; values are never
logged or reported).--env NAME=VALUEsets a value inline for
non-sensitive config; the value-less--env NAMEcopies the value from
mcpscore's own environment, keeping secrets off every command line. Library consumers get the same via the newStdioCommand
dataclass accepted byMCPClient.detect_and_connect. The positional
.py/.js/URL target is unchanged. -
Collect and fully paginate MCP resource templates, preserving partial evidence
and reporting incomplete listings when pagination fails, loops, or exceeds its
safety bound. -
Three resource-template rules validate RFC 6570 URI-template syntax, unique
uriTemplateidentifiers, and non-blank names without reading resources or
invoking tools. -
New HIGH readiness rule
readiness_2026_supported_versions: a
server/discoverDiscoverResult must name at least one supported protocol
version (all strings) — the schema requiressupportedVersions: string[]
but has no minItems constraint, and an empty list makes version selection
impossible.
Changed
readiness_2026_unsupported_version_errornow requires the full
UnsupportedProtocolVersionErrorshape, not just the -32022 code: the
error'sdatamust carrysupported(a non-empty list of version strings
to retry with) andrequested, as the schema requires. A bare -32022 now
fails with a dedicated message. Era detection is unaffected: the -32022
code alone still counts as modern-era evidence.