---
title: "Get MCP config"
method: GET
path: "/api/apps/platform/{app_id}/mcp/config"
---

# Get MCP config

`GET /api/apps/platform/{app_id}/mcp/config`

## Request

- Base URL: `https://app.base44.com`
- URL: `https://app.base44.com/api/apps/platform/{app_id}/mcp/config`
- Auth: HTTP bearer

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Returns the app's editable MCP config and the tools it resolves to.

Every entity and agent the app has is served unless the config holds it back, so `tools` lists each tool the next publish could serve, with `exposed` telling you whether the config serves it. `pending_removal` lists tools the live server still has that the config no longer produces. A publish removes them.

This is limited to 240 requests a minute for each app. Some workspaces have a different limit.

<Note>This endpoint accepts a personal API key belonging to a user with access to the app, including a read-only key. Workspace API keys are not accepted.</Note>

## Path parameters

- `app_id` string, required: ID of the app.

## Query parameters

- `branch_id` string: ID of the branch to work on, as returned by [List branches](/api-reference/list-branches). Omit it to work on the app's main branch.

## Response `200`

The app's MCP config and its tools.

- AppMcpConfigResponse: The app's editable MCP config and the tools it resolves to.
  - `config` object, nullable: The editable config, or `null` when the app has no MCP server. It has `auth`, `login_path`, `consent_path`, and the `tools` object that [Update MCP config](/api-reference/update-mcp-config) replaces.
  - `tools` AppMcpToolRow[]: Every tool the config can serve, and whether it does.
    - `key` string, required: Stable ID of the row. Two rows can share a `name`, but never a `key`.
    - `name` string, required: Name AI clients call the tool by.
    - `kind` 'entity' | 'agent' | 'function', required: Where the tool comes from. Either `"entity"`, `"agent"`, or `"function"` for a custom tool.
    - `source` string, required: Entity, agent, or custom tool in the config that this row belongs to.
    - `operation` string, nullable: Entity operation the tool performs, or `null` for agent and custom tools. One of `read`, `create`, `update`, or `delete`.
    - `handler` string, nullable: Backend function a custom tool runs, or the server route path it calls (starting with `/`), or `null` for other tools.
    - `title` string, nullable: Display title of the tool, or `null` when it has none.
    - `description` string: What the tool does, as AI clients see it.
    - `read_only_hint` boolean: Whether the tool is marked as only reading data.
    - `exposed` boolean, required: Whether the config serves the tool.
    - `published` boolean, required: Whether the live server already matches `exposed`. It's `false` while a change waits for a publish.
  - `pending_removal` AppMcpLiveToolRow[]: Tools the live server still serves that the config no longer produces. The next publish removes them.
    - `name` string, required: Name AI clients call the tool by.
    - `kind` 'entity' | 'agent' | 'function', required: Where the tool comes from. Either `"entity"`, `"agent"`, or `"function"` for a custom tool.
    - `title` string, nullable: Display title of the tool, or `null` when it has none.
    - `description` string: What the tool does, as AI clients see it.
    - `read_only_hint` boolean: Whether the tool is marked as only reading data.

## Other responses

- `401`: Missing or invalid credentials.
- `403`: You don't have access to this app, or it doesn't exist.
- `404`: App not found, or it's outside the workspace your credential is scoped to. With `branch_id`: no such branch on this app, or you can't see it (`error.code` is `branch_not_found`).
- `409`: `branch_id` was sent but MCP config on a branch isn't available for you yet (`error.code` is `branch_writes_unavailable`).
- `429`: Too many MCP config reads for this app in the last minute.

## Changes

- **2026-10-29** `8ffef949fcd8`: 2 info
  - added the new optional `query` request parameter `branch_id`
  - added the non-success response with the status `409`
- **2026-10-13** `06cfcce0bdd9`: 2 info
  - the security scope `read_only` was added to the endpoint's security scheme `PersonalAccessTokenAuth`
  - the security scope `full_access` was removed from the endpoint's security scheme `PersonalAccessTokenAuth`
- **2026-10-11** `80287813ab84`: 1 info
  - the endpoint scheme security `PersonalAccessTokenAuth` was added to the API
- **2026-09-29** `347e2afcf94a`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/apps/platform/:app_id/mcp/config/get.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) - [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) - [OpenAPI document](https://skmtc.dev/idealspot/apis/base44-app-management-api/revisions/b5b4ebd82a1e?raw)
