Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.
You 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 same runtime as directory connectors, with an exception for MCP Apps. Where embedded sites are available for custom connectors, plan for a custom connector’s views to lose some device features, such as the camera, while you test. Apart from features that read your directory listing, what works as a custom connector will work after publication.For example, where embedded sites are available for custom connectors, a website embedded in an MCP App loads while you test only after you allow it. After publication, the website loads only if your listing is Verified and allows its origin. An MCP App’s entry point that appears while you test stays hidden for people who install a Community listing.This 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 walks through each error message.
To test your server the way users reach it, add it to Claude as a custom connector by its URL. On Team and Enterprise plans, an Owner adds the connector for the organization. If you can’t add one yourself, ask an Owner. Go to Customize > Connectors to start. For the steps on each plan, see Add a connector that isn’t in the directory.Once the connector is added, check these:
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 covers the usual causes
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
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 shows what the user sees at each point
Claude 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 or ngrok, then add the tunnel URL as a custom connector. This is the recommended pattern for iterating on MCP Apps as well.If your server uses the TypeScript SDK’s createMcpExpressApp(), as the quickstart server 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:
A tunnel exposes your local server to the public internet. Keep authentication enabled on your server while tunneling, and shut the tunnel down when you’re done testing.
Before connecting to Claude, use the MCP Inspector to verify protocol compliance, exercise your auth flow, and inspect tool schemas. With your server running, run the Inspector’s command-line mode from a terminal against your server’s URL, replacing http://localhost:3000/mcp with your own:
Claude identifies itself in the MCP initialize handshake through clientInfo, but the exact value depends on the surface and the request path. You may see "name": "claude-ai", "name": "Anthropic", sometimes with a service suffix, or "name": "claude-code". One handshake looks like this:
Don’t gate behavior on an exact name or version string, because both vary across surfaces, request paths, and releases. Use clientInfo for telemetry and coarse feature detection only. It’s also unauthenticated: any client can claim any name, so it must never feed an authorization decision.
Directory submission requires test credentials. Provide a fully populated account rather than an empty shell, so reviewers can exercise real functionality: list real records, search real data, and exercise write tools on real resources. Include step-by-step setup instructions for someone unfamiliar with your service.
Use server-side logging on your end and the MCP Inspector to diagnose connection failures. An initialize timeout commonly has one of these causes:
Slow OAuth endpoints: keep discovery, registration, and token responses under ten seconds, as described in endpoint latency
Strict Origin-header validation: an overly strict check rejects Anthropic’s requests
Firewalls: a firewall drops Anthropic’s egress traffic
If 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 for the fix.For a structured walkthrough of the “Couldn’t reach the MCP server” and “Authorization failed” errors, see Troubleshoot your connector. It includes DNS resolution checks, OAuth discovery diagnostics, and how to find the ofid_ reference ID to include in a support request.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Claude.ai Documentation","colors":{"primary":"#0E0E0E","light":"#D4A27F","dark":"#0E0E0E"},"logo":{"light":"https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max\u0026auto=format\u0026n=1fyDNLAICe3KG6rB\u0026q=85\u0026s=e870c19cb781d8a7c7b7d19de53b0a10","dark":"https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/dark.svg?fit=max\u0026auto=format\u0026n=1fyDNLAICe3KG6rB\u0026q=85\u0026s=80cc0b06d8fd9aeefec8acb226de6866"},"favicon":"https://mintcdn.com/claude-ai/N9YeVEPVxANlc2We/favicon.ico?fit=max\u0026auto=format\u0026n=N9YeVEPVxANlc2We\u0026q=85\u0026s=a22e48fa0189917f9be516d4a555898c","background":{"color":{"light":"#FDFDF7","dark":"#09090B"}},"navbar":{"links":[{"href":"https://support.anthropic.com","label":"Support"}],"primary":{"type":"button","label":"Go to Claude","href":"https://claude.ai"}},"footer":{"socials":{"x":"https://x.com/AnthropicAI","linkedin":"https://www.linkedin.com/company/anthropicresearch"},"links":[{"header":"Company","items":[{"label":"Anthropic","href":"https://www.anthropic.com/company"},{"label":"Careers","href":"https://www.anthropic.com/careers"},{"label":"Economic Futures","href":"https://www.anthropic.com/economic-futures"},{"label":"Research","href":"https://www.anthropic.com/research"},{"label":"News","href":"https://www.anthropic.com/news"},{"label":"Trust center","href":"https://trust.anthropic.com/"},{"label":"Transparency","href":"https://www.anthropic.com/transparency"}]},{"header":"Help and security","items":[{"label":"Availability","href":"https://www.anthropic.com/supported-countries"},{"label":"Status","href":"https://status.anthropic.com/"},{"label":"Support center","href":"https://support.claude.com/"}]},{"header":"Learn","items":[{"label":"Courses","href":"https://academy.claude.com/"},{"label":"MCP connectors","href":"https://claude.com/partners/mcp"},{"label":"Customer stories","href":"https://www.claude.com/customers"},{"label":"Engineering blog","href":"https://www.anthropic.com/engineering"},{"label":"Events","href":"https://www.anthropic.com/events"},{"label":"Powered by Claude","href":"https://claude.com/partners/powered-by-claude"},{"label":"Service partners","href":"https://claude.com/partners/services"},{"label":"Startups program","href":"https://claude.com/programs/startups"}]},{"header":"Terms and policies","items":[{"label":"Privacy policy","href":"https://www.anthropic.com/legal/privacy"},{"label":"Disclosure policy","href":"https://www.anthropic.com/responsible-disclosure-policy"},{"label":"Usage policy","href":"https://www.anthropic.com/legal/aup"},{"label":"Commercial terms","href":"https://www.anthropic.com/legal/commercial-terms"},{"label":"Consumer terms","href":"https://www.anthropic.com/legal/consumer-terms"}]}]},"seo":{"metatags":{"canonical":"https://claude.com/docs"}},"fonts":{"family":"Anthropic Sans"},"contextual":{"options":["copy","view","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"claude-ai","hasAudioNarration":false,"actualSubdomain":"claude-ai","customDomains":["claude.com"],"gitSource":{"type":"github","owner":"anthropics","repo":"claude-ai-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af6770c4efb4fcd2b85b39c","clientVersion":"0.0.4124","searchFilterCounts":[{"language":"default","tag":"Claude Tag","count":75},{"language":"default","tag":"For administrators","count":60},{"language":"default","tag":"Claude for Government","count":46},{"language":"default","tag":"Claude on third-party platforms","count":43},{"language":"default","tag":"Claude Desktop","count":43},{"language":"default","tag":"Claude Science","count":41},{"language":"default","tag":"Build for Claude","count":36},{"language":"default","tag":"Set up Claude Tag","count":30},{"language":"default","tag":"Use Claude Science","count":23},{"language":"default","tag":"Customize Claude","count":22}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","href":"/docs/_mintlify/custom/claude-ai/f864c4801ebb83ca/style.css"}],"page":{"pagePath":"connectors/building/testing","slug":"/connectors/building/testing","pageMetadata":{"sidebarTitle":"Test your server","title":"Test your connector","description":"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.","href":"/connectors/building/testing"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`You 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 same runtime as directory connectors, with an exception for MCP Apps. Where embedded sites are available for custom connectors, plan for a custom connector’s views to `,_jsx(_components.a,{href:`/connectors/building/mcp-apps/embedded-sites#device-features-in-views-that-embed-sites`,children:`lose some device features`}),`, such as the camera, while you test. Apart from features that read your directory listing, what works as a custom connector will work after publication.`]}),`\n`,_jsxs(_components.p,{children:[`For example, where embedded sites are available for custom connectors, a `,_jsx(_components.a,{href:`/connectors/building/mcp-apps/embedded-sites#test-embedded-sites-with-a-custom-connector`,children:`website embedded in an MCP App`}),` loads while you test only after you allow it. After publication, the website loads only if your listing is Verified and allows its origin. An MCP App’s `,_jsx(_components.a,{href:`/connectors/building/mcp-apps/entry-points#conditions-for-showing-an-app-on-the-artifacts-page`,children:`entry point`}),` that appears while you test stays hidden for people who install a Community listing.`]}),`\n`,_jsxs(_components.p,{children:[`This 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, `,_jsx(_components.a,{href:`/connectors/building/troubleshooting`,children:`Troubleshoot your connector`}),` walks through each error message.`]}),`\n`,_jsx(Heading,{level:`2`,id:`test-in-claude-as-a-custom-connector`,children:`Test in Claude as a custom connector`}),`\n`,_jsxs(_components.p,{children:[`To test your server the way users reach it, add it to Claude as a custom connector by its URL. On Team and Enterprise plans, an Owner adds the connector for the organization. If you can’t add one yourself, ask an Owner. Go to `,_jsx(_components.a,{href:`https://claude.ai/customize/connectors`,children:_jsx(_components.strong,{children:`Customize > Connectors`})}),` to start. For the steps on each plan, see `,_jsx(_components.a,{href:`/connectors/custom/add-unlisted#add-a-connector-by-url`,children:`Add a connector that isn’t in the directory`}),`.`]}),`\n`,_jsx(_components.p,{children:`Once the connector is added, check these:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The connection`}),`: the connector shows `,_jsx(_components.strong,{children:`Connected`}),` under `,_jsx(_components.strong,{children:`Your connectors`}),`. If it shows `,_jsx(_components.strong,{children:`Connect`}),` or `,_jsx(_components.strong,{children:`Reconnect`}),` instead, sign-in didn’t finish, and `,_jsx(_components.a,{href:`#debug-connection-failures`,children:`Debug connection failures`}),` covers the usual causes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Your tools`}),`: open the connector’s page and look under `,_jsx(_components.strong,{children:`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`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A real call`}),`: in a chat, turn the connector on from `,_jsx(_components.strong,{children:`+ > 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. `,_jsx(_components.a,{href:`/connectors/getting-started#use-the-connector-in-a-conversation`,children:`Use the connector in a conversation`}),` shows what the user sees at each point`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`test-a-local-server`,children:`Test a local server`}),`\n`,_jsxs(_components.p,{children:[`Claude 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 `,_jsx(_components.a,{href:`https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/`,children:`Cloudflare Tunnel`}),` or `,_jsx(_components.code,{children:`ngrok`}),`, then add the tunnel URL as a custom connector. This is the recommended pattern for iterating on MCP Apps as well.`]}),`\n`,_jsxs(_components.p,{children:[`If your server uses the TypeScript SDK’s `,_jsx(_components.code,{children:`createMcpExpressApp()`}),`, as the `,_jsx(_components.a,{href:`/connectors/building/quickstart`,children:`quickstart server`}),` does, its DNS rebinding protection accepts only `,_jsx(_components.code,{children:`localhost`}),`, `,_jsx(_components.code,{children:`127.0.0.1`}),`, and `,_jsx(_components.code,{children:`[::1]`}),` in the `,_jsx(_components.code,{children:`Host`}),` header. A request that arrives with the tunnel’s hostname in that header gets `,_jsx(_components.code,{children:`403`}),` with `,_jsx(_components.code,{children:`Invalid Host: \u003chostname>`}),`, and the connection fails. While you test through the tunnel, pass the tunnel’s hostname in `,_jsx(_components.code,{children:`allowedHosts`}),`, replacing `,_jsx(_components.code,{children:`abc123.example.com`}),` with your tunnel’s hostname:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`javascript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`javascript`,children:_jsxs(_components.code,{language:`javascript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` app`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` createMcpExpressApp`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`allowedHosts:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'localhost'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'127.0.0.1'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'abc123.example.com'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`] });`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`A tunnel exposes your local server to the public internet. Keep authentication enabled on your server while tunneling, and shut the tunnel down when you’re done testing.`})}),`\n`,_jsx(Heading,{level:`3`,id:`validate-with-mcp-inspector`,children:`Validate with MCP Inspector`}),`\n`,_jsxs(_components.p,{children:[`Before connecting to Claude, use the `,_jsx(_components.a,{href:`https://modelcontextprotocol.io/docs/tools/inspector`,children:`MCP Inspector`}),` to verify protocol compliance, exercise your auth flow, and inspect tool schemas. With your server running, run the Inspector’s command-line mode from a terminal against your server’s URL, replacing `,_jsx(_components.code,{children:`http://localhost:3000/mcp`}),` with your own:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`npx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` @modelcontextprotocol/inspector`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --cli`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` http://localhost:3000/mcp`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --transport`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` http`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --method`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tools/list`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The command lists the tools your server advertises. Change `,_jsx(_components.code,{children:`--method`}),` to `,_jsx(_components.code,{children:`tools/call`}),` with `,_jsx(_components.code,{children:`--tool-name`}),` and `,_jsx(_components.code,{children:`--tool-arg`}),` options to call one.`]}),`\n`,_jsx(Heading,{level:`2`,id:`detect-claude-as-the-client`,children:`Detect Claude as the client`}),`\n`,_jsxs(_components.p,{children:[`Claude identifies itself in the MCP `,_jsx(_components.code,{children:`initialize`}),` handshake through `,_jsx(_components.code,{children:`clientInfo`}),`, but the exact value depends on the surface and the request path. You may see `,_jsx(_components.code,{children:`\"name\": \"claude-ai\"`}),`, `,_jsx(_components.code,{children:`\"name\": \"Anthropic\"`}),`, sometimes with a service suffix, or `,_jsx(_components.code,{children:`\"name\": \"claude-code\"`}),`. One handshake looks like this:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"clientInfo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: { `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Anthropic\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"1.0.0\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } }`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Don’t gate behavior on an exact `,_jsx(_components.code,{children:`name`}),` or `,_jsx(_components.code,{children:`version`}),` string, because both vary across surfaces, request paths, and releases. Use `,_jsx(_components.code,{children:`clientInfo`}),` for telemetry and coarse feature detection only. It’s also unauthenticated: any client can claim any name, so it must never feed an authorization decision.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prepare-test-credentials-for-review`,children:`Prepare test credentials for review`}),`\n`,_jsx(_components.p,{children:`Directory submission requires test credentials. Provide a fully populated account rather than an empty shell, so reviewers can exercise real functionality: list real records, search real data, and exercise write tools on real resources. Include step-by-step setup instructions for someone unfamiliar with your service.`}),`\n`,_jsx(Heading,{level:`2`,id:`debug-connection-failures`,children:`Debug connection failures`}),`\n`,_jsxs(_components.p,{children:[`Use server-side logging on your end and the MCP Inspector to diagnose connection failures. An `,_jsx(_components.code,{children:`initialize`}),` timeout commonly has one of these causes:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Slow OAuth endpoints`}),`: keep discovery, registration, and token responses under ten seconds, as described in `,_jsx(_components.a,{href:`/connectors/building/authentication#endpoint-latency`,children:`endpoint latency`})]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Strict `,_jsx(_components.code,{children:`Origin`}),`-header validation`]}),`: an overly strict check rejects Anthropic’s requests`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Firewalls`}),`: a firewall drops Anthropic’s egress traffic`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`If your infrastructure logs show `,_jsx(_components.code,{children:`403 Forbidden`}),` responses your application didn’t generate, your CDN or WAF is likely blocking Anthropic’s traffic. See `,_jsx(_components.a,{href:`/connectors/building/troubleshooting#firewall-or-waf-blocks-traffic-from-anthropic`,children:`firewall or WAF blocks traffic from Anthropic`}),` for the fix.`]}),`\n`,_jsxs(_components.p,{children:[`For a structured walkthrough of the “Couldn’t reach the MCP server” and “Authorization failed” errors, see `,_jsx(_components.a,{href:`/connectors/building/troubleshooting`,children:`Troubleshoot your connector`}),`. It includes DNS resolution checks, OAuth discovery diagnostics, and how to find the `,_jsx(_components.code,{children:`ofid_`}),` reference ID to include in a support request.`]}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/connectors/building/troubleshooting`,children:`Troubleshoot your connector`}),`: diagnose each error message Claude shows for a failed connection or tool call`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/plugins/build`,children:`Plugin structure and testing`}),`: bundle your tested connector with skills so people install both together`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/directory/publish`,children:`Publish to the directory`}),`: submit your connector for review and listing`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"sidebarTitle":"Test your server","title":"Test your connector","description":"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.","href":"/connectors/building/testing"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Test in Claude as a custom connector","slug":"test-in-claude-as-a-custom-connector","depth":2,"children":[{"title":"Test a local server","slug":"test-a-local-server","depth":3,"children":[]},{"title":"Validate with MCP Inspector","slug":"validate-with-mcp-inspector","depth":3,"children":[]}]},{"title":"Detect Claude as the client","slug":"detect-claude-as-the-client","depth":2,"children":[]},{"title":"Prepare test credentials for review","slug":"prepare-test-credentials-for-review","depth":2,"children":[]},{"title":"Debug connection failures","slug":"debug-connection-failures","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/claude-ai/b857db804a3a9481/desktop-app-nav.js"],"subdomain":"claude-ai","siteName":"Claude.ai Documentation","title":"Test your connector - Claude.ai Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-10T17:02:18.426Z","originalFileLocation":"connectors/building/testing.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Claude.ai Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Test your connector - Claude.ai Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Claude.ai Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://claude.com/docs/connectors/building/testing\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://claude-ai.mintlify.site/docs/_mintlify/api/og/v2?division=Build+an+MCP+server\u0026amp;title=Test+your+connector\u0026amp;description=Test+your+MCP+server+against+Claude+as+a+custom+connector+before+you+submit+it+to+the+directory%2C+including+a+local+server+exposed+through+a+tunnel.\u0026amp;theme=9a76ca0aba14a40680086237\u0026amp;signature=369a869189a266cb843561c98e9b12f0808d4aa2bb2c46662d79224e4f7f17a2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Test your connector - Claude.ai Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://claude-ai.mintlify.site/docs/_mintlify/api/og/v2?division=Build+an+MCP+server\u0026amp;title=Test+your+connector\u0026amp;description=Test+your+MCP+server+against+Claude+as+a+custom+connector+before+you+submit+it+to+the+directory%2C+including+a+local+server+exposed+through+a+tunnel.\u0026amp;theme=9a76ca0aba14a40680086237\u0026amp;signature=369a869189a266cb843561c98e9b12f0808d4aa2bb2c46662d79224e4f7f17a2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/claude-ai/zHw4o4W7dZma2XXV/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Claude.ai Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0E0E0E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://claude.com/docs/connectors/building/testing\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/connectors/building/testing.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://claude.com/#organization\",\"name\":\"Claude.ai Documentation\",\"url\":\"https://claude.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/claude-ai/1fyDNLAICe3KG6rB/logo/light.svg?fit=max\u0026auto=format\u0026n=1fyDNLAICe3KG6rB\u0026q=85\u0026s=e870c19cb781d8a7c7b7d19de53b0a10\"}},{\"@type\":\"WebSite\",\"@id\":\"https://claude.com/docs#website\",\"name\":\"Claude.ai Documentation\",\"url\":\"https://claude.com/docs\",\"publisher\":{\"@id\":\"https://claude.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://claude.com/docs/connectors/building/testing#webpage\",\"url\":\"https://claude.com/docs/connectors/building/testing\",\"name\":\"Test your connector\",\"description\":\"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.\",\"dateModified\":\"2026-11-10T17:02:18.426Z\",\"isPartOf\":{\"@id\":\"https://claude.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://claude.com/docs/connectors/building/testing#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://claude.com/docs/connectors/building/testing#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Build an MCP server\",\"item\":\"https://claude.com/docs/connectors/building\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test your connector\",\"item\":\"https://claude.com/docs/connectors/building/testing\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://claude.com/docs/connectors/building/testing#article\",\"headline\":\"Test your connector\",\"name\":\"Test your connector\",\"description\":\"Test your MCP server against Claude as a custom connector before you submit it to the directory, including a local server exposed through a tunnel.\",\"url\":\"https://claude.com/docs/connectors/building/testing\",\"mainEntityOfPage\":{\"@id\":\"https://claude.com/docs/connectors/building/testing#webpage\"},\"dateModified\":\"2026-11-10T17:02:18.426Z\",\"publisher\":{\"@id\":\"https://claude.com/#organization\"},\"isPartOf\":{\"@id\":\"https://claude.com/docs#website\"}}]}\u003c/script>","agentPointerHref":"/docs/connectors/building/testing.md","siteName":"Claude.ai Documentation","nav":{"global":null,"tabs":[{"tab":"Welcome","pages":[{"title":"Welcome","href":""}]},{"tab":"Customize Claude","pages":[{"title":"Customize Claude","href":"/extend/overview"}]},{"tab":"Build for Claude","groups":[{"group":" ","pages":[{"title":"Build for Claude","sidebarTitle":"Overview","href":"/build/overview"},{"sidebarTitle":"What to include in your plugin","title":"Decide what to include in your plugin","href":"/connectors/building/what-to-build"}]},{"group":"Build a plugin","pages":[{"title":"Build your first plugin","sidebarTitle":"Quickstart","href":"/plugins/quickstart"},{"title":"Plugin structure and testing","sidebarTitle":"Plugin structure and testing","href":"/plugins/build"},{"title":"Plugin feature support across platforms","sidebarTitle":"Plugin support by app","href":"/plugins/platform-support"}]},{"group":"Build an MCP server","pages":[{"sidebarTitle":"Overview","title":"Build an MCP server for Claude","href":"/connectors/building/index"},{"title":"Build your first MCP server for Claude","sidebarTitle":"Build your first MCP server","href":"/connectors/building/quickstart"},{"group":"Authentication","pages":[{"sidebarTitle":"Choose an authentication method","title":"Authentication for connectors","href":"/connectors/building/authentication"},{"sidebarTitle":"Lazy authentication","title":"Lazy authentication for MCP servers","href":"/connectors/building/lazy-authentication"},{"sidebarTitle":"Enterprise Managed Auth","title":"Enterprise Managed Auth for connectors","description":"Support auto-connect in Claude by accepting identity assertions from a customer's identity provider or from Claude, so users skip the OAuth consent step.","href":"/connectors/building/enterprise-managed-auth"}]},{"sidebarTitle":"Test your server","title":"Test your connector","href":"/connectors/building/testing"},{"sidebarTitle":"Troubleshooting","title":"Troubleshoot your connector","description":"Diagnose and resolve common connection, authorization, and tool-call failures for custom and directory MCP connectors","href":"/connectors/building/troubleshooting"},{"sidebarTitle":"Package a local server for the desktop app","title":"Build a desktop extension with MCPB","href":"/connectors/building/mcpb"},{"title":"Model Context Protocol (MCP)","sidebarTitle":"How MCP works","href":"/connectors/building/mcp"}]},{"group":"Add interactive UI with MCP Apps","pages":[{"sidebarTitle":"Get started","title":"Get started with MCP Apps","href":"/connectors/building/mcp-apps/getting-started"},{"title":"Add an interactive UI to your MCP server","sidebarTitle":"Add a UI to your server","href":"/connectors/building/mcp-apps/quickstart"},{"title":"Design guidelines","sidebarTitle":"Design guidelines","href":"/connectors/building/mcp-apps/design-guidelines"},{"title":"Show your MCP App in the side panel or full screen","sidebarTitle":"Display modes","href":"/connectors/building/mcp-apps/display-modes"},{"title":"Let people open your MCP App without asking Claude","sidebarTitle":"Entry points","href":"/connectors/building/mcp-apps/entry-points"},{"title":"Let Claude call tools in your MCP App","sidebarTitle":"Let Claude call app tools","href":"/connectors/building/mcp-apps/app-tools"},{"title":"Send messages to Claude from your MCP App","sidebarTitle":"Send messages","href":"/connectors/building/mcp-apps/send-messages"},{"title":"Embed a website in an MCP App","sidebarTitle":"Embed a website","href":"/connectors/building/mcp-apps/embedded-sites"},{"title":"Download files from your MCP App","sidebarTitle":"Download files","href":"/connectors/building/mcp-apps/download-files"},{"group":"Theming, links, and instances","pages":[{"sidebarTitle":"Match Claude's theme","title":"Blend your MCP App with Claude's theme","href":"/connectors/building/mcp-apps/transparent-theming"},{"sidebarTitle":"Replace an older widget","title":"Supersede older widget instances","href":"/connectors/building/mcp-apps/instance-supersession"},{"sidebarTitle":"Open external links","title":"Open external links from MCP Apps","href":"/connectors/building/mcp-apps/external-links"}]},{"sidebarTitle":"Troubleshooting","title":"Troubleshoot MCP Apps","href":"/connectors/building/mcp-apps/troubleshooting"}]},{"group":"Publish to the directory","pages":[{"title":"Publish to the directory","sidebarTitle":"Overview","href":"/directory/publish"},{"sidebarTitle":"Choose a directory listing or a custom connector","title":"Directory connectors vs custom connectors","href":"/connectors/building/directory-vs-custom"},{"group":"Submit a plugin","pages":[{"title":"Plugin pre-submission checklist","sidebarTitle":"Plugin checklist","href":"/plugins/pre-submission-checklist"},{"sidebarTitle":"Submit a plugin","title":"Submit your plugin","href":"/plugins/submit"}]},{"group":"Submit a connector","pages":[{"sidebarTitle":"Connector checklist","title":"Connector pre-submission checklist","href":"/connectors/building/review-criteria"},{"sidebarTitle":"Submit a connector","title":"Submit a connector to the directory","href":"/connectors/building/submission"}]},{"group":"After you submit","pages":[{"title":"Track your directory submission","sidebarTitle":"Track your submission","href":"/directory/submission-status"},{"sidebarTitle":"Update or delist a listing","title":"Manage your listing after publishing","href":"/connectors/building/after-publishing"},{"sidebarTitle":"Dashboard and metrics","title":"Manage your directory listing","href":"/connectors/building/managing-your-listing"}]}]}]},{"tab":"Cowork","pages":[{"title":"Cowork","href":"/cowork/overview"}]},{"tab":"Claude Tag","pages":[{"title":"Claude Tag","href":"/claude-tag/overview"}]},{"tab":"Claude for M365","pages":[{"title":"Claude for M365","href":"/office-agents/overview"}]},{"tab":"Claude Science","pages":[{"title":"Claude Science","href":"/claude-science/overview"}]},{"tab":"Claude on third-party platforms","pages":[{"title":"Claude on third-party platforms","href":"/third-party/claude-desktop/overview"}]},{"tab":"Claude self-hosted","hidden":true,"pages":[{"title":"Claude self-hosted","href":"/third-party/claude-desktop/self-hosted/overview"}]},{"tab":"Claude for Government","pages":[{"title":"Claude for Government","href":"/government/overview"}]}]},"basePath":"","title":"Test your connector - Claude.ai Documentation","buildId":"dpl_FGqRJUoJWfds4SqdfFGJ2v1vVNSs","deploymentId":"dpl_FGqRJUoJWfds4SqdfFGJ2v1vVNSs","dynamics":[],"chunks":[]}