{"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"model-context-protocol-server","__idx":0},"children":["Model Context Protocol server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Model Context Protocol (MCP) is a standard that enables applications to provide context to large language models (LLMs)."," ","With MCP servers, AI assistants can retrieve additional information relevant to a user's query."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Realm provides built-in MCP server capabilities that expose your API Docs to AI assistants."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"benefits","__idx":1},"children":["Benefits"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Real-time API guidance"]}," — users receive accurate, contextual help about API endpoints and operations."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Secure API access"]}," — AI assistants can make authenticated requests to act on behalf of a user."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Dynamic documentation"]}," — AI assistants can extract and explain API reference content based on user needs."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"docs-mcp-server","__idx":2},"children":["Docs MCP server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the Docs MCP server to explore and discover APIs in your project."," ","For the current MCP endpoint details, authentication semantics, server metadata, and tool schemas, see the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/customization/mcp-server/openapi"},"children":["Docs MCP reference"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The MCP server also includes a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["submit-feedback"]}," tool."," ","An AI agent calls it when a page it relied on is incorrect, outdated, confusing, or incomplete."," ","The report appears on the Reunite ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Feedback"]}," page with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MCP"]}," origin, the page, the agent name, and the feature involved."," ","An agent can only report a page it has access to."," ","Set ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/feedback"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["feedback.hide"]}]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to remove the tool together with the feedback form."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"mcp-server-card","__idx":3},"children":["MCP server card"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The MCP server card is a standardized JSON document that lets agents discover the Docs MCP server: its tools, transport endpoint, and capabilities."," ","The discovery is a single request that follows the Model Context Protocol server-card format."," ","It is available at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/.well-known/mcp/server-card.json"]}," when the MCP server is enabled."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"http","header":{"controls":{"copy":{}}},"source":"GET https://example.com/.well-known/mcp/server-card.json\n","lang":"http"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following example response describes a login-protected server that also publishes skills:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"$schema\": \"https://static.modelcontextprotocol.io/schemas/mcp-server-card/v1.json\",\n  \"version\": \"1.0\",\n  \"protocolVersion\": \"2025-06-18\",\n  \"serverInfo\": {\n    \"name\": \"Docs MCP server\",\n    \"title\": \"Docs MCP server\",\n    \"version\": \"2026-07-13\"\n  },\n  \"description\": \"Redocly Cafe documentation.\",\n  \"documentationUrl\": \"https://example.com/\",\n  \"transport\": {\n    \"type\": \"streamable-http\",\n    \"endpoint\": \"/mcp\"\n  },\n  \"capabilities\": {\n    \"logging\": {},\n    \"tools\": { \"listChanged\": true },\n    \"resources\": { \"listChanged\": true },\n    \"completions\": {}\n  },\n  \"authentication\": {\n    \"required\": true,\n    \"schemes\": [\"bearer\", \"oauth2\"]\n  },\n  \"tools\": [\"dynamic\"]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The card lists the server's tools, declares its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," transport endpoint, and states its authentication requirements when the server requires login."," ","When your project publishes ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/customization/agent-skills#skills-as-mcp-resources"},"children":["agent skills"]},", the card's capabilities advertise resource support so agents know to list them."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"restrict-access-to-the-mcp-server","__idx":4},"children":["Restrict access to the MCP server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Control which teams can access the MCP server with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rbac.features.mcp"]}," option, the same way ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rbac.features.aiSearch"]}," controls access to AI search."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the following example, only members of the Developers team can access the MCP server:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","data-title":"redocly.yaml","header":{"title":"redocly.yaml","controls":{"copy":{}}},"source":"access:\n  rbac:\n    features:\n      mcp:\n        Developers: read\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a team-based role is set for the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp"]}," feature, only teams with a role other than ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["none"]}," can access the MCP server."," ","Users must sign in unless the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]}," team is granted such a role, either directly or through the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["*"]}," wildcard."," ","The wildcard covers all teams that are not listed explicitly, including ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]},"."," ","When the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]}," team has no access, requests without a valid token receive a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}," response."," ","Authenticated users who don't belong to an allowed team receive a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]}," response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more details, see the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/access/rbac#features-configuration"},"children":["RBAC configuration reference"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"connect-an-ai-agent-to-the-mcp-server","__idx":5},"children":["Connect an AI agent to the MCP server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After you enable the Docs MCP server in ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/mcp"},"children":["configuration"]},", it is available at ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," on your project root URL."," ","For example: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://example.com/mcp"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"use-the-mcp-server","__idx":6},"children":["Use the MCP server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Users can connect their preferred AI tools that support MCP (for example, Cursor, Claude Code and VS Code) to your MCP server."]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Enable the MCP server in your ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/mcp"},"children":["configuration"]},"."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Copy your MCP server URL and add it to your tool."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["After connecting, the tool can access your OpenAPI documentation."]},{"$$mdtype":"Tag","name":"Tabs","attributes":{"size":"medium"},"children":[{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Cursor","disable":false},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"connect-cursor-to-the-mcp-server","__idx":7},"children":["Connect Cursor to the MCP server"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In Cursor, open the command palette."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["macOS: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Command + Shift + P"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Windows/Linux: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ctrl + Shift + P"]}]}]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Type \"Open MCP settings\" in the command palette."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select \"Add custom MCP\"."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Cursor opens the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp.json"]}," file."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"configure-the-mcp-server","__idx":8},"children":["Configure the MCP server"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp.json"]},", add your server configuration:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"mcpServers\": {\n    \"example-mcp\": {\n      \"url\": \"https://example.com/mcp\"\n    }\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Optionally, you can also pass additional headers that will be sent with each request:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"mcpServers\": {\n    \"example-mcp\": {\n      \"url\": \"https://example.com/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Basic MTIzOjEyMw==\"\n      }\n    }\n  }\n}\n","lang":"json"},"children":[]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Save the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mcp.json"]}," file."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Return to MCP settings and confirm the connection."," ","If authentication is required, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Needs login"]}," and complete the sign‑in flow."," ","After connecting, Cursor displays the list of available tools."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"test-the-cursor-connection","__idx":9},"children":["Test the Cursor connection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In Cursor chat (Agent mode), ask a question that triggers an MCP tool."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Claude Code","disable":false},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"connect-claude-code-to-the-mcp-server","__idx":10},"children":["Connect Claude Code to the MCP server"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Run: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["claude mcp add --transport http ${MCP_SERVER_NAME} ${URL}"]}," where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["${MCP_SERVER_NAME}"]}," is your desired server name and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["${URL}"]}," is the MCP server URL."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Claude Code CLI, type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," and complete authentication if prompted."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Claude Code lists the available tools with descriptions and parameters."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"test-the-claude-code-connection","__idx":11},"children":["Test the Claude Code connection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Claude Code CLI, ask the AI agent to perform an instruction that uses an MCP tool."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Claude app","disable":false},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"connect-the-claude-app-to-the-mcp-server","__idx":12},"children":["Connect the Claude app to the MCP server"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To add the server in one step, select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Connect to Claude"]}," in the page actions menu, or on the setup page that opens when you visit the MCP server URL in a browser."," ","Claude opens the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add custom connector"]}," dialog on claude.ai with the server name and URL filled in."," ","Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]},"."," ","Claude adds the connector to your account and syncs it between Claude on the web and Claude Desktop."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To add the server manually:"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Claude app, open ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customize"]}," → ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Connectors"]}," and select ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add custom connector"]},"."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Paste the MCP server URL, for example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://example.com/mcp"]},"."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Click ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Add"]},"."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the MCP server requires authentication, Claude prompts you to sign in when you connect."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"test-the-claude-app-connection","__idx":13},"children":["Test the Claude app connection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In a Claude chat, ask a question that uses an MCP tool."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"VS Code","disable":false},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"connect-vs-code-to-the-mcp-server","__idx":14},"children":["Connect VS Code to the MCP server"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In VS Code, open the command palette."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["macOS: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Command + Shift + P"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Windows/Linux: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Ctrl + Shift + P"]}]}]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Type \"MCP: Add Server\" in the command palette."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Select \"HTTP\" to connect to a remote MCP server."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":4,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Enter the MCP server URL (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://example.com/mcp"]},")."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":5,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Enter a name for the connection."]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the MCP server requires authentication, VS Code prompts you to open a sign‑in page."," ","Complete the sign‑in flow with your credentials."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"test-the-vs-code-connection","__idx":15},"children":["Test the VS Code connection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Open Chat with AI in Agent mode and select the Tools icon."," ","Confirm that your MCP connection appears with a list of available tools."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Ask the AI to perform a query that uses an MCP tool."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"Codex CLI","disable":false},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"connect-codex-cli-to-the-mcp-server","__idx":16},"children":["Connect Codex CLI to the MCP server"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Run: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["codex mcp add ${MCP_SERVER_NAME} --url ${URL}"]}," where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["${MCP_SERVER_NAME}"]}," is your desired server name and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["${URL}"]}," is the MCP server URL."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the MCP server requires authentication, run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["codex mcp login ${MCP_SERVER_NAME}"]}," and complete the sign‑in flow."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Run ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["codex mcp list"]}," and confirm the server appears."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"test-the-codex-cli-connection","__idx":17},"children":["Test the Codex CLI connection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Codex CLI, ask the AI agent to perform an instruction that uses an MCP tool."]}]},{"$$mdtype":"Tag","name":"TabItemFragment","attributes":{"label":"ChatGPT desktop app","disable":false},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"connect-the-chatgpt-desktop-app-to-the-mcp-server","__idx":18},"children":["Connect the ChatGPT desktop app to the MCP server"]},{"$$mdtype":"Tag","name":"NumberedList","attributes":{"type":"number","size":"medium"},"children":[{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":1,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the ChatGPT desktop app, go to ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Settings → Plugins → MCPs"]},"."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":2,"isLast":false},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add a server with the \"Streamable HTTP\" type and your MCP server URL (for example, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["https://example.com/mcp"]},")."]}]},{"$$mdtype":"Tag","name":"NumberedItem","attributes":{"type":"number","size":"medium","index":3,"isLast":true},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Restart the app."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"test-the-chatgpt-connection","__idx":19},"children":["Test the ChatGPT connection"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In a ChatGPT chat, ask a question that uses an MCP tool."]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"public-endpoint-for-anonymous-users","__idx":20},"children":["Public endpoint for anonymous users"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When RBAC restricts content, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," endpoint requires authentication and anonymous users cannot browse the content that RBAC marks public."," ","To keep public content reachable for AI tools without a login, enable the public endpoint:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"mcp:\n  docs:\n    publicEndpoint: true\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The MCP server then also serves ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," on your project root URL."," ","Requests to it are never challenged for authentication, any provided credentials are ignored, and the served APIs and search results include only content available to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]}," team."," ","The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," endpoint keeps working as before for authenticated users."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Everything your RBAC rules grant to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]}," team becomes reachable over ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," without a login."," ","Review these rules before you enable the endpoint."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"#restrict-access-to-the-mcp-server"},"children":["restrict the MCP server itself"]}," with the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rbac.features.mcp"]}," configuration, it must grant access to the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]}," team, or the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," endpoint is not registered and the build logs a note."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The public endpoint is only served when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," requires authentication and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["anonymous"]}," team can reach some content."," ","When the project has no protected content, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," already serves anonymous users, so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," is not registered and the build logs a note instead."," ","A project that uses ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/access/requires-login"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requiresLogin"]}]}," without ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rbac"]}," rules has no public content, so ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," is not registered either."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Users discover the public endpoint in three ways:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A browser visit to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," displays the same setup page as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]},", with connection snippets that point at the public endpoint and a note that it serves public content only."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The two setup pages link to each other: the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," page links to the public endpoint, and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," page links back to the main endpoint."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When an unauthenticated MCP client connects to the restricted ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp"]}," endpoint, the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["401"]}," response body mentions the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/mcp-public"]}," URL."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"resources","__idx":21},"children":["Resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/mcp"},"children":["MCP configuration reference"]}]}," - Configure MCP for your project"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/config/access/rbac"},"children":["RBAC configuration reference"]}]}," - Restrict MCP server access to specific teams"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/realm/customization/agent-skills"},"children":["Agent skills"]}]}," - Publish task-focused ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SKILL.md"]}," instructions and the discovery endpoints agents read to find them"]}]}]},"frontmatter":{"products":["Redoc","Revel","Reef","Realm"],"plans":["Enterprise","Enterprise+"]},"tagList":["admonition","numbered-item","numbered-list","tab","tabs"],"title":"Model Context Protocol server","lastModified":"2026-10-07T09:46:14.000Z"}