Model Context Protocol Endpoints

HelpGuides exposes a set of Model Context Protocol (MCP) tools that let AI assistants and agents search, read, write and manage the documentation in your project. This article lists every tool and its parameters.

Endpoint

AI Settings Model Context Protocol tab with the MCP URL
Finding your MCP URL

Each project has its own MCP endpoint on its site's domain:

https://YOUR-DOMAIN/mcp

Copy it from AI Settings on the Model Context Protocol tab. The endpoint uses the Streamable HTTP transport. When Enable Model Context Protocol is off, it returns 404. See AI Settings.

Authentication

The endpoint uses OAuth 2.1. MCP clients such as Claude and ChatGPT handle this for you:

  1. A request without a valid token gets 401 with a WWW-Authenticate header pointing to /.well-known/oauth-protected-resource.
  2. The client registers itself using dynamic client registration and sends you to HelpGuides to sign in.
  3. HelpGuides asks you to Approve or Deny the client's access to search and read your articles, create and update draft articles, and publish articles.
  4. The client receives an access token, valid for one hour, and a refresh token it uses to get new ones.
EndpointURL
Protected resource metadatahttps://YOUR-DOMAIN/.well-known/oauth-protected-resource
Authorization server metadatahttps://helpguides.io/.well-known/oauth-authorization-server
Client registrationhttps://helpguides.io/oauth/register
Authorizationhttps://helpguides.io/oauth/authorize
Tokenhttps://helpguides.io/oauth/token

Authorization uses PKCE with S256. Send the access token as Authorization: Bearer ACCESS_TOKEN. A token only works for projects in the HelpGuides account that approved it; using it on another account's project returns 403. The MCP endpoint accepts only these OAuth access tokens, not API keys.

Working copies

Edits made through MCP don't change the live article. update_article, update_article_blocks and add_image_to_article save a working copy by default (saveAsWorkingCopy is true), and each edit builds on the working copy left by the one before.

Tools

ToolWhat it doesChanges content
get_whoamiNames the connected project and site, and summarizes what the tools can do. Call it first.No
get_instructionsReturns usage rules and workflow guidance, plus your project's Prompt Instructions.No
get_block_schemaReturns the JSON structure of every block type.No
searchSearches articles.No
get_articleReturns an article's blocks, or its working copy.No
create_articleCreates a draft article.Yes
update_articleReplaces an article's title and/or all its blocks.Yes
update_article_blocksUpdates, inserts or deletes individual blocks.Yes
publish_articlePublishes or schedules an article.Yes
get_categoriesLists categories.No
set_categoryAssigns an article to a category.Yes
create_categoryCreates a category.Yes
update_categoryRenames, describes or moves a category.Yes
build_linksAdds links to an article from related published articles.Yes
get_stale_articlesLists articles past their stale date.No
get_articles_with_open_commentsLists articles with open review comments.No
list_agent_commentsLists every open review comment.No
get_commentsReturns an article's review comments.No
resolve_commentMarks a review comment resolved.Yes
dismiss_commentDismisses a review comment.Yes
create_image_uploadStarts an image upload.No
finish_image_uploadChecks and publishes an uploaded image.Yes
add_image_to_articleInserts an image block into an article.Yes

Every tool that takes postuid_or_url accepts either the article's postuid or its full URL. Tools return JSON; a failure returns {"error": "..."}.

Project and guidance

get_whoami, get_instructions and get_block_schema take no parameters. get_instructions ends with anything you've entered under Prompt Instructions in AI Settings. get_block_schema describes each block type (paragraph, header, list, checklist, table, image, code, quote, callout, faq, raw, video, file, subcategories, hr and api).

ParameterTypeRequiredDescription
sstringYesWhat to search for. Start with keyword: to match exact words instead of meaning.
limitintegerNoNumber of results. Default 10, maximum 25.

Results include drafts as well as published articles. Each result has the postuid, title, slug, status, the matching section and an excerpt, so the same article can appear more than once.

get_article

ParameterTypeRequiredDescription
postuid_or_urlstringYesThe article's postuid or full URL.

Returns postuid, title, blocks (with their IDs), status and has_working_copy.

Create and edit

create_article

ParameterTypeRequiredDescription
titlestringYesThe article's title. The slug is made from it.
blocksarrayOne of blocks or htmlThe body as Editor.js blocks. Preferred.
htmlstringOne of blocks or htmlThe body as HTML, converted to blocks. Used only when blocks is missing.

Always creates a draft. Returns the new postuid and an edit_url for the editor.

update_article

ParameterTypeRequiredDescription
postuid_or_urlstringYesThe article's postuid or full URL.
titlestringYes (may be empty)The new title. Leave empty to keep the current one.
blocksarrayNoA complete set of blocks that replaces all existing blocks. Omit to change only the title.
saveAsWorkingCopybooleanNoDefault true. See Working copies.

update_article_blocks

ParameterTypeRequiredDescription
postuid_or_urlstringYesThe article's postuid or full URL.
operationsarrayYesEdits applied in order. Each has action, block and targetBlockId.
saveAsWorkingCopybooleanNoDefault true.
ActionWhat it does
updateReplaces the block with ID targetBlockId with block.
insertInserts block before targetBlockId, or at the end when targetBlockId is null. To insert several blocks in order, target the same block with each insert.
deleteRemoves the block with ID targetBlockId.
{ "postuid_or_url": "https://docs.example.com/article/getting-started", "operations": [ { "action": "update", "targetBlockId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "block": { "type": "paragraph", "data": { "text": "Updated text." } } }, { "action": "insert", "targetBlockId": null, "block": { "type": "header", "data": { "text": "Next steps", "level": 2 } } } ] }

New block IDs must be UUIDs in the standard 8-4-4-4-12 format, or left out so one is generated.

publish_article

ParameterTypeRequiredDescription
postuid_or_urlstringYesThe article's postuid or full URL.
publish_datestringNoAn ISO 8601 date and time with a UTC offset, such as 2026-03-17T15:00:00-05:00. A future time schedules the article instead of publishing it now.

Promotes any working copy. Returns the status, the public url and promotedWorkingCopy.

Categories

ToolParameters
get_categoriesNone. Returns each category's categoryuid, name and description.
set_categorypostuid_or_url and categoryuid (both required).
create_categoryname (required), description and parentuid for a subcategory. Returns the new categoryuid.
update_categorycategoryuid (required), and any of name, description and parentuid. Empty values keep what's there.
ToolParametersNotes
build_linkspostuid_or_url (required)The article must be published. Finds related published articles and adds a link to this article in up to 5 of them, then lists what changed. See AI Writing Tools.
get_stale_articleslimit (default 50)Articles whose Date Stale is today or earlier, with their status, status notes and URL.

Review comments

These tools let an agent act on instructions left in the editor's Review tab. See Review Comments and AI Agents.

ToolParametersNotes
get_articles_with_open_commentslimit (default 50)Articles with open comments and how many each has.
list_agent_commentslimit (default 100)Every open comment with its article, oldest first.
get_commentspostuid_or_url (required)All comments on one article, open, resolved and dismissed, newest first.
resolve_commentcommentuid (required), resolution_notesMarks the comment resolved by Cowork. Can post to Slack when Notify on Cowork updates is on.
dismiss_commentcommentuid (required), resolution_notesCloses the comment without edits. Never posts to Slack.

Images

Adding an image takes three tools, so the image itself never passes through the conversation:

  1. create_image_upload (no parameters) returns an uploadId and a write-only uploadUrl that's valid for 10 minutes.
  2. The client uploads the file with an HTTP PUT that includes the header x-ms-blob-type: BlockBlob.
  3. finish_image_upload with upload_id checks the file is a PNG, JPEG, GIF or WebP under 5 MB, publishes it and returns its public url, width and height. Each upload can be finished once.
curl -sS -X PUT -H "x-ms-blob-type: BlockBlob" --data-binary @screenshot.png "UPLOAD_URL"

Then add_image_to_article inserts it:

ParameterTypeRequiredDescription
postuid_or_urlstringYesThe article's postuid or full URL.
image_urlstringYesThe https URL from finish_image_upload.
alt_textstringYesWhat the image shows.
captionstringNoText shown under the image.
insert_before_block_idstringNoThe block to insert before. Omit to add the image at the end.
width, heightintegerNoPixel size from finish_image_upload.
saveAsWorkingCopybooleanNoDefault true.
  1. Call get_whoami and get_instructions.
  2. Call search to find existing articles before writing a new one.
  3. Call get_block_schema, then create_article, or get_article followed by update_article_blocks.
  4. Call get_categories and set_category.
  5. Review the draft or working copy in HelpGuides, then publish it in the editor or with publish_article.

To connect an assistant, see Add Claude as an MCP Connector and Add ChatGPT as an MCP Connector.