๐Ÿ”Œ

MCP Server

Security Auditor

Checks a live MCP server's handshake and OAuth compliance

GEOSecurity
100 credits
Per check
~30 seconds
Average runtime
Active
Status

Run this auditor

3 of 3 free audits left today

See what MCP Server finds on your site. No sign-up needed.

How it works

Users most often give a project's main domain rather than the exact MCP endpoint path, so the auditor builds a list of candidate endpoints before probing:

  1. Discover endpoints โ€” uses /.well-known/ai-catalog.json as a link source for Server Card remotes, then /.well-known/mcp/server-card.json and /mcp/server-card. Reads the official remotes[].url array when present, and falls back to a top-level url field for real-world cards that predate or diverge from that schema (e.g. Resend's). Always adds the given URL itself and {origin}/mcp as fallbacks, so an exact endpoint URL (e.g. .../v2/mcp) still works even when no card is published. When the endpointUrl preference is set (see Preferences), it is probed first, ahead of every discovered candidate, which stay as a fallback.

  2. Negotiate โ€” for each candidate in turn, POST server/discover at the newest known protocol date (2026-07-28), with the MCP-Protocol-Version/Mcp-Method headers and _meta fields the live spec requires. On a 400 UnsupportedProtocolVersionError, retries once with the newest mutually-known date from the server's advertised supported list โ€” this is the actual protocol-version negotiation the server runs, not an assumption.

  3. Legacy fallback โ€” if server/discover is not implemented (HTTP 404/405, an unrecognized 400 body, or a -32601 Method not found error), falls back to a legacy initialize handshake at protocolVersion 2025-11-25. Accepts application/json or a single text/event-stream event.

  4. OAuth challenge โ€” a 401 response from any candidate stops the search and short-circuits into OAuth compliance evaluation instead of the handshake path: does WWW-Authenticate carry a compliant Bearer resource_metadata challenge (RFC 9728 ยง5.1), does that Protected Resource Metadata document validate, does its authorization server publish valid metadata (RFC 8414, falling back to OIDC discovery) over HTTPS, and does that metadata advertise Dynamic Client Registration (registration_endpoint, RFC 7591) and PKCE S256 so clients can actually connect. A candidate that fails outright (no response, non-2xx/non-401 status) is skipped in favor of the next candidate; when none produced a handshake or a 401, a candidate that answered 403/407 is reported as a blocked gateway (403), and the two /.well-known/oauth-* documents are probed directly at the origin so one blocked independently of the endpoint is still caught (330).

  5. Dispatch โ€” a successful discover result is audited by the 2026-07-28 class. An initialize result is audited by the class for the negotiated protocolVersion. Unknown dates fail 402 and skip definition rules.

  6. Aggregate โ€” ERROR (500) wins, then auditor FAILs (400/401/402/403 on the handshake path, 427โ€“430 on the OAuth path), then that version's FAILs, then WARNINGs (including the OAuth 330/331/332). If every rule passes, the audit is SUCCESS (200) โ€” either a working handshake or a spec-compliant OAuth challenge.

  7. Specification pins โ€” every run emits 37A-McpServerAuditor-100 through 104 (one per MCP protocol date) and 105 (MCP Authorization). Those checks do not change overall status.

Preferences

All preferences are optional; the auditor resolves the endpoint automatically when none is set.

PreferenceTypeDefaultMeaning
endpointUrlstringโ€”The exact MCP endpoint URL to probe, for when the monitored URL is not itself the endpoint and automatic discovery (Server Card, AI catalog, {origin}/mcp) does not find it. An absolute http(s) URL (https://example.com/api/mcp) is used as-is; a path (/api/mcp, mcp) is resolved against the monitored URL. Probed first, ahead of the discovered candidates, which stay as a fallback. A blank or non-http(s) value is ignored and discovery runs unchanged.

What this auditor validates

Every row maps to one checkRule* method and one CheckCode. Definition rules (410โ€“426, 310โ€“321) run only for the negotiated protocol date, on the handshake path. OAuth rules (427โ€“430, plus the 331/332 warnings) run on the 401 challenge path. 403 (blocked gateway) and 330 (blocked origin discovery document) run on the no-handshake/no-401 path. Pins 100โ€“105 are emitted on every run, including fetch errors. Skip 301 when no Server Card was found. CheckCode suffixes use status ranges: 100โ€“199 information, 200 success, 300โ€“399 warning, 400โ€“499 fail, 500โ€“599 error.

CheckCodeStatusWhen it firesRecommendationWhy it matters
37A-McpServerAuditor-100INFORMATIONEvery run. Records that this auditor implements MCP Protocol 2024-11-05.โ€”โ€”
37A-McpServerAuditor-101INFORMATIONEvery run. Records that this auditor implements MCP Protocol 2025-03-26.โ€”โ€”
37A-McpServerAuditor-102INFORMATIONEvery run. Records that this auditor implements MCP Protocol 2025-06-18.โ€”โ€”
37A-McpServerAuditor-103INFORMATIONEvery run. Records that this auditor implements MCP Protocol 2025-11-25.โ€”โ€”
37A-McpServerAuditor-104INFORMATIONEvery run. Records that this auditor implements MCP Protocol 2026-07-28.โ€”โ€”
37A-McpServerAuditor-105INFORMATIONEvery run. Records that this auditor implements MCP Authorization (RFC 9728, RFC 8414).โ€”โ€”
37A-McpServerAuditor-400FAILNo candidate endpoint (Server Card/catalog remotes, the given URL, {origin}/mcp) ever returned a usable JSON-RPC 2.0 result or even an HTTP 2xx status.Expose an MCP endpoint at one of {attemptedEndpoints}, or list remotes[].url on a Server Card at {origin}/.well-known/mcp/server-card.json; last response was {observed}.If no endpoint answers the MCP handshake, AI assistants have nothing to connect to, so the server is invisible to every tool that would use it.
37A-McpServerAuditor-401FAILA candidate answered HTTP 2xx but the body is not a JSON-RPC 2.0 response with a result.Return a JSON-RPC 2.0 object with jsonrpc="2.0" and a result from {endpoint}; last response was {observedSnippet}.MCP runs over JSON-RPC 2.0; a response that is not a valid JSON-RPC result cannot be parsed by any client, so the connection fails at the first message.
37A-McpServerAuditor-402FAILThe negotiated protocolVersion (or every supportedVersions entry) is not one of the five known dates.Advertise a known MCP protocol version from {endpoint}; replace {version} with 2026-07-28 or another supported date.Clients connect only over MCP protocol versions they recognise; an unknown version date leaves them unable to agree how to talk to the server, so the handshake fails.
37A-McpServerAuditor-403FAILA candidate answered an unauthenticated request with HTTP 403/407 instead of a 401 OAuth challenge โ€” usually a proxy, API gateway, or WAF in front blocking the request before it reaches the server.Return HTTP 401 with WWW-Authenticate: Bearer resource_metadata="..." from {endpoint}, or reconfigure the proxy/gateway/WAF so it forwards unauthenticated MCP requests instead of blocking them with {observed}.A proxy, gateway or WAF answering before the server turns clients away without ever showing them the OAuth challenge, so even authorised AI clients cannot reach the server.
37A-McpServerAuditor-410FAILInitializeResult for MCP 2024-11-05 is missing protocolVersion, capabilities, or serverInfo.Add {missingFields} to the initialize result at {endpoint} (MCP 2024-11-05 requires protocolVersion, capabilities, serverInfo).Clients read these fields during the handshake to learn what the server is and what it can do, so when they are missing the client cannot finish initialization and the connection fails.
37A-McpServerAuditor-411FAILserverInfo is present but name or version is missing (MCP 2024-11-05).Set serverInfo.name and serverInfo.version on {endpoint} (MCP 2024-11-05 Implementation requires both). Observed serverInfo is {serverInfo}.The server's name and version identify it to the client and the people using it, so without them a client cannot record or display what it connected to, and strict clients reject the handshake.
37A-McpServerAuditor-412FAILprotocolVersion is present and is not 2024-11-05.Set protocolVersion to "2024-11-05" on {endpoint}; observed value is {observedVersion}.When the server reports a different protocol version than the one negotiated, the client cannot be sure which rules apply and aborts the connection rather than risk talking past the server.
37A-McpServerAuditor-413FAILInitializeResult for MCP 2025-03-26 is missing required fields.Add {missingFields} to the initialize result at {endpoint} (MCP 2025-03-26 requires protocolVersion, capabilities, serverInfo).Clients read these fields during the handshake to learn what the server is and what it can do, so when they are missing the client cannot finish initialization and the connection fails.
37A-McpServerAuditor-414FAILserverInfo is present but name or version is missing (MCP 2025-03-26).Set serverInfo.name and serverInfo.version on {endpoint} (MCP 2025-03-26 Implementation requires both). Observed serverInfo is {serverInfo}.The server's name and version identify it to the client and the people using it, so without them a client cannot record or display what it connected to, and strict clients reject the handshake.
37A-McpServerAuditor-415FAILprotocolVersion is present and is not 2025-03-26.Set protocolVersion to "2025-03-26" on {endpoint}; observed value is {observedVersion}.When the server reports a different protocol version than the one negotiated, the client cannot be sure which rules apply and aborts the connection rather than risk talking past the server.
37A-McpServerAuditor-416FAILInitializeResult for MCP 2025-06-18 is missing required fields.Add {missingFields} to the initialize result at {endpoint} (MCP 2025-06-18 requires protocolVersion, capabilities, serverInfo).Clients read these fields during the handshake to learn what the server is and what it can do, so when they are missing the client cannot finish initialization and the connection fails.
37A-McpServerAuditor-417FAILserverInfo is present but name or version is missing (MCP 2025-06-18).Set serverInfo.name and serverInfo.version on {endpoint} (MCP 2025-06-18 Implementation requires both). Observed serverInfo is {serverInfo}.The server's name and version identify it to the client and the people using it, so without them a client cannot record or display what it connected to, and strict clients reject the handshake.
37A-McpServerAuditor-418FAILprotocolVersion is present and is not 2025-06-18.Set protocolVersion to "2025-06-18" on {endpoint}; observed value is {observedVersion}.When the server reports a different protocol version than the one negotiated, the client cannot be sure which rules apply and aborts the connection rather than risk talking past the server.
37A-McpServerAuditor-419FAILInitializeResult for MCP 2025-11-25 is missing required fields.Add {missingFields} to the initialize result at {endpoint} (MCP 2025-11-25 requires protocolVersion, capabilities, serverInfo).Clients read these fields during the handshake to learn what the server is and what it can do, so when they are missing the client cannot finish initialization and the connection fails.
37A-McpServerAuditor-420FAILserverInfo is present but name or version is missing (MCP 2025-11-25).Set serverInfo.name and serverInfo.version on {endpoint} (MCP 2025-11-25 Implementation requires both). Observed serverInfo is {serverInfo}.The server's name and version identify it to the client and the people using it, so without them a client cannot record or display what it connected to, and strict clients reject the handshake.
37A-McpServerAuditor-421FAILprotocolVersion is present and is not 2025-11-25.Set protocolVersion to "2025-11-25" on {endpoint}; observed value is {observedVersion}.When the server reports a different protocol version than the one negotiated, the client cannot be sure which rules apply and aborts the connection rather than risk talking past the server.
37A-McpServerAuditor-426FAILserverInfo.icons is present and at least one icon is missing src.Set src on every icon in serverInfo.icons at {endpoint} (MCP 2025-11-25 Icon requires src). Observed icons are {icons}.An icon entry with no source cannot be rendered, so clients that present the server to users show a broken or missing icon.
37A-McpServerAuditor-422FAILDiscoverResult is missing cacheScope, capabilities, resultType, supportedVersions, or ttlMs.Add {missingFields} to the server/discover result at {endpoint} (MCP 2026-07-28 requires cacheScope, capabilities, resultType, supportedVersions, ttlMs).Clients read these fields from the discover result to learn what the server is and what it can do, so when they are missing the client cannot finish discovery and the connection fails.
37A-McpServerAuditor-423FAILsupportedVersions is present and is an empty array.Put at least one MCP protocol date in supportedVersions on {endpoint}; observed value is [].An empty supported-versions list tells clients the server speaks no protocol version at all, so none of them can negotiate a connection.
37A-McpServerAuditor-424FAILcacheScope is present and is not public or private.Set cacheScope to "public" or "private" on {endpoint}; observed value is {observedScope}.The cache scope tells clients whether a discovery result may be shared or must stay private; an invalid value leaves caching undefined, risking either stale tool definitions or leaked per-user data.
37A-McpServerAuditor-425FAILttlMs is present and is not a non-negative integer.Set ttlMs to a non-negative integer (milliseconds) on {endpoint}; observed value is {observedTtl}.The TTL tells clients how long they may cache the discovery result; an invalid value makes caching unpredictable, so clients either re-fetch constantly or serve outdated tool definitions.
37A-McpServerAuditor-427FAILThe endpoint returned HTTP 401 without a compliant WWW-Authenticate challenge (missing header, missing Bearer scheme, or missing resource_metadata).Return WWW-Authenticate: Bearer resource_metadata="https://.../.well-known/oauth-protected-resource" on 401 responses from {endpoint}; observed header was {observed}.The WWW-Authenticate challenge is how a client discovers where to authenticate; without a compliant one, clients cannot start the OAuth flow and give up on the connection.
37A-McpServerAuditor-428FAILThe resource_metadata URL is unreachable, not valid JSON, or missing resource/a non-empty authorization_servers array.Publish RFC 9728 Protected Resource Metadata at {metadataUrl} with "resource" and a non-empty "authorization_servers" array; observed body is {observedSnippet}.This metadata tells clients which authorization server to use; if it is missing or invalid, clients cannot find where to obtain a token and the connection never authenticates.
37A-McpServerAuditor-429FAILNeither RFC 8414 Authorization Server Metadata nor OIDC Discovery for the first authorization_servers entry returns authorization_endpoint and token_endpoint.Publish OAuth 2.0 Authorization Server Metadata (RFC 8414) or OIDC Discovery for {authServerUrl} with authorization_endpoint and token_endpoint; tried {triedUrls}.Without the authorization server's published endpoints, clients have nowhere to send the user to log in or to exchange a token, so the OAuth flow cannot complete.
37A-McpServerAuditor-430FAILAny discovered OAuth URL (resource_metadata, authorization server, its authorization_endpoint or token_endpoint) is http:// instead of https://.Serve {insecureUrls} over HTTPS; MCP Authorization (OAuth 2.1 ยง1.5) requires HTTPS for all authorization endpoints.OAuth tokens and authorization codes sent over plain HTTP can be read or stolen in transit; compliant clients refuse such endpoints, and those that proceed expose their users' credentials.
37A-McpServerAuditor-300WARNINGNewest version the server speaks is not 2026-07-28.Upgrade {endpoint} from {newestVersion} to 2026-07-28 (server/discover).Clients that only speak the newest MCP protocol may refuse to connect or fall back to fewer features, so the server reaches fewer AI tools than it could.
37A-McpServerAuditor-301WARNINGA Server Card was found and remotes[].supportedProtocolVersions disagree with the live handshake.Update remotes[].supportedProtocolVersions on the Server Card to {liveVersions} (card currently lists {cardVersions}).Clients trust the Server Card to choose a protocol version before connecting, so a card that disagrees with the live server steers them into a handshake that negotiates down or fails outright.
37A-McpServerAuditor-310WARNINGInitializeResult for MCP 2024-11-05 has no instructions text.Add an instructions string to the initialize result at {endpoint} (MCP 2024-11-05).The instructions text tells an AI client how to use the server's tools well; without it the model has to guess, so tool calls are more often wrong or wasted.
37A-McpServerAuditor-311WARNINGcapabilities has keys outside the 2024-11-05 known set.Remove or rename {unknownKeys} on {endpoint}, or negotiate a later protocol version. MCP 2024-11-05 known keys: {knownKeys}.Capability keys the negotiated protocol version does not define are ignored by compliant clients, so any feature behind them silently does not work and may signal a version mismatch.
37A-McpServerAuditor-312WARNINGInitializeResult for MCP 2025-03-26 has no instructions text.Add an instructions string to the initialize result at {endpoint} (MCP 2025-03-26).The instructions text tells an AI client how to use the server's tools well; without it the model has to guess, so tool calls are more often wrong or wasted.
37A-McpServerAuditor-313WARNINGcapabilities has keys outside the 2025-03-26 known set.Remove or rename {unknownKeys} on {endpoint}, or negotiate a later protocol version. MCP 2025-03-26 known keys: {knownKeys}.Capability keys the negotiated protocol version does not define are ignored by compliant clients, so any feature behind them silently does not work and may signal a version mismatch.
37A-McpServerAuditor-314WARNINGInitializeResult for MCP 2025-06-18 has no instructions text.Add an instructions string to the initialize result at {endpoint} (MCP 2025-06-18).The instructions text tells an AI client how to use the server's tools well; without it the model has to guess, so tool calls are more often wrong or wasted.
37A-McpServerAuditor-315WARNINGcapabilities has keys outside the 2025-06-18 known set.Remove or rename {unknownKeys} on {endpoint}, or negotiate a later protocol version. MCP 2025-06-18 known keys: {knownKeys}.Capability keys the negotiated protocol version does not define are ignored by compliant clients, so any feature behind them silently does not work and may signal a version mismatch.
37A-McpServerAuditor-316WARNINGserverInfo is present and title is absent or blank (MCP 2025-06-18).Add serverInfo.title on {endpoint} (MCP 2025-06-18). Observed serverInfo is {serverInfo}.The title is the human-friendly name clients show to users; without it they fall back to the raw server name, which is harder for people to recognise and trust.
37A-McpServerAuditor-317WARNINGInitializeResult for MCP 2025-11-25 has no instructions text.Add an instructions string to the initialize result at {endpoint} (MCP 2025-11-25).The instructions text tells an AI client how to use the server's tools well; without it the model has to guess, so tool calls are more often wrong or wasted.
37A-McpServerAuditor-318WARNINGcapabilities has keys outside the 2025-11-25 known set.Remove or rename {unknownKeys} on {endpoint}, or negotiate a later protocol version. MCP 2025-11-25 known keys: {knownKeys}.Capability keys the negotiated protocol version does not define are ignored by compliant clients, so any feature behind them silently does not work and may signal a version mismatch.
37A-McpServerAuditor-319WARNINGserverInfo is missing recommended title, description, icons, or websiteUrl (MCP 2025-11-25).Add {missingFields} to serverInfo on {endpoint} (MCP 2025-11-25). Observed serverInfo is {serverInfo}.These recommended fields are what client UIs use to present the server to users, so leaving them out makes it look unfinished and harder to choose or trust.
37A-McpServerAuditor-320WARNINGDiscoverResult for MCP 2026-07-28 has no instructions text.Add an instructions string to the server/discover result at {endpoint} (MCP 2026-07-28).The instructions text tells an AI client how to use the server's tools well; without it the model has to guess, so tool calls are more often wrong or wasted.
37A-McpServerAuditor-321WARNINGcapabilities has keys outside the 2026-07-28 known set.Remove or rename {unknownKeys} on {endpoint}. MCP 2026-07-28 known keys: {knownKeys}.Capability keys the negotiated protocol version does not define are ignored by compliant clients, so any feature behind them silently does not work and may signal a version mismatch.
37A-McpServerAuditor-330WARNINGAn OAuth discovery document at the origin (/.well-known/oauth-protected-resource or /.well-known/oauth-authorization-server), probed directly as a client would, is present but blocked (HTTP 403/407 or 5xx) rather than reachable or a clean 404.Serve {blockedUrls}, or reconfigure the proxy/gateway so it forwards requests to the /.well-known/oauth-* paths instead of blocking them.AI clients fetch these discovery documents directly to begin the OAuth flow, so when a proxy or gateway blocks them, clients cannot authenticate even though the server itself is reachable.
37A-McpServerAuditor-331WARNINGThe challenge and discovery chain are compliant, but the authorization server advertises no registration_endpoint, so clients that rely on OAuth 2.0 Dynamic Client Registration (RFC 7591) โ€” such as Claude.ai โ€” cannot obtain a client_id and fail to connect.Publish a registration_endpoint and enable Dynamic Client Registration (RFC 7591) on the authorization server, or pre-register every client that connects to {endpoint}.Clients such as Claude.ai register themselves on the fly through Dynamic Client Registration; without it, every client must be set up by hand first, so most simply fail to connect.
37A-McpServerAuditor-332WARNINGThe authorization server does not advertise S256 in code_challenge_methods_supported; MCP Authorization mandates PKCE with S256 for public clients.Advertise "code_challenge_methods_supported": ["S256"] in the authorization server metadata and enforce PKCE on {endpoint}.PKCE with S256 is what stops an intercepted authorization code from being replayed; without it the OAuth flow is open to code-interception attacks, and strict clients refuse to use the server.
37A-McpServerAuditor-500ERRORThe URL is empty or invalid, or the probe threw before a verdict.Retry the audit of {url}; verify the URL is reachable. Last error was {error}.โ€”
37A-McpServerAuditor-200SUCCESSNo ERROR, FAIL, or WARNING findings, on either path.Handshake path: MCP endpoint "{endpoint}" speaks {versions} (newest {newestVersion}); handshake {handshakeMethod} succeeded. OAuth path: MCP endpoint "{url}" requires OAuth 2.0 authorization (RFC 9728); challenge and discovery metadata are spec-compliant.โ€”

Output Documentation

StatusDescriptionTest logic
INFORMATIONSpecification pins only; do not change overall statusEvery run includes 100โ€“104 naming MCP Protocol 2024-11-05 through 2026-07-28 and 105 naming MCP Authorization (RFC 9728, RFC 8414), with their schema/spec URLs.
SUCCESSA known handshake succeeded, or the OAuth challenge and discovery metadata are compliantHandshake: server/discover or initialize returned a JSON-RPC 2.0 result; the negotiated date is known; required handshake fields are present; no outdated-version warning (300). OAuth: the endpoint returned 401 with a compliant challenge, valid Protected Resource Metadata, valid Authorization Server Metadata served over HTTPS, advertising Dynamic Client Registration and PKCE S256.
WARNINGThe server works but is outdated, incomplete, or disagrees with its cardNewest date is not 2026-07-28 (300); card supportedProtocolVersions โ‰  live versions (301); missing instructions (310, 312, 314, 317, 320); unknown capability keys (311, 313, 315, 318, 321); missing serverInfo.title (316); incomplete recommended serverInfo (319); an origin OAuth discovery document is present but blocked (330); the compliant authorization server advertises no registration_endpoint for Dynamic Client Registration (331) or no PKCE S256 (332).
FAILNo usable MCP handshake and no compliant OAuth challenge, or the result violates that date's schemaNo endpoint answered from any candidate (400); not JSON-RPC 2.0 with result (401); unknown protocol date (402); an unauthenticated request was blocked with 403/407 instead of a 401 challenge, typically by a proxy/gateway/WAF (403); missing initialize fields / identity / protocolVersion (410โ€“421); invalid icons (426); missing or invalid discover fields (422โ€“425); non-compliant 401 challenge (427); invalid Protected Resource Metadata (428); invalid Authorization Server Metadata (429); non-HTTPS OAuth URL (430).
ERRORThe request cannot be auditedEmpty, blank, or invalid URL, or an unexpected exception before a verdict (500).

Risks and Considerations

AI clients cannot guess the handshake

  • Without a reachable MCP endpoint, agents cannot list tools or complete a session against the site.

  • A server that only speaks an unknown protocol date will be skipped by clients that implement the five dates this auditor pins.

Card and runtime can drift

  • A Server Card that advertises different supportedProtocolVersions than the live handshake steers clients toward a connection that will fail or negotiate down.

  • Keep remotes[].url and protocol dates in the card aligned with the running server.

Most remote servers require OAuth, and clients must discover it correctly

  • MCP Authorization is optional per spec, but nearly every production remote MCP server (this auditor's own, Resend's, Atlassian's) enforces it via a 401 challenge.

  • A 401 without a compliant WWW-Authenticate: Bearer resource_metadata="..." header leaves clients with no standard way to find where to authenticate.

  • Protected Resource Metadata and Authorization Server Metadata that are unreachable, malformed, or served over plain HTTP block or downgrade every client's authorization flow, not just this auditor's.

A proxy or gateway in front can block the handshake or discovery independently

  • When the MCP endpoint sits behind a reverse proxy, API gateway, or WAF, that layer can reject unauthenticated requests with 403/407 instead of letting the server answer with a 401 challenge (403) โ€” the endpoint looks dead to every client even though the server is healthy. This is exactly how a missing gateway-injected header took 37 Audits' own MCP offline: clients saw 403 and reported registration failures.

  • The MCP endpoint and each /.well-known/oauth-* document are often separate gateway routes that can fail independently, so a discovery document can stay blocked (330) after the endpoint is fixed. This auditor probes those documents directly at the origin, the way a client does, rather than only following the 401 challenge header.

  • A compliant challenge still is not enough to connect: clients such as Claude.ai rely on Dynamic Client Registration (registration_endpoint, 331) and PKCE S256 (332); a server that omits either leaves those clients unable to register or to complete the authorization code flow.

Older initialize vs server/discover

  • Protocol 2026-07-28 replaces initialize with server/discover and requires cacheScope, ttlMs, resultType, and supportedVersions.

  • Staying on an initialize-only date (300) works for older clients but misses discover-based metadata and caching hints.

This documentation is built and hosted on Mintlify, a developer documentation platform.

Source: docs.37audits.com

Ready to start auditing?

Add this auditor to your monitoring setup and start identifying issues on your websites today.

ยฉ 2026 37 Audits. All rights reserved. Audit your websites with confidence.

Supported by

Made with โค๏ธ in Floripa