Skip to content

Commit 00baac5

Browse files
committed
Sync open source content 🐝 (from b7263efd7ed37b767fba078a1f59ac61a950f9ad)
1 parent 541f95f commit 00baac5

7 files changed

Lines changed: 68 additions & 96 deletions

File tree

docs/ai-control-plane/distribute/mcp-servers/authentication/index.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ Public visibility skips authentication entirely: any caller reaches the server w
4747
A public server still uses its own credentials. Attached system environment variables and configured upstream headers are sent on every call, including calls from anonymous users. Public means anonymous callers get to spend those credentials, not that the credentials are withheld.
4848
</Callout>
4949

50-
## Legacy models
50+
## External servers
5151

52-
Two older authentication models remain live for toolset-backed servers created before user sessions shipped:
52+
Two guides cover OAuth against an authorization server outside the Control Plane, on toolset-backed servers:
5353

54-
- [Secure an MCP server with OAuth](/docs/ai-control-plane/distribute/mcp-servers/secure-with-oauth) covers the hosted OAuth proxy, where the platform fronts an upstream provider.
54+
- [Secure an MCP server with OAuth](/docs/ai-control-plane/distribute/mcp-servers/secure-with-oauth) covers the OAuth credential styles those servers accept: pre-obtained access tokens, the client credentials flow, and several security schemes in one OpenAPI document.
5555
- [Build MCP with external OAuth](/docs/ai-control-plane/distribute/mcp-servers/oauth-external-server) covers pointing clients at a third-party authorization server directly.
5656

57-
New servers should use user sessions. The legacy models advertise OAuth scopes and behave differently around token storage and revocation, so their pages are the reference for servers already on them.
57+
Both advertise OAuth scopes, and both handle token storage and revocation differently from user sessions.
Lines changed: 48 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,87 @@
11
---
22
title: MCP Servers
3-
description: "Every MCP server has one backendremote, 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."
44
---
55

66
import { Callout } from "@/mdx/components";
77

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.
99

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.
1311

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.
1525

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).
1727

1828
## Choosing a backend
1929

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+
2038
| Situation | Backend | Start here |
2139
| --- | --- | --- |
2240
| 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) |
2341
| 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) |
2442
| 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) |
2543

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
2745

28-
## Access requirements
46+
The **Tools** tab curates exactly which tools a server exposes.
2947

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.
3349

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.
3551

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.
3753

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
3955

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:
4157

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.
4360

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.
4562

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.
5264

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
5466

55-
## Settings: visibility, publishing, and domains
67+
The **Settings** tab controls how a server reaches the people who use it:
5668

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
6572

6673
<Callout type="warning">
6774
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).
6875
</Callout>
6976

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
7180

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 serverdown 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.
7382

74-
## Tunneled MCP servers
83+
## Monitoring
7584

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.
7786

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.

docs/ai-control-plane/distribute/mcp-servers/oauth-external-server.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ Now we'll configure Speakeasy to work with our external OAuth server. After uplo
325325
You'll need to make your toolset public to use OAuth.
326326
:::
327327
328-
In the OAuth configuration page, choose **External Server** instead of OAuth Proxy and enter the server slug as well as the metadata for your OAuth server.
328+
In the OAuth configuration page, choose **External Server** and enter the server slug as well as the metadata for your OAuth server.
329329
330330
![Speakeasy OAuth Server Configuration](/assets/docs/gram/img/guides/oauth-external-server/gram-oauth-server-config.png)
331331

docs/ai-control-plane/distribute/mcp-servers/secure-with-oauth.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Before implementing OAuth, consider what kind of credentials you expect end user
5959
- **What users provide**: Nothing initially - they authenticate interactively
6060
- **How it works**: Dynamic OAuth flow when the MCP server is accessed
6161
- **Best for**: Public-facing servers requiring user consent with external OAuth providers
62-
- **Complexity**: High - requires DCR implementation or OAuth proxy
62+
- **Complexity**: High - requires DCR implementation
6363

6464
**Speakeasy can integrate OAuth into a server in any way that's currently possible within the MCP context.** The key is choosing the approach that best fits your existing authentication system and user experience goals.
6565

@@ -93,7 +93,7 @@ Placing Managed OAuth in front of a server is a Pro and Enterprise feature.
9393

9494
An MCP Server must be marked `public` to attach Managed OAuth in front of it.
9595

96-
Please [book in time with our team](https://calendly.com/sagar-speakeasy/30min) for white-glove service with proxy setup or DCR compliance. We'll get you up and running.
96+
Please [book in time with our team](https://calendly.com/sagar-speakeasy/30min) for white-glove service with DCR compliance. We'll get you up and running.
9797
</Callout>
9898

9999

@@ -221,7 +221,7 @@ When implementing authentication for your MCP server, remember:
221221
- Access tokens: Simple, works with existing systems
222222
- Client credentials: Good for server-to-server auth
223223
- Speakeasy OAuth: Organization-based access control for private servers (no external OAuth needed)
224-
- User-facing OAuth: Best for public servers with external OAuth providers (requires DCR or proxy)
224+
- User-facing OAuth: Best for public servers with external OAuth providers (requires DCR)
225225
4. **DCR is only needed** if you want MCP clients to handle OAuth flows with external providers directly, but it is a requirement for that scenario
226226
5. **We can help** with white-glove service for guiding towards DCR compliance
227227

docs/ai-control-plane/distribute/mcp-servers/tool-call-healing.md

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)