A TypeScript implementation of a simple MCP server that exposes datetime information to agentic systems and chat REPLs
HelpCenter.io for agents is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Without an account, an AI agent can create or migrate a help center and hand its user a claim link.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http helpcenter-io-for-agents-mcp https://mcp.helpcenter.io/agent
# 2 — ask your agent for something these tools do
# helpcenter_create_help_center, helpcenter_request_migration, helpcenter_get_migration_request and 57 more
HelpCenter.io for agents costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http helpcenter-io-for-agents-mcp https://mcp.helpcenter.io/agentReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
60 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Create a new HelpCenter.io help center for the user, with no account and no sign-in: the first step of building or migrating a help center for someone who does not have HelpCenter.io yet. What it returns (also as structuredContent): site_id, subdomain, api_key, claim_url, expires_at, limits, docs_url. - api_key: this help center's agent key, shown ONLY in this result. Every other tool here that
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | The help center's name, usually the user's product or company. A name containing a protected brand name is refused (name_blocked). |
| source_url | string | no | The https address of the knowledge base you are migrating, if any. Kept for HelpCenter.io's migration team and used as the default source of a migration request; never fetched by this call. |
| language | string | no | The help center's default language, as a locale code: 'en' (the default), 'de', 'pt-BR', 'zh-Hans'... |
File a migration request: HelpCenter.io moves one or more knowledge bases (up to 50) into HelpCenter.io for the user, within 24 hours. Needs no agent_key and no account. Use it when a knowledge base is too big to fill yourself (more than 500 articles), when helpcenter_create_help_center answers limit_reached or capacity_reached, when helpcenter_scan_import cannot read the source, or when the user
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | The user's email address, for HelpCenter.io's migration team only: a person on the team may write to it about the migration. Nothing is sent to it automatically. Ask the user for it; never guess one. | |
| sources | array | yes | The knowledge bases to migrate, 1 to 50, one help center each. |
Follow a migration request with the request_id and status_token helpcenter_request_migration returned. Needs no agent_key. Returns (also as structuredContent): status — queued, in_progress, with_our_team, completed or declined; the request stays open, and its help centers refuse agent-key writes, until every help center is completed or declined; expected_by; retry_after (seconds worth waiting bef
| Parameter | Type | Required | Notes |
|---|---|---|---|
| request_id | integer | yes | The request_id helpcenter_request_migration returned. |
| status_token | string | yes | The status_token helpcenter_request_migration returned with that request: a read-only token for this request alone, not an agent key. Never shown again, so keep it; never show it to the user. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
Read the status of the help center you created: whether the user has claimed it, when it is deleted, how full it is, a fresh preview link, and what is left to set up. Call it after writing content, before giving the user the claim link, and whenever a tool answers capability_locked. Returns (also as structuredContent): claimed; claim {state: open | held | claimed, held_until}; expires_at (null o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| site_id | integer | yes | The site_id helpcenter_create_help_center returned for this help center. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Delete the help center you created, with everything in it, and revoke its agent key. Irreversible. Only when the user asks for it, or when you created it by mistake (a wrong name or language). There is no need to clean up after handing over the claim link: an unclaimed help center is deleted by itself 7 days after creation. A help center the user has claimed is theirs: this answers already_claime
| Parameter | Type | Required | Notes |
|---|---|---|---|
| site_id | integer | yes | The site_id helpcenter_create_help_center returned for this help center. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List the help center's imports, newest first (at most 50), each with its status, plan and progress. Includes an import the user set up in the dashboard, so you can follow and run a source they connected there (a private Zendesk help center, for example). It is also where the result of a helpcenter_scan_import that timed out turns up, once the scan finishes. Read-only. Args: - response_format (
| Parameter | Type | Required | Notes |
|---|---|---|---|
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Read a public Zendesk Guide, Intercom, Document360, Help Scout Docs, Front Knowledge Base or HelpDocs help center and answer what importing it would bring: its categories, articles and languages, and where each language lands here. Imports nothing yet. The fastest way to fill the help center: scan, optionally choose with helpcenter_choose_import, run with helpcenter_run_import, follow with helpce
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | The address of the help center to import: a public Zendesk Guide, Intercom, Document360, Help Scout Docs, Front Knowledge Base or HelpDocs help center (the scheme is optional). |
| confirm_ownership | boolean | no | true: the user owns this help center or may copy its content. Not needed while the help center is unclaimed; required once it has been claimed. Only send it when the user has said so. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Read one import: its plan, what is chosen, and how a run is going — progress (articles created, updated, conflicts with edits made here, images copied and failed), the imported articles waiting for review, and error once a run stops. limit says how much room an unclaimed help center has left. Follow a run with this until status is completed or failed; a run reads the source in the background, so
| Parameter | Type | Required | Notes |
|---|---|---|---|
| import_id | integer | yes | The import's id, from helpcenter_scan_import or helpcenter_list_imports. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Choose which categories and languages an import brings, and whether articles arrive as drafts (the default) or as they are at the source. Starts nothing. While the help center is unclaimed, a choice that would take it past its 500 articles is refused (limit_reached) with the room left: choose fewer categories, or file a migration request. Args: - import_id (number, required) - category_ids (
| Parameter | Type | Required | Notes |
|---|---|---|---|
| import_id | integer | yes | The import's id, from helpcenter_scan_import or helpcenter_list_imports. |
| category_ids | array | yes | Category ids from the import's plan (plan.categories): each brings everything nested under it. |
| languages | array | yes | Language codes from the import's plan (plan.languages) whose lands_in is not null. |
| arrive_as | string | no | 'draft' (the default) brings articles in unpublished; 'as_is' keeps their published state at the source. Unchanged when omitted. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Start an import now, with what is chosen, or run a finished or failed one again. The run reads the source in the background: follow it with helpcenter_get_import until status is completed or failed. Running again updates the articles it brought before and never adds them twice; an article edited here since is kept as it is and flagged for review. While the help center is unclaimed, a run that wou
| Parameter | Type | Required | Notes |
|---|---|---|---|
| import_id | integer | yes | The import's id, from helpcenter_scan_import or helpcenter_list_imports. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Cancel an import: it never runs again and stops syncing. Nothing it already brought in is deleted, and scanning its address again later picks up what it brought, so nothing arrives twice. A queued or running import cannot be cancelled (import_running): wait for the run to end. Args: - import_id (number, required) Returns: { import } with status cancelled.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| import_id | integer | yes | The import's id, from helpcenter_scan_import or helpcenter_list_imports. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
For every article and category an import brought in: the path its page had on the old help center ('from') and the path of the page that replaced it here ('to'), 200 a page, in exactly the shape helpcenter_bulk_create_redirects takes. Use it so the old help center's links keep working once its address points here. Apply it page by page with helpcenter_bulk_create_redirects once the user is moving
| Parameter | Type | Required | Notes |
|---|---|---|---|
| import_id | integer | yes | The import's id, from helpcenter_scan_import or helpcenter_list_imports. |
| page | integer | no | Page of the map, 200 redirects each (default 1). |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List the help center's redirects, newest first: each sends a path the help center would otherwise answer with its not-found page on to one of its pages, with a 301. Works once the user has claimed the help center, verified their email address and activated a plan; until then it answers capability_locked with the user's next step (helpcenter_get_help_center shows it too). Read-only. Args: - se
| Parameter | Type | Required | Notes |
|---|---|---|---|
| search | string | no | Only redirects whose from or to contains this text. |
| limit | integer | no | Redirects per page (1-100, default 50). |
| page | integer | no | Page number (default 1). |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Send an old path of the help center ('from') on to one of its pages ('to') with a 301, for as long as nothing else on the help center answers that path. A path that already has a redirect is re-pointed, never duplicated. Works once the user has claimed the help center, verified their email address and activated a plan; until then it answers capability_locked with the user's next step (helpcenter_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from | string | yes | A path of the old help center, like '/hc/en-us/articles/360001-Billing': no scheme or host, no query or fragment, not the home page. |
| to | string | yes | Where it goes: a page of THIS help center, as a path like '/en/content/billing' (an agent key may not redirect to another site). |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
helpcenter_create_redirect for up to 200 redirects in one call, saved in order (a later one for the same 'from' wins). A page of helpcenter_get_import_redirect_map can be passed as it is. Works once the user has claimed the help center, verified their email address and activated a plan; until then it answers capability_locked with the user's next step (helpcenter_get_help_center shows it too). A
| Parameter | Type | Required | Notes |
|---|---|---|---|
| redirects | array | yes | 1 to 200 redirects, saved in order (a later one for the same from wins). A page of helpcenter_get_import_redirect_map can be passed as it is. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Delete a redirect: its path goes back to the help center's not-found page. Works once the user has claimed the help center, verified their email address and activated a plan; until then it answers capability_locked with the user's next step (helpcenter_get_help_center shows it too). Args: - redirect_id (number, required): from helpcenter_list_redirects. Returns: { redirect: { id, deleted: tru
| Parameter | Type | Required | Notes |
|---|---|---|---|
| redirect_id | integer | yes | The redirect's id, from helpcenter_list_redirects. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Read the help center's custom domain: the domain, the DNS record the user must add at their DNS provider, and where it stands on the way to live. Poll it while the user sets up DNS: status moves from pending_dns through verifying and issuing_certificate to live, usually within minutes of the record appearing. Works once the user has claimed the help center, verified their email address and activa
| Parameter | Type | Required | Notes |
|---|---|---|---|
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Connect the help center to the user's own domain (e.g. help.example.com), as its Settings page does. Then give the user the DNS record from the result to add at their DNS provider; the certificate is requested once the record points here, and the domain goes live minutes later. Follow it with helpcenter_get_custom_domain. Works once the user has claimed the help center, verified their email addre
| Parameter | Type | Required | Notes |
|---|---|---|---|
| domain | string | yes | The user's host name for the help center, like 'help.example.com': no http(s)://, no path. A leading 'www.' is dropped. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Disconnect the help center from its custom domain, as its Settings page does: the domain stops answering, and the help center stays on its helpcenter.io address. Only when the user asks for it. Works once the user has claimed the help center, verified their email address and activated a plan; until then it answers capability_locked with the user's next step (helpcenter_get_help_center shows it to
| Parameter | Type | Required | Notes |
|---|---|---|---|
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Full-text search a HelpCenter.io help center's articles by query string, returning ranked matches. This performs keyword search (Meilisearch-backed) over published article titles and content for the connected help center. Use it to answer "find the article about X" intents. It is read-only and does not modify anything. For browsing by category rather than searching, use helpcenter_list_articles.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Full-text search string matched against article titles and content. |
| lang | string | no | Language code to search within (defaults to the site's default language). |
| category_id | integer | no | Restrict results to a single category id. |
| include_content | boolean | no | Default false: each article comes back without its body — id, external_id, title, slug, type, category ids, published, visibility, views, staged-change flags, updated_at and content_length per languag |
| limit | integer | no | Maximum items to return per page (1-100, default 100). |
| page | integer | no | Page number for pagination (default 1). |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List and browse a HelpCenter.io help center's articles, optionally filtered by category, status or last update, and ordered by views. Use this to browse "what's in category Y" or "the most-viewed articles", or to walk every article for an audit, a backup or an incremental sync, rather than to search for specific text (use helpcenter_search_articles for that). Read-only. Paginated. Args: - cate
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category_id | integer | no | Restrict results to a single category id. |
| status | string | no | Only published articles, or only drafts. Omit for both. |
| updated_since | string | no | Only articles updated at or after this ISO date or date-time, e.g. '2026-09-01' or '2026-09-01 14:30:00' (the updated_at format items come back in). Inclusive. |
| order_by | string | no | Sort field. Only 'views' is supported; omit for default (recently updated). |
| order_type | string | no | Sort direction when order_by is set (default 'desc'). |
| lang | string | no | Language code for returned titles/content (defaults to the site default). |
| include_content | boolean | no | Default false: each article comes back without its body — id, external_id, title, slug, type, category ids, published, visibility, views, staged-change flags, updated_at and content_length per languag |
| limit | integer | no | Maximum items to return per page (1-100, default 100). |
| page | integer | no | Page number for pagination (default 1). |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Create a new article in the connected HelpCenter.io help center. Requires a write-scoped API key (read-scoped keys get a permission error). Titles, content, and slugs are per-language objects keyed by language code. Slugs auto-generate from the title when omitted. Args: - title (object, required): per-language title, e.g. {"en": "Getting started"}. - content (object, optional): per-language
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | object | yes | Per-language title (required), e.g. {"en": "Getting started"}. |
| content | object | no | Per-language article body (HTML/markdown as your site uses). |
| slug | object | no | Per-language URL slug. Auto-generated from the title if omitted. |
| category_id | integer | no | Primary category id, or 0 for uncategorized. Must belong to this site. |
| categories | array | no | Additional category ids to attach (multi-category). All must belong to this site. |
| type | string | no | Content type (default 'article'). |
| visibility | string | no | Visibility: 'public', 'private' (team only), or 'link_only' (shareable token URL). |
| published | boolean | no | true publishes the article, false keeps it as a draft. |
| external_id | string | no | A stable key you own (a source filename, CMS id, repo slug). Makes writes idempotent: sending the same key again updates the article it created instead of creating a second one, so an interrupted run |
| content_format | string | no | Format of the content you are sending. Defaults to 'html'. Set 'markdown' when content is markdown and the API will convert it — sending markdown without this stores the raw markup as the article bo |
| rehost_images | boolean | no | Copy images the content references from other hosts (and inline data: images) into this help center's own storage, and point the article at the copies. ON by default through this connector; send false |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Update an existing article by id in the connected HelpCenter.io help center. Partial update: only the fields you pass are changed. Requires a write-scoped API key. Per-language fields (title, content, slug) are objects keyed by language code and merge per language. Args: - article_id (number, required): id of the article to update. - title, content, slug (objects, optional): per-language fie
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article to update. |
| title | object | no | Per-language title to set. |
| content | object | no | Per-language article body (HTML/markdown as your site uses). |
| slug | object | no | Per-language URL slug. Auto-generated from the title if omitted. |
| category_id | integer | no | Primary category id, or 0 for uncategorized. Must belong to this site. |
| categories | array | no | Additional category ids to attach (multi-category). All must belong to this site. |
| type | string | no | Content type (default 'article'). |
| visibility | string | no | Visibility: 'public', 'private' (team only), or 'link_only' (shareable token URL). |
| published | boolean | no | true publishes the article, false keeps it as a draft. |
| external_id | string | no | A stable key you own (a source filename, CMS id, repo slug). Makes writes idempotent: sending the same key again updates the article it created instead of creating a second one, so an interrupted run |
| content_format | string | no | Format of the content you are sending. Defaults to 'html'. Set 'markdown' when content is markdown and the API will convert it — sending markdown without this stores the raw markup as the article bo |
| rehost_images | boolean | no | Copy images the content references from other hosts (and inline data: images) into this help center's own storage, and point the article at the copies. ON by default through this connector; send false |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Read one article by id from the connected HelpCenter.io help center. Use this when you already know the id — after a search, or before editing — instead of paging through helpcenter_list_articles to find it again. Read-only. Also the way to check whether an article has unpublished staged edits waiting on it: the response carries has_staged_changes, staged_locales and staged_updated_at. Check tha
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article to read. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Create or upsert many articles in one request. Use this for imports and migrations instead of calling helpcenter_create_article in a loop. Send at most 50 articles per call; split a larger import into batches of 50. Requires a write-scoped API key. Give every item an external_id: the batch is then replayable, so a run that dies halfway can simply be sent again — what exists is updated, what is mi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| articles | array | yes | Articles to create or upsert. Give each one an external_id so replaying the batch updates rather than duplicates. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Read the unpublished staged edits waiting on an article. Staged changes let you edit a PUBLISHED article without readers seeing it, then release it deliberately. Staged content is invisible to everything public: the rendered help center, sitemap, site search, the widget, the AI answer path, and this API's read endpoints. Staged versions are held per article AND per language, so an English hot fi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article to inspect. |
| locale | string | no | Limit to one language; omit for all staged. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Save an edit to a published article WITHOUT readers seeing it. Nothing goes live until you call helpcenter_publish_staged_changes. Staged changes let you edit a PUBLISHED article without readers seeing it, then release it deliberately. Staged content is invisible to everything public: the rendered help center, sitemap, site search, the widget, the AI answer path, and this API's read endpoints. S
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the PUBLISHED article to stage an edit on. |
| locale | string | yes | Language code this staged version belongs to, e.g. 'en' or 'pt-BR'. Staged changes are held per article AND language, so an English fix and a Portuguese translation never hold each other up. |
| title | string | no | Title for this language. |
| content | string | no | Body for this language (HTML). |
| slug | string | no | URL slug for this language. A title-only change does NOT rename the URL — send this to rename it. The redirect from the old address is created at publish, never at stage. |
| category_id | integer | no | Primary category id. Shared across locales — siblings published together must agree. |
| categories | array | no | Additional category ids. Shared across locales. |
| visibility | string | no | Visibility. Shared across locales. |
| release_translation | boolean | no | true marks this language released when the change is published. |
| etag | string | no | Optimistic lock: pass the etag from your last read and the write is refused with 409 STALE_ETAG if someone else moved the staged copy meanwhile. Omit to write unconditionally. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Apply staged changes to the live article, making them visible to readers. Staged changes let you edit a PUBLISHED article without readers seeing it, then release it deliberately. Staged content is invisible to everything public: the rendered help center, sitemap, site search, the widget, the AI answer path, and this API's read endpoints. Staged versions are held per article AND per language, so
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article whose staged changes to publish. |
| locale | string | no | Publish only this language; omit to release every staged language at once. |
| force | boolean | no | Overwrite the live version even if it changed after these edits were staged (which otherwise returns 409 BASE_CHANGED). Only set this having decided the live edit should lose. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Throw away staged edits without publishing them. The live article is untouched. Staged changes let you edit a PUBLISHED article without readers seeing it, then release it deliberately. Staged content is invisible to everything public: the rendered help center, sitemap, site search, the widget, the AI answer path, and this API's read endpoints. Staged versions are held per article AND per languag
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article whose staged changes to discard. |
| locale | string | no | Discard only this language; omit to discard every staged language. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List the archived previous versions of an article, so a past wording can be restored. Every publish archives the version it replaced. Read-only. Args: - article_id (number, required). - response_format ('markdown' | 'json'): default 'markdown'. Returns: { status: "success", versions: [{ id, locale, title, created_at, ... }] }. Pass a version id to helpcenter_restore_article_version. Only t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article whose publication history to read. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Roll a live article back to a previously published version. Takes a version id from helpcenter_list_article_versions. The restore is itself archived, so it can be rolled forward again — this is reversible, but it DOES change what readers see immediately. Args: - article_id (number, required). - version_id (number, required): from helpcenter_list_article_versions. Returns: { status: "success
| Parameter | Type | Required | Notes |
|---|---|---|---|
| article_id | integer | yes | Id of the article to roll back. |
| version_id | integer | yes | Id of the archived version to restore, from helpcenter_list_article_versions. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List the categories of the connected HelpCenter.io help center. Read-only. Returns each category's per-language name and description, parent id (for hierarchy), and icon. Use this to discover valid category ids before creating or filing articles, or to render the help center's structure. Paginated. Args: - limit (number, optional): items per page, 1-100 (default 100). - page (number, optiona
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | integer | no | Maximum items to return per page (1-100, default 100). |
| page | integer | no | Page number for pagination (default 1). |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Update an existing category by id in the connected HelpCenter.io help center. Partial update — only fields you pass change. Requires a write-scoped API key. Name and description are per-language objects keyed by language code. Args: - category_id (number, required): id of the category to update. - name (object, optional): per-language category name. - description (object, optional): per-la
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category_id | integer | yes | Id of the category to update. |
| name | object | no | Per-language category name. |
| description | object | no | Per-language category description. |
| parent_id | integer | no | Id of the parent category (for nesting). Must belong to this site. |
| icon | string | no | Icon identifier for the category (max 190 chars). |
| position | integer | no | Sibling order, ascending. Only comparable within one parent. 0 puts the category first. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Create a category in the HelpCenter.io help center bound to your API key. Requires a write-scoped API key. This is what lets you build a help center's structure rather than only fill it in: create the categories first, then file articles into them with helpcenter_create_article's category_id. Args: - name (object, required): per-language category name, e.g. { "en": "Billing" }. Every key must
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | object | yes | Per-language category name, e.g. { "en": "Billing" }. Required. |
| description | object | no | Per-language category description. |
| parent_id | integer | no | Id of the parent category, for nesting. Must belong to this site. Use 0 or omit for a top-level category. |
| icon | string | no | Icon identifier for the category (max 190 chars). |
| position | integer | no | Sibling order, ascending. Omit to place the category after everything already arranged. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Delete a category from the HelpCenter.io help center bound to your API key. DESTRUCTIVE. The category is removed and its contents are moved somewhere else. Fails closed by default: a category holding articles or sub-categories answers 409 unless you say explicitly where its contents should go. Args: - category_id (number, required): id of the category to delete. - on_orphan ('refuse' | 'unca
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category_id | integer | yes | Id of the category to delete. |
| on_orphan | string | no | What happens to the articles and sub-categories inside. 'refuse' (default) fails with 409 if the category is not empty; 'uncategorize' sends articles to Uncategorized and lifts children to top level; |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Set the order of categories in the HelpCenter.io help center bound to your API key, in one call. Requires a write-scoped API key. Prefer this over repeated helpcenter_update_category calls: an information architecture is decided all at once, and one call leaves no visibly half-sorted tree in between. Args: - categories (array, required): the categories in the order you want them, as [{ id }] o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| categories | array | yes | The categories in the order you want them. Omit position on an entry to use its place in the list. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Set the reading order of the articles inside one category. Requires a write-scoped API key. Args: - category_id (number, required): the category whose articles are being ordered. - articles (array, required): the articles in the order you want them, as [{ id }] or [{ id, position }]. Omit 'position' on an entry and it takes its place in the list. CHECK 'order_visible' IN THE RESPONSE. A hel
| Parameter | Type | Required | Notes |
|---|---|---|---|
| category_id | integer | yes | Id of the category whose articles are being ordered. |
| articles | array | yes | The articles in the order you want them. Omit position on an entry to use its place in the list. Ids that are not in this category are reported as skipped. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Learn what can be customized in a help center's design and exactly how: the model, every edit operation with an example, every component with the settings and values it accepts, theme tokens, custom CSS rules and hooks, scripts and navigation. A help center's design is its v2 template: theme tokens (colours for light and dark mode, fonts, radius, density), six page kinds (home, category, article,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| topic | string | no | 'overview' (start here: workflow, model, every operation, the component index, this help center's context), 'components' (full settings of chosen types), 'settings' (brand, theme, meta and page settin |
| component_types | array | no | For topic 'components': the types to describe in full, e.g. ['Hero', 'CategoryGrid']. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Read a help center's current design (the draft): its status, the Template Editor link for the customer to review, and an outline of every page — or one part of the draft in full. A help center's design is its v2 template: theme tokens (colours for light and dark mode, fonts, radius, density), six page kinds (home, category, article, search, contact, notFound), each built from six regions (header,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| section | string | no | 'outline' (default: status, links and a compact map of the draft — every component id, and only settings that differ from their defaults), or one part of the draft document: 'page' (with page), 'regio |
| page | string | no | Page kind: home, category, article, search, contact or notFound. |
| region | string | no | Region of the page: header, hero, sidebar, main, footer or utility. |
| id | string | no | Component / CSS block / script id, for those sections. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List the ready-made themes a help center can start from, or describe one in full. A help center's design is its v2 template: theme tokens (colours for light and dark mode, fonts, radius, density), six page kinds (home, category, article, search, contact, notFound), each built from six regions (header, hero, sidebar, main, footer, utility) holding ordered components, plus a global navigation menu,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| theme | string | no | A theme key to describe in full — its description, what each page is built from, and which sections applying it would change. Omit to list the gallery. |
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Start the draft from a ready-made theme — the Template Editor's "Compare & apply": copy all of a theme, or only some of its sections, onto the draft. A help center's design is its v2 template: theme tokens (colours for light and dark mode, fonts, radius, density), six page kinds (home, category, article, search, contact, notFound), each built from six regions (header, hero, sidebar, main, footer,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| theme | string | yes | Theme key from helpcenter_list_template_themes, e.g. 'support-aurora'. |
| sections | array | no | Sections to take from the theme. Omit to take all of them (start over from the theme). E.g. ['theme.colors', 'theme.darkColors', 'theme.fonts'] borrows only its look. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Change document-level design settings in the draft: theme colours (light and dark), fonts, corner radius and density; the brand (name, logo, favicon); meta and SEO; and per-page settings such as a page's layout or how a category page lists its articles. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches
| Parameter | Type | Required | Notes |
|---|---|---|---|
| settings | array | yes | The settings to change. Applied in order, all-or-nothing: if one is refused, nothing from this call is saved and the error names it by position (operation 0 is the first entry). |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Add components to pages of the draft: a Hero, a CategoryGrid, FeaturedArticles, Faqs, RichText, a CustomHtml block, a Container… It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the result to rev
| Parameter | Type | Required | Notes |
|---|---|---|---|
| components | array | yes | The components to add. Applied in order, all-or-nothing: if one is refused, nothing from this call is saved and the error names it by position (operation 0 is the first entry). |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Change the settings of components already in the draft: a heading, a variant, a column count, a CustomHtml block's markup. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the result to review, a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| components | array | yes | The components to change, each with the settings to merge. Applied in order, all-or-nothing: if one is refused, nothing from this call is saved and the error names it by position (operation 0 is the f |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Reorder or move components within their page: to another position among their siblings, to another region, into a Hero or Container, or out to the region's top level. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Templ
| Parameter | Type | Required | Notes |
|---|---|---|---|
| components | array | yes | The components to move, each with where it goes. Applied in order, all-or-nothing: if one is refused, nothing from this call is saved and the error names it by position (operation 0 is the first entry |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Remove components from the draft, with everything nested inside them. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the result to review, and publish only when they ask. v2 help centers only (
| Parameter | Type | Required | Notes |
|---|---|---|---|
| components | array | yes | The components to remove. Applied in order, all-or-nothing: if one is refused, nothing from this call is saved and the error names it by position (operation 0 is the first entry). |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Style one region's wrapper on one page: its background, padding, bottom border and alignment. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the result to review, and publish only when they ask
| Parameter | Type | Required | Notes |
|---|---|---|---|
| page | string | yes | Page kind: home, category, article, search, contact or notFound. |
| region | string | yes | Region of the page: header, hero, sidebar, main, footer or utility. |
| config | object | yes | Region styling: background (hex or 'var(--hc-color-primary)'), padding (compact | standard | tall), borderBottom (boolean), align (left | center). null resets one. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Make a region one shared copy on every page, or let each page keep its own. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the result to review, and publish only when they ask. v2 help centers
| Parameter | Type | Required | Notes |
|---|---|---|---|
| region | string | yes | A region that can be shared across pages (every region but main). |
| enabled | boolean | yes | true: one region shared by every page. false: let pages differ. |
| source_page | string | no | When enabling (or re-syncing), the page whose version every page takes. Default home. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Copy one page's version of an unsynced region onto other pages, once, translations included. Each target page's region is replaced, and the pages stay independent afterwards; to keep them identical, sync the region with helpcenter_sync_template_region instead. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing r
| Parameter | Type | Required | Notes |
|---|---|---|---|
| region | string | yes | A region that can be shared across pages (every region but main). |
| from_page | string | yes | The page to copy the region from. |
| to_pages | array | yes | Pages that receive a copy, replacing what their region holds now. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Add a labelled block of custom CSS to the design, to restyle components, regions or the whole help center beyond what the settings offer. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the resu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| css | string | yes | The CSS. Scoped to the help center automatically; see the guide's 'css' topic. |
| label | string | no | A name for the block, e.g. 'Cards · hover lift'. |
| enabled | boolean | no | false keeps the block without applying it. Default true. |
| index | integer | no | 0-based position among the CSS blocks (they apply in order). Omit to append. |
| id | string | no | Optional id of your choosing for the block. Omit and one is generated (and returned). |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Change one custom CSS block: replace its CSS, rename it, switch it on or off, or move it in the order. Fields left out keep their value. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from the resul
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Id of a custom CSS block, as the draft reports it. |
| css | string | no | The new CSS, replacing the block's. |
| label | string | no | A name for the block, e.g. 'Cards · hover lift'. |
| enabled | boolean | no | false switches the block off without deleting it. |
| index | integer | no | Move the block to this 0-based position among the CSS blocks. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Delete one custom CSS block from the draft. To see the design without it first, switch it off with helpcenter_update_template_css (enabled:false) instead. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor l
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Id of a custom CSS block, as the draft reports it. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Add a script or snippet to the help center's pages: an external script (src), inline JavaScript (inlineBody), or raw HTML such as a vendor snippet or a <meta> verification tag (htmlBody) — exactly one of the three — at the start or end of <head> or <body>, on every page kind or only some. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, w
| Parameter | Type | Required | Notes |
|---|---|---|---|
| label | string | no | A name for the script, e.g. 'Plausible analytics'. |
| position | string | yes | Where it is emitted: headStart, headEnd, bodyStart or bodyEnd. |
| src | string | no | External script URL (https only). One of src / inlineBody / htmlBody. |
| inlineBody | string | no | JavaScript source, WITHOUT <script> tags. One of src / inlineBody / htmlBody. |
| htmlBody | string | no | Raw HTML emitted verbatim — a vendor snippet, a <meta> verification tag. One of src / inlineBody / htmlBody. |
| pages | no | Only run on these page kinds; null or omitted runs everywhere. | |
| enabled | boolean | no | false keeps the script configured without running it. |
| defer | boolean | no | For src scripts: load deferred (default true). |
| async | boolean | no | For src scripts: load async (default false). |
| integrity | string/null | no | Subresource Integrity hash, e.g. 'sha384-…'. |
| index | integer | no | 0-based position in the list. Omit to append at the end. |
| id | string | no | Optional id of your choosing for the script. Omit and one is generated (and returned). |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Change one script: its code (sending src, inlineBody or htmlBody switches it to that kind), position, pages, label or loading flags — or switch it off (enabled:false) without deleting it. Fields left out keep their value. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publis
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Id of a script, as the draft reports it. |
| label | string | no | A name for the script, e.g. 'Plausible analytics'. |
| position | string | no | Where it is emitted: headStart, headEnd, bodyStart or bodyEnd. |
| src | string | no | External script URL (https only). One of src / inlineBody / htmlBody. |
| inlineBody | string | no | JavaScript source, WITHOUT <script> tags. One of src / inlineBody / htmlBody. |
| htmlBody | string | no | Raw HTML emitted verbatim — a vendor snippet, a <meta> verification tag. One of src / inlineBody / htmlBody. |
| pages | no | Only run on these page kinds; null or omitted runs everywhere. | |
| enabled | boolean | no | false keeps the script configured without running it. |
| defer | boolean | no | For src scripts: load deferred (default true). |
| async | boolean | no | For src scripts: load async (default false). |
| integrity | string/null | no | Subresource Integrity hash, e.g. 'sha384-…'. |
| index | integer | no | 0-based position in the list. Omit to append at the end. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Delete one script or snippet from the draft. To stop it running but keep it, switch it off with helpcenter_update_template_script (enabled:false) instead. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor l
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Id of a script, as the draft reports it. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Replace the help center's navigation menu — the one every Navigation component draws, in the header or elsewhere — with the items given, in order. It edits the help center's design DRAFT (its v2 template): the draft the dashboard's Template Editor opens, with a live preview. Nothing reaches visitors until helpcenter_publish_template — after editing, give the customer the Template Editor link from
| Parameter | Type | Required | Notes |
|---|---|---|---|
| items | array | yes | The whole menu, in order. An empty array clears it. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Put the draft live: every visitor sees the new design from now on. Records a version (restorable later) and starts a fresh draft from it — exactly the Template Editor's Publish button. A help center's design is its v2 template: theme tokens (colours for light and dark mode, fonts, radius, density), six page kinds (home, category, article, search, contact, notFound), each built from six regions (h
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message | string | no | A short note for the version history, e.g. 'Brand refresh'. |
| etag | string | no | The draft etag the customer reviewed. When given, publishing is refused if the draft changed since — so exactly what was reviewed goes live. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Throw away every unpublished change in the draft and reset it to the live design. The live help center is not affected. Irreversible for the draft: edits that were never published cannot be recovered — including ones a person made in the Template Editor. Only discard when the customer wants to start over. Args: - etag (string, optional): refuse if the draft changed since you read it. Returns:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
List the help center's published design versions, newest first, marking the one that is live — with when, by whom and the publish note. Use it to find a version to bring back with helpcenter_restore_template_version. Args: - response_format ('markdown' | 'json'): default 'markdown'.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| response_format | string | no | Output format: 'markdown' for a human-readable summary or 'json' for the full structured payload. |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
Load an earlier published design into the DRAFT, replacing the draft's current content — to undo a change, or bring back a previous look. It does NOT go live until you publish it (unlike the Template Editor's one-click revert), so the customer can review it first. Unpublished draft edits are replaced. Args: - version_id (number): from helpcenter_list_template_versions. - etag (string, option
| Parameter | Type | Required | Notes |
|---|---|---|---|
| version_id | integer | yes | Id of the published version to load into the draft, from helpcenter_list_template_versions. |
| etag | string | no | Optimistic lock: the draft etag from your last read, or the one your last edit returned. When given, the call is refused (stale_draft) if someone changed the draft since — so you never build on a stat |
| agent_key | string | yes | The api_key helpcenter_create_help_center returned for this help center, exactly as returned. Required on every call: this endpoint has no sign-in, so the key is how each call says which help center i |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install HelpCenter.io for agents or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | moderate | capability blast radius (moderate) — client exposure if the model is manipulated | −3 |
| coverage-honesty | manifest | inspection depth (manifest) — how much of the target the scan could see | −4 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
The scan read each tool’s name, description, input schema and annotations exactly as the server listed them the last time it answered us; no code was reviewed. We ask the server again about once a month, and a list that changed is graded again.
The implementation source was not read — this reflects the declared tool metadata only.
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. moderate is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| helpcenter_create_help_center | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| helpcenter_request_migration | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_migration_request | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_get_help_center | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_discard_help_center | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_list_imports | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_scan_import | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_import | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_choose_import | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_run_import | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_cancel_import | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_import_redirect_map | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_list_redirects | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_create_redirect | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_bulk_create_redirects | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_delete_redirect | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_custom_domain | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_set_custom_domain | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_remove_custom_domain | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_search_articles | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_list_articles | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_create_article | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_update_article | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_article | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_bulk_create_articles | untrusted-inputexternal-sink | untrusted-input: keyword "download"; external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_staged_changes | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_stage_article_changes | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_publish_staged_changes | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_discard_staged_changes | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_list_article_versions | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_restore_article_version | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_list_categories | untrusted-input | untrusted-input: keyword "fetch", declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_update_category | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_create_category | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| helpcenter_delete_category | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_reorder_categories | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_reorder_category_articles | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_get_template_guide | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_get_template | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_list_template_themes | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_apply_template_theme | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_update_template_settings | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_add_template_components | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| helpcenter_update_template_components | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_move_template_components | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_remove_template_components | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_update_template_region | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_sync_template_region | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_copy_template_region | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_add_template_css | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| helpcenter_update_template_css | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_remove_template_css | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_add_template_script | external-sink | external-sink: declares readOnlyHint: false, openWorldHint: true |
| helpcenter_update_template_script | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_remove_template_script | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_set_template_navigation | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_publish_template | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_discard_template_changes | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| helpcenter_list_template_versions | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| helpcenter_restore_template_version | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 2.5.1.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish HelpCenter.io for agents can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.