About MCP servers in Kinde
MCP Servers
MCP connections are currently in beta. Contact support to enable this feature for your account.
An MCP connection exposes your registered APIs as tools that AI agents—like Cursor, Claude, and VS Code—can call on behalf of your users. Kinde builds the tools from your OpenAPI spec, gives each connection a unique URL, and authenticates clients with a user API key. The scopes on that key control which tools the agent can use.
https://<your_business>.kinde.com/mcp/<connection-id> with that key.If you haven’t already, create an API with the following steps:
Adding scopes from an OpenAPI spec is only available on the Kinde Plus plan and higher. See pricing for more details.
Go to Settings > Environment > APIs.
Select Add API.
Enter an API name (e.g., “MCP Demo API”) and Audience. The audience (aud) is a unique identifier for this API. Often a short code or the URL of the API is used (e.g., https://yourbusiness.com/mcp).
Select Save. The details window for the API opens.
Select OpenAPI spec in the side menu.
Select Upload file.
Choose your JSON or YAML file from your computer (maximum file size: 20MB).
Kinde uploads the file and parses it to generate scopes.
Ensure the spec includes a server URL under servers (first entry). That URL becomes the base URL for upstream tool calls. See the sample OpenAPI spec file.
See also Register and manage APIs.
You are redirected to the connection Details page.
Choose how Kinde authenticates to your upstream API:
Go to the Details page for the connection.
Scroll down to Backend authentication.
Select one of the following Authentication type options:
Authorization: Bearer <key> to your API.Authorization: Bearer <token>.X-Api-Key: <key>.Scroll down to Extra HTTP headers and add any you need for your API.
These headers are applied on every upstream request after the primary auth headers. Header values support templates that Kinde replaces per request:
{{kinde.user.id}}{{kinde.user.username}}{{kinde.user.email}}{{kinde.user.firstname}}{{kinde.user.lastname}}Select Save.
MCP clients authenticate with a user’s API key for the authorized API. You can create one from the dashboard on behalf of the user, or they can create it themselves if you have enabled this in the self-serve portal.
To create an API key for a user:
Go to your Kinde dashboard and select Users.
Select the user you want to create an API key for (such as yourself).
Go to the API keys page.
Select Add API key. A modal opens.
Enter a key Name, select the API (e.g., “MCP Demo API”), select the scopes you want to grant, and select Save.
Copy the key and store it securely. You will only see it once.
k_live_1234567890abcdefghijklmnopqrstuvwxyzYou will need this API key when configuring your MCP client.
See User-level API keys and Scopes for API keys.
KINDE_USER_API_KEY with the user API key you created in the previous section.See the following sections for client-specific setup steps.
Open the Claude desktop app.
Go to Settings > Developer > select Edit Config. The claude_desktop_config.json file opens in your file browser.
Open the file in your preferred text editor.
Paste the Stdio bridge connection config JSON and save the file.
You can find this under the Quick start > Stdio bridge (command-based clients) section of your MCP connection in Kinde. Replace KINDE_USER_API_KEY with the user API key you created in the previous section.
Restart Claude.
Confirm the Kinde MCP server appears on the page.
Open your chat window. The connection appears under the connectors list.
Run a sample tool call to test the connection.
Open the Cursor desktop app.
Go to Cursor > Settings > Cursor Settings.
Go to Tools & MCP.
Select Add custom MCP, or if you already have other MCP servers, select New MCP server. The mcp.json file opens.
Paste the Remote MCP connection config JSON and save the file.
You can find this under the Quick start > Remote MCP (HTTP) section of your MCP connection in Kinde. Replace KINDE_USER_API_KEY with the user API key you created in the previous section.
Restart Cursor.
Confirm your connection appears in the list of Installed MCP Servers.
Open your chat window and run a sample tool call to test the connection.
If you have more than one API, you can change or re-authorize it:
Changing the authorized API updates which tools are available on this connection. The connection URL stays the same. Only one API can be authorized at a time.
Open the connection and select the Tools page.
Tools are generated from the operations in the authorized API’s active OpenAPI spec.
operationId when present; otherwise Kinde derives a name from the API name, HTTP method, and path. Duplicate names are disambiguated automatically.Open the connection and select the Tools audit page.
You will see every tool call made through this connection, including the agent, user, outcome, and upstream status.
| Column | Meaning |
|---|---|
| User | Email or user ID associated with the API key |
| Tool | MCP tool name |
| Outcome | OK or Error |
| Upstream | HTTP status returned by your API (when available) |
| Duration | Time spent calling upstream |
| When | Timestamp |
You can search by tool or user, and filter outcome to All, OK, or Error. Select View details for method, path, error summary, agent ID, IP address, user agent, MCP protocol version, and session ID.
The connection URL will stop working immediately and cannot be restored.
openapi: 3.0.3info: title: MCP Demo API description: Sample catalog API for testing Kinde MCP connections. version: 1.0.0servers: - url: https://mcp-demo-api.vercel.apppaths: /api/items: get: operationId: listItems summary: List all items description: Returns the full sample catalog of items. responses: "200": description: A list of items content: application/json: schema: type: object properties: items: type: array items: $ref: "#/components/schemas/Item" total: type: integer /api/items/{id}: get: operationId: getItemById summary: Get item by ID description: Returns a single item from the sample catalog. parameters: - name: id in: path required: true description: Item ID (1–5 in the sample data) schema: type: string example: "1" responses: "200": description: The requested item content: application/json: schema: type: object properties: item: $ref: "#/components/schemas/Item" "404": description: Item not found content: application/json: schema: type: object properties: error: type: string id: type: stringcomponents: schemas: Item: type: object required: - id - name - category - price - inStock properties: id: type: string name: type: string category: type: string price: type: number inStock: type: boolean| Action | Permission |
|---|---|
| View connections, tools, audit | read:apis |
| Create, delete, authorize APIs, configure backend auth | update:apis |