{"Status":true,"Message":"","Response":{"post":{"postuid":"326ba3ec-e5a5-41ec-97fc-bc0bf8b6975d","tenantuid":"d8b744fc-2e70-4089-bb80-dd1d08f6c7b2","projectuid":"fc6490ac-7527-4f49-b06e-46f701280e85","title":"Model Context Protocol Endpoints","slug":"model-context-protocol-endpoints","html":"\u003Cp\u003EHelpGuides exposes a set of \u003Ca href=\u0022/article/model-context-protocol\u0022\u003EModel Context Protocol (MCP)\u003C/a\u003E 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.\u003C/p\u003E\u003Ch2 id=\u0022endpoint\u0022\u003EEndpoint\u003C/h2\u003E\u003Cfigure\u003E\u003Cimg class=\u0022lazy-load\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/fc6490ac-7527-4f49-b06e-46f701280e85/images/335d2d8b5780455ba153aa995f951576.png?v=676174577\u0022 data-width=\u00221150\u0022 data-height=\u0022640\u0022 style=\u0022max-width: 100%;\u0022 alt=\u0022AI Settings Model Context Protocol tab with the MCP URL\u0022/\u003E\u003Cfigcaption\u003EFinding your MCP URL\u003C/figcaption\u003E\u003C/figure\u003E\u003Cp\u003EEach project has its own MCP endpoint on its site\u0027s domain:\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022text\u0022\u003Ehttps://YOUR-DOMAIN/mcp\u003C/div\u003E\u003C/div\u003E\u003Cp\u003ECopy it from \u003Cb\u003EAI Settings\u003C/b\u003E on the \u003Cb\u003EModel Context Protocol\u003C/b\u003E tab. The endpoint uses the Streamable HTTP transport. When \u003Cb\u003EEnable Model Context Protocol\u003C/b\u003E is off, it returns \u003Ccode\u003E404\u003C/code\u003E. See \u003Ca href=\u0022/article/ai-settings\u0022\u003EAI Settings\u003C/a\u003E.\u003C/p\u003E\u003Ch2 id=\u0022authentication\u0022\u003EAuthentication\u003C/h2\u003E\u003Cp\u003EThe endpoint uses OAuth 2.1. MCP clients such as Claude and ChatGPT handle this for you:\u003C/p\u003E\u003Col\u003E\u003Cli\u003EA request without a valid token gets \u003Ccode\u003E401\u003C/code\u003E with a \u003Ccode\u003EWWW-Authenticate\u003C/code\u003E header pointing to \u003Ccode\u003E/.well-known/oauth-protected-resource\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EThe client registers itself using dynamic client registration and sends you to HelpGuides to sign in.\u003C/li\u003E\u003Cli\u003EHelpGuides asks you to \u003Cb\u003EApprove\u003C/b\u003E or \u003Cb\u003EDeny\u003C/b\u003E the client\u0027s access to search and read your articles, create and update draft articles, and publish articles.\u003C/li\u003E\u003Cli\u003EThe client receives an access token, valid for one hour, and a refresh token it uses to get new ones.\u003C/li\u003E\u003C/ol\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EEndpoint\u003C/th\u003E\u003Cth\u003EURL\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003EProtected resource metadata\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ehttps://YOUR-DOMAIN/.well-known/oauth-protected-resource\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EAuthorization server metadata\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ehttps://helpguides.io/.well-known/oauth-authorization-server\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EClient registration\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ehttps://helpguides.io/oauth/register\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EAuthorization\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ehttps://helpguides.io/oauth/authorize\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EToken\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ehttps://helpguides.io/oauth/token\u003C/code\u003E\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EAuthorization uses PKCE with \u003Ccode\u003ES256\u003C/code\u003E. Send the access token as \u003Ccode\u003EAuthorization: Bearer ACCESS_TOKEN\u003C/code\u003E. A token only works for projects in the HelpGuides account that approved it; using it on another account\u0027s project returns \u003Ccode\u003E403\u003C/code\u003E. The MCP endpoint accepts only these OAuth access tokens, not API keys.\u003C/p\u003E\u003Ch2 id=\u0022working_copies\u0022\u003EWorking copies\u003C/h2\u003E\u003Cp\u003EEdits made through MCP don\u0027t change the live article. \u003Ccode\u003Eupdate_article\u003C/code\u003E, \u003Ccode\u003Eupdate_article_blocks\u003C/code\u003E and \u003Ccode\u003Eadd_image_to_article\u003C/code\u003E save a working copy by default (\u003Ccode\u003EsaveAsWorkingCopy\u003C/code\u003E is \u003Ccode\u003Etrue\u003C/code\u003E), and each edit builds on the working copy left by the one before.\u003C/p\u003E\u003Cul\u003E\u003Cli\u003E\u003Ccode\u003Eget_article\u003C/code\u003E returns the working copy when there is one, with \u003Ccode\u003Ehas_working_copy: true\u003C/code\u003E. Always use the block IDs it returns.\u003C/li\u003E\u003Cli\u003E\u003Ccode\u003Epublish_article\u003C/code\u003E makes the working copy live.\u003C/li\u003E\u003Cli\u003ESetting \u003Ccode\u003EsaveAsWorkingCopy\u003C/code\u003E to \u003Ccode\u003Efalse\u003C/code\u003E saves straight to the article, including a published one.\u003C/li\u003E\u003C/ul\u003E\u003Ch2 id=\u0022tools\u0022\u003ETools\u003C/h2\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003ETool\u003C/th\u003E\u003Cth\u003EWhat it does\u003C/th\u003E\u003Cth\u003EChanges content\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_whoami\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ENames the connected project and site, and summarizes what the tools can do. Call it first.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_instructions\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReturns usage rules and workflow guidance, plus your project\u0027s Prompt Instructions.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_block_schema\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReturns the JSON structure of every block type.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Esearch\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ESearches articles.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_article\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReturns an article\u0027s blocks, or its working copy.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ecreate_article\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ECreates a draft article.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eupdate_article\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReplaces an article\u0027s title and/or all its blocks.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eupdate_article_blocks\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EUpdates, inserts or deletes individual blocks.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epublish_article\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EPublishes or schedules an article.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_categories\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ELists categories.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eset_category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EAssigns an article to a category.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ecreate_category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ECreates a category.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eupdate_category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ERenames, describes or moves a category.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ebuild_links\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EAdds links to an article from related published articles.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_stale_articles\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ELists articles past their stale date.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_articles_with_open_comments\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ELists articles with open review comments.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Elist_agent_comments\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ELists every open review comment.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_comments\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReturns an article\u0027s review comments.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eresolve_comment\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EMarks a review comment resolved.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Edismiss_comment\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EDismisses a review comment.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ecreate_image_upload\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EStarts an image upload.\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Efinish_image_upload\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EChecks and publishes an uploaded image.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eadd_image_to_article\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EInserts an image block into an article.\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EEvery tool that takes \u003Ccode\u003Epostuid_or_url\u003C/code\u003E accepts either the article\u0027s postuid or its full URL. Tools return JSON; a failure returns \u003Ccode\u003E{\u0022error\u0022: \u0022...\u0022}\u003C/code\u003E.\u003C/p\u003E\u003Ch2 id=\u0022project_and_guidance\u0022\u003EProject and guidance\u003C/h2\u003E\u003Cp\u003E\u003Ccode\u003Eget_whoami\u003C/code\u003E, \u003Ccode\u003Eget_instructions\u003C/code\u003E and \u003Ccode\u003Eget_block_schema\u003C/code\u003E take no parameters. \u003Ccode\u003Eget_instructions\u003C/code\u003E ends with anything you\u0027ve entered under \u003Cb\u003EPrompt Instructions\u003C/b\u003E in \u003Ca href=\u0022/article/ai-settings\u0022\u003EAI Settings\u003C/a\u003E. \u003Ccode\u003Eget_block_schema\u003C/code\u003E describes each block type (paragraph, header, list, checklist, table, image, code, quote, callout, faq, raw, video, file, subcategories, hr and api).\u003C/p\u003E\u003Ch3 id=\u0022search\u0022\u003Esearch\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Es\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EWhat to search for. Start with \u003Ccode\u003Ekeyword:\u003C/code\u003E to match exact words instead of meaning.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Elimit\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Einteger\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003ENumber of results. Default 10, maximum 25.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EResults 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.\u003C/p\u003E\u003Ch3 id=\u0022get_article\u0022\u003Eget_article\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe article\u0027s postuid or full URL.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EReturns \u003Ccode\u003Epostuid\u003C/code\u003E, \u003Ccode\u003Etitle\u003C/code\u003E, \u003Ccode\u003Eblocks\u003C/code\u003E (with their IDs), \u003Ccode\u003Estatus\u003C/code\u003E and \u003Ccode\u003Ehas_working_copy\u003C/code\u003E.\u003C/p\u003E\u003Ch2 id=\u0022create_and_edit\u0022\u003ECreate and edit\u003C/h2\u003E\u003Ch3 id=\u0022create_article\u0022\u003Ecreate_article\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Etitle\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe article\u0027s title. The slug is made from it.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eblocks\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Earray\u003C/td\u003E\u003Ctd\u003EOne of \u003Ccode\u003Eblocks\u003C/code\u003E or \u003Ccode\u003Ehtml\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EThe body as Editor.js blocks. Preferred.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ehtml\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EOne of \u003Ccode\u003Eblocks\u003C/code\u003E or \u003Ccode\u003Ehtml\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EThe body as HTML, converted to blocks. Used only when \u003Ccode\u003Eblocks\u003C/code\u003E is missing.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EAlways creates a draft. Returns the new \u003Ccode\u003Epostuid\u003C/code\u003E and an \u003Ccode\u003Eedit_url\u003C/code\u003E for the editor.\u003C/p\u003E\u003Ch3 id=\u0022update_article\u0022\u003Eupdate_article\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe article\u0027s postuid or full URL.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Etitle\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes (may be empty)\u003C/td\u003E\u003Ctd\u003EThe new title. Leave empty to keep the current one.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eblocks\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Earray\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EA complete set of blocks that replaces all existing blocks. Omit to change only the title.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003EsaveAsWorkingCopy\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Eboolean\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EDefault \u003Ccode\u003Etrue\u003C/code\u003E. See Working copies.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ch3 id=\u0022update_article_blocks\u0022\u003Eupdate_article_blocks\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe article\u0027s postuid or full URL.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eoperations\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Earray\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EEdits applied in order. Each has \u003Ccode\u003Eaction\u003C/code\u003E, \u003Ccode\u003Eblock\u003C/code\u003E and \u003Ccode\u003EtargetBlockId\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003EsaveAsWorkingCopy\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Eboolean\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EDefault \u003Ccode\u003Etrue\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EAction\u003C/th\u003E\u003Cth\u003EWhat it does\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eupdate\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReplaces the block with ID \u003Ccode\u003EtargetBlockId\u003C/code\u003E with \u003Ccode\u003Eblock\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Einsert\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EInserts \u003Ccode\u003Eblock\u003C/code\u003E before \u003Ccode\u003EtargetBlockId\u003C/code\u003E, or at the end when \u003Ccode\u003EtargetBlockId\u003C/code\u003E is null. To insert several blocks in order, target the same block with each insert.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Edelete\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ERemoves the block with ID \u003Ccode\u003EtargetBlockId\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n  \u0026quot;postuid_or_url\u0026quot;: \u0026quot;https://docs.example.com/article/getting-started\u0026quot;,\n  \u0026quot;operations\u0026quot;: [\n    {\n      \u0026quot;action\u0026quot;: \u0026quot;update\u0026quot;,\n      \u0026quot;targetBlockId\u0026quot;: \u0026quot;a1b2c3d4-e5f6-7890-abcd-ef1234567890\u0026quot;,\n      \u0026quot;block\u0026quot;: { \u0026quot;type\u0026quot;: \u0026quot;paragraph\u0026quot;, \u0026quot;data\u0026quot;: { \u0026quot;text\u0026quot;: \u0026quot;Updated text.\u0026quot; } }\n    },\n    {\n      \u0026quot;action\u0026quot;: \u0026quot;insert\u0026quot;,\n      \u0026quot;targetBlockId\u0026quot;: null,\n      \u0026quot;block\u0026quot;: { \u0026quot;type\u0026quot;: \u0026quot;header\u0026quot;, \u0026quot;data\u0026quot;: { \u0026quot;text\u0026quot;: \u0026quot;Next steps\u0026quot;, \u0026quot;level\u0026quot;: 2 } }\n    }\n  ]\n}\u003C/div\u003E\u003C/div\u003E\u003Cp\u003ENew block IDs must be UUIDs in the standard \u003Ccode\u003E8-4-4-4-12\u003C/code\u003E format, or left out so one is generated.\u003C/p\u003E\u003Ch3 id=\u0022publish_article\u0022\u003Epublish_article\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe article\u0027s postuid or full URL.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epublish_date\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EAn ISO 8601 date and time with a UTC offset, such as \u003Ccode\u003E2026-03-17T15:00:00-05:00\u003C/code\u003E. A future time schedules the article instead of publishing it now.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EPromotes any working copy. Returns the \u003Ccode\u003Estatus\u003C/code\u003E, the public \u003Ccode\u003Eurl\u003C/code\u003E and \u003Ccode\u003EpromotedWorkingCopy\u003C/code\u003E.\u003C/p\u003E\u003Ch2 id=\u0022categories\u0022\u003ECategories\u003C/h2\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003ETool\u003C/th\u003E\u003Cth\u003EParameters\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_categories\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ENone. Returns each category\u0027s \u003Ccode\u003Ecategoryuid\u003C/code\u003E, name and description.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eset_category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E and \u003Ccode\u003Ecategoryuid\u003C/code\u003E (both required).\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ecreate_category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ename\u003C/code\u003E (required), \u003Ccode\u003Edescription\u003C/code\u003E and \u003Ccode\u003Eparentuid\u003C/code\u003E for a subcategory. Returns the new \u003Ccode\u003Ecategoryuid\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eupdate_category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ecategoryuid\u003C/code\u003E (required), and any of \u003Ccode\u003Ename\u003C/code\u003E, \u003Ccode\u003Edescription\u003C/code\u003E and \u003Ccode\u003Eparentuid\u003C/code\u003E. Empty values keep what\u0027s there.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ch2 id=\u0022links_and_stale_articles\u0022\u003ELinks and stale articles\u003C/h2\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003ETool\u003C/th\u003E\u003Cth\u003EParameters\u003C/th\u003E\u003Cth\u003ENotes\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ebuild_links\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E (required)\u003C/td\u003E\u003Ctd\u003EThe 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 \u003Ca href=\u0022/article/ai-writing-tools\u0022\u003EAI Writing Tools\u003C/a\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_stale_articles\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Elimit\u003C/code\u003E (default 50)\u003C/td\u003E\u003Ctd\u003EArticles whose \u003Cb\u003EDate Stale\u003C/b\u003E is today or earlier, with their status, status notes and URL.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ch2 id=\u0022review_comments\u0022\u003EReview comments\u003C/h2\u003E\u003Cp\u003EThese tools let an agent act on instructions left in the editor\u0027s \u003Cb\u003EReview\u003C/b\u003E tab. See \u003Ca href=\u0022/article/review-comments-and-ai-agents\u0022\u003EReview Comments and AI Agents\u003C/a\u003E.\u003C/p\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003ETool\u003C/th\u003E\u003Cth\u003EParameters\u003C/th\u003E\u003Cth\u003ENotes\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_articles_with_open_comments\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Elimit\u003C/code\u003E (default 50)\u003C/td\u003E\u003Ctd\u003EArticles with open comments and how many each has.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Elist_agent_comments\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Elimit\u003C/code\u003E (default 100)\u003C/td\u003E\u003Ctd\u003EEvery open comment with its article, oldest first.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eget_comments\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E (required)\u003C/td\u003E\u003Ctd\u003EAll comments on one article, open, resolved and dismissed, newest first.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eresolve_comment\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ecommentuid\u003C/code\u003E (required), \u003Ccode\u003Eresolution_notes\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EMarks the comment resolved by Cowork. Can post to Slack when \u003Cb\u003ENotify on Cowork updates\u003C/b\u003E is on.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Edismiss_comment\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Ecommentuid\u003C/code\u003E (required), \u003Ccode\u003Eresolution_notes\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ECloses the comment without edits. Never posts to Slack.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ch2 id=\u0022images\u0022\u003EImages\u003C/h2\u003E\u003Cp\u003EAdding an image takes three tools, so the image itself never passes through the conversation:\u003C/p\u003E\u003Col\u003E\u003Cli\u003E\u003Ccode\u003Ecreate_image_upload\u003C/code\u003E (no parameters) returns an \u003Ccode\u003EuploadId\u003C/code\u003E and a write-only \u003Ccode\u003EuploadUrl\u003C/code\u003E that\u0027s valid for 10 minutes.\u003C/li\u003E\u003Cli\u003EThe client uploads the file with an HTTP PUT that includes the header \u003Ccode\u003Ex-ms-blob-type: BlockBlob\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003E\u003Ccode\u003Efinish_image_upload\u003C/code\u003E with \u003Ccode\u003Eupload_id\u003C/code\u003E checks the file is a PNG, JPEG, GIF or WebP under 5 MB, publishes it and returns its public \u003Ccode\u003Eurl\u003C/code\u003E, \u003Ccode\u003Ewidth\u003C/code\u003E and \u003Ccode\u003Eheight\u003C/code\u003E. Each upload can be finished once.\u003C/li\u003E\u003C/ol\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022sh\u0022\u003Ecurl -sS -X PUT -H \u0026quot;x-ms-blob-type: BlockBlob\u0026quot; --data-binary @screenshot.png \u0026quot;UPLOAD_URL\u0026quot;\u003C/div\u003E\u003C/div\u003E\u003Cp\u003EThen \u003Ccode\u003Eadd_image_to_article\u003C/code\u003E inserts it:\u003C/p\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EParameter\u003C/th\u003E\u003Cth\u003EType\u003C/th\u003E\u003Cth\u003ERequired\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epostuid_or_url\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe article\u0027s postuid or full URL.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eimage_url\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EThe https URL from \u003Ccode\u003Efinish_image_upload\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ealt_text\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003EYes\u003C/td\u003E\u003Ctd\u003EWhat the image shows.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ecaption\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EText shown under the image.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Einsert_before_block_id\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Estring\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EThe block to insert before. Omit to add the image at the end.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Ewidth\u003C/code\u003E, \u003Ccode\u003Eheight\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Einteger\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EPixel size from \u003Ccode\u003Efinish_image_upload\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003EsaveAsWorkingCopy\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003Eboolean\u003C/td\u003E\u003Ctd\u003ENo\u003C/td\u003E\u003Ctd\u003EDefault \u003Ccode\u003Etrue\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Ch2 id=\u0022recommended_workflow\u0022\u003ERecommended workflow\u003C/h2\u003E\u003Col\u003E\u003Cli\u003ECall \u003Ccode\u003Eget_whoami\u003C/code\u003E and \u003Ccode\u003Eget_instructions\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ECall \u003Ccode\u003Esearch\u003C/code\u003E to find existing articles before writing a new one.\u003C/li\u003E\u003Cli\u003ECall \u003Ccode\u003Eget_block_schema\u003C/code\u003E, then \u003Ccode\u003Ecreate_article\u003C/code\u003E, or \u003Ccode\u003Eget_article\u003C/code\u003E followed by \u003Ccode\u003Eupdate_article_blocks\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003ECall \u003Ccode\u003Eget_categories\u003C/code\u003E and \u003Ccode\u003Eset_category\u003C/code\u003E.\u003C/li\u003E\u003Cli\u003EReview the draft or working copy in HelpGuides, then publish it in the editor or with \u003Ccode\u003Epublish_article\u003C/code\u003E.\u003C/li\u003E\u003C/ol\u003E\u003Cp\u003ETo connect an assistant, see \u003Ca href=\u0022/article/adding-helpguides-to-claude-as-an-mcp-connector\u0022\u003EAdd Claude as an MCP Connector\u003C/a\u003E and \u003Ca href=\u0022/article/add-chatgpt-as-an-mcp-connector\u0022\u003EAdd ChatGPT as an MCP Connector\u003C/a\u003E.\u003C/p\u003E","publish_status":0,"post_type":"Article","authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d","author":{"authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d"},"featured_image_updating":false,"meta_description":"Meta description cannot be generated because the HTML body content is empty. Please provide text for an optimized summary.","display_toc":true,"has_workingcopy":false,"allow_indexing":true,"total_views":151,"date_published":"2026-03-16T14:15:00","date_updated":"2026-10-04T21:47:35.78","date_created":"2026-03-16T14:13:41.153"}}}