Portal MCP tools
Manage portal enablement, custom pages, assets and domain connections through your AI agent.
Connect an MCP client using the Octocom MCP setup guide. Portal
management tools use the authenticated organization's scope and require a
businessId. Use the organization selector required by your connected tool's
schema; IDs and content cannot be accessed across organizations. Write tools
require write access and are unavailable through a read-only connection.
Configuration
| Tool | Purpose |
|---|---|
get_portal_configuration | Read the three enablement flags and built-in portal URL. |
update_portal_configuration | Set portal, help-center and public article API enablement. |
Configuration updates take a config object containing all three booleans.
Read the current configuration first and preserve settings you are not changing.
For a custom-pages-only portal with public article APIs:
{
"businessId": "00000000-0000-4000-8000-000000000001",
"config": {
"enabled": true,
"helpCenterEnabled": false,
"publicArticlesEnabled": true
}
}Replace example IDs with the actual business and organization IDs required by your client. Disabling does not delete content or change legacy Azure portal settings. These tools manage enablement; use the dashboard Help center tab for branding settings.
Pages and assets
| Tool | Purpose |
|---|---|
list_portal_pages | List custom pages, publication state, unpublished changes and help-center path conflicts. Built-in pages are not rows here. |
get_portal_page | Read draft and published HTML and both asset manifests. |
save_portal_page | Create or replace the draft at an exact path; does not publish. |
preview_portal_page | Issue a 30-minute bearer link to the latest saved draft; replaces the previous link. |
publish_portal_page | Publish saved draft HTML and assets together; revoke previews. |
unpublish_portal_page | Remove publication, retain the draft and revoke previews. |
delete_portal_page | Delete both versions and revoke previews; keep uploaded assets. |
upload_portal_asset | Upload supported base64 file bytes; return an immutable asset ID and relative path. |
list_portal_assets | List assets, paths, types and sizes. |
delete_portal_asset | Delete an asset only when no draft or published manifest references it. |
Get, preview, publish, unpublish and delete operations use the resource's id
alongside businessId. Asset deletion uses the asset ID, not a page ID.
Author and publish a page
- Read portal configuration and list existing pages. Confirm the target path and whether the built-in help center shadows it.
- Upload needed assets and place their returned literal relative paths in HTML.
- Save the complete HTML as a draft. Include every used uploaded asset ID in
assetIds; MCP does not automatically infer references. - Generate a preview link and inspect it. Test integrations using controlled data; form submissions can create real conversations and send emails.
- Publish the page and verify its public URL. No Worker redeploy is required.
Example save_portal_page arguments for a page without uploaded assets:
{
"businessId": "00000000-0000-4000-8000-000000000001",
"page": {
"path": "/support",
"title": "Support",
"html": "<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><title>Support</title></head><body><h1>How can we help?</h1></body></html>",
"assetIds": []
}
}Use the returned page ID for preview and publication. See Custom pages for routing, sandbox behavior and limits, and Assets for visibility and deletion rules.
Domains
| Tool | Purpose |
|---|---|
list_portal_domains | Read stored connection status, DNS instructions, errors and provisioning availability. |
connect_portal_domain | Reserve a hostname, provision it in Cloudflare and return customer DNS instructions. |
refresh_portal_domain | Check ownership and Cloudflare activation, authorize routing, then check HTTPS delivery. |
disconnect_portal_domain | Revoke the mapping and remove Cloudflare resources. Customer DNS must be removed separately. |
Connect takes hostname and businessId. Refresh and disconnect take the
returned domain id and businessId. Connecting alone does not activate
visitor routing: complete the DNS instructions and refresh the connection.
Refresh changes routing when checks pass, so it is a write tool.
See Custom domains for proxied DNS, connection statuses, retry behavior and legacy migrations.