Introduction
Curator exposes a Model Context Protocol (MCP) endpoint. An MCP client such as Claude Code or Claude Desktop connects to it with a personal token and can then call a set of read and administrative tools. If the token allows them, the client can also call content tools that build pages, navigation, themes, and files. A token belongs to the backend user who generated it, and it can do nothing that user cannot do. Every tool call checks the owner’s backend permissions when it runs, and every call is recorded in the Usage Log with the owner’s login and the token’s prefix.Generate a Token
- Sign in to the backend and open the username dropdown at the top right.
- Click MCP Tokens, then Generate Token.
- Enter a Name that says where the token will be used, for example “Laptop Claude Code”.
- Choose when the token Expires. The default is 90 days. Choose Never only for unattended service accounts.
- Under Allowed tools, every read tool is checked. Clear the tools this token must not call. A token with every read tool checked also gains read tools added in later releases. Content tools are labeled (changes content) and are never checked by default. Check each content tool that this token needs. A token never gains a content tool unless you check it.
- Click Generate.
<token> in place of the token.
Connect a Client
The endpoint isPOST /curator/mcp on your Curator site, and the token travels as a bearer credential:
Authorization header. The endpoint accepts JSON-RPC 2.0 over POST and answers
with JSON. It does not open sessions or server-sent event streams.
Manage Tokens
MCP Tokens lists your tokens with their prefix, allowed tools, expiry, and last use. Open a token to edit its name or allowed tools; the owner, expiry, and token itself cannot change after generation. Tick one or more tokens and click Delete selected to revoke them. A revoked token stops working at once. You only see your own tokens. Tokens also stop working when their owner is banned, suspended, deleted, or past their password expiry.Tools
Each tool runs with the owner’s permissions. A tool the owner cannot use is not offered to the client.Read and Administrative Tools
A new token allows every tool in this table. Onlyclear_cache changes the portal, and it clears caches
without changing any content.
“Same as the Status page” means any Portal permission: a user who holds any one Portal permission, such
as managing URL redirects, can call
get_status and get_info, exactly as they can open the Status page.
get_info reports server, database, and hosting details, so review who holds a Portal permission before
issuing tokens broadly.
The content list tools, from list_pages to list_sigma_workbooks, only appear when their plugin is
installed. They take the same optional arguments and return the same shape:
Arguments:
search
Text to match against the title, case-insensitive. Optional.
limit
The maximum number of items to return. Optional, defaults to 100, maximum 500.
offset
The number of items to skip, for paging. Optional, defaults to 0.
Returns:
content_type, files include file_type and
hidden, Tableau dashboards include project_name and featured, and Power BI items include group_name.
Content Tools
The tools in this table change portal content. A new token does not allow them. The token owner must check each one under Allowed tools, where it is labeled (changes content). The owner also needs the permission in the table, because the token can do nothing that its owner cannot do.
Most content tools accept
dry_run: true. Curator then checks the change and returns the result, but it
does not save the change.
create_api_key returns the new key one time only. A REST API key has full REST API access and does not
expire, so check this tool on a token only when the client needs the REST API. delete_api_key deletes
only keys whose owner label starts with MCP:. Remove other keys in the backend.
Safety Rules
- Managed and distributed portals refuse changes. On a portal that Central Dispatch manages, and on a high availability node, every content tool returns an error, but the read tools still work. On a managed portal, make the change on the managing Curator. On a high availability node, make the change in the Curator backend.
- New pages start hidden. A new page is hidden unless the client passes
hidden: false. Publish a page withupdate_page_settingsandhidden: falseafter you review it. - Group restrictions are not set. No tool sets or edits the group restrictions on pages, menu items, or files. A page that a tool creates has no group restrictions. Check its restrictions in the backend before you publish it. A page that a tool recreates after a delete is hidden, and it is restricted to no groups, so no frontend user can open it until an administrator assigns its groups in the backend.
- Page text cannot contain code. Curator refuses rich text that contains scripts, event handler
attributes,
javascript:URLs, embedded frames, forms, style tags, or Twig tags. The same rule applies to hero headings, hero descriptions, and the descriptions of pages, files, and menu items, because Curator shows them as HTML. Links can usehttp,https,mailto,tel,sms,webcal,msteams,slack, andzoommtgaddresses, relative addresses, and image data. To embed another site, use an iframe element. - Theme styles cannot read server files. In custom CSS,
update_themeaccepts only one kind of@import: a remote stylesheet such as a web font, written as@import url('https://...');. It refuses other imports and the LESS functions that read files, such asdata-uri(). When the styles do not compile, the error gives the line and column only. - Some content is protected. No tool can change the theme’s head insert. The tools can add and edit only the common page elements. Other elements, such as accordions, tabbed pages, feeds, and lists, can be moved or removed, but not edited.
- Uploads are checked. Curator refuses file types that a web server can run as code. HTML, SVG, XML,
and JavaScript files uploaded through MCP are saved as downloads only. Curator also checks the contents,
so an HTML file with a name such as
report.txtis saved as a download only too.set_theme_imageaccepts only raster images, such as PNG, JPEG, GIF, WebP, and ICO files, and refuses files that are downloads only, so an SVG logo or favicon can only be set in the backend. When a page embeds one of these HTML files, Curator renders it in a sandboxed frame. - Deletes are checked.
delete_pagerefuses the homepage and any page that another page embeds. It also refuses a page that a tabbed pages element, a tile selection, or a theme footer uses, unless the client passesforce. It refuses a page that menu items link to, unless the client passesremove_menu_links, which deletes those menu items too. It always refuses when a linked menu item has children.delete_filerefuses a file that pages or menu items use, unless the client passesforce.delete_menu_itemrefuses an item that has children, unless the client passesinclude_children. No tool deletes or moves a top-level menu.
Undo Changes
Before a tool changes a page’s settings or content, or a theme’s settings, Curator saves a snapshot of it.list_mcp_snapshots lists the snapshots, newest first. restore_mcp_snapshot puts one back. When it
restores a page or theme that still exists, it saves a snapshot first, so you can undo the restore too.
A restore is refused when the page or theme changed after the MCP change that the snapshot undoes, for
example when someone edited it in the backend. Run the restore with dry_run: true to see the changes, and
pass force: true to restore anyway. A restore never makes a hidden page visible, and it never changes the
theme’s head insert.
If a page was deleted, the restore creates it again with a new id. The restored page gets back its
settings and content, but not its menu items, keywords, group restrictions, or custom code. The restored
page is hidden and restricted to no groups. Assign its groups in the backend before you publish it.
Restoring the same snapshot again updates that page and does not create a second copy.
Curator keeps the newest 25 snapshots of each page and each theme, for up to 90 days.
Menu and file changes have no snapshot. Instead, the menu and file tools return the values that were there
before the change. A deleted file cannot be restored.
Theme images and page thumbnails also have no snapshot. When set_theme_image or update_page_settings
replaces an image, Curator keeps the old image as a hidden file and returns its id.
Upload Large Files
upload_file accepts inline contents up to 10 MB, or a public URL that Curator downloads, up to 50 MB.
Curator refuses a URL that points to a private or internal address. Curator downloads the URL directly and
never through a proxy. If the server reaches the internet only through a proxy, use create_upload_url.
For a file on the client’s own computer, create_upload_url returns a URL under
/curator/mcp/upload/. The client sends the file to that URL with an HTTP PUT, for example
curl --upload-file ./photo.jpg '<upload_url>'. The URL works one time only, expires after 15 minutes,
and accepts files up to 50 MB. Without a file_id, the upload creates a new file. With a file_id, the upload
replaces the contents of that file. Curator checks the token, its owner, and the owner’s permissions again
when the file arrives.
Limits and Logging
- Requests are rate limited per client address using the same limits as the REST API, set under Settings > Security > Authentication Settings.
- Every tool call writes a Usage Log row of type
interworks.portal.mcp.callwith the tool, its arguments, the owner, the token prefix, and the outcome. - Rejected sign-ins are written to the Curator log with the reason and the token prefix. The full token is never logged.