Portal Administration — MCP Tools
Portal branding, custom domains and build management. This page documents the Portal Administration group of the Routebase MCP server, with the scope and the parameters of each tool.
A session that stages its tools advertises this group once the agent calls enable_toolset with the slug portal-admin. Full-access keys, scoped keys and OAuth sessions see every tool they are allowed to call without that step.
delete_branding_asset
Remove a portal branding image from its slot and clear the portal's reference to it. Fails when the slot is already empty. Use this to clear a branding slot; to put a new image into one use upload_branding_asset. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
kind |
string | Yes | Which slot to clear: 'logo', 'logoDark', 'favicon', 'ogImage', 'backgroundImage' or 'backgroundImageDark' |
delete_custom_font
Remove the portal's custom body or code font and fall back to the configured font family. Fails when no custom font is set. Use this to fall back to the configured family; to install a font use upload_custom_font. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
isCodeFont |
boolean | No (default false) |
True for the code/monospace font, false (default) for the body font |
get_custom_domain_status
Where the custom domain stands: lifecycle status, the DNS records still to publish, and the SSL provisioning timestamps. Set includeHealth to append the last DNS/certificate health check. Use this to follow the domain setup; to start or change it use manage_custom_domain. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
includeHealth |
boolean | No (default false) |
Also return the last domain health check (default false) |
get_portal_agent_readiness
Latest agent-readiness check of the published portal (Agent-Friendly Docs Spec): score, grade, category scores and the checks that did not pass. fixScope 'customer' means the portal content or settings decide the check, 'routebase' that the pipeline covers it. Start a run with manage_portal(action: 'check_agent_readiness'). Requires project context.
Required scope: docs:read
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
get_portal_analytics
What visitors did with the portal: page views, unique visitors, the daily trend, the most read pages, the top search terms, and the searches that found nothing (content gaps). Set includeFeedback to append the thumbs up/down summary with its best and worst pages. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
daysBack |
integer | No (default 30) |
How many days back to aggregate (default 30) |
includeFeedback |
boolean | No (default false) |
Also return the page feedback summary (default false) |
get_portal_build
One portal build in full, including its build log — the way to find out why a build failed. Get buildId from list_portal_builds. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
buildId |
string | Yes | The public Id (Guid) of the build |
get_portal_deployments
Which documentation versions are currently live on the portal, and which one the root URL points at. Use this for what is live now; for the builds behind it use list_portal_builds. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
get_portal_preview
Poll a portal preview queued by manage_portal(action: 'preview'). The time-limited preview URL is filled in once status is 'ready'. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
previewId |
string | Yes | The preview Id (Guid) returned by manage_portal(action: 'preview') |
get_portal_settings
Read the portal configuration. Section 'settings' (default) returns the feature toggles, SEO fields, scripts, the public URL and the last build; 'appearance' returns theme, colours, fonts and layout; 'all' returns both. These are the keys manage_portal takes in its values object. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
section |
string | No (default "settings") |
Which part to read: 'settings' (default), 'appearance' or 'all' |
list_page_feedback
The individual thumbs up/down entries visitors left, newest first, with their comments. Filter by sentiment or by a single page. Use this for the individual entries; for visitor numbers and trends use get_portal_analytics. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
page |
integer | No (default 1) |
Page number, 1-based (default 1) |
pageSize |
integer | No (default 20) |
Entries per page (default 20) |
isPositive |
boolean | No | Filter by sentiment: true for positive only, false for negative only; omit for both |
pageId |
string | No | Optional page Id (Guid) to restrict the list to one page |
list_portal_builds
List the portal builds, most recent first, with status, page count and duration. Read a failing build's log with get_portal_build. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
manage_custom_domain
Put the portal on a customer-owned domain. Actions in order: 'set' registers the domain and returns the CNAME and TXT records to publish; 'verify' checks those records; 'provision_ssl' starts the managed certificate once verification passed and may return a further DCV TXT record to publish; 'check_health' re-runs DNS and certificate checks on demand; 'remove' detaches the domain again. Poll progress with get_custom_domain_status. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
action |
string | Yes | What to do: 'set', 'verify', 'provision_ssl', 'check_health' or 'remove' |
domain |
string | No | The domain (e.g. 'docs.example.com') — required for 'set' |
manage_portal
Operate the public documentation portal. Actions: 'update_settings' (feature toggles, SEO, custom scripts and CSS), 'update_appearance' (theme, colours, fonts, layout) and 'update_branding' (logo, favicon, footer) each take a JSON object in values with only the keys you want to change — read the current keys with get_portal_settings; 'set_subdomain' moves the portal to another {subdomain}.docs address; 'unpublish' disables the portal and deletes its files; 'undeploy_version' removes one version from the deployment; 'set_default_version' makes a deployed version the root URL target; 'set_version_visibility' switches a published version between 'internal' and 'public' (switching a deployed version to internal undeploys it); 'preview' queues a render of any version, including drafts — poll it with get_portal_preview; 'check_agent_readiness' queues an agent-readiness check (afdocs scorecard) of the published portal, limited per day — poll it with get_portal_agent_readiness. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
action |
string | Yes | What to do: 'update_settings', 'update_appearance', 'update_branding', 'set_subdomain', 'unpublish', 'undeploy_version', 'set_default_version', 'set_version_visibility', 'preview' or 'check_agent_readiness' |
values |
string | No | JSON object with the fields to change — for the three update actions. Only the keys you pass are changed; unknown keys are rejected. Example: {"enableSearch": true, "siteTitle": "API Docs"} |
subdomain |
string | No | Subdomain label — required for 'set_subdomain' |
versionId |
string | No | The doc version Id (Guid) — required for 'undeploy_version', 'set_default_version', 'set_version_visibility' and 'preview' |
visibility |
string | No | Visibility for 'set_version_visibility': 'internal' or 'public' |
rowVersion |
string | No | Optional rowVersion (Base64) from list_documentations for optimistic concurrency on 'set_version_visibility' |
upload_branding_asset
Upload a portal branding image into one of its fixed slots and point the portal at it. Send the file base64-encoded in contentBase64 (a data URL prefix is accepted); the MCP server is remote, so a local file path would not reach it. PNG, JPEG, SVG, GIF, WebP and ICO. Destructive: each slot holds one file, so uploading replaces whatever is in it. Size limits differ per slot — 256 KB favicon, 1 MB logos, 5 MB ogImage and backgrounds. Use this to fill a branding slot; to clear one again use delete_branding_asset. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
kind |
string | Yes | Which slot to fill: 'logo', 'logoDark', 'favicon', 'ogImage', 'backgroundImage' or 'backgroundImageDark' |
contentBase64 |
string | Yes | The image file, base64-encoded |
upload_custom_font
Upload a WOFF2 font file for the portal and use it for body text or for code. WOFF2 only, max 2 MB; send it base64-encoded in fontBase64 (the MCP server is remote, so a local file path would not reach it). Destructive: the portal holds one body font and one code font, so this replaces the current one. Requires project context.
Required scope: docs:manage-portal
| Parameter | Type | Required | Description |
|---|---|---|---|
documentationId |
string | Yes | The public Id (Guid) of the documentation |
fileName |
string | Yes | File name for the stored font — unsafe characters are replaced and a .woff2 extension is appended if missing. Unlike the other uploads this name is kept: it becomes part of the font URL. |
fontBase64 |
string | Yes | The WOFF2 file, base64-encoded |
isCodeFont |
boolean | No (default false) |
True to use it as the code/monospace font, false (default) for body text |