Skip to main content

About the admin MCP

The admin MCP server gives AI tools write access to your Mintlify content and settings. Use it to update content and access your dashboard. With the admin MCP, you can use your preferred AI tools to edit pages, restructure navigation, update docs.json, open pull requests, change settings, create workflows, and more. Connect an MCP client such as Claude, Claude Code, ChatGPT, or Cursor to the admin MCP server. Use it to collaborate on your Mintlify content and settings with the same tools you use to write code. Content edits happen on a branch and ship through a pull request or commit when you call save. Project management changes, such as workflow and settings updates, apply immediately to the live project. If your organization has multiple projects, a single admin MCP connection can access and switch between all of them.
The admin MCP server allows AI tools to access your Mintlify dashboard. Treat it as a tool with write access. Connect it only from trusted AI tools, review every pull request before merging, and be aware that project management changes apply immediately without a pull request.
The admin MCP is a hosted Mintlify service at https://mcp.mintlify.com. Every client connects to the same endpoint and authenticates with your Mintlify account.

How the admin MCP differs from other Mintlify MCP servers

See the Mintlify Index MCP reference for its tool inputs and rate limits.

Prerequisites

Before connecting the admin MCP, confirm the following:
  • Mintlify account: You need a Mintlify account with access to the project you want to edit. The OAuth session inherits your dashboard permissions, so admin-only actions (such as update_config on protected settings) require an admin role on the project.
  • Git provider access: The GitHub, GitLab, or Bitbucket connection for the project must have write access to the deploy branch’s repository. save opens PRs through the same integration used for normal deploys.
  • MCP client: An MCP-capable AI tool such as Claude, Claude Code, ChatGPT, Cursor, or Codex.

Connect to the admin MCP

You must have an interactive OAuth login against your Mintlify account to connect to the admin MCP. AI tools exchange that login for a session token scoped to one or more projects, depending on how you grant access. A connection scoped to specific projects can only check out those projects. An organization-wide connection can check out any project in your organization.
1

Add the admin MCP as a custom connector

  1. Navigate to the Connectors page in the Claude settings.
  2. Click Add custom connector.
  3. Add the connector:
    • Name: Admin MCP
    • URL: https://mcp.mintlify.com
  4. Click Add and complete the OAuth login.
2

Use the MCP in a chat

Click the attachments button (the plus icon), then select your admin MCP server. Claude can now call the Mintlify admin MCP tools while answering your prompt.

How a session works

Every admin MCP session binds to a single Git branch. The flow is:
1

Discover projects (optional)

If your connection has access to more than one project, call list_deployments to see which subdomain values you can check out. Skip this step if your connection covers only a single project.
2

Check out a branch

The first required call is checkout {subdomain}. It creates a fresh admin-mcp/<slug>-<sha> branch from that project’s deploy branch (or attaches to an existing branch you name). It also returns an editorUrl you can open to follow along in the dashboard editor.To skip the session branch and edit your deploy branch directly, pass it as branch. See Edit the deploy branch directly.Call list_branches before checkout if you need to discover or filter existing branches in a project’s repository.
3

Read, search, and edit

The AI uses tools like search, read, list_nodes, edit_page, write_page, create_node, and update_config to make changes. All edits buffer on the session branch in real time. Nothing touches your deploy branch yet.
4

Review the diff

Call diff at any time to see exactly what changed since your deploy branch. Open an editorUrl in your dashboard to see the same changes rendered. When create_node adds a page, it returns an editorUrl that opens that page directly.
5

Save

Call save to flush the branch to Git. mode: "auto" (default) opens a pull request. If the project’s agent review setting is push-to-main and the deploy branch isn’t protected, Mintlify merges the pull request immediately (the response includes merged: true). Use mode: "pr" to always open a pull request and leave it open for review. Use mode: "commit" to push directly to an existing PR branch without opening a new PR.When save opens or updates a pull request, the response includes an editorUrl that opens the first created or updated page on the branch. If the changes only touch configuration, the link opens the branch. Saves that merge immediately don’t return an editorUrl.
6

Discard if needed

Call discard_session to drop all in-session changes and release the branch.
If your connection has access to multiple projects, each checked-out project keeps its own session and branch in memory at the same time.Calling checkout again with a different subdomain or branch switches which session is active. It doesn’t discard the others. To abandon an in-progress draft instead of switching away from it, call discard_session.

Edit the deploy branch directly

Pass your deploy branch to checkout to edit it the same way you do in the dashboard editor. For example, checkout { subdomain: "acme", branch: "main" }. Mintlify binds the session to the deploy branch instead of creating an admin-mcp/* branch. Checkout is faster, and you don’t get a pull request. The AI tool acts as you on the deploy branch:
  • Edits are live to collaborators. Anyone else editing the deploy branch in the dashboard sees the AI’s changes as they happen.
  • save publishes only your changes. It ignores mode and commits your pending changes straight to the deploy branch, like clicking Publish in the editor. Other people’s unpublished changes stay pending. Your own unpublished edits from the dashboard editor publish too.
  • discard_session reverts only your changes. It returns discardedChanges with the number of changes it reverted. Other people’s changes and the branch itself stay untouched.
  • get_session_state lists only your changes.
Mintlify tracks changes per page. If you and someone else both edited the same page, save publishes the whole page and discard_session reverts the whole page, including the other person’s edits. When any of the following is true, Mintlify creates a session branch off the deploy branch instead. checkout returns a note explaining why:
  • Branch protection on your deploy branch requires pull requests, or Mintlify can’t check your branch protection rules.
  • Editing the deploy branch is locked in the dashboard editor.
  • Push directly to your deploy branch is off in your publishing settings.
  • You connected with a client or machine-to-machine token instead of an OAuth login. These tokens aren’t tied to a user, so they have no “own” changes.

Publishing

The Publishing section on the admin MCP settings page in your dashboard controls what happens when save runs with mode: "auto". Toggle Push directly to your deploy branch on to have Mintlify push changes straight to your deploy branch. Toggle it off to have save open a pull request instead. This toggle shares the same agentReviewProcess setting as the Slack and dashboard agent, so any change here also applies to those flows. The toggle is disabled in three cases:
  • Your deploy branch requires a pull request. If branch protection rules or required approvals prevent direct pushes, MCP changes always open a pull request regardless of this setting.
  • Mintlify hosts your project. For Mintlify-hosted sites, MCP changes always push directly, unless branch protection still requires a pull request.
  • You aren’t an admin. Changing this setting requires the admin role on your project. Editors and viewers see the toggle disabled with a permission banner.
You can also override the setting on a per-call basis by passing an explicit mode to save. Set "pr" to always open a pull request, or "commit" to push to an existing PR branch without opening a new PR.

What the admin MCP can do

Content

  • read: Fetch the full MDX of any page on the session branch. Pass in a file path or UUID. To read a private page, pass its private-page-<uuid> node ID from list_nodes with visibility: "private". Private reads work without a checkout and require an OAuth session. The admin MCP rejects client and machine-to-machine tokens for private-page access.
  • search: Find lines matching a substring or regular expression across every page.
  • edit_page: Apply a targeted edit to a page. To edit a private page, pass its private-page-<uuid> node ID as path. Private edits require an OAuth session with an editor role or higher on the page and work without a checkout.
  • write_page: Overwrite a page’s full MDX content. Accepts a private-page-<uuid> node ID to overwrite a private page under the same OAuth and role requirements as edit_page. Use create_node to create a new private page.

Images

  • upload_image: Start uploading a local image file to the session branch. Pass the destination path (for example, images/dashboard.png), the file’s contentType, and its exact size in bytes. Returns an uploadId, a presigned uploadUrl, and the headers to send with the upload.
  • finalize_image_upload: Save the uploaded image to the session branch. Pass the uploadId and the same path. Returns the src to reference in MDX with edit_page or write_page, or in the logo or favicon fields of docs.json with update_config.
After upload_image, the AI tool uploads the file bytes to uploadUrl with a PUT request and the returned headers. For example:
Mintlify checks that the uploaded file’s contents match its extension before saving it. An upload to an existing path replaces that image. Mintlify only accepts SVG files for logos and favicons, so pass purpose: "logo" to both tools when you upload one. Saved images appear in get_session_state and publish with the rest of the session when you call save.
  • list_nodes: Walk the navigation tree with optional filters. Filter by parentId (use recursive: true to include all descendants), one or more node types, or any division scope: language, version, tab, dropdown, anchor, product, or item. Results paginate through an opaque cursor. Pass visibility: "private" to list the private pages and folders the OAuth user can access instead of the branch navigation tree. Private listing works without a checkout, ignores the other filters, and returns each node’s role.
  • create_node: Add a new page, group, tab, anchor, version, language, product, or dropdown. Pass visibility: "private" with data.type: "page" or data.type: "group" to create a private page or private folder in the caller’s private tree. The caller becomes the node’s manager. Private creation requires an OAuth session, works without a checkout, and places the node at the private root or under an existing private-folder-<uuid> parent. For new pages, the response includes an editorUrl that opens the page in your dashboard.
  • update_node: Update a node’s properties in place (rename a group, change an icon, set a default version). Accepts a private-page-<uuid> or private-folder-<uuid> node ID to rename a private page or folder or change its icon or tag. Private updates require an OAuth session with an editor role or higher and work without a checkout.
  • move_node: Move a node, including renaming a page’s path.
  • delete_node: Remove a node from the navigation. Accepts a private-page-<uuid> or private-folder-<uuid> node ID to delete a private page or folder from the caller’s private tree. Private deletions require an OAuth session with a manager role on the node and work without a checkout.
If a create_node, update_node, move_node, or delete_node call leaves the navigation in an invalid state, the response includes a navigationErrors field that describes the problem. For example, a page placed at the root next to tabs returns navigationErrors. Mintlify can drop invalid nodes from the published navigation, so fix these errors before you call save.

Configuration

  • update_config: Modify docs.json (theme, navigation roots, integrations, SEO settings).

Project management

Project management tools handle project-level operations, such as managing workflows, project settings, custom domains, Git sources, authentication, members, analytics, and private page sharing. They don’t require a checkout. Each tool takes a subdomain for the project to act on. Organization-wide connections must pass subdomain. Call list_deployments to find it. Read tools also accept subdomains, a list of up to 25 projects, and return a result or error for each one. Most tools take a request object whose action field selects the operation. For example:
Read tools:
  • get_deployment_settings: Read a project’s dashboard settings, Git sources, custom hostname status, and source checks in one call. Slack configuration and snippets are opt-in.
  • get_analytics_report: Read a prebuilt analytics report, such as page views, popular pages, referrals, feedback, assistant chats, or search quality. Select the report with request.report. Large results paginate with maxRows and rowOffset. For custom queries, use query_analytics.
  • get_workflows: List workflows, get one workflow, or page through its runs.
  • list_repos_and_prs: List connected repositories, a repository’s pull requests, or available integrations to use in a workflow.
Write tools:
  • update_deployment_settings: Change one dashboard setting, such as noindex, base_path, name, disable_ai_chat, search_settings, privacy, custom_scripts, or an add-on. Use update_config for docs.json settings.
  • manage_custom_domain: Add or remove a custom domain, provision its hostname, or retrigger hostname validation.
  • manage_git_source: Add, update, remove, or reorder the Git repositories a project builds from, or set the base source.
  • manage_access_auth: Configure or remove site authentication, add or delete passwords, configure end-user authentication, or switch which one is active.
  • manage_workflow: Create, update, enable or disable, delete, or trigger a workflow.
  • manage_members_sharing: List or remove organization members, update their roles, or manage private page grants and moves.
Write tools return the project’s updated state under state, so the AI tool can confirm the change without a second call. Each action checks the connection’s granted scopes and your dashboard role. An action you aren’t authorized for returns an error such as insufficient_scope.
Project management writes apply immediately to the live project. They don’t create a branch or open a pull request. Confirm the intended change before prompting an AI tool to update workflows, settings, domains, authentication, or members.

Session

  • list_deployments: List the projects your connection can access, returning each {subdomain, name}. Call this to discover which subdomain to pass to checkout.
  • checkout: Bind a session to a branch for a given project subdomain, or switch which project’s session is active. Pass the deploy branch as branch to edit it directly.
  • list_branches: List Git branches available for a project’s repository, with optional query filtering. Returns the branch names, total count, and the deploy branch. Call this before checkout to attach to an existing branch by name.
  • get_session_state: Inspect the current branch, edited files, and pending navigation diff. On the deploy branch, lists only your changes.
  • diff: List all changes between the session and your deploy branch. Each changed file and docs.json entry includes authors and byYou. authors lists the members whose unpublished edits the entry contains. byYou is true when the entry includes your own edits. Use byYou to tell your changes apart from a colleague’s on a shared branch.
  • save: Open a pull request or commit to the session branch. If your project allows the agent to push to main and you have no branch protection rules, Mintlify auto-merges the PR. On the deploy branch, commits only your pending changes directly.
  • discard_session: Drop the session and its in-flight changes. On the deploy branch, reverts only your pending changes.

Example prompts

After you connect the admin MCP, you can drive it with natural-language prompts. For example:
  • “Check out a branch called add-billing-faq and create a new page under the FAQ group titled ‘Billing’. Draft answers for the five questions in this Linear issue.”
  • “Find every page that mentions the deprecated legacy_token field and update the example to use api_key instead. Save as a PR titled ‘docs: replace legacy_token references’.”
  • “Reorganize the API reference: move the webhooks pages into a new group called ‘Webhooks’ and update the icons to match the rest of the section.”

Best practices

checkout returns an editorUrl for the branch. create_node and save return an editorUrl for the page that changed. Open these links in a separate tab so you can watch the AI’s changes render live in the dashboard editor while you prompt.
The admin MCP is powerful enough to rewrite hundreds of pages in a single session. Before merging, read the PR diff and skim the rendered preview. Don’t rubber-stamp large changes.
Pass a slug to checkout (for example, add-quickstart) so the auto-generated branch is human-readable. Without it, the branch name derives from the session token and is hard to recognize in your repository.
Keep each session focused on one change. Smaller sessions produce pull requests that are easier to review and preserve agents’ context windows. Use discard_session and checkout again to pivot to unrelated work.
Sessions hold an in-memory branch on the Mintlify side. If you abandon a session without saving or discarding it, the branch persists until your next checkout overwrites it. Avoid leaving stale admin-mcp/* branches in your repository. Clean them up periodically.

Disconnect or revoke access

Disconnect the admin MCP when you no longer want an AI tool to edit your project, or when you want to force a fresh OAuth login.
  • Revoke the OAuth grant: In your Mintlify dashboard, navigate to Settings → Security & access → Connected apps and revoke the entry for the AI tool you connected. Revoking invalidates the tool’s access token within 30 seconds. After that, tool calls fail and the tool must complete a new OAuth login on the next call.
  • Remove the connector in the client:
    • Claude: Settings → Connectors, then remove the admin MCP entry.
    • Claude Code: claude mcp remove mintlify.
    • ChatGPT: Settings → Connectors, then remove the Mintlify entry.
    • Cursor: delete the mintlify entry from mcp.json and reload.
    • Codex: delete the [mcp_servers.mintlify] block from ~/.codex/config.toml.
Revoking the OAuth grant doesn’t affect pull requests the MCP has already opened. Close or revert those PRs in your Git provider if you want to undo pending changes.