> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to the Mintlify MCP server

The Mintlify MCP connector routes your AI agent's tool calls to Mintlify's own MCP server through Scalekit. Each user signs in to Mintlify once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 19 tools.

**Authentication:** OAuth 2.1/DCR
**Categories:** Developer Tools, AI, Productivity
**Tools:** 19: 8 read, 7 write, 4 destructive
**Users sign in with:** OAuth
**OAuth app:** Scalekit's or your own
**Built by:** Vendor MCP
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=MINTLIFYMCP)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Mintlify MCP connection

   In **AgentKit > Connections**, create a Mintlify MCP connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

   Scalekit credentials are available for Mintlify MCP server, so you don't need to register an OAuth app.

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'mintlifymcp'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Mintlify MCP:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'mintlifymcp_diff',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "mintlifymcp"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Mintlify MCP:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="mintlifymcp_diff",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'mintlifymcp_diff',
  toolInput: {},
  connector: 'mintlifymcp',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="mintlifymcp_diff",
    tool_input={},
    connection_name="mintlifymcp",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `mintlifymcp_diff`

Diff · Read-only

Return the list of changes between the current session branch and the main branch.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `mintlifymcp_get_session_state`

Get Session State · Read-only

Return the current session state including the active branch name, edited files, and navigation diff.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `mintlifymcp_list_branches`

List Branches · Read-only

List all git branches available for the current deployment, optionally filtered by a query string.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, optional): No description.

Example input: `{}`

### `mintlifymcp_list_deployments`

List Deployments · Read-only

List the deployments this connection is authorized for, returning each subdomain and name. Use this to discover which subdomain to checkout before editing.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `mintlifymcp_list_nodes`

List Nodes · Read-only

List navigation nodes from the current branch tree with optional filters for parent, type, language, version, tab, anchor, or product.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `anchor` (`string`, optional): No description.
- `cursor` (`string`, optional): No description.
- `dropdown` (`string`, optional): No description.
- `item` (`string`, optional): No description.
- `language` (`string`, optional): No description.
- `limit` (`integer`, optional): No description.
- `parentId` (`string`, optional): No description.
- `product` (`string`, optional): No description.
- `recursive` (`boolean`, optional): No description.
- `tab` (`string`, optional): No description.
- `type` (`string`, optional): No description.
- `version` (`string`, optional): No description.

Example input: `{}`

### `mintlifymcp_read`

Read · Read-only

Read the full MDX content of a single page on the current branch by path, reflecting any in-session edits.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `path` (`string`, required): No description.

Example input: `{"path":"<path>"}`

### `mintlifymcp_search`

Search · Read-only

Find lines matching a substring or regex pattern across all pages on the current branch.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): No description.
- `caseSensitive` (`boolean`, optional): No description.
- `limit` (`integer`, optional): No description.
- `regex` (`boolean`, optional): No description.

Example input: `{"query":"<query>"}`

### `mintlifymcp_search_code_operations`

Search Code Operations · Read-only

Lexical (BM25) search over the Admin MCP code-mode SDK to find the right SDK method for a task before writing an execute_code script.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): No description.
- `limit` (`integer`, optional): No description.
- `namespace` (`string`, optional): No description. One of: `workflows`, `deployment`, `members`, `billing`, `integrations`, `analytics`.

Example input: `{"query":"<query>"}`

### `mintlifymcp_checkout`

Checkout · Write

Bind the current session to a git branch, creating it if it does not exist. Returns the branch name, editor URL, and a toolkit list of recommended tools to use next.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `branch` (`string`, optional): Specific branch to bind to. If it exists in git the session attaches to it without creating a branch; if not, it is created from `from`. Cannot be the deploy branch. Omit to auto-generate a fresh `admin-mcp/<slug>-<7-char-sha>` branch.
- `from` (`string`, optional): Base branch to fork from when creating a new branch. Defaults to the deployment's configured deploy branch (typically `main`). The new branch is created at this branch's latest commit.
- `slug` (`string`, optional): Human-readable slug used to name an auto-generated branch as `admin-mcp/<slug>-<7-char-base-sha>`. Ignored when `branch` is provided. If omitted and `branch` is also omitted, the branch is auto-named `admin-mcp/<sessionTokenPrefix>` and is not human-recognizable. Use a stable, kebab-case slug (e.g. `add-tips-page`).

Example input: `{}`

### `mintlifymcp_create_node`

Create Node · Write

Insert a new node (page, group, tab, anchor, version, language, or product) into the navigation tree under the specified parent.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `data` (`string`, required): No description.
- `parentId` (`string`, required): No description.
- `order` (`integer`, optional): No description.

Example input: `{"data":"<data>","parentId":"<parentId>"}`

### `mintlifymcp_edit_page`

Edit Page · Write

Apply a string-replace edit to a page's MDX body content. Use update_node to change frontmatter fields such as title or description.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `newString` (`string`, required): No description.
- `oldString` (`string`, required): No description.
- `path` (`string`, required): No description.
- `replaceAll` (`boolean`, optional): No description.

Example input: `{"newString":"<newString>","oldString":"<oldString>","path":"<path>"}`

### `mintlifymcp_move_node`

Move Node · Write

Reposition a navigation node by moving it to a new parent or changing its order among siblings.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `nodeId` (`string`, required): No description.
- `order` (`integer`, optional): No description.
- `parentId` (`string`, optional): No description.

Example input: `{"nodeId":"<nodeId>"}`

### `mintlifymcp_update_config`

Update Config · Write

Update top-level docs.json configuration fields or manage redirects. Use this to change site-level settings such as name, description, or theme.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `op` (`string`, required): No description. One of: `add_redirect`, `remove_redirect`, `set`.
- `docsConfig` (`object`, optional): No description.
- `redirect` (`object`, optional): No description.
- `source` (`string`, optional): No description.

Example input: `{"op":"add_redirect"}`

### `mintlifymcp_update_node`

Update Node · Write

Update a navigation node's properties in place by node ID, including page frontmatter fields like title, description, icon, or tag.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `data` (`string`, required): No description.
- `nodeId` (`string`, required): No description.

Example input: `{"data":"<data>","nodeId":"<nodeId>"}`

### `mintlifymcp_write_page`

Write Page · Write

Fully overwrite a page's MDX content on the current branch by path.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `content` (`string`, required): No description.
- `path` (`string`, required): No description.

Example input: `{"content":"<content>","path":"<path>"}`

### `mintlifymcp_delete_node`

Delete Node · Destructive

Remove a node and all its descendants from the navigation tree by node ID, optionally adding a redirect for deleted pages.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `nodeId` (`string`, required): No description.
- `redirect` (`string`, optional): No description.

Example input: `{"nodeId":"<nodeId>"}`

### `mintlifymcp_discard_session`

Discard Session · Destructive

End the current editing session without creating a pull request, discarding all unsaved changes.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs: none.

Example input: `{}`

### `mintlifymcp_execute_code`

Execute Code · Destructive

Run TypeScript/JavaScript against the Admin MCP dashboard SDK inside a sandboxed Cloudflare isolate to call workflows, deployment, billing, or analytics APIs.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `code` (`string`, required): No description.
- `summary` (`string`, required): No description.

Example input: `{"code":"<code>","summary":"<summary>"}`

### `mintlifymcp_save`

Save · Destructive

Flush branch changes to git by opening a pull request or committing directly, depending on the selected mode.

Read only: no. Destructive: yes. Idempotent (safe to retry): no.

Inputs:

- `title` (`string`, required): No description.
- `body` (`string`, optional): No description.
- `mode` (`string`, optional): No description. One of: `pr`, `commit`.

Example input: `{"title":"<title>"}`

## Related

Other Developer Tools connectors ([all 94](/agentkit/connectors/?category=developer-tools)):

- [GitHub](/agentkit/connectors/github/): Scalekit connector, OAuth, 217 tools
- [Datadog](/agentkit/connectors/datadog/): Scalekit connector, API key, 105 tools
- [Linear](/agentkit/connectors/linear/): Scalekit connector, OAuth, 62 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
