Skip to main content
Black-box checks for any OAuth 2.1 authorization server or MCP resource server. Each check passes, fails or skips. No secrets needed.

Conformance command options

The tool checks the /.well-known metadata paths for authorization servers and protected resources. Set THEAUTH_CONFORMANCE_TOKEN and THEAUTH_CONFORMANCE_REFRESH_TOKEN to keep tokens out of shell history.

Checks

Severity follows RFC 2119. A failed MUST turns the badge red. A failed SHOULD or MAY turns it yellow. Skips are never faked into passes, and each one says why.

Skipped checks

  • Not advertised: DCR, token exchange, introspection, DPoP.
  • refresh-rotation: needs --refresh-token and --client-id. The test consumes the token.
  • resource-indicator-audience: needs --token (a JWT).
  • token-exchange-act-chain: needs a valid subject token and client credentials.
  • Introspection behind client authentication (401 or 403).
  • Negative authorize probes: the server never accepts a valid request, or shows a login page for the bad one. Skipped if the control request is rejected.

Badge

--badge out.json writes a shields.io endpoint:
Host the JSON at a stable public URL and point shields at it:
Refresh it in CI with npx @glinr/theauth-conformance https://auth.example.com --badge badge.json. Only checks that ran count toward the message. Green: nothing failed. Yellow: only SHOULD or MAY failed. Red: a MUST failed. Grey (not tested): nothing could run.

Use in code

Tested against theAuth

The package test runs the suite against the real MCP OAuth module from @glinr/theauth on a Node http server. Pinned result: 13 pass, 0 fail, 5 skipped (refresh rotation, audience, token exchange twice, introspection). A lax stub server must fail the checks.

Limits

  • A green badge means the server behaved correctly on these probes. It is not an audit.
  • Skips never count as passes.
Last modified on October 17, 2026