Repository navigation
feat(rules): flag unpinned MCP package launches (MCPCFG-003) - #274
Merged
Merged
Conversation
ivanpaghubasan
requested review from
ericksondelacruz,
jhumel-code and
sairenchristianbuerano
October 21, 2026 10:16
ivanpaghubasan
marked this pull request as ready for review
October 23, 2026 09:59
…ned-mcp-launch # Conflicts: # CHANGELOG.md # CLAUDE.md # COVERAGE.md # internal/rules/schema_version.go # testdata/corpus/PROVENANCE.md # testdata/rules-fixture/manifest.yaml
sairenchristianbuerano
approved these changes
Oct 26, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds MCPCFG-003: a committed MCP client config starts a server with a package
runner (npx, bunx, pnpm dlx, uvx, uv tool run, pipx run, docker run) on a package
or image that is not pinned to an exact version or digest.
repo_mcp_config_launches_unpinned_package, backed byProjectConfigFacts.UnpinnedMCPLaunchandclassifyMCPPin..vscode/mcp.json, claude_desktop_config.json, .gemini/settings.json, Codex config.toml).
unpinned packages (text only; id, severity and match unchanged).
Schema version
28 is provisional. CSDK-115 (#273) holds 27. Whichever PR merges later merges
main in and renumbers
schema_version.go, the fixture manifest and the rulesmanifest, then reruns
go test ./...andscripts/check-rules-sync.sh.Merge order
Engine, then rules, then rulebook. The rules PR must not merge before the
rationale-doc PR is ready.
Tests
go build,go vet,go test ./...pass.RULES_REPO=../trustabl-rules scripts/check-rules-sync.sh: fixture in sync.are unchanged; the only new finding is MCPCFG-003 on the new fixture.
Maintainer notes
shell; a flag before the subcommand; remote URL servers.
be taken as the package spec (possible false positive). Not stated in the rule text.
pkg==xfor uvx(credited as pinned, so the failure direction is silent), pnpm dlx behaviour
with no version,
-csemantics for bunx and pnpm.--exclude-neweris not credited as a pin.isRepoRelativePathtreats.cmdas a script extension, so abare
npx.cmdcommand is claimed by MCPCFG-002.docs: "0 of 8 concealment techniques force re-approval under rug pull
(2607.05744)" and the postmark-mcp BCC backdoor in 1.0.16.