mcpcomp
Scan an MCP server's authentication surface, unauthenticated.
npx mcpcomp https://mcp.example.com/mcp
Four outcomes, because a grade is the wrong answer to three of them:
$ mcpcomp https://mcp.linear.app/mcp
Grade: A (0 requirement violations; advisories do not affect the grade)
$ mcpcomp https://mcp.deepwiki.com/mcp
No authorization configured — the server answers unauthenticated MCP requests.
Authorization is optional in MCP, so there is nothing to audit here.
$ mcpcomp https://sh.inference.ac
The endpoint redirects (HTTP 301) to https://api.inference.sh/mcp.
Scan that URL instead.
$ mcpcomp https://mcp.sentry.dev
The endpoint answered but never demanded authorization and did not serve the
probed MCP operation, so there is no authorization surface at this URL to
audit. Authorization-server metadata was found at this origin, so the MCP
endpoint likely lives on another path of this host — scan that URL instead.
When a customer says "your MCP doesn't connect", doctor answers the first
support question — whose layer is it — from the outside, with no credentials:
mcpcomp doctor https://mcp.example.com/mcp --client codex
It classifies the failure as network, server configuration, identity
provider, or (inferred) client auth state; naming the failing client expands
the verdict into that client's documented failure patterns.
Also included: mcpcomp serve exposes the scanner as MCP tools over stdio,
so an agent whose connection is failing can diagnose it in-conversation;
mcpcomp verify proves an M2M client-credentials path end to end; and
mcpcomp entra alerts on expiring Microsoft Entra credentials — the one
failure no outside probe can see — with --rotate to fix them.
Track a server for drift:
mcpcomp https://mcp.example.com/mcp --json > baseline.json
mcpcomp https://mcp.example.com/mcp --baseline baseline.json
Exit codes: 0 pass or nothing to audit, 1 grade D, 2 grade F or a bad
argument, 3 inconclusive — a redirect, an unreachable endpoint, or a URL
with no authorization surface to audit is not a pass.
The grade counts specification requirements only; recommendations a server
does not follow are reported as advisories and do not decide the letter. Every
finding cites the requirement it enforces, using the identifiers from the MCP
conformance suite.
Protocol and OAuth semantics are delegated to @modelcontextprotocol/client,
so verdicts match what a real client does.
Full documentation: https://docs.mcpcomp.dev
Apache-2.0.