Skip to content

Wire normalizeMcpCommand into mcp_command_mismatch detector#43

Merged
Conalh merged 1 commit into
mainfrom
wire-mcp-normalizer-via-agent-gov-core
May 22, 2026
Merged

Wire normalizeMcpCommand into mcp_command_mismatch detector#43
Conalh merged 1 commit into
mainfrom
wire-mcp-normalizer-via-agent-gov-core

Conversation

@Conalh
Copy link
Copy Markdown
Owner

@Conalh Conalh commented May 22, 2026

Reopened against main after PR #40 merged (the original PR #41 was auto-closed when its base branch was deleted).

Wires agent-gov-core's normalizeMcpCommand into the cross-surface mismatch detector. Servers with the same canonical identity but different raw command strings (e.g. npx -y foo@1.2.3 vs npx foo@1.2.3) no longer false-fire mcp_command_mismatch. Env is intentionally excluded (it has its own detector). Regression fixture pinned via mcp-command-neutral-flag-equivalence; verified failing on pre-fix engine, passing post-fix. Audit finding closed.

See closed PR #41 for full discussion.

Closes the false-positive class flagged in the PolicyMesh audit:
two surfaces that differ only in cosmetically neutral ways
(`npx -y <pkg>` vs `npx <pkg>`, `.cmd` vs unsuffixed, flag
reordering) were being reported as high-severity command mismatches.

What changed
- McpServer gains a `canonicalIdentity: string` field, computed by
  agent-gov-core@v0.1.2's normalizeMcpCommand from (command, args,
  url). Both the JSON and Codex TOML parsers populate it.
- `detectMcpCommandMismatch` now groups by `canonicalIdentity` instead
  of the raw joined `command` string. The human-readable command list
  in the finding message still uses `command` so the finding stays
  actionable.
- Env is deliberately omitted from `canonicalIdentity`. Env drift has
  its own detector (mcp_env_mismatch); including env here would have
  surfaced two findings for what users perceive as one issue (and
  broke the mcp-env-value-mismatch fixture test).

Regression test pinned
`mcp-command-neutral-flag-equivalence` fixture: root MCP runs
`npx -y @modelcontextprotocol/server-github@1.2.3`, Cursor runs the
same without `-y`. Before this change the audit emitted a
high-severity mcp_command_mismatch finding; after it emits none. Test
'CLI does not flag mcp_command_mismatch on neutral -y flag drift
between surfaces' asserts the post-fix behavior — it fails on the
pre-fix engine, passes here.

39 PolicyMesh tests pass. Stacked on #40 (JSONC migration); merge
that one first.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Conalh Conalh merged commit afc530a into main May 22, 2026
4 checks passed
@Conalh Conalh deleted the wire-mcp-normalizer-via-agent-gov-core branch May 22, 2026 15:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant