Register a remote MCP server (editors and above); reads its capabilities at once
/v1/teams/{team}/mcp-servers409 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 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 }}