Skip to main content
Use this guide when charter doctor reports one of the three MCP safety rules. MCP findings are often the highest-signal findings in a repo because they touch dependency integrity, origin trust, and remote authentication.
charter explain AE-MCP-001   # compact rule metadata + link to full docs
What it means: An MCP server entry is using a floating version (@latest, a semver range like ^1.2.3, a missing version entirely, or a deprecated/archived package). Charter requires exact version pins for supply-chain auditability.Example finding:
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem@latest"]
    }
  }
}
Fix pattern — pin to an exact version:
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem@latest"]
    }
  }
}
Or let Charter apply a catalog-aware bump for you:
charter fix --rule AE-MCP-001 --dry-run   # review first
charter fix --rule AE-MCP-001             # apply
Deprecated packages (such as @modelcontextprotocol/server-github) cannot be auto-fixed — the migration path is a different package entirely. Charter provides the successor package name in the finding output. You must make that migration manually.
Common version problems Charter flags:
PatternExampleStatus
Floating tag@latestFail
Semver range^1.2.3 or ~1.2.3Fail
Missing versionnpx -y mcp-server-gitFail
Floating git refgit+https://...#mainFail
Exact pin@2026.1.14Pass

Re-scan after changes

After editing your MCP config or charter.yaml:
charter doctor
To focus on MCP findings only while iterating:
charter doctor --rule AE-MCP-001,AE-MCP-002,AE-MCP-003

Fast investigation loop

charter doctor
charter explain AE-MCP-001
charter fix --rule AE-MCP-001 --dry-run
charter fix --rule AE-MCP-001
charter doctor

When not to suppress MCP findings

MCP findings are high-signal. Do not jump straight to suppression for findings that point at real supply-chain or trust problems. Suppress only when:
  • the repo intentionally carries a reviewed exception (e.g., a vendored test fixture)
  • you have a real reason and, for permanent suppressions, an approver
See Suppress a Finding for the full suppression workflow.