Skip to main content
MCP Auth lets your application authorize end users to access external MCP servers, such as Notion MCP, Linear MCP, or HubSpot MCP, so you can call those servers’ tools on behalf of each user. Nango handles OAuth with the MCP provider and stores the tokens. You can then use the connection to call the MCP server via Nango’s proxy.

Two ways to use MCP Auth

If you are missing a catalog MCP server you can request it.

How to use it

Catalog MCP servers

  1. Create the integration
    In the Nango UI: Integrations β†’ Configure New Integration β†’ choose the MCP provider (e.g. HubSpot (MCP), Notion MCP).
    Some providers, for example HubSpot MCP, require you to register an MCP auth app and add Client ID and Client Secret in Nango. But most support dynamic client registrations: You can just enable them on Nango, and Nango registers a client for you in the background.
    Create the integration with the API. MCP providers use the MCP_OAUTH2 credentials type. Nango supports three client registration modes, set per provider in the catalog:
    Read it back β€” Get an integration with ?include=credentials to see the stored client_id/client_secret/scopes (requires the environment:integrations:read_credentials scope):
    For dynamic and cimd providers, client_secret and scopes can come back empty ("") or null right after creation β€” the MCP server’s registration response doesn’t always issue a client secret (a public-client registration is common for DCR), and scopes are only set when you explicitly configure them. That’s expected, not a sign the registration failed. Scopes can be set or changed via the update endpoint in any mode, including dynamic and cimd β€” only client_id/client_secret are restricted to static providers.List all integrations works the same as for any other provider:
    Update β€” rotate credentials or change scopes with the same MCP_OAUTH2 credentials shape. client_id/client_secret can only be set for static providers; Nango rejects the request if you try to set them on a dynamic or cimd integration, since it manages those itself:
    Delete β€” same as any other integration:
    For all fields and response shapes, see Create, Get, List, Update, and Delete an integration.
  2. Run the same auth flow as standard OAuth
  3. Call the MCP server
    Use the stored connection_id and integration id (e.g. hubspot-mcp) with the Proxy API (JSON-RPC tools/call, etc.).

Generic MCP Server OAuth2

  1. Create a generic MCP integration
    Integrations β†’ Configure New Integration β†’ MCP Server OAuth2 (Generic). Optionally set OAuth Client Name, URI, and Logo URI (used in dynamic client registration with the MCP server).
  2. Same Connect session + Connect UI flow
    As above: backend creates a session with allowed_integrations: ['mcp-generic'] (or your custom integration id), frontend opens Connect UI with that token, backend stores the connection ID.
  3. End user supplies the MCP server URL
    When the user starts the connection, the Connect UI prompts for MCP Server URL (e.g. https://mcp.notion.com/mcp). Nango automatically discovers the OAuth endpoints from the server and walks the user through the OAuth connection flow.
  4. Call the MCP server
    Same as pre-built: use the connection with the Proxy API. The connection is tied to the MCP server URL the user entered.
Our generic MCP provider currently only works with MCP servers that support automatic client registration (DCR, or CIMD).

End user experience

  • Catalog MCP servers
    User sees a list of supported MCP servers in your app β†’ clicks connect β†’ is redirected to the provider’s OAuth page (e.g. HubSpot or Notion) β†’ signs in and approves β†’ connection is created in Nango
  • MCP Generic
    User clicks connect β†’ sees a form asking for the MCP Server URL β†’ submits β†’ is redirected to that MCP server’s OAuth page β†’ signs in and approves β†’ connection is created in Nango
In both cases, your app only needs to open the Connect UI and pass the session token. Nango handles the rest.