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, updatedocs.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. Each content tool call names the branch it works on. Edits to your deploy branch land as unpublished changes, and edits to any other branch go through a pull request. They ship when you call publish or merge the pull request. 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.
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
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_configon 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.
publishopens 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 access those projects. An organization-wide connection can access any project in your organization. Connect your tools to the admin MCP from your dashboard or complete the following steps for your preferred tool.- Claude
- Claude Code
- ChatGPT
- Cursor
- Codex
1
Add the admin MCP as a custom connector
- Navigate to the Connectors page in the Claude settings.
- Click Add custom connector.
- Add the connector:
- Name: Admin MCP
- URL:
https://mcp.mintlify.com
- 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 editing works
Every content tool takes abranch argument. Tools that change content, such as edit_page, create_node, update_config, publish, and discard, require it. Read tools, such as read, search, list_nodes, status, and diff, default to your deploy branch when you omit it. The admin MCP doesn’t remember a branch between calls, so the AI tool passes branch every time. Requests on private pages don’t need a 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 use. Skip this step if your connection covers only a single project.2
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. On an organization-wide connection, pass subdomain to choose the project.Pass your deploy branch as branch to edit it directly. Edits land as unpublished changes. See Edit the deploy branch directly. If your project requires a pull request, Mintlify refuses the edit with a message that explains why and changes nothing. Call create_branch and pass the returned branchName as branch instead. See Work on a branch.3
Review the diff
Call
diff at any time to see exactly what changed on a branch compared to your deploy branch. Call status for a summary of edited files, changed docs.json keys, and navigation changes. Both report your deploy branch when you omit 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.4
Publish
Call
publish with the branch and a title to publish your edits. The admin MCP tells the AI tool to call publish only when you ask it to publish, ship, or merge, so your edits stay unpublished until you do. On your deploy branch, publish commits your own pending changes. On a branch, publish commits anything pending and returns the branch’s pull request, opening one if none exists. Calling it again with nothing new to commit returns the existing pull request. If there is nothing to commit and no pull request, publish returns no_pending_changes.publish doesn’t merge the pull request unless you pass merge: true. With merge: true, publish also merges the pull request into your deploy branch and returns merged: true. Mintlify only allows the merge when it would accept edits to your deploy branch directly. See Edit the deploy branch directly. Otherwise, publish returns merge_not_allowed with the reason and leaves the pull request open for review. Ask the AI tool to merge only when you want the changes to skip review.The response includes an editorUrl that opens the first created or updated page. If the changes only touch configuration, the link opens the branch. Older clients can still pass mode, but publish ignores it.5
Discard if needed
Call
discard with the branch to abandon your edits. What it removes depends on the branch. See Edit the deploy branch directly and Work on a branch.Edit the deploy branch directly
When nothing requires a pull request, pass your deploy branch asbranch and the admin MCP edits it the same way you do in the dashboard editor. You don’t call create_branch, 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.
publishpublishes only your changes. It 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.discardreverts only your changes. It returnsdiscardedChangeswith the number of changes it reverted. Other people’s changes and the branch itself stay untouched.statuslists only your changes.
publish publishes the whole page and discard reverts the whole page, including the other person’s edits.
Mintlify refuses edits to the deploy branch, and changes nothing, when any of the following is true:
- Push directly to your deploy branch is off in your publishing settings.
- 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.
- 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.
publish returns branch_protected and your changes stay pending. Open the dashboard editor to move them to a new branch.
Work on a branch
Callcreate_branch with a title when your project requires a pull request, or when you want one anyway. Mintlify starts a new branch off your deploy branch, names it <your-name>/<title-slug> the same way the dashboard editor names branches, and seeds it from your published content. The pull request opens with this title. For example, create_branch { subdomain: "acme", title: "Add tips page" }.
create_branch returns the branchName, the baseBranch and baseSha it started from, a note, and an editorUrl you can open to follow along in the dashboard editor. Pass the branchName as branch in every later call.
To work on an existing branch, pass its name as branch. Call list_branches to discover branches in a project’s repository. Mintlify refuses calls on branches that don’t exist.
On a branch, Mintlify commits your edits automatically, about 15 seconds after the last change. This includes page content, navigation changes, and docs.json updates. The first commit opens a pull request against your deploy branch. The pull request opens as a draft if Create draft pull requests by default is on. Nothing reaches your deploy branch until someone merges the pull request.
discard on a branch other than your deploy branch deletes the branch and closes its pull request, even if the branch has commits. This matches deleting a branch in the dashboard editor. discard only deletes branches you created in Mintlify. For any other branch, it refuses and changes nothing.
Publishing
The Publishing section on the MCP → Configure page in your dashboard sidebar controls whether the admin MCP can edit your deploy branch without a pull request. Toggle Push directly to your deploy branch on to let AI tools edit and publish to your deploy branch directly. Toggle it off to requirecreate_branch and a pull request for MCP edits.
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 go through 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.
Redirect URIs
Popular MCP clients such as Claude, ChatGPT, and Cursor can always complete the OAuth login. To let other clients connect, add their redirect domains in the Redirect URIs section of MCP → Configure. Enter a domain or custom scheme, such asmyapp://callback, in the Allowed domains field and click Add domain.
Allowed domains apply to both the admin MCP and your search MCP server.
Credentials
Credentials let AI apps and gateways connect to the admin MCP without an interactive sign-in. Use them for environments where a user can’t complete the OAuth login.- In your dashboard sidebar, click MCP, then click Credentials.
- Click Create credential.
- Copy the secret. The dashboard shows the secret only once.
What the admin MCP can do
Content
read: Fetch the full MDX of any page onbranch, or on your deploy branch when you omit it. Pass in a file path or UUID. To read a private page, pass itsprivate-page-<uuid>node ID fromlist_nodeswithvisibility: "private". Private reads don’t need abranchand 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 onbranch. Searches your deploy branch when you omit it.edit_page: Apply a targeted edit to a page. To edit a private page, pass itsprivate-page-<uuid>node ID aspath. Private edits require an OAuth session with an editor role or higher on the page and don’t need abranch.write_page: Overwrite a page’s full MDX content. Accepts aprivate-page-<uuid>node ID to overwrite a private page under the same OAuth and role requirements asedit_page. Usecreate_nodeto create a new private page.
Images
upload_image: Start uploading a local image file tobranch. Pass the destinationpath(for example,images/dashboard.png), the file’scontentType, and its exactsizein bytes. Returns anuploadId, a presigneduploadUrl, and theheadersto send with the upload.finalize_image_upload: Save the uploaded image tobranch. Pass theuploadIdand the samepath. Returns thesrcto reference in MDX withedit_pageorwrite_page, or in thelogoorfaviconfields ofdocs.jsonwithupdate_config.
upload_image, the AI tool uploads the file bytes to uploadUrl with a PUT request and the returned headers. For example:
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 status and publish with your other edits when you call publish.
Comments
Work with the comments and suggestions that your team leaves in the dashboard editor.read_comments: List the open comment and suggestion threads on a page, oldest first. Passpathin the same forms asread. Each thread includes athreadId, itstype(commentorsuggestion), thequotedTextit’s anchored to, thesuggestedTextfor suggestions, and itscommentswith eachauthor,content, andcreatedAt. If the anchored text no longer exists on the page, the thread includesanchorRemoved: trueandquotedTextshows the original quote. Reads threads onbranch, or on your deploy branch when you omit it.add_comment: Start a new comment thread on a page without changing its content. Use it to leave feedback for your team instead of editing. Passpathin the same forms asread, thecontentof the comment, andquotedText: the smallest unique span of visible text to anchor to, within one paragraph or heading. Use rendered words, not Markdown or MDX syntax. For example, quotecustom domain, not[custom domain](/path). Returns the newthreadId. If the text isn’t on the page, the error isno_match. If it matches more than once, the error isnot_unique, so quote a longer span.suggest_edit: Propose a tracked-changes suggestion on a page instead of editing it. The original text stays on the page with a strikethrough and the replacement appears alongside it. Nothing changes until someone accepts or rejects the suggestion in the dashboard editor. Passpathin the same forms asread,oldString, andnewString.oldStringis the smallest unique span of visible text to replace, within one paragraph or heading. Use rendered words, not Markdown or MDX syntax. Pass an emptynewStringto suggest a deletion, and an optionalnoteto explain the change. Returns the newthreadIdwith theoriginalTextandsuggestedText, trimmed to the span that changes. If the same suggestion is already open, the response includesalreadyExists: trueand the existingthreadId. Theno_matchandnot_uniqueerrors work as they do foradd_comment. The error isno_changewhen both strings are the same, andconflicting_annotationwhen the text overlaps another open suggestion.reply_to_comment: Reply to a thread bythreadIdwithcontent. Passresolve: trueto also resolve the thread. Mintlify posts the reply as the agent on behalf of the authorizing user, and it appears live in the dashboard editor.resolve_comment: Resolve a thread without replying.
add_comment, suggest_edit, reply_to_comment, and resolve_comment require an OAuth session and a branch. They act on the threads left on that branch, and work on your deploy branch even when edits to it require a pull request. You can reply to suggestion threads, but you must accept or reject suggestions in the editor. Comments on private pages aren’t available through the admin MCP.
Navigation
list_nodes: Walk the navigation tree ofbranch, or of your deploy branch when you omit it, with optional filters. Filter byparentId(userecursive: trueto include all descendants), one or more node types, or any division scope:language,version,tab,dropdown,anchor,product, oritem. Results paginate through an opaquecursor. Passvisibility: "private"to list the private pages and folders the OAuth user can access instead of the branch navigation tree. Private listing ignoresbranchand the other filters, and returns each node’srole.create_node: Add a new page, group, tab, anchor, version, language, product, or dropdown. Passvisibility: "private"withdata.type: "page"ordata.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, doesn’t need abranch, and places the node at the private root or under an existingprivate-folder-<uuid>parent. For new pages, the response includes aneditorUrlthat 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 aprivate-page-<uuid>orprivate-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 don’t need abranch.move_node: Move a node, including renaming a page’s path.delete_node: Remove a node from the navigation. Accepts aprivate-page-<uuid>orprivate-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 don’t need abranch.
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 publish.
Configuration
update_config: Modifydocs.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 act on the live project, not on a branch. Each tool takes asubdomain 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:
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 withrequest.report. Large results paginate withmaxRowsandrowOffset. For custom queries, usequery_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.
update_deployment_settings: Change one dashboard setting, such asnoindex,base_path,name,disable_ai_chat,search_settings,privacy,custom_scripts, or an add-on. Useupdate_configfordocs.jsonsettings.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.
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.
Branches and publishing
list_deployments: List the projects your connection can access, returning each{subdomain, name}. Call this to discover whichsubdomainto pass.create_branch: Start a new branch off your deploy branch with atitlethat also names its pull request. Returns thebranchNameto pass asbranch. See Work on a branch. You don’t need it to edit the deploy branch directly.list_branches: List Git branches available for a project’s repository, with optionalqueryfiltering. Returns the branch names, total count, and the deploy branch. Pass any of them asbranch.status: List the edited files, changeddocs.jsonkeys, and pending navigation diff onbranch, or on your deploy branch when you omit it. On the deploy branch, lists only your changes.diff: List all changes betweenbranchand your deploy branch. Each changed file anddocs.jsonentry includesauthorsandbyYou.authorslists the members whose unpublished edits the entry contains.byYouistruewhen the entry includes your own edits. UsebyYouto tell your changes apart from a colleague’s on a shared branch.publish: On the deploy branch, commit only your pending changes directly. On a branch, commit pending changes and return the branch’s pull request, opening one if needed. Passmerge: trueto also merge the pull request when edits to the deploy branch are allowed.discard: Abandon the edits onbranch. On the deploy branch, reverts only your pending changes. On another branch you created, deletes the branch and closes its pull request.
Example prompts
After you connect the admin MCP, you can drive it with natural-language prompts. For example:- “Start a branch titled ‘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_tokenfield and update the example to useapi_keyinstead. Publish it 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.”
- “Read the open comments on the quickstart page, make the requested edits, and reply to each thread, resolving it once addressed.”
Best practices
Open the editor URL
Open the editor URL
create_branch returns an editorUrl for the branch. create_node and publish 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.Review every PR
Review every PR
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.
Keep branches focused
Keep branches focused
Keep each branch focused on one change. Smaller branches produce pull requests that are easier to review and preserve agents’ context windows. Call
create_branch again to start unrelated work.If you abandon a branch you started with
create_branch without discarding it, the branch and its pull request stay in your repository. Call discard to delete a branch you no longer need, or close its pull request.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.
- Delete a credential: To revoke access for an AI app or gateway that uses a credential, go to MCP → Credentials in your dashboard sidebar and delete it.
- 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
mintlifyentry frommcp.jsonand reload. - Codex: delete the
[mcp_servers.mintlify]block from~/.codex/config.toml.