|
1 | 1 | --- |
2 | 2 | title: MCP Servers |
3 | | -description: "Every MCP server has one backend — remote, tunneled, or built. Pick a backend, then configure auth, visibility, publishing, and team access the same way." |
| 3 | +description: "Every MCP server has exactly one backend: remote, tunneled, or built. The backend decides where the tools come from, and everything above it works the same way." |
4 | 4 | --- |
5 | 5 |
|
6 | 6 | import { Callout } from "@/mdx/components"; |
7 | 7 |
|
8 | | -An MCP server is an addressable endpoint that agents connect to. Each server has exactly one backend, and the backend decides where its tools come from: |
| 8 | +An MCP server is an addressable endpoint that MCP clients connect to. Each server has exactly one backend, and the backend decides where its tools come from. |
9 | 9 |
|
10 | | -- **Remote** — the server points at an MCP server someone else runs. The Control Plane registers the URL and proxies whole MCP sessions to it. |
11 | | -- **Tunneled** — the server points at an MCP server running inside a private network. A tunnel agent dials out to the Control Plane, so the private server gets a hosted URL without any inbound connectivity. |
12 | | -- **Built** — the Control Plane generates the server itself from a first-party source: an OpenAPI document or a TypeScript functions project. |
| 10 | +Everything layered above the backend works the same way, whichever backend a server uses. Tools, authentication, upstream credentials, visibility, custom domains, publishing to collections, team access, and tool logs are properties of the MCP server, not of the thing behind it. |
13 | 11 |
|
14 | | -The three are mutually exclusive, and the database enforces it. A server cannot proxy a remote URL and serve built tools at the same time, and the backend is fixed when the server is created. |
| 12 | +## Access requirements |
| 13 | + |
| 14 | +<Callout type="info"> |
| 15 | + Viewing MCP servers requires the `mcp:read` or `mcp:write` scope. Creating a server and editing its settings, visibility, authentication, tool filtering, or team access requires the `mcp:write` scope. Publishing a server to a collection requires the `org:admin` scope. The [default Admin role](/docs/ai-control-plane/org-admin/roles-and-permissions) has full access. The default Member role has `mcp:read`, so Members can view MCP servers but cannot create, edit, or publish them. |
| 16 | +</Callout> |
| 17 | + |
| 18 | +## The server list |
| 19 | + |
| 20 | +The **MCP** page lists every server in the project, in two sections. Open it from **Distribute > MCP** in the dashboard. |
| 21 | + |
| 22 | +**Hosted MCP Servers** lists every source exposed as an MCP server: OpenAPI-backed, functions, catalog servers, and custom remote MCP alike. A card view and a table view are both available, with columns for name, visibility, URL, and tools. Search and filters narrow the list, including a filter for servers included in plugins. **New MCP Server** creates a server. |
| 23 | + |
| 24 | +**Built-in MCP Servers** lists platform-provided servers such as **MCP Logs**. Any MCP client can connect to these. |
15 | 25 |
|
16 | | -Everything layered above the backend works the same either way. Authentication, upstream credentials, visibility, custom domains, publishing to collections, team access, and tool logs are all properties of the MCP server, not of the thing behind it. |
| 26 | +Opening a server shows its detail page. The sidebar carries the MCP URL with a copy button and a link to the hosted installation page, which lists per-client setup instructions. For client-specific walkthroughs, see the [setup guides](/docs/ai-control-plane/guides). |
17 | 27 |
|
18 | 28 | ## Choosing a backend |
19 | 29 |
|
| 30 | +**New MCP Server** asks for a backend first: |
| 31 | + |
| 32 | +- **Remote** — the server points at an MCP server that someone else runs. The Control Plane registers the URL and proxies whole MCP sessions to it. |
| 33 | +- **Tunneled** — the server points at an MCP server that runs inside a private network. A tunnel agent dials out to the Control Plane, so the private server gets a hosted URL without any inbound connectivity. |
| 34 | +- **Built** — the Control Plane generates the server itself from a first-party source: an OpenAPI document or a TypeScript Functions project. |
| 35 | + |
| 36 | +The three are mutually exclusive, and the database enforces it. A server cannot proxy a remote URL and serve built tools at the same time, and the backend is fixed when the server is created. |
| 37 | + |
20 | 38 | | Situation | Backend | Start here | |
21 | 39 | | --- | --- | --- | |
22 | 40 | | A vendor already runs an MCP server and it needs governance, auth, and logging | Remote | [Remote MCP servers](/docs/ai-control-plane/distribute/mcp-servers/remote-servers) | |
23 | 41 | | An MCP server already exists but runs behind a firewall or inside a VPC | Tunneled | [Tunneled MCP servers](/docs/ai-control-plane/distribute/mcp-servers/tunneling) | |
24 | 42 | | No MCP server exists yet, but an OpenAPI document or a TypeScript codebase does | Built | [Building MCP servers](/docs/ai-control-plane/distribute/mcp-servers/building-servers) | |
25 | 43 |
|
26 | | -Two follow-on questions apply to every server regardless of backend. [How tools appear on a server](/docs/ai-control-plane/distribute/mcp-servers/tool-discovery) covers where the tool list comes from and which tool-shaping features apply to which backend. [Authentication](/docs/ai-control-plane/distribute/mcp-servers/authentication) covers who may call a server and which credential the server uses upstream. |
| 44 | +## Tools on a server |
27 | 45 |
|
28 | | -## Access requirements |
| 46 | +The **Tools** tab curates exactly which tools a server exposes. |
29 | 47 |
|
30 | | -<Callout type="info"> |
31 | | - Viewing this page requires the `mcp:read` or `mcp:write` scope. Creating a server with **New MCP Server** and editing settings, visibility, auth, tool filtering, or team access require the `mcp:write` scope, and publishing a server to a collection requires the `org:admin` scope. Full access is included in the [default Admin role](/docs/ai-control-plane/org-admin/roles-and-permissions); the default Member role includes `mcp:read`, so Members can view MCP server pages but cannot create, edit, or publish. |
32 | | -</Callout> |
| 48 | +Where that tool list comes from depends on the backend, and the two answers are opposites. Built servers capture their tool list once per deployment. Remote and tunneled servers proxy `tools/list` live. The difference decides how changes propagate and which tool-shaping features apply to which backend, so [How tools appear on a server](/docs/ai-control-plane/distribute/mcp-servers/tool-discovery) covers it in full. |
33 | 49 |
|
34 | | -## Server list |
| 50 | +[Tag-based tool filtering](/docs/ai-control-plane/distribute/mcp-servers/tool-filtering) shapes what a client sees. It lets a client connect to a focused subset of the tools on a server by selecting tags at install time. |
35 | 51 |
|
36 | | -The **MCP** page lists every server in the project. Open it from **Distribute > MCP** in the dashboard. |
| 52 | +The **Resources** and **Prompts** tabs hold the other MCP capabilities a server serves. |
37 | 53 |
|
38 | | -The **Hosted MCP Servers** section lists every source exposed as an MCP server — OpenAPI-backed, functions, catalog servers, and custom remote MCP alike. View as cards or a table (columns: name, visibility, URL, tools), search, filter (including servers included in plugins), and create servers with **New MCP Server**. |
| 54 | +## Authentication |
39 | 55 |
|
40 | | -A **Built-in MCP Servers** section lists platform-provided servers, such as **MCP Logs**, ready to connect from any MCP client. |
| 56 | +Authentication answers two questions that are configured independently and are easy to confuse: |
41 | 57 |
|
42 | | -## Server detail |
| 58 | +- **Who is calling this MCP server?** [User sessions](/docs/ai-control-plane/distribute/mcp-servers/authentication/user-sessions) answer this. The Control Plane acts as the authorization server and issues tokens to MCP clients. |
| 59 | +- **Which credential does the server use upstream?** [Upstream credentials](/docs/ai-control-plane/distribute/mcp-servers/authentication/upstream-credentials) answer this, either per end user through remote identity providers, or with one shared credential for every caller. |
43 | 60 |
|
44 | | -Each server's detail page carries the connection surface and full configuration, in tabs: |
| 61 | +The **Authentication** tab configures both. See [Authentication](/docs/ai-control-plane/distribute/mcp-servers/authentication) for how the two fit together. |
45 | 62 |
|
46 | | -- **Overview** — tool calls, failed calls, error rate, and average latency versus the previous period, tool call trends, top tools by calls and by failure rate, and top users |
47 | | -- **Tools** — curate exactly which tools the server exposes, with tag-based filtering |
48 | | -- **Resources** and **Prompts** — additional MCP capabilities the server serves |
49 | | -- **Authentication** — configure who may call the server and which credential it uses upstream |
50 | | -- **Team Access** — see below |
51 | | -- **Settings** — see below |
| 63 | +A toolset-backed server can also authenticate against an authorization server outside the Control Plane. [Secure with OAuth](/docs/ai-control-plane/distribute/mcp-servers/secure-with-oauth) covers the OAuth credential styles those servers accept, and [Build MCP with external OAuth](/docs/ai-control-plane/distribute/mcp-servers/oauth-external-server) covers pointing clients at a third-party authorization server. |
52 | 64 |
|
53 | | -The sidebar shows the server's MCP URL with a copy button and a link to its hosted installation page, which lists per-client setup instructions. For client-specific walkthroughs, see the [setup guides](/docs/ai-control-plane/guides). |
| 65 | +## Distribution |
54 | 66 |
|
55 | | -## Settings: visibility, publishing, and domains |
| 67 | +The **Settings** tab controls how a server reaches the people who use it: |
56 | 68 |
|
57 | | -The **Settings** tab controls how the server is distributed: |
58 | | - |
59 | | -- **Visibility** — disabled, private, or public. A private server requires an authenticated caller. A public server accepts anonymous callers and is only available on a tunneled backend, and only after the tunnel source owner opts in. |
60 | | -- **Custom Slug** and **Custom Domain** — control the server's URL |
61 | | -- **Server Instructions** — the instructions returned to LLMs when they connect |
62 | | -- **Publishing** — organization admins publish servers to collections so others in the organization can discover and install them |
63 | | -- **Export JSON** — export the MCP configuration |
64 | | -- A danger zone for disabling or deleting the server |
| 69 | +- **Visibility** — disabled, private, or public. A private server requires an authenticated caller. A public server accepts anonymous callers, and public visibility is available only on a tunneled backend, and only after the tunnel source owner opts in. |
| 70 | +- **Custom Slug** and **Custom Domain** — control the URL of the server |
| 71 | +- **Publishing** — organization admins publish servers to collections, so others in the organization can discover and install them |
65 | 72 |
|
66 | 73 | <Callout type="warning"> |
67 | 74 | Making a server public does not strip its credentials. A public server still serves its attached system environment variables and upstream headers on every call, which means anonymous callers spend the same API keys an authenticated caller would. See [Upstream credentials](/docs/ai-control-plane/distribute/mcp-servers/authentication/upstream-credentials). |
68 | 75 | </Callout> |
69 | 76 |
|
70 | | -## Team Access |
| 77 | +The **Settings** tab also holds **Server Instructions**, the instructions returned to LLMs when they connect, an **Export JSON** action for the MCP configuration, and a danger zone for disabling or deleting the server. |
| 78 | + |
| 79 | +## Team access |
71 | 80 |
|
72 | | -The **Team Access** tab shows who can use the server: every member with their role and read, write, and connect access levels. Access derives from role grants scoped to the server — down to individual tools, where a member's badge opens the exact tool list they can use. Roles are configured in the organization's roles and permissions settings. |
| 81 | +The **Team Access** tab shows who can use the server: every member with their role and read, write, and connect access levels. Access derives from role grants scoped to the server, down to individual tools, where a member's badge opens the exact tool list they can use. Roles are configured in the roles and permissions settings for the organization. |
73 | 82 |
|
74 | | -## Tunneled MCP servers |
| 83 | +## Monitoring |
75 | 84 |
|
76 | | -Tunneled MCP servers expose an MCP server that runs inside a private network, with no inbound connectivity, through the platform. A lightweight tunnel agent runs next to the private server and opens a single outbound connection to the platform's tunnel gateway. MCP traffic is relayed back over that connection, so nothing in the private network is exposed directly. |
| 85 | +The **Overview** tab reports tool calls, failed calls, error rate, and average latency against the previous period. It also charts tool call trends, ranks top tools by calls and by failure rate, and lists top users. |
77 | 86 |
|
78 | | -See [Tunneled MCP servers](/docs/ai-control-plane/distribute/mcp-servers/tunneling) for setup, per-plan limits, key rotation, and public visibility. |
| 87 | +[Tool logs](/docs/ai-control-plane/observe/tool-logs) records the individual calls behind those numbers, across every server in the project. |
0 commit comments