Open MCP Portaldocs
ReferenceMCP servers

Register a remote MCP server (editors and above); reads its capabilities at once

POST/v1/teams/{team}/mcp-servers

409 slug_taken when another server uses the slug. 422 url_not_allowed when the URL is refused (details.reason invalid, too_long, userinfo, query, fragment, scheme, private_address or blocked_address; private_address can be allowed by a platform admin in Internal networks). The server is created even when discovery fails; refresh then says why. requirement (optional) names an enabled auth provider (422 provider_not_found otherwise) and its scopes (400 invalid_scope, details.scope). 400 invalid_auth_header also for the reserved MCP-Gateway-Identity, MCP-Gateway-Provider and MCP-Gateway-Provider-Token. authMode oauth (docs/phase7-upstream-oauth.md) needs oauth. The portal runs the sign-in discovery again itself (it never trusts endpoints sent by the browser) and, for registration dcr (or auto resolving to it), registers its client before saving: 422 oauth_discovery_failed (details.problems as in DetectAuthResult) or 502 oauth_registration_failed, and nothing is saved. 422 auth_conflict when oauth is combined with a static Authorization header or a requirement (details.reason static_authorization or requirement). 422 registration_unavailable (the chosen or auto registration isn't offered; details.options). 422 client_required (manual without clientId, or without clientSecret unless tokenAuthMethod none). 422 provider_mismatch (platform_provider whose authorization and token endpoints differ from the discovered ones, or turned off). In oauth mode the first capability discovery is skipped (refresh and refreshError null, setupRequired true): someone signs in with authorizeTeamMcpServerSetup first. Audited as mcp_server.create and mcp_server.auth_update (never a secret).

Path Parameters

team*string

Team slug or ID

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/teams/string/mcp-servers" \  -H "Content-Type: application/json" \  -d '{    "slug": "string",    "name": "string",    "url": "string"  }'
{  "data": {    "server": {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "teamId": "a4ede8ba-7c0a-4485-8763-cbd9b282fbec",      "teamSlug": "string",      "teamName": "string",      "slug": "service-status",      "name": "Service status",      "description": "string",      "url": "https://status.example.com/mcp",      "transport": "streamable_http",      "authHeaderName": "string",      "hasAuth": true,      "authValueHint": "string",      "timeoutSeconds": 1,      "enabled": true,      "publishState": "private",      "effectivePublishPolicy": "approval_required",      "publishRequestedAt": "2019-08-24T14:15:22Z",      "publishRequestNote": "string",      "publishReviewedAt": "2019-08-24T14:15:22Z",      "publishReviewedByName": "string",      "publishReviewNote": "string",      "counts": {        "tools": 0,        "resources": 0,        "resourceTemplates": 0,        "prompts": 0      },      "pendingChanges": 0,      "health": {        "status": "healthy",        "checkedAt": "2019-08-24T14:15:22Z",        "statusSince": "2019-08-24T14:15:22Z",        "latencyMs": 0,        "errorClass": "unavailable",        "message": "string",        "signInRequired": true      },      "refreshedAt": "2019-08-24T14:15:22Z",      "lastRefreshError": "string",      "requirement": {        "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",        "providerSlug": "string",        "providerName": "string",        "providerEnabled": true,        "scopes": [          "string"        ]      },      "capturePayloads": true,      "authMode": "none",      "oauth": {        "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",        "providerSlug": "string",        "resource": "https://api.githubcopilot.com/mcp/",        "resourceMetadataUrl": "https://api.githubcopilot.com/.well-known/oauth-protected-resource/mcp/",        "authorizationServer": "https://github.com/login/oauth",        "issuer": "https://github.com/login/oauth",        "authorizationEndpoint": "https://github.com/login/oauth/authorize",        "tokenEndpoint": "https://github.com/login/oauth/access_token",        "revocationEndpoint": "string",        "scopes": [          "string"        ],        "scopesSupported": [          "string"        ],        "registration": "dcr",        "clientIdHint": "string",        "hasClientSecret": true,        "clientSecretExpiresAt": "2019-08-24T14:15:22Z",        "tokenAuthMethod": "client_secret_basic",        "sendResource": true,        "issParameterSupported": true,        "platformProvider": {          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",          "slug": "string",          "name": "string",          "preset": "github",          "logoUrl": "string",          "kind": "oauth2",          "server": {            "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",            "slug": "string",            "name": "string",            "teamSlug": "string"          }        },        "setupConnection": {          "status": "active",          "personId": "f3e5ff26-28ff-4cd6-9b1b-e303a185a13a",          "personName": "string",          "authorizedAt": "2019-08-24T14:15:22Z"        },        "connectionCount": 0,        "discoveredAt": "2019-08-24T14:15:22Z",        "redirectUri": "https://mcp.example.com/connect/callback"      },      "sendIdentity": true,      "revision": 0,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z"    },    "refresh": {      "listed": 0,      "added": 0,      "changed": 0,      "gone": 0,      "capabilities": [        {          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",          "serverId": "10d2345a-e43d-463d-830e-4f5b19b60d41",          "kind": "tool",          "name": "string",          "title": "string",          "description": "string",          "definition": {},          "fingerprint": "string",          "approved": true,          "changed": true,          "approvedAt": "2019-08-24T14:15:22Z",          "approvedByName": "string",          "firstSeenAt": "2019-08-24T14:15:22Z",          "lastSeenAt": "2019-08-24T14:15:22Z",          "goneAt": "2019-08-24T14:15:22Z",          "requirementOverride": {            "mode": "inherit",            "scopes": [              "string"            ]          },          "requires": {            "providerId": "4834bcdc-4a64-444d-966b-1a6fe381da24",            "providerSlug": "github",            "providerName": "GitHub",            "scopes": [              "string"            ],            "connected": true,            "providerKind": "oauth2"          }        }      ]    },    "refreshError": {      "ok": true,      "latencyMs": 0,      "counts": {        "tools": 0,        "resources": 0,        "resourceTemplates": 0,        "prompts": 0      },      "serverName": "string",      "serverVersion": "string",      "protocolVersion": "string",      "errorClass": "unavailable",      "httpStatus": 0,      "message": "string",      "readAs": "string",      "setupRequired": true    },    "setupRequired": true  }}