# How to connect Mintlify MCP to Claude

```json
{
  "title": "How to connect Mintlify MCP to Claude",
  "toolkit": "Mintlify MCP",
  "toolkit_slug": "mintlify_mcp",
  "framework": "Claude Cowork",
  "framework_slug": "claude-cowork",
  "url": "https://composio.dev/toolkits/mintlify_mcp/framework/claude-cowork",
  "markdown_url": "https://composio.dev/toolkits/mintlify_mcp/framework/claude-cowork.md",
  "updated_at": "2026-09-24T15:33:43.437Z"
}
```

## Introduction

Claude is Anthropic's AI assistant, available on the web, in the desktop app, and on mobile. Cowork is its agent for knowledge work, and it runs on all of those surfaces too. Connected to your apps, Claude can work with your files and services to accomplish complex tasks on your behalf.
This guide walks you through the easiest and most secure way to connect your Mintlify account to Claude via Composio Connect, enabling it to search docs for API rate limits, find authentication code examples in docs, list pages referencing onboarding developer guide, and more such actions on your behalf without compromising your account security.
Setup is the same on Claude Web, Desktop, and Cowork, and you only need to do it once. The connector is tied to your account, so it's available in all three.

## Also integrate Mintlify MCP with

- [ChatGPT](https://composio.dev/toolkits/mintlify_mcp/framework/chatgpt)
- [Hermes](https://composio.dev/toolkits/mintlify_mcp/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/mintlify_mcp/framework/atomic-agent)

## Connect Mintlify MCP to Claude Cowork

### Connecting Mintlify to Claude Web, Desktop, and Cowork
Two ways to add the Composio connector. Pick whichever you prefer.
### 1. Add with one click
Click the button. Claude opens with the Composio connector filled in. Click Add, then go to step 2.
[Add to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Composio&connectorUrl=https%3A%2F%2Fconnect.composio.dev%2Fmcp)
### Add manually
In Claude Desktop, click Customize in the left sidebar, then select Connectors and click the + icon at the top.
Click Add custom connector and paste in the Composio MCP server URL:

```bash
https://connect.composio.dev/mcp
```

## What is the Mintlify MCP server, and what's possible with it?

The Mintlify MCP server is an implementation of the Model Context Protocol that connects your AI agent and assistants like Claude, Cursor, etc directly to your Mintlify account. It provides structured and secure access so your agent can perform Mintlify operations on your behalf.

## Supported Tools

| Tool slug | Name | Description |
|---|---|---|
| `MINTLIFY_MCP_CHECKOUT` | Checkout | Select a deployment and open its editor session in one call. This is an org-wide connection, so `subdomain` is required to choose which deployment to open. Subsequent editor tools act on the active session. Required before editor branch tools; deployment-level operations (workflows, deployment, members, billing, integrations, analytics) are reached via `execute_code` and do not require checkout. Calling checkout on another subdomain switches the active session without losing the others; re-checking-out an already-open deployment just re-activates it. Pass `branch` to work on a specific branch — if it already exists in git, the session attaches to it as-is; if not, it is created from `from` (defaults to the deploy branch). Omit `branch` to auto-generate a fresh `admin-mcp/-` branch from `from` (uses `slug` when provided, otherwise the session id); if that branch already exists (e.g. a retried task) the session resumes it. Returns `{ branchName, sessionId, baseBranch, baseSha, created, note?, editorUrl, toolkit }`. `toolkit` groups the tools you should load next (`explore`, `editContent`, `editNavigation`, `editConfig`, `codemode`, `ship`) so you can call them without further discovery. Surface `editorUrl` to the user so they can follow along in the dashboard editor as the agent works. |
| `MINTLIFY_MCP_CREATE_NODE` | Create node | Insert a node into the navigation tree under `parentId` (null = root). `order` is clamped into siblings and defaults to append. `data` is discriminated by `type`: `page` seeds a Y.Doc from `{ path, content }` (MDX is validated), while `group`, `tab`, `anchor`, `version`, `language`, and `product` take their own name-shaped fields. Parent/child compatibility is enforced against an allowed-children table (e.g. groups cannot contain tabs; pages have no children). |
| `MINTLIFY_MCP_DELETE_NODE` | Delete node | Remove a node and its subtree from the navigation tree by `nodeId`. For pages in the removed set, the hocuspocus room, document S3 blob, and baseline (Redis + S3) are cleaned up. To add a redirect for a removed page, use `update_config` with `add_redirect`. Returns `{ deletedNodeIds }`. |
| `MINTLIFY_MCP_DIFF` | Diff | Returns the list of changes between current session and main. |
| `MINTLIFY_MCP_DISCARD_SESSION` | Discard session | End the session without creating a PR |
| `MINTLIFY_MCP_EDIT_PAGE` | Edit page | String-replace edit on a page Y.Doc body. Use this for MDX content edits only — do NOT use it to change frontmatter fields (`title`, `sidebarTitle`, `description`, `icon`, `tag`, `canonical`, `og:*`, `keywords`, `noindex`, `hidden`, etc.); those round-trip through structured node metadata and must be set via `update_node` with `data.type='page'`. For the site-level `description` in `docs.json`, use `update_config`. Edits are broadcast live to connected collaborators: plain inline-text edits inside a single paragraph stream character-by-character (typing effect); structural edits apply atomically. The returned `mode` reports which path ran (`inline-stream` or `rebuild`). |
| `MINTLIFY_MCP_EXECUTE_CODE` | Execute code | Run TypeScript/JavaScript against the Admin MCP dashboard SDK inside a sandboxed Cloudflare isolate. The script body has access to top-level namespace proxies (workflows, deployment, members, billing, integrations, analytics, deployments) plus console. No outbound fetch, no bindings, no secrets. The OAuth scopes on the calling token gate each individual SDK call through the gateway. **Targeting deployments**: every namespace method takes an optional second argument `{ subdomain }` to target a specific deployment in the org — e.g. `workflows.listWorkflows({}, { subdomain: 'acme' })`; omit it to use the token's default deployment. You can target different deployments in a single run. `deployments.list()` enumerates the org's deployments (org-wide; requires the `deployment:read` scope) and returns `{ deployments: [{ _id, subdomain }, ...] }`. **Return semantics**: the script is wrapped in an async function and the value of the LAST expression statement becomes the result — `await workflows.listWorkflows();` on its own line works, but a bare `return X;` at top level is dropped (no enclosing function), and `export default async function() { return X; }` returns the function object, not `X`. To return a structured value either end with an expression (`({ a, b });` or just `x`) or assign to a variable and reference it on the last line. Returns a tagged-union envelope: { ok: true, result, logs, truncated, durationMs } \| { ok: false, error: { code, message }, logs, truncated, durationMs }. `truncated: true` signals the result or logs hit the size cap. Error codes: unauthorized, invalid_json, invalid_request, misconfigured, timeout (30s wall-clock), sandbox_error (anything thrown inside the script), execution_failed (worker plumbing failure). |
| `MINTLIFY_MCP_GET_SESSION_STATE` | Get session state | Get current session state including branch name, edited files, and nav diff |
| `MINTLIFY_MCP_LIST_BRANCHES` | List branches | List all git branches available for a deployment before or after checkout. Pass `subdomain` to target a deployment; it defaults to the active session and is required before checkout on this org-wide connection. Optionally filter with `query` to only return matching branch names. Returns `{ branches, total, deployBranch }`. |
| `MINTLIFY_MCP_LIST_DEPLOYMENTS` | List deployments | List the deployments this connection is authorized for, returning each `{ subdomain, name }`. On an org-wide connection this is every main (non-preview) deployment in your organization; on a connection scoped to specific deployments it returns only those. Use this to discover which subdomain to `checkout` before editing. Hidden when the connection is pinned to a single deployment. |
| `MINTLIFY_MCP_LIST_NODES` | List nodes | List navigation nodes with optional filters over the current branch nav tree. `parentId: null` returns root-level nodes; a string returns direct children of that node; omit for no filter. `recursive: true` extends the parent filter to all descendants of `parentId` — pair with `parentId: null` (or omit) to dump the entire tree in a single call. `type` accepts a single type or array (e.g. "group"). `language`, `version`, and `tab` are scope filters: a node passes only if its ancestor chain (including itself) contains a matching division node — filtering by a value not present in the tree returns empty. `limit` defaults to 500 (max 500). `cursor` is an opaque pagination token returned as `nextCursor`, stable across inserts. Returns { nodes, nextCursor } where nextCursor is null when exhausted. |
| `MINTLIFY_MCP_MOVE_NODE` | Move node | Reposition a node in the navigation tree by nodeId. `parentId: null` moves to root; omit to keep the current parent. `order` is 0-based among the new siblings; omit to append. At least one of `parentId` or `order` is required. Parent/child compatibility is enforced against the allowed-children table. Cross-boundary moves (across version, tab, language, or product ancestors) are allowed; the response flags them via `crossedBoundary`. |
| `MINTLIFY_MCP_READ` | Read | Read the full MDX content of a single page on the current branch. Reflects in-session edits made via edit_page/write_page, not just the published version. `path` is the page href (e.g. "/quickstart" or "guides/setup"), with or without a leading slash or trailing .mdx. Returns `{ content, filePath }` on success, or `{ error: "read_failed", reason }` on failure (`reason` carries the human-readable diagnostic such as "No valid pageId found for page" or a hocuspocus connection error). |
| `MINTLIFY_MCP_SAVE` | Save | Flush branch to git. With mode="auto" (default) opens a PR if none exists, otherwise commits to the existing PR branch; it only auto-merges when this deployment's agent review setting is push-to-main. With mode="pr" opens a PR if none exists, otherwise commits to the existing PR branch, and never auto-merges. With mode="commit" commits directly to the branch without opening a PR. |
| `MINTLIFY_MCP_SEARCH` | Search | Find lines matching a substring or regex across every page on the current branch. Returns { matches, truncated } where each match is { path, lineNumber, line }, sorted by path. Reflects in-session edits: pages edited in this session are scanned even before indexing catches up. `query` is treated as a literal fixed string by default; pass `regex: true` for regex syntax. `caseSensitive` defaults to false. `limit` caps results (default 100, max 500). The response is bounded to 30KB — `truncated: true` indicates results were dropped and you should refine the query. |
| `MINTLIFY_MCP_SEARCH_CODE_OPERATIONS` | Search code operations | Lexical (BM25) search over the Admin MCP code-mode SDK. Use this to find the right SDK method for a task before writing an `execute_code` script. `query` is matched against method names, namespaces, parameter names, and JSDoc descriptions (camelCase tokens like `createWorkflow` are split, so `create workflow` also matches). Pass `namespace` (one of workflows, deployment, members, billing, integrations, analytics) to scope results to a single namespace — this also enumerates that namespace (every method in it, best query matches first), e.g. to confirm whether a getter exists. Returns up to `limit` hits (default 5, max 20), each `{ operationId, namespace, method, requiredScope, description, inputSchema, score }`. `inputSchema` is the full JSON Schema for the method’s parameters — no extra lookup needed before calling `execute_code`. Returns `{ hits: [] }` when nothing matches. |
| `MINTLIFY_MCP_UPDATE_CONFIG` | Update config | Update any top-level `docs.json` field except `navigation` (use the navigation tree tools for that). This is the ONLY way to change the site-level `description` (the SEO/social description for the whole docs site) — do not use `edit_page` (which targets page body) or `update_node` (which targets a single page's frontmatter description). `op` selects the operation: `set` ({ docsConfig }) shallow-merges any partial `docs.json` (e.g. `{ theme, name, description, colors, logo, favicon, api, appearance, background, navbar, footer, fonts, search, contextual, banner, interaction, errors, seo, styling, integrations, metadata, ... }` — see https://www.mintlify.com/docs.json); `add_redirect` ({ redirect: { source, destination, permanent? } }) appends to `redirects` (rejects on duplicate source); `remove_redirect` ({ source }) removes by source (rejects if missing). `set` rejects `navigation` and `$schema` keys. Set a top-level key to `null` in `docsConfig` to unset (remove) it entirely. The merged config is validated against the @mintlify/validation schema — any violation rejects the call with no partial writes. Returns `{ diff }` of only the changed fields: array-valued fields (e.g. `redirects`, `navbar.links`) report `{ added, removed }`, nested objects recurse under `{ changed }`, and scalar leaves report `{ before, after }`. |
| `MINTLIFY_MCP_UPDATE_NODE` | Update node | Update a navigation node's properties in place by nodeId — no repositioning. `data` is a discriminated union on `type` carrying partial, type-specific fields that are merged into existing `node.data`. For `type:'page'`, this is the correct tool for editing the page's frontmatter (`title`, `sidebarTitle`, `description`, `icon`, `tag`, `canonical`, `og:title`, `og:url`, `keywords`, `noindex`, `hidden`, `deprecated`, etc.) — the merged fields are serialized back into the MDX `---` block on save; do not use `edit_page` for these. `data.type` must match the stored node type. Immutable fields (`href`/`pageId` on pages, internal flags) are rejected — use `move_node` to rename a page path. Page updates emit an `update` pending action with source `metadata`; structural node updates emit an `update-navigation` action. Emits `editor_nav_updated`. Examples: set a page's frontmatter description (`{type:'page', description:'…'}`), rename a group (`{type:'group', group:'New Name'}`), change a tab icon, set a version as default. |
| `MINTLIFY_MCP_WRITE_PAGE` | Write page | Full overwrite of a page Y.Doc content |

## Supported Triggers

None listed.

## Troubleshooting

### 1. Why does Claude not use the Composio connector for Mintlify?

The connector can show as connected, but Claude must use it in each Mintlify conversation.
- Click + at the lower left of the chat, or type /.
- Hover Connectors.
- Turn on Composio.
- Ask Claude to connect to Mintlify again.

### 2. Why does Claude show an MCP server error before Mintlify connects?

Claude can show Couldn't reach the MCP server or Authorization with the MCP server failed when you add the connector for Mintlify.
- Check that the connector URL is https://connect.composio.dev/mcp.
- Connectors run from Anthropic's cloud, so your device network is usually not the problem.
- Add the connector again from Customize > Connectors, then ask Claude to connect Mintlify.
- If it fails again, send the error and the ofid_ reference id to support@composio.dev.

### 3. Why does the Mintlify authorization link not work?

The Composio connector is one server. Your Mintlify account connects separately when Claude asks for it.
- If the browser does not open, or the link expires, ask Claude to retry the Mintlify connection.
- Composio creates a fresh Mintlify authorization link.
- Open that link in your browser and finish the Mintlify sign-in.

### 4. Why do Mintlify actions fail after they worked before?

The Mintlify connection can expire or lose permission.
- Ask Claude to inspect the Mintlify connection.
- If the connection is unhealthy, disconnect it when Claude prompts you.
- Reconnect the Mintlify account and retry the action.
- If Claude shows a permission prompt, approve it before Claude changes data in Mintlify.
- If the action still fails with a permission error, check that the connected account has that permission in Mintlify itself.

### 5. How do I switch to a different Mintlify account?

Claude can manage the Mintlify connection for you.
- Ask Claude to disconnect or delete the current Mintlify account.
- Ask Claude to connect Mintlify again.
- Open the new Composio authorization link for Mintlify.
- Sign in with the other Mintlify account in the browser.
- After the account connects, ask Claude to retry the Mintlify task.

### 6. Why is my Mintlify connection missing in Claude Desktop or on a Team plan?

The connector belongs to your Claude account, so your Mintlify connection works in Claude Web, Desktop, and Cowork.
- In Claude Desktop, open Customize > Connectors.
- Next to Composio, click ⋮ and click Clear cache.
- If Mintlify tools still do not appear, click ⋮, disconnect, remove the connector, and add it again.
- On Team or Enterprise, an Owner or Primary Owner must enable the connector before you can connect Mintlify.

## Creating MCP Server - Stand-alone vs Composio SDK

The Mintlify MCP server connects Claude Web, Desktop, and Cowork to your Mintlify account through Composio. Once connected, Claude can use the available Mintlify tools and triggers to complete tasks on your behalf.

## Complete Code

None listed.

## How to build Mintlify MCP Agent with another framework

- [ChatGPT](https://composio.dev/toolkits/mintlify_mcp/framework/chatgpt)
- [Hermes](https://composio.dev/toolkits/mintlify_mcp/framework/hermes-agent)
- [Atomic Agent](https://composio.dev/toolkits/mintlify_mcp/framework/atomic-agent)

## Related Toolkits

- [Google Drive](https://composio.dev/toolkits/googledrive) - Google Drive is a cloud storage platform for uploading, sharing, and collaborating on files. It's perfect for keeping your documents accessible and organized across devices.
- [Google Docs](https://composio.dev/toolkits/googledocs) - Google Docs is a cloud-based word processor that enables document creation and real-time collaboration. Its seamless sharing and version history make team editing and content management a breeze.
- [Google Super](https://composio.dev/toolkits/googlesuper) - Google Super is an all-in-one suite combining Gmail, Drive, Calendar, Sheets, Analytics, and more. It gives you a unified platform to manage your digital life, boosting productivity and organization.
- [ActiveMerge](https://composio.dev/toolkits/active_merge) - ActiveMerge is a document automation platform for generating documents, images, merged files, and e-signature workflows. It helps teams turn templates and stored files into finished, shareable documents faster.
- [Affinda](https://composio.dev/toolkits/affinda) - Affinda is an AI-powered document processing platform that automates data extraction from resumes, invoices, and more. It streamlines document-heavy workflows by turning files into structured, actionable data.
- [Agility cms](https://composio.dev/toolkits/agility_cms) - Agility CMS is a headless content management system for building and managing digital experiences across platforms. It lets teams update content quickly and deliver omnichannel experiences with ease.
- [Airparser](https://composio.dev/toolkits/airparser) - Airparser is an AI-powered parser for extracting structured data from emails, documents, PDFs, and files. It turns messy inbound content into clean fields your apps and workflows can use.
- [Algodocs](https://composio.dev/toolkits/algodocs) - Algodocs is an AI-powered platform that automates data extraction from business documents. It delivers fast, secure, and accurate processing without templates or manual training.
- [Api2pdf](https://composio.dev/toolkits/api2pdf) - Api2Pdf is a REST API for generating PDFs from HTML, URLs, and documents using powerful engines like wkhtmltopdf and Headless Chrome. It streamlines document conversion and automation for developers and businesses.
- [Archive.org](https://composio.dev/toolkits/archive_org) - Archive.org is the Internet Archive's digital library of websites, books, audio, video, and images. Use it to preserve, explore, and access historical web captures and public-domain media.
- [Aryn](https://composio.dev/toolkits/aryn) - Aryn is an AI-powered platform for parsing, extracting, and analyzing data from unstructured documents. Use it to automate document processing and unlock actionable insights from your files.
- [Boldsign](https://composio.dev/toolkits/boldsign) - Boldsign is a digital eSignature platform for sending, signing, and tracking documents online. Organizations use it to automate agreements and manage legally binding workflows efficiently.
- [Boloforms](https://composio.dev/toolkits/boloforms) - BoloForms is an eSignature platform built for small businesses, offering unlimited signatures, templates, and forms. It simplifies digital document signing and team collaboration at a predictable, fixed price.
- [Box](https://composio.dev/toolkits/box) - Box is a cloud content management and file sharing platform for businesses. It helps teams securely store, organize, and collaborate on files from anywhere.
- [Box MCP](https://composio.dev/toolkits/box_mcp) - Box MCP is Box's hosted MCP server that exposes enterprise files, folders, and metadata. It provides secure, centralized access to corporate content for search and management.
- [Carbone](https://composio.dev/toolkits/carbone) - Carbone is a blazing-fast report generator that turns JSON data into PDFs, Word docs, spreadsheets, and more using flexible templates. It lets you automate document creation at scale with minimal code.
- [Castingwords](https://composio.dev/toolkits/castingwords) - CastingWords is a transcription service specializing in human-powered, accurate transcripts via a simple API. Get seamless audio-to-text conversion for interviews, meetings, podcasts, and more.
- [CertSeal](https://composio.dev/toolkits/cert_seal) - CertSeal is an API platform for issuing and managing verifiable digital certificates. Use it to automate trusted certificate workflows for recipients, batches, designs, and webhooks.
- [Cloudconvert](https://composio.dev/toolkits/cloudconvert) - CloudConvert is a powerful file conversion service supporting over 200 file formats. It streamlines converting, compressing, and managing documents, media, and more, all in one place.
- [Cloudlayer](https://composio.dev/toolkits/cloudlayer) - Cloudlayer is a document and asset generation service for creating PDFs and images via API or SDKs. It lets you automate high-quality doc creation, saving dev time and reducing manual work.

## Frequently Asked Questions

### What are the differences in Tool Router MCP and Mintlify MCP?

With a standalone Mintlify MCP server, the agents and LLMs can only access a fixed set of Mintlify tools tied to that server. However, with the Composio Tool Router, agents can dynamically load tools from Mintlify and many other apps based on the task at hand, all through a single MCP endpoint.

### Can I use Tool Router MCP with Claude Cowork?

Yes, you can. Claude Cowork fully supports MCP integration. You get structured tool calling, message history handling, and model orchestration while Tool Router takes care of discovering and serving the right Mintlify tools.

### Can I manage the permissions and scopes for Mintlify while using Tool Router?

Yes, absolutely. You can configure which Mintlify scopes and actions are allowed when connecting your account to Composio. You can also bring your own OAuth credentials or API configuration so you keep full control over what the agent can do.

### How safe is my data with Composio Tool Router?

All sensitive data such as tokens, keys, and configuration is fully encrypted at rest and in transit. Composio is SOC 2 Type 2 compliant and follows strict security practices so your Mintlify data and credentials are handled as safely as possible.

---
[See all toolkits](https://composio.dev/toolkits) · [Composio docs](https://docs.composio.dev/llms.txt)
