Skip to main content
If a tool already exists — a managed SaaS integration, or an MCP server you or a third party runs — connect it rather than build one. This page covers registering a server by URL. Have source code instead? See Deploy your own server.
Everyone connects with their own credential or OAuth grant — sharing never hands over the owner’s login. A custom MCP server is invisible to everyone but its owner until shared.

Probe before registering

The probe checks for OAuth discovery metadata, then falls back to a live initialize handshake.
supports_dcr: false means you’ll need to supply your own OAuth client ID and secret. A server wanting a bearer token reports "auth_type": "bearer".

Register the connector

Repeat --header "Key: Value" for extra static headers the server requires.
Registration validates the URL against private, loopback, link-local, and cloud-metadata ranges, and the outbound client re-resolves and re-checks at connect time. A hostname that resolves publicly at registration and privately later is still rejected. Custom MCP servers must be publicly reachable.

Connect your credential

Registering connects nobody. Each person connects with their own credential:
For none, bearer, basic, and url_param this connects immediately. For oauth2 it starts the OAuth flow below.
Credential endpoints are write-only — credential status reports only whether a value is stored, and no response ever echoes a credential.

OAuth 2.1

REST — begin the flow
The redirect target, GET /api/mcp/oauth/callback, is public and state-verified rather than JWT-gated — a browser redirect can’t carry your session. It validates the signed PKCE state before exchanging the code and storing encrypted tokens.

Share it

A connector is private until shared. Share with a user, publicly, or with a specific agent:
Once shared, a connector is usable on every agent that person runs immediately. Team and department sharing is an org-level operation — see per-agent tool permissions.
Revoking a share also removes the grantee’s stored credential, so a re-grant starts from a clean reconnect.