The three questions
Is the server pinned?
Supply chain integrityA floating reference installs a different package tomorrow than it installed today. Charter checks every MCP server reference for a pinned, reviewable version.Rule:
AE-MCP-001Is the remote trusted?
Shadow server riskAn agent should not be pointed at arbitrary remote infrastructure without review. Charter compares remote origins against an effective allowlist of trusted hosts.Rule:
AE-MCP-002Is auth declared?
Unauthorized access preventionA public remote with no declared authentication boundary is an open door. Charter checks for the presence of auth metadata on non-local remotes.Rule:
AE-MCP-003Why pinning matters
Floating MCP server references hand version control to the registry’s publish cadence. Examples of risky references:- An agent tool installs a different package version on Tuesday than it installed on Monday
- A package can be deprecated or archived after a repo first passed Charter
- A previously-clean pinned version can later become the subject of a CVE or GHSA advisory
Charter’s catalog is aware of deprecated packages.
@modelcontextprotocol/server-github was archived — Charter flags it as High with the migration path to github/github-mcp-server. You do not need to know the successor; Charter tells you.AE-MCP-001 finding ladder
For a given server, Charter follows a precedence ladder and reports one finding — the most important next action:| Signal | Severity | Example |
|---|---|---|
| Deprecated or archived package | High | @modelcontextprotocol/server-github |
| Known CVE or advisory on the pinned version | High | mcp-server-git@2025.8.0 (path traversal) |
| Unpinned version reference | High | @latest, ^1.0.0, missing version |
| Behind catalog stable, no advisory | Informational | Pinned but outdated, clean |
| Current and clean | Pass | — |
Why trusted remotes matter
AE-MCP-002 maps to OWASP MCP09: shadow MCP servers. A coding agent should not be pointed at arbitrary remote infrastructure without review. In practice, Charter treats this as two layers:
- Local and internal origins are exempt — no allowlist check required
- Public remote hosts are compared against the effective allowlist:
charter.yaml mcp.trustedRemotes+ catalogtrustedHosts
trustedRemotes list in charter.yaml is how teams document reviewed exceptions beyond the vendor baseline.
Why auth declaration matters
AE-MCP-003 maps to OWASP MCP07: insufficient authentication and authorization. Charter’s check is intentionally presence-based — it does not attempt to validate credentials or enforce a specific OAuth flow. It only asks whether the config declares an auth header such as:
AuthorizationX-Api-KeyApi-KeyX-Auth-Token
OWASP MCP Top 10 coverage
MCP04 — Insufficient Supply Chain Security → AE-MCP-001
MCP04 — Insufficient Supply Chain Security → AE-MCP-001
Floating and deprecated package references allow supply-chain substitution without review.
AE-MCP-001 requires exact pinning and flags deprecated packages with their known successors.Severity when triggered: High (unpinned, deprecated, or advisory-affected) or Informational (behind stable, no advisory)MCP07 — Insufficient Authentication and Authorization → AE-MCP-003
MCP07 — Insufficient Authentication and Authorization → AE-MCP-003
MCP09 — Inadequate Shadow Server Defense → AE-MCP-002
MCP09 — Inadequate Shadow Server Defense → AE-MCP-002
Unreviewed public remote infrastructure gives agents tool access that was never explicitly sanctioned.
AE-MCP-002 compares remote origins against a maintained allowlist and flags unknowns.Severity when triggered: HighHow the catalog works
Charter ships an embedded MCP catalog so the scanner stays offline and deterministic. The catalog provides:- known server package metadata and stable versions
- deprecated package successors and migration paths
- known advisories and their
fixedInversions - a trusted-host baseline for major vendor-operated remote endpoints
AE-MCP-001 reports the single most important signal following the precedence ladder: deprecated → unpinned → advisory → behind-stable → clean. Output stays focused on the most important next action.