One read of Claude Documentationclaude-docs-20261023T180724Z
267 pages moved out of 280 read.
Pages moved
267
significant first
Pages read
280
in this capture
Captured
18:07 UTC
Corpus hash
307a31a7094a
corpus-hash
What this read moved
101-125 of 267, page 5 of 11This capture is too large to show at once. Changes 101-125 of 267 are below, significant first; the rest are on the following screens.
connectors/building/after-publishing Changed · +8 / -8 lines
from line 8
88
99> [!NOTE]
1010>
11> If your submission isn't live yet, see [Track your directory submission](/docs/directory/submission-status.md), which explains what each status in the portal means and who acts next.
11> If your submission isn't live yet, see [Track your directory submission](https://claude.com/docs/directory/submission-status.md), which explains what each status in the portal means and who acts next.
1212
1313You can [update what you've published](#update-a-published-connector-or-plugin), [track how a published plugin is used](#track-published-plugin-usage), [share your listing's permanent URL](#directory-listing-urls-are-permanent), or [delist](#delist-a-connector-or-plugin).
1414
from line 18
1818
1919### MCP server changes
2020
21To add, change, or remove tools, deploy the change to your server. The tool names shown on your directory listing are part of the listing details, so update them with a [listing edit](/docs/connectors/building/managing-your-listing.md#edit-your-listing), which a reviewer approves.
21To add, change, or remove tools, deploy the change to your server. The tool names shown on your directory listing are part of the listing details, so update them with a [listing edit](https://claude.com/docs/connectors/building/managing-your-listing.md#edit-your-listing), which a reviewer approves.
2222
2323### Plugin changes
2424
2525To update a listed plugin, push to the branch or tag the directory tracks for it. The directory picks up the new commit, runs the same validation and security scan as your first submission, and shows the result as a new version on the plugin's page in the portal. If you set `version` in `plugin.json`, raise it with each release, because installed copies use it to tell that an update exists.
2626
27A version that doesn't pass, or that is held for a reviewer, doesn't take your listing down: the directory keeps serving the last published version until a newer one is published. [Submit a plugin](/docs/plugins/submit.md#update-a-published-plugin) covers how the directory finds new commits, how to have GitHub notify it on push, and how to change the tracked branch or tag.
27A version that doesn't pass, or that is held for a reviewer, doesn't take your listing down: the directory keeps serving the last published version until a newer one is published. [Submit a plugin](https://claude.com/docs/plugins/submit.md#update-a-published-plugin) covers how the directory finds new commits, how to have GitHub notify it on push, and how to change the tracked branch or tag.
2828
2929### Listing details
3030
31For a connector, edit your description, categories, icon, and other listing details from the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage). See [Manage your directory listing](/docs/connectors/building/managing-your-listing.md) for what you can edit directly and which changes require review.
31For a connector, edit your description, categories, icon, and other listing details from the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage). See [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md) for what you can edit directly and which changes require review.
3232
3333A plugin listing's name and short description come from `plugin.json` and the README of the version that's live. To change them, edit those files and publish a new version, as [Plugin changes](#plugin-changes) describes. If an Anthropic reviewer edited either field during review, the listing keeps the reviewer's text. From the plugin's **Settings** tab in the developer portal, you can change which surfaces the plugin is listed on, your contact email, and your answer on whether the plugin collects or transmits user data.
3434
3535## Track published plugin usage
3636
37A published plugin's page in the developer portal has a **Usage** tab. The portal is open to the people who [can submit](/docs/directory/publish.md#confirm-you-can-submit-to-the-directory). Use it to see how many accounts install and use the plugin, which version they're on, and whether the plugin loads and its MCP servers respond without errors.
37A published plugin's page in the developer portal has a **Usage** tab. The portal is open to the people who [can submit](https://claude.com/docs/directory/publish.md#confirm-you-can-submit-to-the-directory). Use it to see how many accounts install and use the plugin, which version they're on, and whether the plugin loads and its MCP servers respond without errors.
3838
3939The **Usage** tab covers a period you choose, up to 90 days, and you can export the figures as CSV. It shows these groups of figures:
4040
from line 46
4646
4747Figures are computed once a day in UTC, and the tab shows the date the data runs through. Until usage is recorded for your plugin, the tab is marked **Preview** and shows sample numbers.
4848
49For a connector, [Manage your directory listing](/docs/connectors/building/managing-your-listing.md#server-health-and-usage-metrics) covers the health badge and usage metrics.
49For a connector, [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md#server-health-and-usage-metrics) covers the health badge and usage metrics.
5050
5151## Directory listing URLs are permanent
5252
from line 68
6868
6969## Next steps
7070
71* [Manage your directory listing](/docs/connectors/building/managing-your-listing.md): for a connector, check submission status and health and usage metrics, and edit the listing
72* [Connector verification](/docs/connectors/verification.md#list-your-own-connector): see how a listing becomes Verified and what each label means to people installing it
71* [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md): for a connector, check submission status and health and usage metrics, and edit the listing
72* [Connector verification](https://claude.com/docs/connectors/verification.md#list-your-own-connector): see how a listing becomes Verified and what each label means to people installing it
7373
connectors/building/authentication Changed · +18 / -18 lines
from line 21
2121
2222> [!NOTE]
2323>
24> * If some of your tools work without the user's account, see [Lazy authentication](/docs/connectors/building/lazy-authentication.md) to let people use those right away and sign in only when Claude reaches a tool that needs their account
25> * If you want enterprise users to connect through their organization's SSO without a consent screen, see [Enterprise Managed Auth](/docs/connectors/building/enterprise-managed-auth.md)
24> * If some of your tools work without the user's account, see [Lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md) to let people use those right away and sign in only when Claude reaches a tool that needs their account
25> * If you want enterprise users to connect through their organization's SSO without a consent screen, see [Enterprise Managed Auth](https://claude.com/docs/connectors/building/enterprise-managed-auth.md)
2626
2727Use this page to [pick an authentication type](#supported-authentication-types), [register Claude as an OAuth client](#register-claude-as-an-oauth-client), [make discovery and redirects work](#oauth-discovery-and-redirect-uris), and [meet the token endpoint requirements](#token-endpoint-requirements).
2828
from line 37
3737| `oauth_anthropic_creds` | OAuth 2.0 with [Anthropic-held client credentials](#anthropic-held-client-credentials) | Supported. [Enter the client in the developer portal](#enter-your-oauth-client-in-the-developer-portal) |
3838| `custom_connection` | Custom URL or OAuth client credentials [entered at connection time](#credentials-entered-at-connection-time) | Contact `[email protected]` |
3939| `static_headers` | Fixed credential (API key or bearer token) entered by an organization Owner as a request header when adding the connector | Beta, for a limited set of organizations |
40| `none` | No authentication (authless server) | Supported by default. To leave some tools open and require sign-in for others, see [Lazy authentication](/docs/connectors/building/lazy-authentication.md) |
40| `none` | No authentication (authless server) | Supported by default. To leave some tools open and require sign-in for others, see [Lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md) |
4141
4242If your server URL varies per customer, read [Servers with per-customer URLs](#servers-with-per-customer-urls) before you pick a type.
4343
from line 48
4848* **Read the credential from a request header**: standard authentication header names such as `authorization`, `x-api-key`, and `x-auth-token` work for every connector. If you need a different header name, Anthropic has to approve it before Owners can save the connector, so ask `[email protected]` first
4949* **Never accept it in the URL**: don't read tokens from query parameters such as `?token=` or `?apiKey=`. URLs end up in server logs, proxies, and browser history, and the MCP authorization specification [prohibits access tokens in the query string](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#token-requirements)
5050* **Treat it as the organization's credential, not a person's**: every member's requests carry the same key, so don't use it to identify which user is calling. If your tools need to act as the individual user, use OAuth instead
51* **Tell Owners what to enter**: document the header name and where they get the key. [Authenticate with request headers](/docs/connectors/custom/add-unlisted.md#authenticate-with-request-headers) shows what the Owner sees when adding the connector
51* **Tell Owners what to enter**: document the header name and where they get the key. [Authenticate with request headers](https://claude.com/docs/connectors/custom/add-unlisted.md#authenticate-with-request-headers) shows what the Owner sees when adding the connector
5252
5353### Servers with per-customer URLs
5454
from line 85
8585If your authorization server doesn't support DCR, meaning it exposes no `registration_endpoint`, you have these options:
8686
8787* Expose a `registration_endpoint`
88* Support CIMD instead. Claude selects CIMD only when your authorization server metadata advertises both `"client_id_metadata_document_supported": true` and `"none"` in `token_endpoint_auth_methods_supported`. The second is required because Claude's CIMD client authenticates as a public client at your token endpoint. If either is missing, Claude falls back to DCR. See [lazy authentication](/docs/connectors/building/lazy-authentication.md#identify-claude-with-a-client-id-metadata-document) for a worked CIMD example
88* Support CIMD instead. Claude selects CIMD only when your authorization server metadata advertises both `"client_id_metadata_document_supported": true` and `"none"` in `token_endpoint_auth_methods_supported`. The second is required because Claude's CIMD client authenticates as a public client at your token endpoint. If either is missing, Claude falls back to DCR. See [lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md#identify-claude-with-a-client-id-metadata-document) for a worked CIMD example
8989* Switch to `oauth_anthropic_creds`, if your listing doesn't use a URL pattern
9090
9191If your server URL varies per customer and DCR isn't available, CIMD is the recommended path. Every customer's authorization server must advertise both CIMD values. Otherwise Claude falls back to DCR for that customer, which needs a `registration_endpoint`.
from line 105
105105
106106### Enter your OAuth client in the developer portal
107107
108If your listing uses Anthropic-held client credentials, enter your OAuth client in the **How users authenticate** section when you [submit your connector](/docs/connectors/building/submission.md):
108If your listing uses Anthropic-held client credentials, enter your OAuth client in the **How users authenticate** section when you [submit your connector](https://claude.com/docs/connectors/building/submission.md):
109109
1101101. Under **Authentication requirement**, select **Always required** or **Required when the server asks**.
1111112. Under **Authentication methods**, find the **OAuth sign-in** card. If there's none, click **Add OAuth sign-in**.
from line 160
160160
161161Claude includes a [PKCE](https://datatracker.ietf.org/doc/html/rfc7636) `code_challenge` with `code_challenge_method=S256` on every authorization request, regardless of which registration mechanism it uses. Your authorization server must support S256 PKCE. The [MCP authorization spec](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#authorization-code-protection) also requires it to advertise `"code_challenge_methods_supported": ["S256"]` in its metadata so spec-compliant clients can verify support before starting the flow.
162162
163To control which scopes Claude requests, include a `scope` parameter in the `WWW-Authenticate` header on your `401` response. If you don't, Claude requests the scopes your protected resource metadata advertises in `scopes_supported`. Claude also appends `offline_access` when your authorization server metadata lists it in `scopes_supported`, to obtain a refresh token. See [lazy authentication](/docs/connectors/building/lazy-authentication.md#answer-a-protected-call-with-401-before-the-mcp-sdk-runs) for the canonical `401` shape.
163To control which scopes Claude requests, include a `scope` parameter in the `WWW-Authenticate` header on your `401` response. If you don't, Claude requests the scopes your protected resource metadata advertises in `scopes_supported`. Claude also appends `offline_access` when your authorization server metadata lists it in `scopes_supported`, to obtain a refresh token. See [lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md#answer-a-protected-call-with-401-before-the-mcp-sdk-runs) for the canonical `401` shape.
164164
165165## OAuth discovery and redirect URIs
166166
from line 175
175175* **List your primary issuer first**: the document's `authorization_servers` field must list your authorization server's issuer URL. If you list more than one, Claude uses the first entry and doesn't fall back to later entries
176176* **Serve authorization server metadata Claude can reach**: your authorization server must serve its own discovery metadata, either [RFC 8414](https://www.rfc-editor.org/rfc/rfc8414) authorization server metadata or [OpenID Connect Discovery 1.0](https://openid.net/specs/openid-connect-discovery-1_0.html), at its `/.well-known/` paths. That host must also be reachable from Anthropic's [published egress range](https://platform.claude.com/docs/en/api/ip-addresses). Discovery requests to the authorization server come from the same IP range as requests to your MCP server, so a WAF in front of your identity provider can break the flow even when your MCP server is reachable
177177
178The `401` response carries the pointer in its `WWW-Authenticate` header. This is the same handshake described in [Answer a protected call with 401 before the MCP SDK runs](/docs/connectors/building/lazy-authentication.md#answer-a-protected-call-with-401-before-the-mcp-sdk-runs):
178The `401` response carries the pointer in its `WWW-Authenticate` header. This is the same handshake described in [Answer a protected call with 401 before the MCP SDK runs](https://claude.com/docs/connectors/building/lazy-authentication.md#answer-a-protected-call-with-401-before-the-mcp-sdk-runs):
179179
180180```http theme={null}
181181HTTP/1.1 401 Unauthorized
from line 188
188188
189189> [!NOTE]
190190>
191> If your authorization server is Microsoft Entra ID, you must also register the MCP server URL as an Application ID URI on your Entra app registration, or the token request fails with `AADSTS9010010`. By default, Entra accepts that URL as an Application ID URI only when it's on a domain your tenant has verified, as described in [Microsoft's identifier URI restrictions](https://learn.microsoft.com/en-us/entra/identity-platform/identifier-uri-restrictions), so an MCP server on a platform hostname such as `*.azurewebsites.net` needs a custom domain first. See [the troubleshooting entry](/docs/connectors/building/troubleshooting.md#microsoft-entra-id-rejects-the-resource-value) for the fix.
191> If your authorization server is Microsoft Entra ID, you must also register the MCP server URL as an Application ID URI on your Entra app registration, or the token request fails with `AADSTS9010010`. By default, Entra accepts that URL as an Application ID URI only when it's on a domain your tenant has verified, as described in [Microsoft's identifier URI restrictions](https://learn.microsoft.com/en-us/entra/identity-platform/identifier-uri-restrictions), so an MCP server on a platform hostname such as `*.azurewebsites.net` needs a custom domain first. See [the troubleshooting entry](https://claude.com/docs/connectors/building/troubleshooting.md#microsoft-entra-id-rejects-the-resource-value) for the fix.
192192
193193If you control both hosts, an alternative is to serve the MCP endpoint and the authorization server behind a single custom domain that can route both `/.well-known/*` and your MCP path.
194194
195195> [!TIP]
196196>
197> A common symptom of a discovery failure is that your MCP server receives the initial request but your authorization server sees no traffic at all. That happens when neither path works: there's no `WWW-Authenticate: Bearer resource_metadata=…` header on your `401`, and the well-known paths on your MCP server's origin return `404`. With no metadata to read, Claude never learns where your authorization server is, and the connection fails with "Couldn't reach the MCP server." See [troubleshooting](/docs/connectors/building/troubleshooting.md) for the full diagnostic flow.
197> A common symptom of a discovery failure is that your MCP server receives the initial request but your authorization server sees no traffic at all. That happens when neither path works: there's no `WWW-Authenticate: Bearer resource_metadata=…` header on your `401`, and the well-known paths on your MCP server's origin return `404`. With no metadata to read, Claude never learns where your authorization server is, and the connection fails with "Couldn't reach the MCP server." See [troubleshooting](https://claude.com/docs/connectors/building/troubleshooting.md) for the full diagnostic flow.
198198
199199### Callback URLs
200200
from line 212
212212http://localhost:3118/callback
213213```
214214
215Claude Code declares `http://localhost/callback` and `http://127.0.0.1/callback` in its [Client ID Metadata Document](https://claude.ai/oauth/claude-code-client-metadata), so match both with the port component ignored. [RFC 8252 section 7.3](https://datatracker.ietf.org/doc/html/rfc8252#section-7.3) requires this for the IP-literal form (`127.0.0.1`). Apply the same port-agnostic match to `localhost` so Claude Code works, even though RFC 8252 section 8.3 discourages `localhost`. See [lazy authentication](/docs/connectors/building/lazy-authentication.md#match-loopback-redirect-uris-without-the-port) for implementation details.
215Claude Code declares `http://localhost/callback` and `http://127.0.0.1/callback` in its [Client ID Metadata Document](https://claude.ai/oauth/claude-code-client-metadata), so match both with the port component ignored. [RFC 8252 section 7.3](https://datatracker.ietf.org/doc/html/rfc8252#section-7.3) requires this for the IP-literal form (`127.0.0.1`). Apply the same port-agnostic match to `localhost` so Claude Code works, even though RFC 8252 section 8.3 discourages `localhost`. See [lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md#match-loopback-redirect-uris-without-the-port) for implementation details.
216216
217217On your consent screen, display the redirect URI's hostname clearly. The [MCP authorization spec](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#localhost-redirect-uri-risks) requires this and recommends an extra warning when the only registered redirect URIs are loopback addresses, because any local process can bind a port and claim to be the client.
218218
from line 243
243243
244244Unless your listing asks for credentials at connection time, enterprise customers connect through the same OAuth application as everyone else. Scope what each user can reach with your service's own per-user permissions rather than with a per-tenant OAuth app. These cases work differently:
245245
246* **SSO without a consent screen**: organizations using SSO can connect their users with an identity assertion signed by their identity provider instead of an interactive OAuth consent step. See [Enterprise Managed Auth](/docs/connectors/building/enterprise-managed-auth.md) for what your authorization server needs to support
246* **SSO without a consent screen**: organizations using SSO can connect their users with an identity assertion signed by their identity provider instead of an interactive OAuth consent step. See [Enterprise Managed Auth](https://claude.com/docs/connectors/building/enterprise-managed-auth.md) for what your authorization server needs to support
247247* **Customer-supplied OAuth client**: a listing that asks for [credentials entered at connection time](#credentials-entered-at-connection-time) has each customer supply its own OAuth client, and an administrator who adds your server as a [custom connector](#custom-connectors) can enter one too
248248
249249### Custom connectors
250250
251When a customer adds your server by URL as a custom connector, Claude identifies itself to your authorization server in one of three ways: with the Client ID Metadata Document that Anthropic hosts for it, through Dynamic Client Registration, or with an OAuth client ID the customer registered with you and enters in the dialog. [Choose authentication settings](/docs/connectors/custom/add-unlisted.md#choose-authentication-settings) shows the dialog the customer sees. On your side:
251When a customer adds your server by URL as a custom connector, Claude identifies itself to your authorization server in one of three ways: with the Client ID Metadata Document that Anthropic hosts for it, through Dynamic Client Registration, or with an OAuth client ID the customer registered with you and enters in the dialog. [Choose authentication settings](https://claude.com/docs/connectors/custom/add-unlisted.md#choose-authentication-settings) shows the dialog the customer sees. On your side:
252252
253253* **Support CIMD or DCR**: customers can then connect without registering a client with you first. See [DCR and CIMD details](#dcr-and-cimd-details) for what each needs from your authorization server
254254* **Require a client secret only for confidential clients**: the secret is optional in the dialog, so customers need one only if your authorization server requires confidential-client authentication
255* **Use request headers for a fixed API key or token**: for servers that authenticate with a fixed credential rather than OAuth, request header authentication (`static_headers`) is available in beta. See [Supported authentication types](#supported-authentication-types) and [Authenticate with request headers](/docs/connectors/custom/add-unlisted.md#authenticate-with-request-headers) for what Owners see
255* **Use request headers for a fixed API key or token**: for servers that authenticate with a fixed credential rather than OAuth, request header authentication (`static_headers`) is available in beta. See [Supported authentication types](#supported-authentication-types) and [Authenticate with request headers](https://claude.com/docs/connectors/custom/add-unlisted.md#authenticate-with-request-headers) for what Owners see
256256
257257## Network reference
258258
from line 260
260260
261261## Next steps
262262
263* [Lazy authentication](/docs/connectors/building/lazy-authentication.md): let people use the tools that don't need their account right away, and ask them to sign in only when Claude reaches one that does
264* [Enterprise Managed Auth](/docs/connectors/building/enterprise-managed-auth.md): accept identity assertions from enterprise SSO instead of an interactive consent step
265* [Test your connector](/docs/connectors/building/testing.md): add your server as a custom connector and exercise the auth flow
266* [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md): diagnose "Couldn't reach the MCP server" and "Authorization with the MCP server failed"
263* [Lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md): let people use the tools that don't need their account right away, and ask them to sign in only when Claude reaches one that does
264* [Enterprise Managed Auth](https://claude.com/docs/connectors/building/enterprise-managed-auth.md): accept identity assertions from enterprise SSO instead of an interactive consent step
265* [Test your connector](https://claude.com/docs/connectors/building/testing.md): add your server as a custom connector and exercise the auth flow
266* [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md): diagnose "Couldn't reach the MCP server" and "Authorization with the MCP server failed"
267267
connectors/building/directory-vs-custom Changed · +8 / -8 lines
from line 8
88
99> [!NOTE]
1010>
11> If you want to know what directory and custom connectors look like to a Claude user, including the Verified and Community labels, see [connector verification](/docs/connectors/verification.md).
11> If you want to know what directory and custom connectors look like to a Claude user, including the Verified and Community labels, see [connector verification](https://claude.com/docs/connectors/verification.md).
1212
1313## Compare directory and custom connectors
1414
from line 21
2121| **In-product discovery** | Browse, search, Suggested Connectors | None |
2222| **Distribution** | [Directory link](#share-an-install-link) | [Install link](#share-an-install-link) or manual URL entry |
2323| **Anthropic-held client credentials** | Available | Not available |
24| **[External link](/docs/connectors/building/mcp-apps/external-links.md) confirmation** | Can allowlist destinations to skip the modal | Always shows the modal |
24| **[External link](https://claude.com/docs/connectors/building/mcp-apps/external-links.md) confirmation** | Can allowlist destinations to skip the modal | Always shows the modal |
2525| **Appears as** | Named card with logo | **Custom** |
2626
2727## Share an install link
from line 36
3636https://claude.ai/directory/connectors/SLUG
3737```
3838
39For example, `https://claude.ai/directory/connectors/dovetail` opens the Dovetail listing with its description, screenshots, and a **Connect** button. You receive your slug when your submission is approved, and it [can't change afterward](/docs/connectors/building/after-publishing.md#directory-listing-urls-are-permanent).
39For example, `https://claude.ai/directory/connectors/dovetail` opens the Dovetail listing with its description, screenshots, and a **Connect** button. You receive your slug when your submission is approved, and it [can't change afterward](https://claude.com/docs/connectors/building/after-publishing.md#directory-listing-urls-are-permanent).
4040
4141### Custom connector install link
4242
from line 82
8282
8383### The MCP Registry and the Anthropic Directory
8484
85The Anthropic Directory is independent of the open [MCP Registry](https://registry.modelcontextprotocol.io) and the `modelcontextprotocol/servers` GitHub repository. Publishing to those doesn't surface your server in Claude. Submit through the [directory submission form](/docs/connectors/building/submission.md) to appear in Claude products.
85The Anthropic Directory is independent of the open [MCP Registry](https://registry.modelcontextprotocol.io) and the `modelcontextprotocol/servers` GitHub repository. Publishing to those doesn't surface your server in Claude. Submit through the [directory submission form](https://claude.com/docs/connectors/building/submission.md) to appear in Claude products.
8686
8787## Listing patterns for enterprise and multi-tenant servers
8888
from line 94
9494
9595### Per-tenant URLs
9696
97If your server URL varies per tenant, such as `{tenant}.mcp.example.com`, submit one directory listing with a URL pattern. Each user enters their own URL when they connect. A listing with a URL pattern can be published only once it has the **Verified** label. See [Servers with per-customer URLs](/docs/connectors/building/authentication.md#servers-with-per-customer-urls) for how this choice limits your authentication options.
97If your server URL varies per tenant, such as `{tenant}.mcp.example.com`, submit one directory listing with a URL pattern. Each user enters their own URL when they connect. A listing with a URL pattern can be published only once it has the **Verified** label. See [Servers with per-customer URLs](https://claude.com/docs/connectors/building/authentication.md#servers-with-per-customer-urls) for how this choice limits your authentication options.
9898
9999## Next steps
100100
101* [Authentication for connectors](/docs/connectors/building/authentication.md): the authentication types available to directory and custom connectors
102* [Publish to the directory](/docs/directory/publish.md): who can submit, what review involves, and where to start
103* [Add a connector by URL](/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url): how users and Owners add a custom connector by URL
101* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): the authentication types available to directory and custom connectors
102* [Publish to the directory](https://claude.com/docs/directory/publish.md): who can submit, what review involves, and where to start
103* [Add a connector by URL](https://claude.com/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url): how users and Owners add a custom connector by URL
104104
connectors/building/enterprise-managed-auth Changed · +10 / -10 lines
from line 4
44
55> [!NOTE]
66>
7> Enterprise Managed Auth is available on Claude Team and Enterprise plans. After your authorization server supports it, email `[email protected]` to have [your directory listing](/docs/connectors/building/managing-your-listing.md) marked as supporting Enterprise Managed Auth.
7> Enterprise Managed Auth is available on Claude Team and Enterprise plans. After your authorization server supports it, email `[email protected]` to have [your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md) marked as supporting Enterprise Managed Auth.
88
99Enterprise Managed Auth (EMA) lets a user connect to your MCP server silently, using the single sign-on session they already have with their organization. Instead of showing each user an OAuth consent screen, Claude presents your authorization server with an identity assertion: a signed JSON Web Token (JWT), issued by the customer's identity provider, that vouches for the user's identity.
1010
from line 24
2424
2525### Enterprise Managed Auth with lazy authentication
2626
27Enterprise Managed Auth also works with [lazy authentication](/docs/connectors/building/lazy-authentication.md). When your server returns `401 Unauthorized` for a protected tool call, Claude normally shows the inline **Connect** card and runs the interactive OAuth flow. If the user's organization has Enterprise Managed Auth configured for your connector, Claude runs the silent JWT bearer exchange instead and retries the tool call without showing a prompt.
27Enterprise Managed Auth also works with [lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md). When your server returns `401 Unauthorized` for a protected tool call, Claude normally shows the inline **Connect** card and runs the interactive OAuth flow. If the user's organization has Enterprise Managed Auth configured for your connector, Claude runs the silent JWT bearer exchange instead and retries the tool call without showing a prompt.
2828
29Your MCP server returns the same `401` with a `WWW-Authenticate` header as described in the [lazy authentication guide](/docs/connectors/building/lazy-authentication.md#answer-a-protected-call-with-401-before-the-mcp-sdk-runs). Your authorization server must still meet the [authorization server requirements](#authorization-server-requirements).
29Your MCP server returns the same `401` with a `WWW-Authenticate` header as described in the [lazy authentication guide](https://claude.com/docs/connectors/building/lazy-authentication.md#answer-a-protected-call-with-401-before-the-mcp-sdk-runs). Your authorization server must still meet the [authorization server requirements](#authorization-server-requirements).
3030
3131Enterprise Managed Auth doesn't apply to authless servers. A fully authless server never returns `401`, so there is no point at which Claude can exchange an assertion.
3232
from line 34
3434
3535Before adding Enterprise Managed Auth, make sure the following are already in place:
3636
37* Your MCP server implements [MCP authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization), including Protected Resource Metadata (PRM) discovery, and follows the [MCP security best practices](https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices). See the [authentication guide](/docs/connectors/building/authentication.md) for Claude-specific requirements
38* Your authorization server registers Claude using either [Anthropic-held client credentials](/docs/connectors/building/authentication.md#anthropic-held-client-credentials) or a [Client ID Metadata Document](/docs/connectors/building/authentication.md#dcr-and-cimd-details)
37* Your MCP server implements [MCP authorization](https://modelcontextprotocol.io/specification/draft/basic/authorization), including Protected Resource Metadata (PRM) discovery, and follows the [MCP security best practices](https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices). See the [authentication guide](https://claude.com/docs/connectors/building/authentication.md) for Claude-specific requirements
38* Your authorization server registers Claude using either [Anthropic-held client credentials](https://claude.com/docs/connectors/building/authentication.md#anthropic-held-client-credentials) or a [Client ID Metadata Document](https://claude.com/docs/connectors/building/authentication.md#dcr-and-cimd-details)
3939
4040> [!WARNING]
4141>
from line 133
133133
134134### Provide setup documentation
135135
136You can publish documentation that walks an enterprise administrator through enabling Enterprise Managed Auth for your product and add its URL to [your directory listing](/docs/connectors/building/managing-your-listing.md). Claude shows the link in the Claude admin console when an administrator sets up Enterprise Managed Auth for your connector.
136You can publish documentation that walks an enterprise administrator through enabling Enterprise Managed Auth for your product and add its URL to [your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md). Claude shows the link in the Claude admin console when an administrator sets up Enterprise Managed Auth for your connector.
137137
138138### Okta Integration Network apps
139139
from line 141
141141
142142## Related resources
143143
144* [Authentication for connectors](/docs/connectors/building/authentication.md): baseline OAuth requirements your server must already meet
145* [Lazy authentication](/docs/connectors/building/lazy-authentication.md): ask users to sign in only when Claude reaches a tool that needs their account
146* [Test your connector](/docs/connectors/building/testing.md): verify your connector works end to end in Claude
147* [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md): diagnose common authentication and connection issues
144* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): baseline OAuth requirements your server must already meet
145* [Lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md): ask users to sign in only when Claude reaches a tool that needs their account
146* [Test your connector](https://claude.com/docs/connectors/building/testing.md): verify your connector works end to end in Claude
147* [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md): diagnose common authentication and connection issues
148148
connectors/building/index Changed · +21 / -21 lines
from line 2
22
33> Build a remote MCP server that people use as a connector in Claude: where it runs, authentication, what it exposes, size and timeout limits, and distribution.
44
5An MCP server gives Claude access to your product or data, and people who use Claude see it as a connector. It's the piece of your [plugin](/docs/build/overview.md) that reaches your product: the plugin's `.mcp.json` points at the server you build and host, and any skills you include teach Claude how to use it. Claude connects to your server from claude.ai, Claude Desktop, Claude mobile, Cowork, and Claude Code, and the same connector infrastructure backs all of them.
5An MCP server gives Claude access to your product or data, and people who use Claude see it as a connector. It's the piece of your [plugin](https://claude.com/docs/build/overview.md) that reaches your product: the plugin's `.mcp.json` points at the server you build and host, and any skills you include teach Claude how to use it. Claude connects to your server from claude.ai, Claude Desktop, Claude mobile, Cowork, and Claude Code, and the same connector infrastructure backs all of them.
66
77This page is for developers building a remote MCP server for other people to use in Claude. It covers the decisions you make as you build, in the order you meet them, and what Claude's MCP client supports for each one.
88
99> [!NOTE]
1010>
11> * If you're new to the protocol itself, see [Model Context Protocol (MCP)](/docs/connectors/building/mcp.md) for a short orientation
12> * If you want to build a minimal server first and watch Claude call it, see [Build your first MCP server for Claude](/docs/connectors/building/quickstart.md)
13> * If you're not sure your plugin needs an MCP server, see [Decide what to include in your plugin](/docs/connectors/building/what-to-build.md)
11> * If you're new to the protocol itself, see [Model Context Protocol (MCP)](https://claude.com/docs/connectors/building/mcp.md) for a short orientation
12> * If you want to build a minimal server first and watch Claude call it, see [Build your first MCP server for Claude](https://claude.com/docs/connectors/building/quickstart.md)
13> * If you're not sure your plugin needs an MCP server, see [Decide what to include in your plugin](https://claude.com/docs/connectors/building/what-to-build.md)
1414
1515## Plan your server
1616
from line 24
2424
2525A remote server runs on infrastructure you host and is reachable over the internet. Claude connects to it from every Claude app, and a remote server is the recommended kind for a directory listing.
2626
27A local server runs on the user's computer. To package one for the Claude desktop app, see [Build a desktop extension with MCPB](/docs/connectors/building/mcpb.md).
27A local server runs on the user's computer. To package one for the Claude desktop app, see [Build a desktop extension with MCPB](https://claude.com/docs/connectors/building/mcpb.md).
2828
2929A transport is how Claude and your server exchange MCP messages. Use [Streamable HTTP](https://modelcontextprotocol.io/specification/latest/basic/transports/streamable-http), which the MCP specification defines for remote servers. Claude also supports the legacy [HTTP+SSE transport](https://modelcontextprotocol.io/specification/2024-11-05/basic/transports#http-with-sse), which is being deprecated in favor of Streamable HTTP.
3030
from line 32
3232
3333Decide on authentication before you write tool code. Claude's OAuth client differs from the generic MCP specification in a few places.
3434
35Your server can let Claude in with OAuth 2.0, where each user signs in with their own account; with a static credential that an organization Owner enters once and Claude sends as a request header; or with no authentication at all. [Supported authentication types](/docs/connectors/building/authentication.md#supported-authentication-types) lists each type and which ones you contact Anthropic to use.
35Your server can let Claude in with OAuth 2.0, where each user signs in with their own account; with a static credential that an organization Owner enters once and Claude sends as a request header; or with no authentication at all. [Supported authentication types](https://claude.com/docs/connectors/building/authentication.md#supported-authentication-types) lists each type and which ones you contact Anthropic to use.
3636
3737If you use OAuth, check these parts of your setup against Claude's client:
3838
3939* **Specification version**: Claude follows the [2025-03-26](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization), [2025-06-18](https://modelcontextprotocol.io/specification/2025-06-18/basic/authorization), and [2025-11-25](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization) authorization specifications
40* **Client registration**: Claude can register itself with your authorization server through Dynamic Client Registration (DCR). If your server doesn't support DCR, [Register Claude as an OAuth client](/docs/connectors/building/authentication.md#register-claude-as-an-oauth-client) lists the other ways to give Claude a client identity
41* **Redirect URI**: allow `https://claude.ai/api/mcp/auth_callback` for the hosted surfaces and a loopback redirect for Claude Code, as [Callback URLs](/docs/connectors/building/authentication.md#callback-urls) describes
42* **Token refresh**: Claude refreshes access tokens when they expire. [Token refresh](/docs/connectors/building/authentication.md#token-refresh) has the requirements for your token endpoint
40* **Client registration**: Claude can register itself with your authorization server through Dynamic Client Registration (DCR). If your server doesn't support DCR, [Register Claude as an OAuth client](https://claude.com/docs/connectors/building/authentication.md#register-claude-as-an-oauth-client) lists the other ways to give Claude a client identity
41* **Redirect URI**: allow `https://claude.ai/api/mcp/auth_callback` for the hosted surfaces and a loopback redirect for Claude Code, as [Callback URLs](https://claude.com/docs/connectors/building/authentication.md#callback-urls) describes
42* **Token refresh**: Claude refreshes access tokens when they expire. [Token refresh](https://claude.com/docs/connectors/building/authentication.md#token-refresh) has the requirements for your token endpoint
4343
4444If you need one of these related flows, follow its page:
4545
46* **[Lazy authentication](/docs/connectors/building/lazy-authentication.md)**: if some of your tools work without the user's account, people can use those right away and sign in only when Claude reaches a tool that needs it
47* **[Enterprise Managed Auth](/docs/connectors/building/enterprise-managed-auth.md)**: lets enterprise users connect through their organization's SSO without a consent screen
46* **[Lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md)**: if some of your tools work without the user's account, people can use those right away and sign in only when Claude reaches a tool that needs it
47* **[Enterprise Managed Auth](https://claude.com/docs/connectors/building/enterprise-managed-auth.md)**: lets enterprise users connect through their organization's SSO without a consent screen
4848
4949### Decide what the server exposes
5050
from line 60
6060* Sampling
6161* Advanced or draft capabilities
6262
63If you plan to list the server in the directory, [Design tools that pass review](/docs/connectors/building/review-criteria.md#design-tools-that-pass-review) covers how to name, describe, and annotate tools.
63If you plan to list the server in the directory, [Design tools that pass review](https://claude.com/docs/connectors/building/review-criteria.md#design-tools-that-pass-review) covers how to name, describe, and annotate tools.
6464
6565### Design within the size and timeout limits
6666
from line 73
7373
7474### Decide whether to add interactive UI
7575
76An MCP App is interactive UI that your MCP server renders inside a Claude conversation, such as an interactive chart or map. It's optional, and you build it as part of the same server. [Get started with MCP Apps](/docs/connectors/building/mcp-apps/getting-started.md) shows an example and how to build your own.
76An MCP App is interactive UI that your MCP server renders inside a Claude conversation, such as an interactive chart or map. It's optional, and you build it as part of the same server. [Get started with MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md) shows an example and how to build your own.
7777
7878## Test your server against Claude
7979
80You test against the real Claude client, not a staging environment. [Test your connector](/docs/connectors/building/testing.md) covers adding the server to Claude as a custom connector, validating auth flows with the MCP Inspector, tunneling a local server, and preparing test credentials for review. To connect and debug from the Claude Code command line, see the [Claude Code MCP quickstart](https://code.claude.com/docs/en/mcp-quickstart).
80You test against the real Claude client, not a staging environment. [Test your connector](https://claude.com/docs/connectors/building/testing.md) covers adding the server to Claude as a custom connector, validating auth flows with the MCP Inspector, tunneling a local server, and preparing test credentials for review. To connect and debug from the Claude Code command line, see the [Claude Code MCP quickstart](https://code.claude.com/docs/en/mcp-quickstart).
8181
8282## Decide how people get your server
8383
from line 84
8484People add your server to Claude as a connector in one of these ways:
8585
8686* **As a custom connector**: a user or an organization Owner adds it by entering its URL, with no review by Anthropic
87* **From the directory**: Anthropic lists it in the directory after review, so people find it in Claude. [Publish to the directory](/docs/directory/publish.md) covers who can submit and what review involves
88* **Inside a plugin**: you bundle the server with the skills that teach Claude to use it, so people install both together. See [Plugin structure and testing](/docs/plugins/build.md)
87* **From the directory**: Anthropic lists it in the directory after review, so people find it in Claude. [Publish to the directory](https://claude.com/docs/directory/publish.md) covers who can submit and what review involves
88* **Inside a plugin**: you bundle the server with the skills that teach Claude to use it, so people install both together. See [Plugin structure and testing](https://claude.com/docs/plugins/build.md)
8989
90Directory and custom connectors run on the same infrastructure. [Directory connectors vs custom connectors](/docs/connectors/building/directory-vs-custom.md) compares the two and explains when to offer both.
90Directory and custom connectors run on the same infrastructure. [Directory connectors vs custom connectors](https://claude.com/docs/connectors/building/directory-vs-custom.md) compares the two and explains when to offer both.
9191
9292## Related resources
9393
from line 100
100100
101101## Next steps
102102
103* [Authentication for connectors](/docs/connectors/building/authentication.md): pick an authentication type and meet Claude's OAuth requirements
104* [Test your connector](/docs/connectors/building/testing.md): add your server as a custom connector and debug connection failures
105* [Plugin structure and testing](/docs/plugins/build.md): bundle your connector with skills so people install both together
106* [Publish to the directory](/docs/directory/publish.md): submit your connector for review so people find it in claude.ai on the web, the desktop and mobile apps, and Cowork. Anyone on a paid Claude plan can submit, and on Team and Enterprise an Owner submits
103* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): pick an authentication type and meet Claude's OAuth requirements
104* [Test your connector](https://claude.com/docs/connectors/building/testing.md): add your server as a custom connector and debug connection failures
105* [Plugin structure and testing](https://claude.com/docs/plugins/build.md): bundle your connector with skills so people install both together
106* [Publish to the directory](https://claude.com/docs/directory/publish.md): submit your connector for review so people find it in claude.ai on the web, the desktop and mobile apps, and Cowork. Anyone on a paid Claude plan can submit, and on Team and Enterprise an Owner submits
107107
connectors/building/lazy-authentication Changed · +7 / -7 lines
from line 6
66
77When Claude reaches a protected tool, it shows the sign-in prompt inline in the conversation, and after the person signs in it retries the same tool call. The challenge your server sends to trigger that prompt follows the [MCP authorization specification](https://modelcontextprotocol.io/specification/latest/basic/authorization).
88
9This page is for developers whose MCP server has some tools that work without the user's identity. It walks through excerpts from an example Express server, a single `src/index.ts` file built on `@modelcontextprotocol/sdk` over Streamable HTTP, to show what your own server needs at each step. For the OAuth requirements every server must meet regardless of when it asks for sign-in, see [Authentication for connectors](/docs/connectors/building/authentication.md).
9This page is for developers whose MCP server has some tools that work without the user's identity. It walks through excerpts from an example Express server, a single `src/index.ts` file built on `@modelcontextprotocol/sdk` over Streamable HTTP, to show what your own server needs at each step. For the OAuth requirements every server must meet regardless of when it asks for sign-in, see [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md).
1010
1111## See what the user experiences
1212
from line 19
1919
2020> [!NOTE]
2121>
22> If the user's organization has [Enterprise Managed Auth](/docs/connectors/building/enterprise-managed-auth.md) configured for your connector, the same refusal triggers a silent token exchange instead of the **Connect** card. Claude retries the tool call automatically and the user sees no prompt.
22> If the user's organization has [Enterprise Managed Auth](https://claude.com/docs/connectors/building/enterprise-managed-auth.md) configured for your connector, the same refusal triggers a silent token exchange instead of the **Connect** card. Claude retries the tool call automatically and the user sees no prompt.
2323
2424## Build lazy authentication on your server
2525
from line 304
3043042. In Claude, go to [**Customize > Connectors**](https://claude.ai/customize/connectors) and select **Add custom connector**.
3053053. Enter the tunnel's `/mcp` URL.
306306
307See [Test a local server](/docs/connectors/building/testing.md#test-a-local-server) for details. If your app comes from the SDK's `createMcpExpressApp()`, that section also shows the `allowedHosts` option you need before requests through the tunnel succeed.
307See [Test a local server](https://claude.com/docs/connectors/building/testing.md#test-a-local-server) for details. If your app comes from the SDK's `createMcpExpressApp()`, that section also shows the `allowedHosts` option you need before requests through the tunnel succeed.
308308
309309**5. Try both paths in a conversation**
310310
from line 313
313313
314314## Next steps
315315
316* [Authentication for connectors](/docs/connectors/building/authentication.md): check the OAuth requirements your authorization server must meet, including redirect URIs and token refresh
317* [Enterprise Managed Auth](/docs/connectors/building/enterprise-managed-auth.md): let organizations with SSO answer the same `401` with a silent token exchange
318* [Test your connector](/docs/connectors/building/testing.md): expose the server through a tunnel and add it as a custom connector
319* [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md): diagnose discovery and authorization failures
316* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): check the OAuth requirements your authorization server must meet, including redirect URIs and token refresh
317* [Enterprise Managed Auth](https://claude.com/docs/connectors/building/enterprise-managed-auth.md): let organizations with SSO answer the same `401` with a silent token exchange
318* [Test your connector](https://claude.com/docs/connectors/building/testing.md): expose the server through a tunnel and add it as a custom connector
319* [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md): diagnose discovery and authorization failures
320320
connectors/building/managing-your-listing Changed · +8 / -8 lines
from line 2
22
33> Track submissions, monitor server health and usage metrics, and edit your directory listing
44
5Organizations that submit a connector to the [directory](/docs/connectors/directory.md) get a submissions dashboard in the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage). This page is for connector authors who have already [submitted a connector](/docs/connectors/building/submission.md). Use the dashboard to [track a submission through review](#track-submission-status), [monitor your published server's health and usage](#server-health-and-usage-metrics), and [edit your listing](#edit-your-listing).
5Organizations that submit a connector to the [directory](https://claude.com/docs/connectors/directory.md) get a submissions dashboard in the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage). This page is for connector authors who have already [submitted a connector](https://claude.com/docs/connectors/building/submission.md). Use the dashboard to [track a submission through review](#track-submission-status), [monitor your published server's health and usage](#server-health-and-usage-metrics), and [edit your listing](#edit-your-listing).
66
77> [!NOTE]
88>
from line 10
1010
1111## Access the dashboard
1212
13The dashboard uses the same access as submitting. [Who can submit to the directory](/docs/directory/publish.md#confirm-you-can-submit-to-the-directory) lists the plan and role requirements. That access covers everything on this page: viewing submissions, metrics, and reviewer feedback, and editing and submitting listings.
13The dashboard uses the same access as submitting. [Who can submit to the directory](https://claude.com/docs/directory/publish.md#confirm-you-can-submit-to-the-directory) lists the plan and role requirements. That access covers everything on this page: viewing submissions, metrics, and reviewer feedback, and editing and submitting listings.
1414
1515## Track submission status
1616
17The dashboard lists each of your organization's submissions with its current status. [Track your submission](/docs/directory/submission-status.md#mcp-connector-statuses) says what each status means and who acts next. Open a submission to see its full details and any reviewer feedback. When reviewers request changes, their feedback appears on the submission's detail page, where you address it and resubmit.
17The dashboard lists each of your organization's submissions with its current status. [Track your submission](https://claude.com/docs/directory/submission-status.md#mcp-connector-statuses) says what each status means and who acts next. Open a submission to see its full details and any reviewer feedback. When reviewers request changes, their feedback appears on the submission's detail page, where you address it and resubmit.
1818
19A published connector is listed with the **Community** label by default. [Connector verification](/docs/connectors/verification.md#list-your-own-connector) explains how a listing becomes Verified.
19A published connector is listed with the **Community** label by default. [Connector verification](https://claude.com/docs/connectors/verification.md#list-your-own-connector) explains how a listing becomes Verified.
2020
2121## Server health and usage metrics
2222
from line 83
8383
8484The URL slug is locked. It's permanent after publication because it determines your listing URL.
8585
86To change how users sign in, including the OAuth client ID and secret that Anthropic holds, go to **Connection & authentication** on the listing's submission detail page and click **Edit authentication** or **Author authentication**, whichever the section shows. [Enter your OAuth client in the developer portal](/docs/connectors/building/authentication.md#enter-your-oauth-client-in-the-developer-portal) covers the client fields.
86To change how users sign in, including the OAuth client ID and secret that Anthropic holds, go to **Connection & authentication** on the listing's submission detail page and click **Edit authentication** or **Author authentication**, whichever the section shows. [Enter your OAuth client in the developer portal](https://claude.com/docs/connectors/building/authentication.md#enter-your-oauth-client-in-the-developer-portal) covers the client fields.
8787
8989
9090## Next steps
9191
92* [After publishing](/docs/connectors/building/after-publishing.md): release updates to your server, and delist
93* [Connector verification](/docs/connectors/verification.md#list-your-own-connector): see how a Community listing becomes Verified
94* [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md): diagnose the errors behind a degraded health badge or high error rate
92* [After publishing](https://claude.com/docs/connectors/building/after-publishing.md): release updates to your server, and delist
93* [Connector verification](https://claude.com/docs/connectors/verification.md#list-your-own-connector): see how a Community listing becomes Verified
94* [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md): diagnose the errors behind a degraded health badge or high error rate
9595
connectors/building/mcp Changed · +6 / -6 lines
from line 2
22
33> Get oriented to the Model Context Protocol, the open standard behind Claude's connectors: local and remote servers, tools, resources, and prompts.
44
5The Model Context Protocol (MCP) is an open standard created by Anthropic for AI applications to connect with tools and data sources. When you build an MCP server and someone adds it to Claude, they see it as a [connector](/docs/connectors/getting-started.md).
5The Model Context Protocol (MCP) is an open standard created by Anthropic for AI applications to connect with tools and data sources. When you build an MCP server and someone adds it to Claude, they see it as a [connector](https://claude.com/docs/connectors/getting-started.md).
66
7This page is a short orientation for developers who are new to MCP. The [MCP documentation](https://modelcontextprotocol.io/docs) is the source of truth for building MCP servers, and [Build an MCP server for Claude](/docs/connectors/building/index.md) lists what Claude's client supports once you're ready to build.
7This page is a short orientation for developers who are new to MCP. The [MCP documentation](https://modelcontextprotocol.io/docs) is the source of truth for building MCP servers, and [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md) lists what Claude's client supports once you're ready to build.
88
99## Understand what MCP provides
1010
from line 65
6565* [TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) and [Python SDK](https://github.com/modelcontextprotocol/python-sdk)
6666* Cloudflare hosting support with OAuth
6767
68Organizations can [submit MCP servers](/docs/connectors/building/submission.md) to the Connectors Directory for broader availability.
68Organizations can [submit MCP servers](https://claude.com/docs/connectors/building/submission.md) to the Connectors Directory for broader availability.
6969
7070## Next steps
7171
72* [Build an MCP server for Claude](/docs/connectors/building/index.md): the transports, authentication, protocol features, and limits Claude's client supports
73* [Authentication for connectors](/docs/connectors/building/authentication.md): OAuth requirements and supported auth types
72* [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md): the transports, authentication, protocol features, and limits Claude's client supports
73* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): OAuth requirements and supported auth types
7474* [MCP in Claude Code](https://code.claude.com/docs/en/mcp): connect MCP servers to Claude Code from the command line
75* [Submitting to the Connectors Directory](/docs/connectors/building/submission.md): review requirements and submit your connector
75* [Submitting to the Connectors Directory](https://claude.com/docs/connectors/building/submission.md): review requirements and submit your connector
7676
connectors/building/mcp-apps/design-guidelines Changed · +5 / -5 lines
from line 6
66
77> [!NOTE]
88>
9> If you haven't built and connected an MCP App yet, see [Get started with MCP Apps](/docs/connectors/building/mcp-apps/getting-started.md).
9> If you haven't built and connected an MCP App yet, see [Get started with MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md).
1010
1111Use the guidelines to [pick a display mode](#display-modes), [adapt to mobile](#mobile-guidelines), match Claude's [visual design](#visual-design) with the host's [style variables](#style-variables), and decide which [interactions](#interaction-patterns) belong in your app and which belong in chat.
1212
from line 287
287287
288288## Style variables
289289
290MCP Apps automatically receive style variables from the host client. Reference these CSS custom properties to create interfaces that feel native to Claude. [Blend your MCP App with Claude's theme](/docs/connectors/building/mcp-apps/transparent-theming.md) shows how to apply them at runtime.
290MCP Apps automatically receive style variables from the host client. Reference these CSS custom properties to create interfaces that feel native to Claude. [Blend your MCP App with Claude's theme](https://claude.com/docs/connectors/building/mcp-apps/transparent-theming.md) shows how to apply them at runtime.
291291
292292### Color tokens
293293
from line 436
436436
437437## Related resources
438438
439* [Blend your MCP App with Claude's theme](/docs/connectors/building/mcp-apps/transparent-theming.md): apply the style variables and keep your background transparent
440* [Set `ui.domain` for Claude](/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude): compute the sandbox origin Claude expects for your app
441* [Submit a connector](/docs/connectors/building/submission.md#carousel-screenshots-for-mcp-apps): screenshot specifications for listing an MCP App in the directory
439* [Blend your MCP App with Claude's theme](https://claude.com/docs/connectors/building/mcp-apps/transparent-theming.md): apply the style variables and keep your background transparent
440* [Set `ui.domain` for Claude](https://claude.com/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude): compute the sandbox origin Claude expects for your app
441* [Submit a connector](https://claude.com/docs/connectors/building/submission.md#carousel-screenshots-for-mcp-apps): screenshot specifications for listing an MCP App in the directory
442442
connectors/building/mcp-apps/external-links Changed · +5 / -5 lines
from line 4
44
55When your MCP App sends a `ui/open-link` request, Claude shows an **Open external link** confirmation modal before navigating. The modal protects users from being silently redirected by an embedded app.
66
7If your connector is published in the [Connectors Directory](/docs/connectors/directory.md), you can declare a set of trusted destinations that open immediately without the modal. Custom connectors and locally configured servers always show it. To skip the modal for a directory connector, [allowlist your destinations](#allowlist-link-destinations) and send each request after a [real user gesture](#user-activation-requirement), then [design your app](#design-for-the-modal) for the cases where the modal still appears.
7If your connector is published in the [Connectors Directory](https://claude.com/docs/connectors/directory.md), you can declare a set of trusted destinations that open immediately without the modal. Custom connectors and locally configured servers always show it. To skip the modal for a directory connector, [allowlist your destinations](#allowlist-link-destinations) and send each request after a [real user gesture](#user-activation-requirement), then [design your app](#design-for-the-modal) for the cases where the modal still appears.
88
99## Default link behavior
1010
from line 12
1212
1313## Allowlist link destinations
1414
15A directory connector declares the destinations that skip the modal in its directory listing. Provide them in the **Allowed link URIs** field when you [submit](/docs/connectors/building/submission.md#allowed-link-uris) or update your listing.
15A directory connector declares the destinations that skip the modal in its directory listing. Provide them in the **Allowed link URIs** field when you [submit](https://claude.com/docs/connectors/building/submission.md#allowed-link-uris) or update your listing.
1616
1717Each entry must be an HTTPS origin or a custom URI scheme:
1818
from line 71
7171
7272## Next steps
7373
74* [Submit a connector](/docs/connectors/building/submission.md#allowed-link-uris): where the **Allowed link URIs** field fits in your directory submission
75* [Design guidelines](/docs/connectors/building/mcp-apps/design-guidelines.md#interaction-patterns): which interactions belong in your app and which belong in chat
76* [Troubleshoot MCP Apps](/docs/connectors/building/mcp-apps/troubleshooting.md): developer tools for inspecting your app's requests
74* [Submit a connector](https://claude.com/docs/connectors/building/submission.md#allowed-link-uris): where the **Allowed link URIs** field fits in your directory submission
75* [Design guidelines](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md#interaction-patterns): which interactions belong in your app and which belong in chat
76* [Troubleshoot MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/troubleshooting.md): developer tools for inspecting your app's requests
7777
connectors/building/mcp-apps/getting-started Changed · +6 / -6 lines
from line 8
88
99> [!NOTE]
1010>
11> If you haven't built the server yet, see [Build an MCP server for Claude](/docs/connectors/building/index.md).
11> If you haven't built the server yet, see [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md).
1212
1313To see how an MCP App looks and behaves, [try an example in Claude Desktop](#try-an-example-mcp-app-in-claude-desktop) first, then [build your own](#build-your-own-mcp-app) from the SDK quickstart, the examples, or the agent skills.
1414
from line 99
9999
100100To add an MCP App to your own MCP server, start from the SDK documentation and examples:
101101
102* [Add an interactive UI to your MCP server](/docs/connectors/building/mcp-apps/quickstart.md): add a one-tool MCP App to the quickstart server on this site, in plain JavaScript with no build step
102* [Add an interactive UI to your MCP server](https://claude.com/docs/connectors/building/mcp-apps/quickstart.md): add a one-tool MCP App to the quickstart server on this site, in plain JavaScript with no build step
103103* [MCP Apps Quickstart](https://modelcontextprotocol.github.io/ext-apps/api/documents/Quickstart.html): step-by-step guide to building your first MCP App
104104* [SDK API documentation](https://modelcontextprotocol.github.io/ext-apps/api/index.html): full API reference
105105* [Example implementations](https://github.com/modelcontextprotocol/ext-apps/tree/main/examples): vanilla JS, React, Vue, Svelte, and more
from line 126
126126c3d80a4ed901ee05b21755a88273b4a4.claudemcpcontent.com
127127```
128128
129If Claude reports `Invalid ui.domain format` or `ui.domain mismatch`, see [Troubleshoot MCP Apps](/docs/connectors/building/mcp-apps/troubleshooting.md#ui-domain-validation-fails).
129If Claude reports `Invalid ui.domain format` or `ui.domain mismatch`, see [Troubleshoot MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/troubleshooting.md#ui-domain-validation-fails).
130130
131131### Build with an AI coding agent
132132
from line 149
149149
150150## Next steps
151151
152* [Design guidelines](/docs/connectors/building/mcp-apps/design-guidelines.md): display modes, mobile layout, and style variables for an app that feels native to Claude
153* [Troubleshoot MCP Apps](/docs/connectors/building/mcp-apps/troubleshooting.md): developer tools and fixes for an app that doesn't render
154* [Submit a connector](/docs/connectors/building/submission.md): list your server and its MCP App screenshots in the directory
152* [Design guidelines](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md): display modes, mobile layout, and style variables for an app that feels native to Claude
153* [Troubleshoot MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/troubleshooting.md): developer tools and fixes for an app that doesn't render
154* [Submit a connector](https://claude.com/docs/connectors/building/submission.md): list your server and its MCP App screenshots in the directory
155155
connectors/building/mcp-apps/quickstart Changed · +12 / -12 lines
from line 2
22
33> Add an MCP App to the quickstart MCP server: register a ui:// resource with the MCP Apps SDK, link it to a tool, and check that the server advertises the UI.
44
5An [MCP App](/docs/connectors/building/mcp-apps/getting-started.md) is interactive UI that your MCP server renders inside a Claude conversation, such as an interactive chart or map. In this quickstart you give the `roll_dice` tool from [Build your first MCP server for Claude](/docs/connectors/building/quickstart.md) a small UI that draws each die and has a **Roll again** button, by adding about 50 lines to the same `server.mjs` and no build tooling. At the end your server advertises the UI the way an MCP Apps host expects, and you've checked that from the command line.
5An [MCP App](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md) is interactive UI that your MCP server renders inside a Claude conversation, such as an interactive chart or map. In this quickstart you give the `roll_dice` tool from [Build your first MCP server for Claude](https://claude.com/docs/connectors/building/quickstart.md) a small UI that draws each die and has a **Roll again** button, by adding about 50 lines to the same `server.mjs` and no build tooling. At the end your server advertises the UI the way an MCP Apps host expects, and you've checked that from the command line.
66
77This quickstart is for developers who finished the first quickstart and have its server on their machine. It stops at what you can verify locally: seeing the UI render needs the server hosted where Claude can reach it, which the last section covers.
88
99> [!NOTE]
1010>
11> * If you haven't built the quickstart server yet, start with [Build your first MCP server for Claude](/docs/connectors/building/quickstart.md)
12> * If you want to see finished MCP Apps running in Claude first, see [Try an example MCP App in Claude Desktop](/docs/connectors/building/mcp-apps/getting-started.md#try-an-example-mcp-app-in-claude-desktop)
13> * If you're adding UI to your own production server, see [Build your own MCP App](/docs/connectors/building/mcp-apps/getting-started.md#build-your-own-mcp-app) for the SDK documentation and full examples
11> * If you haven't built the quickstart server yet, start with [Build your first MCP server for Claude](https://claude.com/docs/connectors/building/quickstart.md)
12> * If you want to see finished MCP Apps running in Claude first, see [Try an example MCP App in Claude Desktop](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md#try-an-example-mcp-app-in-claude-desktop)
13> * If you're adding UI to your own production server, see [Build your own MCP App](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md#build-your-own-mcp-app) for the SDK documentation and full examples
1414
1515## Install the MCP Apps SDK
1616
from line 309
309309
310310Rendering the UI takes a host that supports MCP Apps, such as the Claude desktop app. Claude Code calls the tool as text and doesn't render the UI. When you add a server by its URL on claude.ai or in the desktop app, Claude connects to it from Anthropic's infrastructure over the internet, so a `localhost` address isn't reachable that way. To see an MCP App render, take one of these routes:
311311
312* **Host this server and add it as a custom connector**: give the server a public HTTPS URL, or expose it through a tunnel while you iterate as [Test a local server](/docs/connectors/building/testing.md#test-a-local-server) describes. Then [add it by URL](/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url), turn the connector on in a chat, and ask Claude to roll dice. If the tool runs but no UI appears, [Troubleshoot MCP Apps](/docs/connectors/building/mcp-apps/troubleshooting.md) lists what to check
313* **Run a finished example locally in Claude Desktop**: [Try an example MCP App in Claude Desktop](/docs/connectors/building/mcp-apps/getting-started.md#try-an-example-mcp-app-in-claude-desktop) connects one of the SDK's example servers through the desktop app's configuration file, with nothing to host
312* **Host this server and add it as a custom connector**: give the server a public HTTPS URL, or expose it through a tunnel while you iterate as [Test a local server](https://claude.com/docs/connectors/building/testing.md#test-a-local-server) describes. Then [add it by URL](https://claude.com/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url), turn the connector on in a chat, and ask Claude to roll dice. If the tool runs but no UI appears, [Troubleshoot MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/troubleshooting.md) lists what to check
313* **Run a finished example locally in Claude Desktop**: [Try an example MCP App in Claude Desktop](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md#try-an-example-mcp-app-in-claude-desktop) connects one of the SDK's example servers through the desktop app's configuration file, with nothing to host
314314
315Before you host this server for other people, add authentication, because as written it lets anyone who can reach it call its tools. [Authentication for connectors](/docs/connectors/building/authentication.md) covers the options.
315Before you host this server for other people, add authentication, because as written it lets anyone who can reach it call its tools. [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md) covers the options.
316316
317317## Next steps
318318
319* [Design guidelines](/docs/connectors/building/mcp-apps/design-guidelines.md): choose a display mode and use Claude's style variables so the UI looks native in the conversation
320* [Set `ui.domain` for Claude](/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude): give the UI a stable sandbox origin, which it needs if it runs its own OAuth flow
321* [Troubleshoot MCP Apps](/docs/connectors/building/mcp-apps/troubleshooting.md): open developer tools in Claude and fix a UI that doesn't appear
322* [Submit a connector](/docs/connectors/building/submission.md): list the server in the directory, including the screenshots an MCP App listing needs
319* [Design guidelines](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md): choose a display mode and use Claude's style variables so the UI looks native in the conversation
320* [Set `ui.domain` for Claude](https://claude.com/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude): give the UI a stable sandbox origin, which it needs if it runs its own OAuth flow
321* [Troubleshoot MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/troubleshooting.md): open developer tools in Claude and fix a UI that doesn't appear
322* [Submit a connector](https://claude.com/docs/connectors/building/submission.md): list the server in the directory, including the screenshots an MCP App listing needs
323323
connectors/building/mcp-apps/transparent-theming Changed · +5 / -5 lines
from line 2
22
33> Make your MCP App's background transparent and style it with Claude's host style variables so it blends into the conversation in light and dark mode.
44
5Claude renders MCP Apps inside a sandboxed iframe, and every frame between your widget and the chat surface already has a transparent background so the conversation can show through. If you leave your own background transparent and style text and borders with the host's [style variables](/docs/connectors/building/mcp-apps/design-guidelines.md#style-variables), your app looks like part of the conversation rather than an embedded box. It also follows the user's light or dark mode automatically.
5Claude renders MCP Apps inside a sandboxed iframe, and every frame between your widget and the chat surface already has a transparent background so the conversation can show through. If you leave your own background transparent and style text and borders with the host's [style variables](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md#style-variables), your app looks like part of the conversation rather than an embedded box. It also follows the user's light or dark mode automatically.
66
77This page is for developers who already have an MCP App rendering in Claude and want it to match the host theme. The snippets assume you have registered a UI resource and created an `App` instance from `@modelcontextprotocol/ext-apps`. If you haven't, start with the [SDK Quickstart](https://modelcontextprotocol.github.io/ext-apps/api/documents/Quickstart.html). To match the host theme, [let the host background show through](#let-the-host-background-show-through), then [apply the host style variables](#apply-the-host-style-variables) at runtime.
88
from line 68
6868| `styles.variables` | CSS custom properties: `--color-background-*`, `--color-text-*`, `--color-border-*`, `--color-ring-*`, `--font-*`, `--border-radius-*`, `--border-width-*` |
6969| `styles.css.fonts` | `@font-face` rules for Anthropic Sans, served from `https://assets.claude.ai` |
7070
71The [Style variables](/docs/connectors/building/mcp-apps/design-guidelines.md#style-variables) section of the design guidelines lists every variable and its light- and dark-mode value.
71The [Style variables](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md#style-variables) section of the design guidelines lists every variable and its light- and dark-mode value.
7272
7373### Read `hostContext` and listen for changes
7474
from line 150
150150
151151## Next steps
152152
153* [Style variables](/docs/connectors/building/mcp-apps/design-guidelines.md#style-variables): the full variable palette in the design guidelines
154* [Visual design](/docs/connectors/building/mcp-apps/design-guidelines.md#visual-design): usage guidance for color, typography, and spacing in the design guidelines
155* [Supersede older widget instances](/docs/connectors/building/mcp-apps/instance-supersession.md): keep only the newest copy of your widget active in a conversation
153* [Style variables](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md#style-variables): the full variable palette in the design guidelines
154* [Visual design](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md#visual-design): usage guidance for color, typography, and spacing in the design guidelines
155* [Supersede older widget instances](https://claude.com/docs/connectors/building/mcp-apps/instance-supersession.md): keep only the newest copy of your widget active in a conversation
156156* [SDK API reference](https://modelcontextprotocol.github.io/ext-apps/api/index.html): `App`, `McpUiHostContext`, and `McpUiResourceMeta`
157157
connectors/building/mcp-apps/troubleshooting Changed · +5 / -5 lines
from line 107
107107
108108WebKit on iOS, in both Safari and the Claude iOS app, omits the `Referer` header on cross-origin subresource requests as part of its tracking prevention, per WebKit bugs [206521](https://bugs.webkit.org/show_bug.cgi?id=206521) and [179053](https://bugs.webkit.org/show_bug.cgi?id=179053#c8). A server that requires a `Referer` to allow the request rejects iOS traffic even though the same app works elsewhere.
109109
110To fix the iOS failures, allowlist on the `Origin` header instead of `Referer`, because WebKit does send `Origin`. Requests from your app carry an `Origin` of `{hash}.claudemcpcontent.com`, and [Set `ui.domain` for Claude](/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude) shows how to compute the hash for your server URL. Configure your infrastructure to allow requests whose `Origin` matches `*.claudemcpcontent.com` and return a corresponding `Access-Control-Allow-Origin` header.
110To fix the iOS failures, allowlist on the `Origin` header instead of `Referer`, because WebKit does send `Origin`. Requests from your app carry an `Origin` of `{hash}.claudemcpcontent.com`, and [Set `ui.domain` for Claude](https://claude.com/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude) shows how to compute the hash for your server URL. Configure your infrastructure to allow requests whose `Origin` matches `*.claudemcpcontent.com` and return a corresponding `Access-Control-Allow-Origin` header.
111111
112112> [!NOTE]
113113>
from line 128
128128* **The URL you hashed differs from the URL Claude connects to**: the hash covers the full URL string including scheme, path, and any trailing slash, so `https://example.com/mcp` and `https://example.com/mcp/` produce different values. Hash the exact URL configured in **Customize > Connectors**
129129* **The connector is a local stdio server**: local connectors have no URL to hash, so `ui.domain` isn't available for them. Remove the field, or deploy the server as a remote connector to use a stable origin
130130
131[Set `ui.domain` for Claude](/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude) explains how the origin is used across platforms.
131[Set `ui.domain` for Claude](https://claude.com/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude) explains how the origin is used across platforms.
132132
133133## Next steps
134134
135* [Set `ui.domain` for Claude](/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude): compute the sandbox origin Claude expects for your app
136* [Design guidelines](/docs/connectors/building/mcp-apps/design-guidelines.md#mobile-guidelines): mobile layout, safe areas, and sizing rules that prevent clipped or invisible content
137* [Get started with MCP Apps](/docs/connectors/building/mcp-apps/getting-started.md#build-your-own-mcp-app): SDK quickstart, examples, and agent skills
135* [Set `ui.domain` for Claude](https://claude.com/docs/connectors/building/mcp-apps/getting-started#set-ui-domain-for-claude): compute the sandbox origin Claude expects for your app
136* [Design guidelines](https://claude.com/docs/connectors/building/mcp-apps/design-guidelines.md#mobile-guidelines): mobile layout, safe areas, and sizing rules that prevent clipped or invisible content
137* [Get started with MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md#build-your-own-mcp-app): SDK quickstart, examples, and agent skills
138138
connectors/building/mcpb Changed · +6 / -6 lines
from line 6
66
77This page is for developers packaging a local MCP server for Claude Desktop, whether for internal use or private distribution. It covers when to choose MCPB over a remote server, building and packing the bundle, the manifest, and how users install the result.
88
9For a directory listing, build a remote MCP server, which reaches people on every surface, or include the local server in a plugin, as [Decide what to include in your plugin](/docs/connectors/building/what-to-build.md) explains.
9For a directory listing, build a remote MCP server, which reaches people on every surface, or include the local server in a plugin, as [Decide what to include in your plugin](https://claude.com/docs/connectors/building/what-to-build.md) explains.
1010
1111> [!NOTE]
1212>
13> * If you're building a remote server, see [Build an MCP server for Claude](/docs/connectors/building/index.md)
14> * If you're deploying desktop extensions across a Team or Enterprise organization, see [Install a local connector in the desktop app](/docs/connectors/custom/add-unlisted.md#install-a-local-connector-in-the-desktop-app)
13> * If you're building a remote server, see [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md)
14> * If you're deploying desktop extensions across a Team or Enterprise organization, see [Install a local connector in the desktop app](https://claude.com/docs/connectors/custom/add-unlisted.md#install-a-local-connector-in-the-desktop-app)
1515
1616## Decide when to build an MCPB
1717
from line 128
128128
129129## Distribute your MCPB
130130
131Users install the `.mcpb` file themselves in Claude Desktop. Desktop extension listings in the directory are deprecated, and the directory no longer accepts MCPB submissions. To distribute a local MCP server through the directory, include it in a [plugin](/docs/plugins/overview.md).
131Users install the `.mcpb` file themselves in Claude Desktop. Desktop extension listings in the directory are deprecated, and the directory no longer accepts MCPB submissions. To distribute a local MCP server through the directory, include it in a [plugin](https://claude.com/docs/plugins/overview.md).
132132
133133### Understand how users install your MCPB
134134
from line 173
173173
174174## Next steps
175175
176* [Install a local connector in the desktop app](/docs/connectors/custom/add-unlisted.md#install-a-local-connector-in-the-desktop-app): deploy local MCP servers for Claude Desktop across a Team or Enterprise organization
177* [Submit your plugin](/docs/plugins/submit.md): list a plugin that includes your local MCP server in the directory
176* [Install a local connector in the desktop app](https://claude.com/docs/connectors/custom/add-unlisted.md#install-a-local-connector-in-the-desktop-app): deploy local MCP servers for Claude Desktop across a Team or Enterprise organization
177* [Submit your plugin](https://claude.com/docs/plugins/submit.md): list a plugin that includes your local MCP server in the directory
178178
connectors/building/quickstart Changed · +12 / -12 lines
from line 2
22
33> Build a minimal MCP server with one tool in JavaScript, run it on your machine, and connect it to Claude Code so Claude calls your tool.
44
5An MCP server is a program that gives Claude tools it can call, and people who use Claude see it as a connector. In this quickstart you write one in about 50 lines of JavaScript with no build step: a server with a single `roll_dice` tool that runs on your machine, which you then connect to [Claude Code](https://code.claude.com/docs/en/setup), Anthropic's command-line coding tool, and watch Claude call. At the end you have a working server you understand line by line, ready to grow into your own product's tools, wrap in a [plugin](/docs/plugins/quickstart.md), or host for people on claude.ai.
5An MCP server is a program that gives Claude tools it can call, and people who use Claude see it as a connector. In this quickstart you write one in about 50 lines of JavaScript with no build step: a server with a single `roll_dice` tool that runs on your machine, which you then connect to [Claude Code](https://code.claude.com/docs/en/setup), Anthropic's command-line coding tool, and watch Claude call. At the end you have a working server you understand line by line, ready to grow into your own product's tools, wrap in a [plugin](https://claude.com/docs/plugins/quickstart.md), or host for people on claude.ai.
66
77This quickstart is for developers who haven't built an MCP server before and want to see every piece working before they add authentication, hosting, and real tools.
88
99> [!NOTE]
1010>
11> * If you already have a server and want to know what Claude's client supports, see [Build an MCP server for Claude](/docs/connectors/building/index.md)
12> * If your server is running and you want to try it in Claude, see [Test your connector](/docs/connectors/building/testing.md)
13> * If you want to package skills and an existing connector rather than write a server, see [Build your first plugin](/docs/plugins/quickstart.md)
11> * If you already have a server and want to know what Claude's client supports, see [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md)
12> * If your server is running and you want to try it in Claude, see [Test your connector](https://claude.com/docs/connectors/building/testing.md)
13> * If you want to package skills and an existing connector rather than write a server, see [Build your first plugin](https://claude.com/docs/plugins/quickstart.md)
1414
1515## Before you begin
1616
from line 263
263263
264264Once the server has a public URL, these pages cover each step:
265265
266* [Add a connector by URL](/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url): add the server to your own Claude account as a custom connector
267* [Test in Claude as a custom connector](/docs/connectors/building/testing.md#test-in-claude-as-a-custom-connector): check the connection, the tool list, and a real call from a chat, including how to expose a server that's still on your machine through a tunnel
268* [Authentication for connectors](/docs/connectors/building/authentication.md): add sign-in before real users connect, because this quickstart server lets anyone who can reach it call its tools
269* [Publish to the directory](/docs/directory/publish.md): submit the server for review so people can find it in Claude
266* [Add a connector by URL](https://claude.com/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url): add the server to your own Claude account as a custom connector
267* [Test in Claude as a custom connector](https://claude.com/docs/connectors/building/testing.md#test-in-claude-as-a-custom-connector): check the connection, the tool list, and a real call from a chat, including how to expose a server that's still on your machine through a tunnel
268* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): add sign-in before real users connect, because this quickstart server lets anyone who can reach it call its tools
269* [Publish to the directory](https://claude.com/docs/directory/publish.md): submit the server for review so people can find it in Claude
270270
271271## Clean up
272272
from line 280
280280
281281## Next steps
282282
283* [Add an interactive UI to your MCP server](/docs/connectors/building/mcp-apps/quickstart.md): give `roll_dice` a small UI that shows the dice inside the conversation
284* [Build an MCP server for Claude](/docs/connectors/building/index.md): plan a real server around what Claude's client supports, including authentication, result size limits, and timeouts
285* [Test your connector](/docs/connectors/building/testing.md): add your hosted server to Claude as a custom connector and debug connection failures
286* [Build your first plugin](/docs/plugins/quickstart.md): bundle your connector with a skill that teaches Claude when to use it, and submit both to the directory
283* [Add an interactive UI to your MCP server](https://claude.com/docs/connectors/building/mcp-apps/quickstart.md): give `roll_dice` a small UI that shows the dice inside the conversation
284* [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md): plan a real server around what Claude's client supports, including authentication, result size limits, and timeouts
285* [Test your connector](https://claude.com/docs/connectors/building/testing.md): add your hosted server to Claude as a custom connector and debug connection failures
286* [Build your first plugin](https://claude.com/docs/plugins/quickstart.md): bundle your connector with a skill that teaches Claude when to use it, and submit both to the directory
287287
connectors/building/review-criteria Changed · +8 / -8 lines
from line 2
22
33> Check your MCP connector against what Anthropic reviewers test, including tool design, prompt-injection patterns, and functional quality, before you submit.
44
5This checklist covers what Anthropic checks on an MCP connector submitted to the directory, organized around the most common rejection reasons so you can correct them before you submit. It's for connector authors preparing a [directory submission](/docs/connectors/building/submission.md). For the full legal text behind these criteria, see the [Software Directory Policy](https://support.claude.com/en/articles/13145358-anthropic-software-directory-policy).
5This checklist covers what Anthropic checks on an MCP connector submitted to the directory, organized around the most common rejection reasons so you can correct them before you submit. It's for connector authors preparing a [directory submission](https://claude.com/docs/connectors/building/submission.md). For the full legal text behind these criteria, see the [Software Directory Policy](https://support.claude.com/en/articles/13145358-anthropic-software-directory-policy).
66
77> [!NOTE]
88>
9> If you're submitting a plugin, see the [plugin pre-submission checklist](/docs/plugins/pre-submission-checklist.md) instead.
9> If you're submitting a plugin, see the [plugin pre-submission checklist](https://claude.com/docs/plugins/pre-submission-checklist.md) instead.
1010
1111Work through [tool design](#design-tools-that-pass-review), [server behavior](#server-behavior-and-scope), and [what to include with your submission](#gather-what-to-include-with-your-submission), then [test every tool](#test-before-you-submit) before you open the portal. [How Anthropic reviews connectors](#understand-how-anthropic-reviews-connectors) covers the Community and Verified labels.
1212
from line 78
7878Alongside the server itself, a submission carries credentials, links, and terms acknowledgments that reviewers check:
7979
8080* **Test credentials**: required, and they must be for a fully populated account
81* **Allowed link URIs**: recommended if your server calls `ui/open-link`. Declared HTTPS origins and custom URI schemes open without a confirmation prompt, and anything else still prompts the user. See [Allowed link URIs](/docs/connectors/building/submission.md#allowed-link-uris)
81* **Allowed link URIs**: recommended if your server calls `ui/open-link`. Declared HTTPS origins and custom URI schemes open without a confirmation prompt, and anything else still prompts the user. See [Allowed link URIs](https://claude.com/docs/connectors/building/submission.md#allowed-link-uris)
8282* **Public documentation**: required by your publish date. A blog post or help-center article is sufficient, and you can share docs privately with Anthropic during review
8383
8484## Test before you submit
8585
86Exercise every tool through the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) and as a [custom connector in Claude](/docs/connectors/building/testing.md) before you submit. The portal's **Test & launch** step asks you to confirm you've done this.
86Exercise every tool through the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) and as a [custom connector in Claude](https://claude.com/docs/connectors/building/testing.md) before you submit. The portal's **Test & launch** step asks you to confirm you've done this.
8787
8888## Understand how Anthropic reviews connectors
8989
90When you submit a server, Anthropic scans it automatically for policy compliance and, by default, lists it in the directory as a [Community connector](/docs/connectors/verification.md). Anthropic may then escalate listings flagged as highly useful to Claude users to Verified review, which is higher touch and slower, and in which reviewers run a functional test of each tool. That escalation is assessed automatically, and you don't need to take any action. Every server in the directory must meet the criteria on this page, whichever label it carries. The label is a quality signal shown to users and doesn't change how your connector runs once connected.
90When you submit a server, Anthropic scans it automatically for policy compliance and, by default, lists it in the directory as a [Community connector](https://claude.com/docs/connectors/verification.md). Anthropic may then escalate listings flagged as highly useful to Claude users to Verified review, which is higher touch and slower, and in which reviewers run a functional test of each tool. That escalation is assessed automatically, and you don't need to take any action. Every server in the directory must meet the criteria on this page, whichever label it carries. The label is a quality signal shown to users and doesn't change how your connector runs once connected.
9191
9292## Next steps
9393
94* [Submit a connector](/docs/connectors/building/submission.md): what the developer portal asks for at each step
95* [Connector verification](/docs/connectors/verification.md): what the Community and Verified labels mean to the people who install your connector
96* [Manage your directory listing](/docs/connectors/building/managing-your-listing.md): track review status and reviewer feedback after you submit
94* [Submit a connector](https://claude.com/docs/connectors/building/submission.md): what the developer portal asks for at each step
95* [Connector verification](https://claude.com/docs/connectors/verification.md): what the Community and Verified labels mean to the people who install your connector
96* [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md): track review status and reviewer feedback after you submit
9797
connectors/building/submission Changed · +22 / -22 lines
from line 2
22
33> Submit a remote MCP server or MCP App to the Connectors Directory through the developer portal: requirements, screenshot specs, and what each step asks for.
44
5You submit a remote MCP server to the [Connectors Directory](/docs/connectors/directory.md) through the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage), where you choose **MCP connector**.
5You submit a remote MCP server to the [Connectors Directory](https://claude.com/docs/connectors/directory.md) through the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage), where you choose **MCP connector**.
66
7This page is for connector authors who are ready to submit. It starts with a [checklist](#pre-submission-checklist-for-connectors), then covers [where to submit your connector](#choose-where-to-submit-your-connector), the [requirements every submission must meet](#meet-the-submission-requirements), and [what to have ready for each step of the portal](#submit-through-the-developer-portal). [Connector review criteria](/docs/connectors/building/review-criteria.md) explains what reviewers look for in your tools and server, so read it alongside the checklist.
7This page is for connector authors who are ready to submit. It starts with a [checklist](#pre-submission-checklist-for-connectors), then covers [where to submit your connector](#choose-where-to-submit-your-connector), the [requirements every submission must meet](#meet-the-submission-requirements), and [what to have ready for each step of the portal](#submit-through-the-developer-portal). [Connector review criteria](https://claude.com/docs/connectors/building/review-criteria.md) explains what reviewers look for in your tools and server, so read it alongside the checklist.
88
99> [!NOTE]
1010>
11> If you're submitting a plugin rather than a connector, see [Submit a plugin](/docs/plugins/submit.md) instead.
11> If you're submitting a plugin rather than a connector, see [Submit a plugin](https://claude.com/docs/plugins/submit.md) instead.
1212
1313## Pre-submission checklist for connectors
1414
1515Work through this list before you open the portal. Each item links to where it is explained, and the rest of this page covers the requirements and the portal steps in detail.
1616
17* **Your server is remote and reachable over HTTPS**: the portal asks for an `https://` URL. A local server can't be submitted on its own; include it in a [plugin](/docs/plugins/submit.md) instead
18* **Authentication works for Claude's client**: OAuth 2.0 if your tools act on a user's account, or no authentication for public data, as [Authentication for connectors](/docs/connectors/building/authentication.md) describes. You don't need Verified status or any separate approval for authentication to work
19* **Every tool has a `title` and a `readOnlyHint` or `destructiveHint` annotation**: the portal flags tools that are missing them, and [review criteria](/docs/connectors/building/review-criteria.md#design-tools-that-pass-review) explain how reviewers read tool names and descriptions
20* **You've tested it in Claude**: add the server as a [custom connector](/docs/connectors/building/testing.md#test-in-claude-as-a-custom-connector) and call each tool from a conversation; the portal's **Test & launch** step asks you to confirm this
21* **You have the listing materials**: documentation URL, privacy policy URL, support contact, an icon, and for an [MCP App](/docs/connectors/building/mcp-apps/getting-started.md) the [carousel screenshots](#carousel-screenshots-for-mcp-apps)
17* **Your server is remote and reachable over HTTPS**: the portal asks for an `https://` URL. A local server can't be submitted on its own; include it in a [plugin](https://claude.com/docs/plugins/submit.md) instead
18* **Authentication works for Claude's client**: OAuth 2.0 if your tools act on a user's account, or no authentication for public data, as [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md) describes. You don't need Verified status or any separate approval for authentication to work
19* **Every tool has a `title` and a `readOnlyHint` or `destructiveHint` annotation**: the portal flags tools that are missing them, and [review criteria](https://claude.com/docs/connectors/building/review-criteria.md#design-tools-that-pass-review) explain how reviewers read tool names and descriptions
20* **You've tested it in Claude**: add the server as a [custom connector](https://claude.com/docs/connectors/building/testing.md#test-in-claude-as-a-custom-connector) and call each tool from a conversation; the portal's **Test & launch** step asks you to confirm this
21* **You have the listing materials**: documentation URL, privacy policy URL, support contact, an icon, and for an [MCP App](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md) the [carousel screenshots](#carousel-screenshots-for-mcp-apps)
2222* **You have a test account for reviewers**: credentials for a fully populated account, which you enter in the portal and which only reviewers see
23* **Your account can submit**: any paid Claude plan. See [who can submit](/docs/directory/publish.md#confirm-you-can-submit-to-the-directory)
24* **If a plugin of yours points at this server, submit the server anyway**: the connector listing gives your organization the server's details, authentication configuration, and dashboard, and lets you pair it with the plugin. See [Submit your plugin, and your MCP server as a connector](/docs/directory/publish.md#submit-your-plugin-and-your-mcp-server-as-a-connector)
23* **Your account can submit**: any paid Claude plan. See [who can submit](https://claude.com/docs/directory/publish.md#confirm-you-can-submit-to-the-directory)
24* **If a plugin of yours points at this server, submit the server anyway**: the connector listing gives your organization the server's details, authentication configuration, and dashboard, and lets you pair it with the plugin. See [Submit your plugin, and your MCP server as a connector](https://claude.com/docs/directory/publish.md#submit-your-plugin-and-your-mcp-server-as-a-connector)
2525
2626Then open the [developer portal](https://claude.ai/directory/manage), select **Submit new**, and choose **MCP connector**.
2727
from line 30
3030A connector submission is an MCP server, and where you submit it depends on whether the server is remote or local:
3131
3232* **Remote MCP servers**: internet-hosted servers that provide tools and data to Claude. Submit them through the [developer portal](https://claude.ai/directory/manage) and choose **MCP connector**
33* **MCP Apps**: remote MCP servers that [surface interactive UI](/docs/connectors/building/mcp-apps/getting-started.md). Submit them through the portal as remote servers, and include [carousel screenshots](#carousel-screenshots-for-mcp-apps) for the directory listing
34* **Local MCP servers**: desktop extension listings in the directory are deprecated, and the directory no longer accepts local servers packaged as [MCP Bundles (MCPB)](/docs/connectors/building/mcpb.md). To distribute a local server through the directory, include it in a [plugin](/docs/plugins/submit.md)
33* **MCP Apps**: remote MCP servers that [surface interactive UI](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md). Submit them through the portal as remote servers, and include [carousel screenshots](#carousel-screenshots-for-mcp-apps) for the directory listing
34* **Local MCP servers**: desktop extension listings in the directory are deprecated, and the directory no longer accepts local servers packaged as [MCP Bundles (MCPB)](https://claude.com/docs/connectors/building/mcpb.md). To distribute a local server through the directory, include it in a [plugin](https://claude.com/docs/plugins/submit.md)
3535
36Skills aren't a standalone submission type. Bundle them in a [plugin](/docs/plugins/submit.md).
36Skills aren't a standalone submission type. Bundle them in a [plugin](https://claude.com/docs/plugins/submit.md).
3737
38Anyone on a paid Claude plan can submit through the portal. [Who can submit to the directory](/docs/directory/publish.md#confirm-you-can-submit-to-the-directory) has the plan, role, and organization requirements, which are the same for connectors and plugins.
38Anyone on a paid Claude plan can submit through the portal. [Who can submit to the directory](https://claude.com/docs/directory/publish.md#confirm-you-can-submit-to-the-directory) has the plan, role, and organization requirements, which are the same for connectors and plugins.
3939
4040## Meet the submission requirements
4141
from line 97
9797* **HTTPS origin**: `https://example.com`. Only the scheme and hostname are matched, and paths, ports, and query strings are ignored. Subdomains aren't implied, so list each one, such as `https://app.example.com` and `https://docs.example.com`
9898* **Custom URI scheme**: `myapp:` for deep links into a native app you own. Only the scheme is matched
9999
100Every origin and scheme you list must be owned by you, the submitting organization. You may not list third-party domains or URI schemes registered to apps you don't publish. Entries you don't own are removed during review. [Open external links from MCP Apps](/docs/connectors/building/mcp-apps/external-links.md) explains how Claude matches entries and when the prompt still appears.
100Every origin and scheme you list must be owned by you, the submitting organization. You may not list third-party domains or URI schemes registered to apps you don't publish. Entries you don't own are removed during review. [Open external links from MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/external-links.md) explains how Claude matches entries and when the prompt still appears.
101101
102102### Carousel screenshots for MCP Apps
103103
from line 131
131131
132132**1. Connection**
133133
134Connect the server you're submitting, by pasting its `https://` URL or choosing a custom connector you've already added to Claude. If your users connect to different URLs, select **Users connect to different URLs** and choose **Multiple URLs** or **URL pattern**. A listing that uses one of these options can be published only once it has the **Verified** label, as [Servers with per-customer URLs](/docs/connectors/building/authentication.md#servers-with-per-customer-urls) explains.
134Connect the server you're submitting, by pasting its `https://` URL or choosing a custom connector you've already added to Claude. If your users connect to different URLs, select **Users connect to different URLs** and choose **Multiple URLs** or **URL pattern**. A listing that uses one of these options can be published only once it has the **Verified** label, as [Servers with per-customer URLs](https://claude.com/docs/connectors/building/authentication.md#servers-with-per-customer-urls) explains.
135135
136136**2. Tools**
137137
from line 151
151151
152152**6. Authentication**
153153
154In the **How users authenticate** section, choose whether users must sign in under **Authentication requirement**, and how they sign in under **Authentication methods**. Choose **Required when the server asks** if your server starts without sign-in and only some tools need it. To have Anthropic hold your OAuth client, enter its client ID and secret here, as [Enter your OAuth client in the developer portal](/docs/connectors/building/authentication.md#enter-your-oauth-client-in-the-developer-portal) describes. [Authentication for connectors](/docs/connectors/building/authentication.md) covers each option.
154In the **How users authenticate** section, choose whether users must sign in under **Authentication requirement**, and how they sign in under **Authentication methods**. Choose **Required when the server asks** if your server starts without sign-in and only some tools need it. To have Anthropic hold your OAuth client, enter its client ID and secret here, as [Enter your OAuth client in the developer portal](https://claude.com/docs/connectors/building/authentication.md#enter-your-oauth-client-in-the-developer-portal) describes. [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md) covers each option.
155155
156156If you chose **URL pattern** in the Connection step, Anthropic-held client credentials can't be used. If you chose **Multiple URLs**, a custom connection can't be used.
157157
from line 173
173173
174174## After you submit
175175
176Anthropic scans your submission automatically for policy compliance and, by default, lists it as a Community connector with no action from you. A listing that uses an option under **Users connect to different URLs** can be published only once it has the **Verified** label. Some submissions also get a review from a person, and those review times vary with queue volume. The portal is always open for new submissions. Your submission's status and any reviewer feedback appear in the portal at [claude.ai/directory/manage](https://claude.ai/directory/manage), and [Track your directory submission](/docs/directory/submission-status.md#mcp-connector-statuses) explains what each status in the portal means. [Manage your directory listing](/docs/connectors/building/managing-your-listing.md) covers reviewer feedback, listing edits, and the server health and usage metrics you get after publication.
176Anthropic scans your submission automatically for policy compliance and, by default, lists it as a Community connector with no action from you. A listing that uses an option under **Users connect to different URLs** can be published only once it has the **Verified** label. Some submissions also get a review from a person, and those review times vary with queue volume. The portal is always open for new submissions. Your submission's status and any reviewer feedback appear in the portal at [claude.ai/directory/manage](https://claude.ai/directory/manage), and [Track your directory submission](https://claude.com/docs/directory/submission-status.md#mcp-connector-statuses) explains what each status in the portal means. [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md) covers reviewer feedback, listing edits, and the server health and usage metrics you get after publication.
177177
179179
180If a submission is stuck, [Contact Anthropic about a submission](/docs/directory/submission-status.md#contact-anthropic-about-a-submission) gives the channel for an MCP connector.
180If a submission is stuck, [Contact Anthropic about a submission](https://claude.com/docs/directory/submission-status.md#contact-anthropic-about-a-submission) gives the channel for an MCP connector.
181181
182182## Next steps
183183
184* [Manage your directory listing](/docs/connectors/building/managing-your-listing.md): track review status, respond to reviewer feedback, and edit your listing
185* [After publishing](/docs/connectors/building/after-publishing.md): release updates to your server, and delist
186* [Connector verification](/docs/connectors/verification.md#list-your-own-connector): see how a Community listing becomes Verified and what each label means to users
184* [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md): track review status, respond to reviewer feedback, and edit your listing
185* [After publishing](https://claude.com/docs/connectors/building/after-publishing.md): release updates to your server, and delist
186* [Connector verification](https://claude.com/docs/connectors/verification.md#list-your-own-connector): see how a Community listing becomes Verified and what each label means to users
187187
connectors/building/testing Changed · +10 / -10 lines
from line 4
44
55You test an MCP server against the real Claude client by adding it to Claude as a custom connector. There is no separate staging environment, so you test in production. Custom connectors use the exact same runtime as directory connectors, and what works as a custom connector will work after publication.
66
7This page is for developers with a running server, whether it's deployed or still on your machine. It covers adding the server to Claude, validating it with MCP Inspector, detecting Claude as the client, and preparing test credentials for directory review. If a connection fails while you test, [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md) walks through each error message.
7This page is for developers with a running server, whether it's deployed or still on your machine. It covers adding the server to Claude, validating it with MCP Inspector, detecting Claude as the client, and preparing test credentials for directory review. If a connection fails while you test, [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md) walks through each error message.
88
99## Test in Claude as a custom connector
1010
11To test your server the way users will reach it, add it to your own Claude account as a custom connector by its URL. Any Claude account can do this, on Free, Pro, Max, Team, or Enterprise; [Add a connector that isn't in the directory](/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url) has the steps for each plan, starting from [**Customize > Connectors**](https://claude.ai/customize/connectors).
11To test your server the way users will reach it, add it to your own Claude account as a custom connector by its URL. Any Claude account can do this, on Free, Pro, Max, Team, or Enterprise; [Add a connector that isn't in the directory](https://claude.com/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url) has the steps for each plan, starting from [**Customize > Connectors**](https://claude.ai/customize/connectors).
1212
1313Once the connector is added, check these:
1414
1515* **The connection**: the connector shows **Connected** under **Your connectors**. If it shows **Connect** or **Reconnect** instead, sign-in didn't finish, and [Debug connection failures](#debug-connection-failures) covers the usual causes
1616* **Your tools**: open the connector's page and look under **Tool permissions**. Every tool your server advertises should be listed with the name and description you gave it, because those are what Claude reads when it decides to call a tool
17* **A real call**: in a chat, turn the connector on from **+ > Connectors**, ask for something that needs one of your tools, and approve the call when Claude asks. Confirm on your server that the request arrived with the arguments you expected, and in Claude that the result reads well. [Use the connector in a conversation](/docs/connectors/getting-started.md#use-the-connector-in-a-conversation) shows what the user sees at each point
17* **A real call**: in a chat, turn the connector on from **+ > Connectors**, ask for something that needs one of your tools, and approve the call when Claude asks. Confirm on your server that the request arrived with the arguments you expected, and in Claude that the result reads well. [Use the connector in a conversation](https://claude.com/docs/connectors/getting-started.md#use-the-connector-in-a-conversation) shows what the user sees at each point
1818
1919### Test a local server
2020
2121Claude reaches your server from Anthropic's infrastructure, so a server running on your machine needs a public URL. Expose it with a tunnel such as [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/) or `ngrok`, then add the tunnel URL as a custom connector. This is the recommended pattern for iterating on MCP Apps as well.
2222
23If your server uses the TypeScript SDK's `createMcpExpressApp()`, as the [quickstart server](/docs/connectors/building/quickstart.md) does, its DNS rebinding protection accepts only `localhost`, `127.0.0.1`, and `[::1]` in the `Host` header. A request that arrives with the tunnel's hostname in that header gets `403` with `Invalid Host: <hostname>`, and the connection fails. While you test through the tunnel, pass the tunnel's hostname in `allowedHosts`, replacing `abc123.example.com` with your tunnel's hostname:
23If your server uses the TypeScript SDK's `createMcpExpressApp()`, as the [quickstart server](https://claude.com/docs/connectors/building/quickstart.md) does, its DNS rebinding protection accepts only `localhost`, `127.0.0.1`, and `[::1]` in the `Host` header. A request that arrives with the tunnel's hostname in that header gets `403` with `Invalid Host: <hostname>`, and the connection fails. While you test through the tunnel, pass the tunnel's hostname in `allowedHosts`, replacing `abc123.example.com` with your tunnel's hostname:
2424
2525```js theme={null}
2626const app = createMcpExpressApp({ allowedHosts: ['localhost', '127.0.0.1', 'abc123.example.com'] });
from line 58
5858
5959Use server-side logging on your end and the MCP Inspector to diagnose connection failures. An `initialize` timeout commonly has one of these causes:
6060
61* **Slow OAuth endpoints**: keep discovery, registration, and token responses under ten seconds, as described in [endpoint latency](/docs/connectors/building/authentication.md#endpoint-latency)
61* **Slow OAuth endpoints**: keep discovery, registration, and token responses under ten seconds, as described in [endpoint latency](https://claude.com/docs/connectors/building/authentication.md#endpoint-latency)
6262* **Strict `Origin`-header validation**: an overly strict check rejects Anthropic's requests
6363* **Firewalls**: a firewall drops Anthropic's egress traffic
6464
65If your infrastructure logs show `403 Forbidden` responses your application didn't generate, your CDN or WAF is likely blocking Anthropic's traffic. See [firewall or WAF blocks traffic from Anthropic](/docs/connectors/building/troubleshooting.md#firewall-or-waf-blocks-traffic-from-anthropic) for the fix.
65If your infrastructure logs show `403 Forbidden` responses your application didn't generate, your CDN or WAF is likely blocking Anthropic's traffic. See [firewall or WAF blocks traffic from Anthropic](https://claude.com/docs/connectors/building/troubleshooting.md#firewall-or-waf-blocks-traffic-from-anthropic) for the fix.
6666
67For a structured walkthrough of the "Couldn't reach the MCP server" and "Authorization failed" errors, see [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md). It includes DNS resolution checks, OAuth discovery diagnostics, and how to find the `ofid_` reference ID to include in a support request.
67For a structured walkthrough of the "Couldn't reach the MCP server" and "Authorization failed" errors, see [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md). It includes DNS resolution checks, OAuth discovery diagnostics, and how to find the `ofid_` reference ID to include in a support request.
6868
6969## Next steps
7070
71* [Troubleshoot your connector](/docs/connectors/building/troubleshooting.md): diagnose each error message Claude shows for a failed connection or tool call
72* [Plugin structure and testing](/docs/plugins/build.md): bundle your tested connector with skills so people install both together
73* [Publish to the directory](/docs/directory/publish.md): submit your connector for review and listing
71* [Troubleshoot your connector](https://claude.com/docs/connectors/building/troubleshooting.md): diagnose each error message Claude shows for a failed connection or tool call
72* [Plugin structure and testing](https://claude.com/docs/plugins/build.md): bundle your tested connector with skills so people install both together
73* [Publish to the directory](https://claude.com/docs/directory/publish.md): submit your connector for review and listing
7474
connectors/building/troubleshooting Changed · +10 / -10 lines
from line 2
22
33> Diagnose and resolve common connection, authorization, and tool-call failures for custom and directory MCP connectors
44
5These errors appear in Claude, on claude.ai or in the desktop app, when someone uses your MCP server as a connector: either when they select **Connect** and sign in, or later when Claude calls one of your tools in a conversation. You usually meet them first yourself while [testing your server as a custom connector](/docs/connectors/building/testing.md#test-in-claude-as-a-custom-connector) before you submit it, and the same messages are what your users see after it's listed. Each message covers several causes on your side.
5These errors appear in Claude, on claude.ai or in the desktop app, when someone uses your MCP server as a connector: either when they select **Connect** and sign in, or later when Claude calls one of your tools in a conversation. You usually meet them first yourself while [testing your server as a custom connector](https://claude.com/docs/connectors/building/testing.md#test-in-claude-as-a-custom-connector) before you submit it, and the same messages are what your users see after it's listed. Each message covers several causes on your side.
66
77This page is for the developer of the MCP server. Start with the section for the message Claude showed:
88
from line 36
3636
3737**How to check:** Run `dig +short your-server.example.com` from a machine outside your network, or use a public DNS lookup service. Every returned address must be globally routable.
3838
39**How to fix:** Expose your server through a publicly routable endpoint, such as a cloud host with a public IP, a public reverse proxy, or a tunnel. See [test a local server](/docs/connectors/building/testing.md#test-a-local-server) for the recommended tunnel setup.
39**How to fix:** Expose your server through a publicly routable endpoint, such as a cloud host with a public IP, a public reverse proxy, or a tunnel. See [test a local server](https://claude.com/docs/connectors/building/testing.md#test-a-local-server) for the recommended tunnel setup.
4040
4141### Firewall or WAF blocks traffic from Anthropic
4242
from line 61
6161If your server requires authentication, Claude performs OAuth discovery before it can connect. A discovery failure can surface as "Couldn't reach" even though your MCP endpoint itself is reachable, or as a sign-in that redirects to `/authorize` on your MCP server's host and fails there. The redirect happens when Claude can't read your [RFC 9728](https://www.rfc-editor.org/rfc/rfc9728) protected resource metadata and falls back to treating your MCP server's origin as the authorization server, so the browser opens a sign-in page that doesn't exist on your server. These are the most common causes:
6262
6363* **Discovery metadata returns 404**: if your `401` response doesn't include a `WWW-Authenticate` header with a `resource_metadata` pointer, Claude looks for protected resource metadata and authorization server metadata at the standard `/.well-known/` paths on your MCP server's origin. If those paths return `404` and you haven't pointed Claude elsewhere, Claude can't locate your authorization server
64* **No way to register a client**: Claude needs one of [RFC 7591 dynamic client registration](https://www.rfc-editor.org/rfc/rfc7591) (a `registration_endpoint` in your authorization server metadata), [Client ID Metadata Documents](/docs/connectors/building/authentication.md#dcr-and-cimd-details) (`"client_id_metadata_document_supported": true`), or a pre-registered client. Without any of these, Claude can't obtain a client identity. See [supported authentication types](/docs/connectors/building/authentication.md#supported-authentication-types)
65* **Authorization server is on a different host than the MCP server**: Claude discovers protected resource metadata from your MCP server, then makes a second round of discovery requests against the authorization server host listed in `authorization_servers`. If that host is behind a different CDN or WAF, it must also be reachable from Anthropic's egress range. See [Serve discovery metadata](/docs/connectors/building/authentication.md#serve-discovery-metadata)
64* **No way to register a client**: Claude needs one of [RFC 7591 dynamic client registration](https://www.rfc-editor.org/rfc/rfc7591) (a `registration_endpoint` in your authorization server metadata), [Client ID Metadata Documents](https://claude.com/docs/connectors/building/authentication.md#dcr-and-cimd-details) (`"client_id_metadata_document_supported": true`), or a pre-registered client. Without any of these, Claude can't obtain a client identity. See [supported authentication types](https://claude.com/docs/connectors/building/authentication.md#supported-authentication-types)
65* **Authorization server is on a different host than the MCP server**: Claude discovers protected resource metadata from your MCP server, then makes a second round of discovery requests against the authorization server host listed in `authorization_servers`. If that host is behind a different CDN or WAF, it must also be reachable from Anthropic's egress range. See [Serve discovery metadata](https://claude.com/docs/connectors/building/authentication.md#serve-discovery-metadata)
6666* **A proxy or hosting platform alters the discovery response**: a layer in front of your server can rename or drop the `WWW-Authenticate` header, or answer `403` on the `/.well-known/` paths before the request reaches your application. Check the response at the deployed edge with `curl` from a public network, not with a tool that runs inside your platform
6767
6868**How to check:** From a public network, request each discovery document:
from line 86
8686* **Issuer mismatch**: the `issuer` value in your authorization server metadata must match the issuer that signs your tokens. If your tokens come from a third-party identity provider but your metadata advertises a different issuer URL, validation can fail
8787* **Audience mismatch**: the [MCP authorization spec](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#token-handling) requires your server to verify each access token was issued for it. Claude sends the [RFC 8707](https://www.rfc-editor.org/rfc/rfc8707) `resource` parameter on authorization and token requests, set to the canonical form of your MCP server URL, including any path component. The canonical form has a lowercase scheme and host, no trailing slash, no fragment, and no default port. Your authorization server should issue tokens with that audience, and your MCP server should accept the canonical value when checking `aud` rather than doing a strict byte-for-byte comparison against what the user typed. Or use whatever audience-binding mechanism your token format supports, as long as it confirms the token was minted for your server and not another service
8888* **PKCE not supported**: Claude includes a PKCE `code_challenge` with `code_challenge_method=S256` in every authorization request. If your authorization server doesn't implement S256 PKCE, the flow fails at the token endpoint. The [MCP authorization spec](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization#authorization-code-protection) also requires authorization servers to advertise `"code_challenge_methods_supported": ["S256"]` so spec-compliant clients can verify support before starting the flow
89* **Refresh failures**: use RFC 6749-compliant error codes when a refresh token expires. See [token refresh](/docs/connectors/building/authentication.md#token-refresh)
90* **Slow token endpoint**: Claude waits up to 10 seconds for your `/token` response. If no response bytes arrive in that window, the flow fails here even if your server eventually issues the token. Check the end-to-end latency of your token handler and any proxy or gateway in front of it. See [endpoint latency](/docs/connectors/building/authentication.md#endpoint-latency)
89* **Refresh failures**: use RFC 6749-compliant error codes when a refresh token expires. See [token refresh](https://claude.com/docs/connectors/building/authentication.md#token-refresh)
90* **Slow token endpoint**: Claude waits up to 10 seconds for your `/token` response. If no response bytes arrive in that window, the flow fails here even if your server eventually issues the token. Check the end-to-end latency of your token handler and any proxy or gateway in front of it. See [endpoint latency](https://claude.com/docs/connectors/building/authentication.md#endpoint-latency)
9191* **Your server URL redirects to a different host**: when the URL you registered redirects to another hostname, Claude drops the `Authorization` header as it follows the redirect, the redirect target returns `401`, and the connection fails with this message. See [Your server URL redirects to a different host](#your-server-url-redirects-to-a-different-host) for how to find and fix the redirect
9292
9393### Microsoft Entra ID rejects the resource value
from line 160
160160
161161**6. Cross-host hint**
162162
163If your authorization server is on a different host than your MCP server, confirm your protected resource metadata's `authorization_servers` field points at it, and that the authorization server's host is reachable from Anthropic's egress range and answers `/.well-known/openid-configuration` or `/.well-known/oauth-authorization-server`. See [Serve discovery metadata](/docs/connectors/building/authentication.md#serve-discovery-metadata).
163If your authorization server is on a different host than your MCP server, confirm your protected resource metadata's `authorization_servers` field points at it, and that the authorization server's host is reachable from Anthropic's egress range and answers `/.well-known/openid-configuration` or `/.well-known/oauth-authorization-server`. See [Serve discovery metadata](https://claude.com/docs/connectors/building/authentication.md#serve-discovery-metadata).
164164
165165**7. Collect the reference ID**
166166
from line 178
178178
179179## Related resources
180180
181* [Authentication for connectors](/docs/connectors/building/authentication.md): OAuth requirements and supported auth types
182* [Lazy authentication](/docs/connectors/building/lazy-authentication.md): the `401` and `WWW-Authenticate` discovery handshake
183* [Test your connector](/docs/connectors/building/testing.md): how to test your server before publishing
181* [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md): OAuth requirements and supported auth types
182* [Lazy authentication](https://claude.com/docs/connectors/building/lazy-authentication.md): the `401` and `WWW-Authenticate` discovery handshake
183* [Test your connector](https://claude.com/docs/connectors/building/testing.md): how to test your server before publishing
184184* [IP address reference](https://platform.claude.com/docs/en/api/ip-addresses): Anthropic's published IP ranges for allowlisting
185185
connectors/building/what-to-build Changed · +10 / -10 lines
from line 11
1111
1212A plugin with only a connector or only skills is complete.
1313
14This page is for developers deciding which of those pieces their plugin needs. Once you've decided, [Plugin structure and testing](/docs/plugins/build.md), [Build an MCP server for Claude](/docs/connectors/building/index.md), and [Publish to the directory](/docs/directory/publish.md) cover the work.
14This page is for developers deciding which of those pieces their plugin needs. Once you've decided, [Plugin structure and testing](https://claude.com/docs/plugins/build.md), [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md), and [Publish to the directory](https://claude.com/docs/directory/publish.md) cover the work.
1515
1616> [!NOTE]
1717>
18> * If you're choosing what to add to your own Claude rather than what to build, see [Connectors, skills, and plugins](/docs/extend/overview.md), which compares the three from the user's side
19> * If you're building for your own organization and not listing publicly, the same decisions apply, and you distribute the result as a [custom connector](/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url) and an [organization plugin](/docs/plugins/admin.md) instead of through the directory
18> * If you're choosing what to add to your own Claude rather than what to build, see [Connectors, skills, and plugins](https://claude.com/docs/extend/overview.md), which compares the three from the user's side
19> * If you're building for your own organization and not listing publicly, the same decisions apply, and you distribute the result as a [custom connector](https://claude.com/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url) and an [organization plugin](https://claude.com/docs/plugins/admin.md) instead of through the directory
2020
2121## Reach your product with an MCP connector
2222
23Include an MCP connector when Claude needs to read from or act in your product or data. The connector points at a remote MCP server that you build and host, with [OAuth sign-in](/docs/connectors/building/authentication.md) if your tools act on the user's own account. [Build an MCP server for Claude](/docs/connectors/building/index.md) covers the server, and [Build your first MCP server for Claude](/docs/connectors/building/quickstart.md) is the place to start if you haven't written one.
23Include an MCP connector when Claude needs to read from or act in your product or data. The connector points at a remote MCP server that you build and host, with [OAuth sign-in](https://claude.com/docs/connectors/building/authentication.md) if your tools act on the user's own account. [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md) covers the server, and [Build your first MCP server for Claude](https://claude.com/docs/connectors/building/quickstart.md) is the place to start if you haven't written one.
2424
2525Once the server is live, people can use your product in chat on web, desktop, and mobile, in Cowork, and in Claude Code. Tools you add to the server later reach every plugin that references it without a new plugin release.
2626
from line 39
3939Commands, agents, and UI are optional pieces, and each fits a particular need:
4040
4141* **Commands**: named actions people run themselves, such as `/your-plugin:weekly-report`, for tasks they start deliberately rather than describe
42* **Agents**: specialists Claude can delegate part of a task to. Cowork and Claude Code run them; chat doesn't, as [Plugin feature support across platforms](/docs/plugins/platform-support.md) lists
43* **An MCP App**: interactive UI that your connector shows in the conversation, such as a form or a chart. [Add interactive UI with MCP Apps](/docs/connectors/building/mcp-apps/getting-started.md) covers building one
42* **Agents**: specialists Claude can delegate part of a task to. Cowork and Claude Code run them; chat doesn't, as [Plugin feature support across platforms](https://claude.com/docs/plugins/platform-support.md) lists
43* **An MCP App**: interactive UI that your connector shows in the conversation, such as a form or a chart. [Add interactive UI with MCP Apps](https://claude.com/docs/connectors/building/mcp-apps/getting-started.md) covers building one
4444
4545## Package and list the plugin
4646
4747Most plugins for a product include both an MCP connector and skills: the connector so Claude can reach the product, and the skills so Claude uses it the way you intend. Everything in the plugin is packaged together, so one listing gives people all of it.
4848
49When you list the plugin, submit the server too: the plugin as a plugin bundle and the server as an MCP connector. Submitting the server as a connector gives your organization the connector's listing and its dashboard, and lets you pair the two listings. [Submit your plugin, and your MCP server as a connector](/docs/directory/publish.md#submit-your-plugin-and-your-mcp-server-as-a-connector) explains the pairing.
49When you list the plugin, submit the server too: the plugin as a plugin bundle and the server as an MCP connector. Submitting the server as a connector gives your organization the connector's listing and its dashboard, and lets you pair the two listings. [Submit your plugin, and your MCP server as a connector](https://claude.com/docs/directory/publish.md#submit-your-plugin-and-your-mcp-server-as-a-connector) explains the pairing.
5050
5151The diagram shows what the server and the plugin each give people. The server gives them your connector. The plugin adds your skills and points to that same server.
5252
from line 58
5858
5959## Next steps
6060
61* [Plugin structure and testing](/docs/plugins/build.md): write the folder that packages your connector, skills, and the rest, and installs on every surface
62* [Build an MCP server for Claude](/docs/connectors/building/index.md): implement the server and its authentication, and test it against Claude
63* [Publish to the directory](/docs/directory/publish.md): submit the plugin, and its MCP server as a connector, from the [developer portal](https://claude.ai/directory/manage). Anyone on a paid Claude plan can submit, and on Team and Enterprise an Owner submits
61* [Plugin structure and testing](https://claude.com/docs/plugins/build.md): write the folder that packages your connector, skills, and the rest, and installs on every surface
62* [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md): implement the server and its authentication, and test it against Claude
63* [Publish to the directory](https://claude.com/docs/directory/publish.md): submit the plugin, and its MCP server as a connector, from the [developer portal](https://claude.ai/directory/manage). Anyone on a paid Claude plan can submit, and on Team and Enterprise an Owner submits
6464
connectors/custom/add-unlisted Changed · +9 / -9 lines
from line 2
22
33> Connect Claude to an MCP server that isn't in the Connectors Directory, by its URL or as a local desktop extension.
44
5You can connect Claude to a [Model Context Protocol (MCP)](/docs/connectors/building/mcp.md) server that isn't listed in the [Connectors Directory](/docs/connectors/directory.md). You add a remote server by its URL as a custom connector. In Claude Desktop, you can also use a desktop extension, which runs the server on your own computer.
5You can connect Claude to a [Model Context Protocol (MCP)](https://claude.com/docs/connectors/building/mcp.md) server that isn't listed in the [Connectors Directory](https://claude.com/docs/connectors/directory.md). You add a remote server by its URL as a custom connector. In Claude Desktop, you can also use a desktop extension, which runs the server on your own computer.
66
77This page is for people adding a connector to their own Claude and for Team and Enterprise Owners adding one for their organization.
88
99> [!NOTE]
1010>
11> * If you want a service that's already in the directory, see the [Connectors Directory](/docs/connectors/directory.md) and connect it from there
12> * If you're building the server yourself, see [Build an MCP server for Claude](/docs/connectors/building/index.md)
13> * If your server runs inside your private network, see [MCP tunnels](/docs/connectors/mcp-tunnels/overview)
11> * If you want a service that's already in the directory, see the [Connectors Directory](https://claude.com/docs/connectors/directory.md) and connect it from there
12> * If you're building the server yourself, see [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md)
13> * If your server runs inside your private network, see [MCP tunnels](https://claude.com/docs/connectors/mcp-tunnels/overview)
1414
1515If you have a server URL, go to [Add a connector by URL](#add-a-connector-by-url). If you have a desktop extension, go to [Install a local connector in the desktop app](#install-a-local-connector-in-the-desktop-app).
1616
from line 115
115115
116116* **Use Claude's published identity**: the recommended option. The server reads Claude's client details from a Client ID Metadata Document that Anthropic hosts. You set nothing up, and the server must support this method
117117* **Register automatically**: Claude registers OAuth clients with the server as users connect, using Dynamic Client Registration. This works with most servers and adds client registrations over time
118* **Use your own OAuth client**: enter a client ID you registered with the server. Leave the secret blank unless your authorization server requires one. See [Authentication for connectors](/docs/connectors/building/authentication.md)
118* **Use your own OAuth client**: enter a client ID you registered with the server. Leave the secret blank unless your authorization server requires one. See [Authentication for connectors](https://claude.com/docs/connectors/building/authentication.md)
119119
120120For **Request headers**, add fixed credentials such as API keys that Claude sends on every request. See [Authenticate with request headers](#authenticate-with-request-headers).
121121
from line 220
220220
221221### Build and package a desktop extension
222222
223If you're authoring the extension, follow [Build a desktop extension with MCPB](/docs/connectors/building/mcpb.md) and the [MCPB documentation](https://github.com/modelcontextprotocol/mcpb). You build your MCP server, bundle it with MCPB, test it locally, and then deploy it to your organization.
223If you're authoring the extension, follow [Build a desktop extension with MCPB](https://claude.com/docs/connectors/building/mcpb.md) and the [MCPB documentation](https://github.com/modelcontextprotocol/mcpb). You build your MCP server, bundle it with MCPB, test it locally, and then deploy it to your organization.
224224
225225## Security and privacy
226226
227Some connectors in the directory are verified by Anthropic and others are community connectors, as [connector verification](/docs/connectors/verification.md) explains. A connector you add yourself connects Claude to an unverified service.
227Some connectors in the directory are verified by Anthropic and others are community connectors, as [connector verification](https://claude.com/docs/connectors/verification.md) explains. A connector you add yourself connects Claude to an unverified service.
228228
229229### Connectors you add by URL
230230
from line 258
258258
259259## Next steps
260260
261* [Build an MCP server for Claude](/docs/connectors/building/index.md): build your own remote MCP server for any tool
262* [Connector verification](/docs/connectors/verification.md): which directory connectors Anthropic verifies and which are community connectors
261* [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md): build your own remote MCP server for any tool
262* [Connector verification](https://claude.com/docs/connectors/verification.md): which directory connectors Anthropic verifies and which are community connectors
263263* [MCP in Claude Code](https://code.claude.com/docs/en/mcp-quickstart): add the same server to Claude Code from the command line
264264
connectors/directory Changed · +8 / -8 lines
from line 2
22
33> Browse verified and community MCP connectors in the Connectors Directory, one catalog for claude.ai, Claude Desktop, mobile, Claude Code, and Cowork
44
5The Connectors Directory is a catalog of [MCP](/docs/connectors/building/mcp.md) servers that work across all Claude products: claude.ai, Claude Desktop, Claude Mobile, Claude Code, and Cowork.
5The Connectors Directory is a catalog of [MCP](https://claude.com/docs/connectors/building/mcp.md) servers that work across all Claude products: claude.ai, Claude Desktop, Claude Mobile, Claude Code, and Cowork.
66
7The directory contains both verified connectors and community connectors. Verification isn't a security audit. [Connector verification](/docs/connectors/verification.md) explains what each label means.
7The directory contains both verified connectors and community connectors. Verification isn't a security audit. [Connector verification](https://claude.com/docs/connectors/verification.md) explains what each label means.
88
99> [!NOTE]
1010>
from line 18
1818* No domain-ownership proof (DNS or `.well-known`) is required. That requirement applies only to the open MCP Registry, not the Anthropic Directory
1919* The help-docs link shown in the in-product connector setup flow is not partner-customizable
2020
21Directory connectors and custom connectors run on the same infrastructure. See [directory vs custom](/docs/connectors/building/directory-vs-custom.md).
21Directory connectors and custom connectors run on the same infrastructure. See [directory vs custom](https://claude.com/docs/connectors/building/directory-vs-custom.md).
2222
2323## Browse the directory
2424
from line 56
5656
5757**1. Review the submission guidelines**
5858
59Review the [submission guidelines](/docs/connectors/building/submission.md).
59Review the [submission guidelines](https://claude.com/docs/connectors/building/submission.md).
6060
6161**2. Meet the standards**
6262
from line 66
6666
6767Submit through the developer portal at [claude.ai/directory/manage](https://claude.ai/directory/manage).
6868
69Anyone on a paid Claude plan can submit, and on Team and Enterprise an Owner submits; see [who can submit to the directory](/docs/directory/publish.md#confirm-you-can-submit-to-the-directory) for the role and organization requirements. After publication, the same dashboard shows your server's health and usage; see [Manage your directory listing](/docs/connectors/building/managing-your-listing.md).
69Anyone on a paid Claude plan can submit, and on Team and Enterprise an Owner submits; see [who can submit to the directory](https://claude.com/docs/directory/publish.md#confirm-you-can-submit-to-the-directory) for the role and organization requirements. After publication, the same dashboard shows your server's health and usage; see [Manage your directory listing](https://claude.com/docs/connectors/building/managing-your-listing.md).
7070
7171## Next steps
7272
73* [Connector verification](/docs/connectors/verification.md): what the Verified and Community labels mean
74* [Get started with connectors](/docs/connectors/getting-started.md): set up a connector and use it in conversations
75* [Build an MCP server for Claude](/docs/connectors/building/index.md): create your own MCP server
73* [Connector verification](https://claude.com/docs/connectors/verification.md): what the Verified and Community labels mean
74* [Get started with connectors](https://claude.com/docs/connectors/getting-started.md): set up a connector and use it in conversations
75* [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md): create your own MCP server
7676
connectors/getting-started Changed · +10 / -10 lines
from line 10
1010
1111> [!NOTE]
1212>
13> * If the service you want isn't in the directory and you have its server URL, see [Add a connector that isn't in the directory](/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url)
14> * If you're building a connector, see [Build an MCP server for Claude](/docs/connectors/building/index.md)
15> * If you're a Team or Enterprise Owner deciding which connectors your organization offers, see [Browse the directory](/docs/connectors/directory.md#browse-the-directory) to add them from organization settings and handle member requests
13> * If the service you want isn't in the directory and you have its server URL, see [Add a connector that isn't in the directory](https://claude.com/docs/connectors/custom/add-unlisted.md#add-a-connector-by-url)
14> * If you're building a connector, see [Build an MCP server for Claude](https://claude.com/docs/connectors/building/index.md)
15> * If you're a Team or Enterprise Owner deciding which connectors your organization offers, see [Browse the directory](https://claude.com/docs/connectors/directory.md#browse-the-directory) to add them from organization settings and handle member requests
1616
1717## Before you begin
1818
from line 35
3535
3636Select **Discover** to browse the directory. Enter a service name in **Search connectors**, or look through the categories, then select a connector to open its page.
3737
38Each listing carries a Verified or Community label. [Connector verification](/docs/connectors/verification.md) explains what each one means.
38Each listing carries a Verified or Community label. [Connector verification](https://claude.com/docs/connectors/verification.md) explains what each one means.
3939
4040**3. Start the connection**
4141
from line 43
4343
4444On a Team or Enterprise plan, what you see depends on whether the connector has been added for your organization:
4545
46* If it hasn't, you see **Request** or a note to ask an organization Owner instead of a connect button. [Request a connector on a Team plan](/docs/connectors/directory.md#request-a-connector-on-a-team-plan) covers what happens next
46* If it hasn't, you see **Request** or a note to ask an organization Owner instead of a connect button. [Request a connector on a Team plan](https://claude.com/docs/connectors/directory.md#request-a-connector-on-a-team-plan) covers what happens next
4747* If you're an Owner, the button reads **Connect for your team** and adds the connector for everyone in your organization. You then connect your own account with **Connect to Claude**. To try the connector without adding it for everyone, select the arrow next to **Connect for your team**, then **Connect just for me**
4848
4949**4. Sign in to the service**
from line 99
9999* **Claude Code**: the connectors you add in claude.ai are available in Claude Code, in the terminal and in cloud sessions, when you sign in with your Claude account. See [Use MCP servers from claude.ai](https://code.claude.com/docs/en/mcp#use-mcp-servers-from-claude-ai)
100100* **Cowork**: connectors and plugins
101101
102Most connectors are remote services that you sign in to, as the steps on this page describe. A local connector is a desktop extension, packaged as an MCP Bundle (MCPB), that runs on your computer in the Claude desktop app. To add one, see [Install a local connector in the desktop app](/docs/connectors/custom/add-unlisted.md#install-a-local-connector-in-the-desktop-app).
102Most connectors are remote services that you sign in to, as the steps on this page describe. A local connector is a desktop extension, packaged as an MCP Bundle (MCPB), that runs on your computer in the Claude desktop app. To add one, see [Install a local connector in the desktop app](https://claude.com/docs/connectors/custom/add-unlisted.md#install-a-local-connector-in-the-desktop-app).
103103
104104## Next steps
105105
106* [Connectors directory](/docs/connectors/directory.md): how the directory is organized and how requests work on a Team plan
107* [Add a connector that isn't in the directory](/docs/connectors/custom/add-unlisted.md): connect Claude to any remote MCP server by its URL, or install a desktop extension
108* [Install and use plugins](/docs/plugins/overview.md#bundled-connectors): add a plugin that bundles connectors with the skills that use them
109* [Connectors, skills, and plugins](/docs/extend/overview.md): decide which of the three fits what you want Claude to do
106* [Connectors directory](https://claude.com/docs/connectors/directory.md): how the directory is organized and how requests work on a Team plan
107* [Add a connector that isn't in the directory](https://claude.com/docs/connectors/custom/add-unlisted.md): connect Claude to any remote MCP server by its URL, or install a desktop extension
108* [Install and use plugins](https://claude.com/docs/plugins/overview.md#bundled-connectors): add a plugin that bundles connectors with the skills that use them
109* [Connectors, skills, and plugins](https://claude.com/docs/extend/overview.md): decide which of the three fits what you want Claude to do
110110
connectors/google/calendar Changed · +6 / -6 lines
from line 8
88
99> [!NOTE]
1010>
11> If your organization uses Outlook or Teams calendars, see [Microsoft 365](/docs/connectors/microsoft/365.md) instead.
11> If your organization uses Outlook or Teams calendars, see [Microsoft 365](https://claude.com/docs/connectors/microsoft/365.md) instead.
1212
1313## Connect Google Calendar
1414
from line 28
2828
2929When the connection succeeds, the **Connect** button on the Google Calendar connector changes to **Disconnect**.
3030
31On Team and Enterprise plans, Google Calendar doesn't appear in your connector list until an Owner or Primary Owner enables it for your organization. For the full walkthrough, including troubleshooting, see [Get started with connectors](/docs/connectors/getting-started.md).
31On Team and Enterprise plans, Google Calendar doesn't appear in your connector list until an Owner or Primary Owner enables it for your organization. For the full walkthrough, including troubleshooting, see [Get started with connectors](https://claude.com/docs/connectors/getting-started.md).
3232
3333## Try the connector
3434
from line 60
6060
6161## Next steps
6262
63* [Gmail](/docs/connectors/google/gmail.md): search and analyze your emails
64* [Google Drive](/docs/connectors/google/drive.md): search and read your Drive files
65* [Add a connector from the directory](/docs/connectors/getting-started.md#add-a-connector-from-the-directory): find a connector for another service in the directory and connect it
66* [Connectors directory](/docs/connectors/directory.md): browse verified and community integrations
63* [Gmail](https://claude.com/docs/connectors/google/gmail.md): search and analyze your emails
64* [Google Drive](https://claude.com/docs/connectors/google/drive.md): search and read your Drive files
65* [Add a connector from the directory](https://claude.com/docs/connectors/getting-started.md#add-a-connector-from-the-directory): find a connector for another service in the directory and connect it
66* [Connectors directory](https://claude.com/docs/connectors/directory.md): browse verified and community integrations
6767