> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mcpcomp.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Checks

> What the scanner verifies, and what every finding cites

Every finding cites the normative requirement it enforces, using the official identifiers from the MCP conformance suite's spec-reference catalogue, so a finding here and a conformance result elsewhere name the same requirement.

## Check families

| Family                 | Checks                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `discovery`            | Protected Resource Metadata reachable, `authorization_servers` non-empty, challenge carries the metadata pointer, issuer identity matches (the SDK's own verdict, not a local comparison), issuer is a well-formed `https` identifier (no query or fragment), AS metadata resolves through the discovery ladder and is served as `application/json`, every other listed authorization server resolves too, credential-less requests answered 403 instead of 401 (advisory — the reference client only starts OAuth on a 401)                                                                                                                                                                                                  |
| `client_compatibility` | PKCE `S256` advertised (for OIDC-discovery providers, omitting `code_challenge_methods_supported` entirely is a requirement violation), `response_types_supported` includes `code`, DCR or CIMD available, RFC 9207 `iss` advertised (a dated forecast — the spec pre-announces its upgrade to MUST), protocol-revision acceptance, public-client auth method, registered-client durability (identifies server frameworks that silently expire registrations), DPoP-bound-tokens-required interop advisory (RFC 9449 — locks out every reference client until SDK DPoP support ships), and interop heuristics read from the first-party SDKs' own divergence: token-endpoint auth-method selection and pathful-issuer refresh |
| `token_trust`          | Endpoints and the PRM `resource` served over HTTPS, scope minimization, `offline_access` absent from PRM, `bearer_methods_supported` does not offer `query`                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |

The report also names the capabilities it observed — PKCE, registration
(DCR/CIMD), RFC 9207 `iss`, and the machine-to-machine grants
(`client_credentials` and `jwt-bearer` workload identity) — the facts a
developer maps onto a client's requirements. The baseline diff watches these
too: a resource flipping `dpop_bound_access_tokens_required` locks out every
non-DPoP client with no other metadata change.

## Probe tiers

Checks are tagged by how much access they need:

* **`passive`** — no credentials. Mostly read from metadata documents; also includes credential-less liveness requests to the endpoints that metadata advertises — an unauthenticated GET is what any client emits before it has anything. On a server offering Dynamic Client Registration, the authorization endpoint's liveness GET carries the query a client with a stale registration would send (a synthetic client id that cannot exist, plus a PKCE challenge), because the answer identifies the server framework and costs no extra request. Nothing is registered and no token is presented.
* **`active`** — presents tokens, registers clients, and otherwise attempts the attacks it is checking for. Not implemented yet; when it lands it will not run without proof the operator owns the target.

## Multiple authorization servers

The client-compatibility checks run against `authorization_servers[0]` — the entry the MCP SDK selects unconditionally, so its verdict is what a reference client experiences. The others are checked for metadata resolution and issuer identity only: the specification makes each listed server independent and leaves the choice among them to the client, so one that does not resolve is broken for whichever client picks it. At most five beyond the first are probed; if the cap bites, the check reports as skipped rather than passed, because it did not see what it claims to cover.

## Verdicts a check can reach

Every check ends in exactly one of three states:

* **Passed** — the thing was observed and conforms.
* **Finding** — the thing was observed and does not.
* **Skipped** — the thing was never observed, so neither claim is honest. A check never reports "passed" for something it did not see.
