MCP server
The 10 tools and 17 resource paths of the Libretto MCP server, with their inputs and hints.
Connect an agent #
The MCP server answers at /api/mcp on the admin's origin, over streamable HTTP. Claude Code, Cursor, Codex and any other MCP client connect to it with a token for one site, sent as a header:
POST https://<admin origin>/api/mcp
Authorization: Bearer <token>Get a token #
- Sign in to the admin and, in the sidebar, open Persone e accessi › Agenti e accessi MCP (People & access › Agents & MCP access).
- Give the token a name that says where it lives, for example
Claude Code, laptop. - Choose the site. The list holds only the sites you reach.
- Choose how long it lasts: 90 days, the default, or 30 days. Every token expires.
- Copy the token. It is shown once, next to the setup of the Claude Code plugin and, for clients without it, of Claude Code, Cursor and Codex, with your server's MCP URL. Libretto never stores it: if you lose it, revoke it and make a new one.
A platform admin and an editor can make tokens. A content author, a viewer and a client cannot yet.
Set up your client #
The screen that shows the new token sets up each client with your server's address filled in, and no command or file it gives holds the token.
Claude Code: the plugin. The Libretto plugin adds the server with the token kept in the computer's keychain, an image uploader and the skills that teach Claude to work on Libretto. In Claude Code, run /plugin marketplace add InnestiDigital/libretto-plugins, then /plugin install libretto@libretti, and paste the token when Claude Code asks for the plugin's settings. The step-by-step guide is Connect Claude to Libretto; the plugin's code is public at InnestiDigital/libretto-plugins.
Without the plugin, keep the token in one environment variable, LIBRETTO_MCP_TOKEN (the one the plugin also reads), and let each client read it from there. Put it in your shell profile (for example ~/.zshrc), writing your token in place of <token>, then open a new terminal:
export LIBRETTO_MCP_TOKEN="<token>"Replace <admin origin> below with your admin's address.
Claude Code without the plugin. Run this once in a terminal. The single quotes keep the variable's name in the command, and Claude Code reads the token from it each time it starts; --scope user makes the server available in every project, and the header comes after the name and the URL. Don't add it as well as the plugin, or Claude Code connects twice.
claude mcp add --transport http --scope user libretto https://<admin origin>/api/mcp --header 'Authorization: Bearer ${LIBRETTO_MCP_TOKEN}'Then type /mcp in Claude Code: libretto shows as connected. See the Claude Code MCP guide.
Cursor. Add the server to ~/.cursor/mcp.json, your user file; Cursor reads the variable through ${env:…}:
{
"mcpServers": {
"libretto": {
"url": "https://<admin origin>/api/mcp",
"headers": { "Authorization": "Bearer ${env:LIBRETTO_MCP_TOKEN}" }
}
}
}See the Cursor MCP guide.
Codex. Add this to ~/.codex/config.toml; it names the variable, so the file never holds the token:
[mcp_servers.libretto]
url = "https://<admin origin>/api/mcp"
bearer_token_env_var = "LIBRETTO_MCP_TOKEN"codex mcp add libretto --url https://<admin origin>/api/mcp --bearer-token-env-var LIBRETTO_MCP_TOKEN writes the same entry. See the Codex MCP guide.
What a token may do #
A token acts for the person who made it, on its one site, with that person's role. discover_operations lists only the operations the token may run (its role, a workspace owner's grant and its design-system access count), and every operation checks its permission again.
| Role | What its agent can do |
|---|---|
| Platform admin | Everything, on every site: create sites and pages, settings, domains, languages, access, and all the rest below. |
| Workspace owner | What an editor can, plus every design-system area, creating and deleting pages, layout frames and putting an earlier version live, on the sites of their workspace. |
| Editor | Read the site; edit pages, layers, styles, presets, components, menus and motion; the design system, as far as its access settings allow; content, media and collections; publish; manage members; undo. |
| Content author | Cannot make a token yet. In the admin: the content of pages (texts, links, images), media and collection items; publish; manage members. |
Revoke a token #
The same screen lists your tokens: name, site, when each was made, last used and expires. Revoca (Revoke) stops a token at once. A platform admin also sees everyone's tokens and can revoke any of them.
A token also stops working, on its next request, when:
- it expires;
- its maker's account is deleted, or must change its password;
- its maker loses access to the site, or leaves the workspace;
- its maker is moved to a role without agent access (content author, viewer, client).
A token never acts above the role its maker had when they made it, nor above their role now: when its maker is moved to a lower role, it narrows at once; a promotion does not widen it. Make a new token to use a new role.
A first session #
- Call
site_context: the site, its pages, the resource URIs and thebaseRevisionsa batch needs. - Call
discover_operationswith a word (tree,designSystem) to read the live schemas. - Read in small pieces.
tree/<pageId>gives a page's outline, one line per node with the start of its text;?styles=font-size,padding-topadds those declarations to each line, andtree/<pageId>?node=<nodeId>gives one node with its props and styles.design-systemgives an index, and?tokens=<group>,<group>gives those token groups' values alone.component/<key>?variant=<v>&state=<s>&own=truegives the cells you mean.versionsandpending-changessay what is live and what a publish would ship. One read answers at most 40,000 characters: the resources past that come back indeferred, to read in another call. - Send the batch to
dry_run_ops. It runs every check and rolls back. It answers a receipt: the revisions, the nodes each tree commit changed, the overrides a design-system write changed with the warnings about them, and the findings counted. Addanswer: "full"for the whole answer. - Send the same batch to
apply_opswith a freshrequestId.
Note: Every write goes through the operation registry, the same one the admin uses. A batch is validated, audited and undoable whichever way it arrives.
Report a problem #
When Libretto stops you or the person you work for, call report_issue: a bug, a missing capability, a refusal that looks wrong (refusal), a gap in these docs (docs), or anything else (other). It goes to the platform owner, and nothing on the site changes.
{ "title": "tree.commit refuses a hover colour on a button label",
"body": "The person asked for a darker hover. The inspector sets it; the batch is refused.",
"category": "refusal", "severity": "high",
"actual": "422 tree_invalid I8", "requestId": "<the failing batch's requestId>" }severityislow,medium(the default),highorblocking(the person cannot go on).- Add
steps,expected,actualand thepageIdwhen you have them. - Read your tickets, their status and the owner's close note at the
ticketsresource (libretto://site/<siteId>/tickets). Your maker sees them in the admin, on Agenti e accessi MCP. - At most 20 tickets an hour per person.
| Tool | Group | Read-only | Destructive | Idempotent | What it does |
|---|---|---|---|---|---|
| site_context | Core tools | yes | no | no | Read this token’s site, compact page summaries, urls, resources and baseRevisions. |
| discover_operations | Core tools | yes | no | no | Lazily discover operations by name or by a word of their description. |
| read_resources | Core tools | yes | no | no | Read a bounded set of Libretto resource URIs from this site (at most 16 per call), each the full libretto://site/<siteId>/<path> with this site's id (libretto://site/<siteId>/pages, never libretto://site/pages). |
| apply_ops | Core tools | no | yes | yes | Apply one confirmed, revision-checked operation batch to this token’s site; returns inverses, findings and structured conflicts. |
| dry_run_ops | Core tools | yes | no | no | Validate a complete operation batch with transaction rollback; publication and provider effects are refused. |
| job_next_step | Assistant jobs | no | no | yes | Lease the next bounded step of an assistant job and get what it needs: the brief, the summaries of the steps already reported, the steps left (counting this one; 1 means this step must end with done: true) and the job deadline. |
| job_report_step | Assistant jobs | no | no | yes | Report the result of a leased step: a summary, the operation calls this step adds to the job's proposal (the operations array of an apply_ops batch, without the batch fields; the server dry-runs the proposal so far plus these calls under your session, and refuses them with job_fragment_invalid and the dry-run issues, the step staying leased so you can fix and report it again), and done. |
| render_preview | Rendering | yes | no | no | See a page of this site: its draft by default, or with target "live" what the public site serves now (the active published version as a visitor gets it, named in the answer's liveVersion), to confirm a publish or a rollback; a page that version lacks is page_not_live, a site never published site_not_live. |
| compare_reference | Rendering | yes | no | no | Compare a full-page screenshot of a draft page with a reference image: one of this site's media library (referenceMediaId) or an image at a public https URL (referenceUrl: fetched once, not stored, no redirects, an image content type, at most 20 MB; a refused URL answers reference_url_refused). |
| report_issue | Reporting a problem | no | no | no | Report a problem to the platform owner when Libretto stops you or the person you work for: a bug, a missing capability, a refusal that looks wrong (category "refusal"), a docs gap (category "docs"), or anything else. |
Core tools
site_context
Read this token’s site, compact page summaries, urls, resources and baseRevisions. urls are the absolute addresses to hand the person, on this server: admin (the site in the admin), editor (add ?pageId=<id> to open a page), draftPreview (the draft as the editor sees it, for a signed-in person; put a page path before the ?) and publicSite (the live site, null when it has no address), in the default locale, and locales, the draftPreview and publicSite homes of every site locale by its code (such as /en-us/?site=…); never build these links yourself. resources lists every resource of the site as a full URI, libretto://site/<siteId>/<path> with this site's id, ready for read_resources. baseRevisions holds every document revision keyed exactly as an apply_ops batch's baseRevisions (history, pages, designSystem, tree:<pageId>, ...), ready to pass through unchanged.
Input
No arguments: call it with {}.
discover_operations
Lazily discover operations by name or by a word of their description. Each comes in one line by default: its name, its first sentence, its permission, how it changes the site, the confirmation it needs and whether dry_run_ops can run it; cursor pages through them (nextCursor). Name operations in names (or pass schemas: true) for their input schema, one worked example input and the documents they read and write, and outputSchemas: true for their output schema. Use the schemas and examples to build apply_ops batches. Only the operations this token may run are listed (its role, its workspace owner's grant and its design-system levels count); one listed may still refuse a particular input, such as a token in an area you only view: access.read answers your levels.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Default "". |
| names | array of string | no | At least 1 item. At most 20 items. |
| schemas | boolean | no | Default false. |
| outputSchemas | boolean | no | Default false. |
| cursor | integer | no | At least 0. Default 0. |
| limit | integer | no | At least 1. At most 100. Default 50. |
read_resources
Read a bounded set of Libretto resource URIs from this site (at most 16 per call), each the full libretto://site/<siteId>/<path> with this site's id (libretto://site/<siteId>/pages, never libretto://site/pages). The paths are context, pages, catalog, design-system (the design system's index; ?tokens=<group>,<group> for token values), presets, motion (scene recipes and diagnosis codes), tickets (your reported problems), regions (header and footer trees), versions (published versions), pending-changes (what the next publish ships), tree/<pageId> (a page's outline, one node with ?node=<id>&depth=<n>, the whole tree with ?full=true), outline/<pageId> (the outline, as tree/<pageId>), motion/<pageId> (a page's scenes and findings), component/<key> (the cells of a design-system component such as button, ?variant=&state=&own=true to filter), catalog/<type> (one node type, such as catalog/ds.button), preset/<presetId> (one preset's tree, ?kind=<kind>) and versions/<versionId> (a version's pages); site_context.resources lists the ones this site has. A path may end with a query, such as component/button?variant=primary&state=hover&own=true, design-system?tokens=color.palette,type or tree/<pageId>?node=<nodeId>&depth=1: each resource that takes one runs the registry read it names, with the same parameters. tree/<pageId> answers the page's outline by default (one line per node: id, kind and type, name, variant, theme and the start of its text; styles=font-size,padding-top adds those declarations to each line, depth=2 stops at that depth, cursor and limit page the lines), ?node=<nodeId>&depth=1 one node with its props and styles, ?full=true the whole document. design-system answers its index; with tokens, components, css or embeds it answers only those parts unless index=true. One answer holds at most 40,000 characters of resources: the ones past it come back in deferred with their size, to read in another call. No network URLs are fetched.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| uris | array of string | yes | At least 1 item. At most 16 items. |
apply_ops
Apply one confirmed, revision-checked operation batch to this token’s site; returns inverses, findings and structured conflicts. A batch with a motion.* operation also reports the scene problems of each touched page as motion.<code> findings; run motion.diagnose { pageId } to read them on their own, and prefer motion.applyRecipe (recipes and knobs from motion.listRecipes or the motion resource) to hand-written scenes. The answer is a receipt: revisions, the undo call, each result in short (a tree commit as the ids of the nodes it changed, a design-system write as the names of the overrides it changed and at most 5 warnings) and the findings counted by severity and rule with the first 20; pass answer: "full" for every result and finding in full, the inverse ops included. A design-system write answers its change, not the whole draft: the overrides it adds, changes or removes (changes), every error, the warnings about what it changed and the count of every warning by reason; read the stylesheet with render_preview and the rest with designSystem.read. designSystem.lint and designSystem.diff answer a summary unless their input has full: true. The arguments are the batch itself, at the top level (not wrapped in a batch or file key): format: "libretto.batch", v: 1, requestId (a fresh UUID; resending the same batch with it replays the stored answer), baseRevisions (copy site_context.baseRevisions; every document an operation writes must be named) and operations (1 to 100 { name, input, ref? }), with optional dryRun, confirmed (["destructive"], ["publish"]) and answer ("receipt" or "full"). discover_operations gives each operation's input schema and a worked example input.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| format | "libretto.batch" | yes | |
| v | 1 | yes | |
| requestId | string (uuid) | yes | |
| baseRevisions | record of integer | yes | |
| operations | array of object | yes | At least 1 item. At most 100 items. |
| operations[].name | string | yes | |
| operations[].input | any JSON | yes | |
| operations[].ref | string | no | |
| dryRun | boolean | no | Default false. |
| confirmed | array of string | no | Default []. |
| answer | string | no | One of "receipt", "full". Default "receipt". |
Example
{
"format": "libretto.batch",
"v": 1,
"requestId": "0b7c6d5e-4f3a-4b2c-8d1e-9f0a1b2c3d4e",
"baseRevisions": {
"history": 12,
"site": 3
},
"operations": [
{
"name": "site.update",
"input": {
"name": "Studio"
}
}
]
}dry_run_ops
Validate a complete operation batch with transaction rollback; publication and provider effects are refused. A dry run reports each touched page's scene problems as motion.<code> findings (the reasons of motion.diagnose: target-missing, target-ambiguous, stateful-target, overlap, empty-range, hidden-at-rest, never-matches). The answer is a receipt: revisions, the undo call, each result in short (a tree commit as the ids of the nodes it changed, a design-system write as the names of the overrides it changed and at most 5 warnings) and the findings counted by severity and rule with the first 20; pass answer: "full" for every result and finding in full, the inverse ops included. A design-system write answers its change, not the whole draft: the overrides it adds, changes or removes (changes), every error, the warnings about what it changed and the count of every warning by reason; read the stylesheet with render_preview and the rest with designSystem.read. designSystem.lint and designSystem.diff answer a summary unless their input has full: true. The arguments are the batch itself, at the top level (not wrapped in a batch or file key): format: "libretto.batch", v: 1, requestId (a fresh UUID; resending the same batch with it replays the stored answer), baseRevisions (copy site_context.baseRevisions; every document an operation writes must be named) and operations (1 to 100 { name, input, ref? }), with optional dryRun, confirmed (["destructive"], ["publish"]) and answer ("receipt" or "full"). discover_operations gives each operation's input schema and a worked example input.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| format | "libretto.batch" | yes | |
| v | 1 | yes | |
| requestId | string (uuid) | yes | |
| baseRevisions | record of integer | yes | |
| operations | array of object | yes | At least 1 item. At most 100 items. |
| operations[].name | string | yes | |
| operations[].input | any JSON | yes | |
| operations[].ref | string | no | |
| dryRun | boolean | no | Default false. |
| confirmed | array of string | no | Default []. |
| answer | string | no | One of "receipt", "full". Default "receipt". |
Example
{
"format": "libretto.batch",
"v": 1,
"requestId": "0b7c6d5e-4f3a-4b2c-8d1e-9f0a1b2c3d4e",
"baseRevisions": {
"history": 12,
"site": 3
},
"operations": [
{
"name": "site.update",
"input": {
"name": "Studio"
}
}
]
}Assistant jobs
job_next_step
Lease the next bounded step of an assistant job and get what it needs: the brief, the summaries of the steps already reported, the steps left (counting this one; 1 means this step must end with done: true) and the job deadline. A step is yours for 5 minutes (leaseUntil). Calling again while the lease is live answers the same stepId, so a lost answer is safe to ask for again; after the lease lapses the step expires and the next call leases a new stepId. A queued job starts on the first call. A job that is cancelled, failed, waiting for review or applied answers job_not_running: stop working on it.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| jobId | string (uuid) | yes |
Example
{
"jobId": "6f1c2b0e-3d4a-4e5f-8a9b-0c1d2e3f4a5b"
}job_report_step
Report the result of a leased step: a summary, the operation calls this step adds to the job's proposal (the operations array of an apply_ops batch, without the batch fields; the server dry-runs the proposal so far plus these calls under your session, and refuses them with job_fragment_invalid and the dry-run issues, the step staying leased so you can fix and report it again), and done. done: false means call job_next_step for the next step; done: true ends the work and the job waits for the operator's review. Nothing is applied to the site: the operator applies the proposal. Reporting the same report again answers the first answer; a different report for an already reported step is job_step_report_conflict (409). A step whose lease lapsed answers job_step_expired.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| jobId | string (uuid) | yes | |
| stepId | string (uuid) | yes | |
| report | object | yes | |
| report.summary | string | yes | At least 1 character. At most 2000 characters. |
| report.operations | array of object | no | At most 100 items. Default []. |
| report.done | boolean | yes |
Example
{
"jobId": "6f1c2b0e-3d4a-4e5f-8a9b-0c1d2e3f4a5b",
"stepId": "0b7e9d2c-1a3f-4c5d-9e8f-7a6b5c4d3e2f",
"report": {
"summary": "Darkened the neutral text step for contrast",
"operations": [
{
"name": "designSystem.setTokens",
"input": {
"writes": [
{
"set": "core",
"path": "color.palette.neutral.900",
"type": "color",
"value": "#4a4a4a"
}
]
}
}
],
"done": false
}
}Rendering
render_preview
See a page of this site: its draft by default, or with target "live" what the public site serves now (the active published version as a visitor gets it, named in the answer's liveVersion), to confirm a publish or a rollback; a page that version lacks is page_not_live, a site never published site_not_live. mode "document" (default) answers a summary of its render: outlines of the rendered page and of its header and footer (regions; one line per node, text cut short), the node and scene counts and the sizes of the parts left out; with jobId, also the design-system declarations the proposal changes. find: "<words>" adds the nodes of the page, header and footer whose text holds those words, with their whole text: use it to check a text rather than reading the document. include names the parts to add, each large: "render" (the splash.render/1 document, about 110,000 characters on a large page), "regions" (the header and footer documents), "scenes", "designSystemCss" (the compiled stylesheet, about 240,000); mode "screenshot" a JPEG for one device (desktop 1440 px, tablet 820 px or mobile 390 px wide), with every image loaded: the whole page by default, the first screen with area "viewport", or the box of one node with crop { nodeId } (an id from the outline or the regions resource: a header or footer node, an instance by its own id; node_not_drawn when the node is absent or has no size at that width). The answer's text gives width, height, regionHeight and truncated: a region over 24 million pixels (about 16,600 px tall on desktop, 29,200 on tablet, 61,500 on mobile) comes back as its top part with truncated true; crop a lower node to see the rest. locale shows the page in another of the site's locales (site_context lists them; absent: the default locale), theme under one of its design-system themes (absent: the theme the site's rules pick) and colorScheme as a light or dark browser (screenshot only); an unknown locale or theme is refused (locale_unsupported, theme_unknown). With jobId (document mode, draft target only) the job's proposal runs as a dry run and the page is rendered as the proposal would leave it; the draft is not changed. Bounded by 30000 ms: past it the answer is the error code render_timeout.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | At least 1 character. |
| target | string | no | One of "draft", "live". Default "draft". |
| device | string | no | One of "desktop", "tablet", "mobile". Default "desktop". |
| mode | string | no | One of "screenshot", "document". Default "document". |
| jobId | string (uuid) | no | |
| find | string | no | At least 2 characters. At most 200 characters. |
| include | array of string | no | At least 1 item. At most 4 items. |
| locale | string | no | At least 2 characters. At most 35 characters. |
| theme | string | no | At least 1 character. At most 64 characters. |
| colorScheme | string | no | One of "light", "dark". |
| area | string | no | One of "page", "viewport". |
| crop | object | no | |
| crop.nodeId | string | yes | At least 1 character. At most 100 characters. |
Example
{
"pageId": "<page id from site_context>",
"target": "live",
"mode": "screenshot",
"device": "tablet",
"locale": "en-US"
}compare_reference
Compare a full-page screenshot of a draft page with a reference image: one of this site's media library (referenceMediaId) or an image at a public https URL (referenceUrl: fetched once, not stored, no redirects, an image content type, at most 20 MB; a refused URL answers reference_url_refused). Name exactly one. The page is captured like render_preview's screenshot, with the same device, locale, theme, colorScheme, area and crop (compare one section with crop { nodeId }); truncated tells whether the capture was cut. The reference is resized to the capture's width and compared with the visual review's metric: ratio (share of differing pixels, a pixel differs when a channel differs by more than the channel tolerance), heightMismatch (capture minus reference height, in pixels) and the verdict words ("identical" at or below the identical ratio, else "differs (ratio 0.123)"). Bounded by 30000 ms.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | At least 1 character. |
| device | string | no | One of "desktop", "tablet", "mobile". Default "desktop". |
| referenceMediaId | string (uuid) | no | |
| referenceUrl | string (uri) | no | At most 2048 characters. |
| locale | string | no | At least 2 characters. At most 35 characters. |
| theme | string | no | At least 1 character. At most 64 characters. |
| colorScheme | string | no | One of "light", "dark". |
| area | string | no | One of "page", "viewport". |
| crop | object | no | |
| crop.nodeId | string | yes | At least 1 character. At most 100 characters. |
Example
{
"pageId": "<page id>",
"device": "desktop",
"referenceUrl": "https://example.com/reference/home-desktop.png"
}Reporting a problem
report_issue
Report a problem to the platform owner when Libretto stops you or the person you work for: a bug, a missing capability, a refusal that looks wrong (category "refusal"), a docs gap (category "docs"), or anything else. Give a one-line title and a Markdown body (what you were doing, for whom, what blocked you); add steps, expected and actual (paste the error code and message), the requestId of the failing batch and the pageId when you have them. severity "blocking" means the person cannot go on. It is ticket.create in one call, without a batch: it changes nothing on the site. The answer is the ticket; read your tickets and the owner's close notes later at the tickets resource. At most 20 tickets an hour per person (ticket_rate_limited); a pageId that is not a page of this site is ticket_page_unknown.
Input
| Field | Type | Required | Notes |
|---|---|---|---|
| title | string | yes | At least 1 character. At most 160 characters. |
| body | string | yes | At least 1 character. At most 20000 characters. |
| category | string | yes | One of "bug", "missing-capability", "refusal", "docs", "other". |
| severity | string | no | One of "low", "medium", "high", "blocking". Default "medium". |
| pageId | string | no | At least 1 character. At most 36 characters. |
| steps | string | no | At least 1 character. At most 5000 characters. |
| expected | string | no | At least 1 character. At most 5000 characters. |
| actual | string | no | At least 1 character. At most 5000 characters. |
| requestId | string (uuid) | no |
Example
{
"title": "apply_ops refuses a hover colour on a button label",
"body": "Setting the hover colour of a `ds.button` label through `p:label|s::hover` is refused, although the inspector sets it.",
"category": "refusal",
"severity": "high",
"actual": "422 tree_invalid I8",
"requestId": "0b7c6d5e-4f3a-4b2c-8d1e-9f0a1b2c3d4e"
}Resources
A resource URI is libretto://site/<siteId>/<path>, with the site id of the token; site_context lists the ones a site has.
| Path | Template | Holds |
|---|---|---|
| context | no | The site, compact page summaries, its resources and baseRevisions: what site_context answers. |
| pages | no | The pages of the site, as site_context summarises them. |
| catalog | no | Every node type this site can place, one line each (catalog.index): id, kind, label, parts, states, slots and what it accepts. |
| design-system | no | The draft design system's index (designSystem.read): sets, themes, component variant keys and token group sizes. Query parameters add parts: ?tokens=color.palette,space, components=true, css=true, embeds=true. |
| presets | no | The presets this site can insert, without their trees (preset.index); ?kind=section or ?source=site narrows them. |
| motion | no | The scene recipes with their knobs, and the diagnosis codes. |
| tickets | no | The tickets you reported on this site, with their status and the platform owner's close note (ticket.list). |
| regions | no | The header and footer trees, whose node ids a scene names with region. |
| versions | no | The published versions, newest first (publication.versions); ?limit=50. |
| pending-changes | no | What changed since the live version, by area (publication.pending). |
| tree/<pageId> | yes | The outline of one page's tree, one line per node with the start of its text (?styles=font-size&depth=2&cursor=400 to add declarations, stop at a depth, page); with ?node=<nodeId>&depth=1, that node and its subtree with props and styles (tree.node); with ?full=true, the whole splash.tree/3 document. |
| outline/<pageId> | yes | The outline of one page's tree, as tree/<pageId> answers it without node or full. |
| motion/<pageId> | yes | One page's scenes and their findings. |
| component/<key> | yes | The cells of one design-system component, such as button, filtered and paged (designSystem.readComponent): ?variant=primary&state=hover&own=true, plus size, part, breakpoint, property, resolved=true, css=true, limit and cursor. |
| catalog/<type> | yes | One node type's whole registry entry, props schema included (catalog.entry), such as catalog/ds.button. |
| preset/<presetId> | yes | One preset with its tree (preset.read): ?kind=section is required, source=site for the site library. |
| versions/<versionId> | yes | The pages of one published version, with what a rollback of each would change (publication.versionPages). |
Generated from the operation registry and the MCP tool catalogue (source f27cd3d7604f71d9).
Something wrong on this page? Write to docs@librettocms.com.