---
title: "MCP API"
description: "Model Context Protocol servers and per-tool authorization."
label: "MCP"
generated: "the API catalogue in apps/control-plane/src/routes/developer.ts"
---


Discovery and authorization are deliberately separate steps. A newly discovered MCP tool is unauthorized until a human authorizes it, so a server that adds a tool cannot grant itself new reach.

## Endpoints

| | Endpoint | Permission | Notes |
| --- | --- | --- | --- |
| `GET` | `/v1/mcp/servers` | `mcp:read` | — |
| `POST` | `/v1/mcp/servers` | `mcp:register` | — |
| `POST` | `/v1/mcp/servers/{serverId}/discover` | `mcp:update` | — |
| `POST` | `/v1/mcp/servers/{serverId}/tools/{toolId}/authorize` | `mcp:update` | — |
| `POST` | `/v1/mcp/servers/{serverId}/tools/{toolId}/disable` | `mcp:disable` | — |

## What each endpoint does

### `GET /v1/mcp/servers`

List MCP servers.

Requires `mcp:read`.

### `POST /v1/mcp/servers`

Register an MCP server (starts PENDING).

Requires `mcp:register`.

### `POST /v1/mcp/servers/{serverId}/discover`

Discover tools. They stay unauthorized until approved.

Requires `mcp:update`.

### `POST /v1/mcp/servers/{serverId}/tools/{toolId}/authorize`

Explicitly authorize a discovered MCP tool.

Requires `mcp:update`.

### `POST /v1/mcp/servers/{serverId}/tools/{toolId}/disable`

Disable an MCP tool.

Requires `mcp:disable`.
