Server MCP

I 10 strumenti e i 17 percorsi di risorsa del server MCP di Libretto, con i loro input e indicazioni.

Aggiornato il

Collegare un agente #

Il server MCP risponde su /api/mcp allo stesso indirizzo dell'admin, in HTTP streamable. Claude Code, Cursor, Codex e ogni altro client MCP si collegano con un token che vale per un solo sito, inviato come intestazione:

POST https://<indirizzo dell'admin>/api/mcp
Authorization: Bearer <token>

Ottenere un token #

  1. Entra nell'admin e, nella barra laterale, apri Persone e accessi › Agenti e accessi MCP.
  2. Dai al token un nome che dica dove vive, per esempio Claude Code, portatile.
  3. Scegli il sito. L'elenco contiene solo i siti che raggiungi.
  4. Scegli quanto dura: 90 giorni, il valore proposto, o 30 giorni. Ogni token scade.
  5. Copia il token. Lo vedi una volta sola, accanto alla configurazione del plugin di Claude Code e, per i client senza plugin, di Claude Code, Cursor e Codex, con l'indirizzo MCP del tuo server. Libretto non lo conserva: se lo perdi, revocalo e creane uno nuovo.

Un amministratore della piattaforma e un editor possono creare token. Un autore dei contenuti, un visualizzatore e un cliente non ancora.

Configurare il client #

Lo schermo che mostra il nuovo token prepara ogni client con l'indirizzo del tuo server già inserito, e nessun comando o file che propone contiene il token.

Claude Code: il plugin. Il plugin di Libretto aggiunge il server con il token conservato nel portachiavi del computer, un caricatore di immagini e le skill che insegnano a Claude a lavorare su Libretto. In Claude Code esegui /plugin marketplace add InnestiDigital/libretto-plugins, poi /plugin install libretto@libretti, e incolla il token quando Claude Code chiede le impostazioni del plugin. La guida passo passo è Connettere Claude a Libretto; il codice del plugin è pubblico su InnestiDigital/libretto-plugins.

Senza il plugin, tieni il token in una sola variabile d'ambiente, LIBRETTO_MCP_TOKEN (la stessa che legge il plugin), e ogni client la legge da lì. Mettila nel profilo della shell (per esempio ~/.zshrc), scrivendo il tuo token al posto di <token>, poi apri un nuovo terminale:

export LIBRETTO_MCP_TOKEN="<token>"

Qui sotto sostituisci <indirizzo dell'admin> con l'indirizzo del tuo admin.

Claude Code senza plugin. Esegui una volta in un terminale. Gli apici singoli lasciano nel comando il nome della variabile, e Claude Code ne legge il token a ogni avvio; --scope user rende il server disponibile in ogni progetto, e l'intestazione va dopo il nome e l'indirizzo. Non aggiungerlo insieme al plugin, altrimenti Claude Code si collega due volte.

claude mcp add --transport http --scope user libretto https://<indirizzo dell'admin>/api/mcp --header 'Authorization: Bearer ${LIBRETTO_MCP_TOKEN}'

Poi scrivi /mcp in Claude Code: libretto risulta collegato. Vedi la guida MCP di Claude Code.

Cursor. Aggiungi il server a ~/.cursor/mcp.json, il tuo file utente; Cursor legge la variabile con ${env:…}:

{
  "mcpServers": {
    "libretto": {
      "url": "https://<indirizzo dell'admin>/api/mcp",
      "headers": { "Authorization": "Bearer ${env:LIBRETTO_MCP_TOKEN}" }
    }
  }
}

Vedi la guida MCP di Cursor.

Codex. Aggiungi questo a ~/.codex/config.toml; indica la variabile, così il file non contiene mai il token:

[mcp_servers.libretto]
url = "https://<indirizzo dell'admin>/api/mcp"
bearer_token_env_var = "LIBRETTO_MCP_TOKEN"

codex mcp add libretto --url https://<indirizzo dell'admin>/api/mcp --bearer-token-env-var LIBRETTO_MCP_TOKEN scrive la stessa voce. Vedi la guida MCP di Codex.

Cosa può fare un token #

Un token agisce per la persona che l'ha creato, sul suo unico sito, con il ruolo di quella persona. discover_operations elenca solo le operazioni che il token può eseguire (contano il ruolo, i diritti del proprietario dello spazio di lavoro e l'accesso al design system), e ogni operazione controlla di nuovo il permesso.

RuoloCosa può fare il suo agente
Amministratore della piattaformaTutto, su ogni sito: creare siti e pagine, impostazioni, domini, lingue, accessi, e tutto il resto qui sotto.
Proprietario dello spazio di lavoroQuello che può un editor, più ogni area del design system, creare ed eliminare pagine, le cornici di layout e rimettere online una versione precedente, sui siti del suo spazio di lavoro.
EditorLeggere il sito; modificare pagine, livelli, stili, preset, componenti, menu e animazioni; il design system, per quanto lo permettono le sue impostazioni di accesso; contenuti, media e raccolte; pubblicare; gestire gli iscritti; annullare.
Autore dei contenutiNon può ancora creare un token. Nell'admin: i contenuti delle pagine (testi, link, immagini), i media e le voci delle raccolte; pubblicare; gestire gli iscritti.

Revocare un token #

La stessa schermata elenca i tuoi token: nome, sito, quando è stato creato, ultimo uso e scadenza. Revoca ferma subito un token. Un amministratore della piattaforma vede anche i token di tutti e può revocarne qualsiasi.

Un token smette di funzionare anche, alla richiesta successiva, quando:

  • scade;
  • l'account di chi l'ha creato viene eliminato, o deve cambiare la password;
  • chi l'ha creato perde l'accesso al sito, o lascia lo spazio di lavoro;
  • chi l'ha creato passa a un ruolo senza accesso agli agenti (autore dei contenuti, visualizzatore, cliente).

Un token non agisce mai sopra il ruolo che aveva chi l'ha creato al momento della creazione, né sopra il suo ruolo di oggi: se chi l'ha creato passa a un ruolo più basso, il token si restringe subito; una promozione non lo allarga. Crea un nuovo token per usare un nuovo ruolo.

Una prima sessione #

  1. Chiama site_context: il sito, le sue pagine, gli URI delle risorse e i baseRevisions che servono a un batch.
  2. Chiama discover_operations con una parola (tree, designSystem) per leggere gli schemi aggiornati.
  3. Leggi a piccoli pezzi. tree/<pageId> dà lo schema di una pagina, una riga per nodo con l'inizio del suo testo; ?styles=font-size,padding-top aggiunge quelle dichiarazioni a ogni riga, e tree/<pageId>?node=<nodeId> dà un nodo con le sue proprietà e i suoi stili. design-system dà un indice, e ?tokens=<gruppo>,<gruppo> dà solo i valori di quei gruppi di token. component/<key>?variant=<v>&state=<s>&own=true dà le celle che ti servono. versions e pending-changes dicono cosa è online e cosa porterebbe online una pubblicazione. Una lettura risponde al massimo 40.000 caratteri: le risorse oltre tornano in deferred, da leggere con un'altra chiamata.
  4. Manda il batch a dry_run_ops. Esegue ogni controllo e poi annulla tutto. Risponde con una ricevuta: le revisioni, i nodi cambiati da ogni modifica di un albero, le personalizzazioni cambiate da una scrittura sul design system con gli avvisi che le riguardano, e i risultati dei controlli contati. Aggiungi answer: "full" per la risposta intera.
  5. Manda lo stesso batch a apply_ops con un nuovo requestId.

Nota: ogni scrittura passa dal registro delle operazioni, lo stesso che usa l'admin. Un batch viene controllato, registrato e si può annullare, da qualunque parte arrivi.

Segnalare un problema #

Quando Libretto ferma te o la persona per cui lavori, chiama report_issue: un errore (bug), una funzione che manca (missing-capability), un rifiuto che sembra sbagliato (refusal), una lacuna di questa guida (docs) o altro (other). La segnalazione arriva al gestore della piattaforma, e sul sito non cambia niente.

{ "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>" }
  • severity è low, medium (il valore proposto), high o blocking (la persona non può andare avanti).
  • Aggiungi steps, expected, actual e il pageId quando li hai.
  • Leggi le tue segnalazioni, il loro stato e la nota di chiusura del gestore nella risorsa tickets (libretto://site/<siteId>/tickets). Chi ha creato il token le vede nell'admin, in Agenti e accessi MCP.
  • Al massimo 20 segnalazioni all'ora per persona.

Gli strumenti e le risorse elencati qui sotto sono generati dal catalogo del server e le loro descrizioni restano in inglese.

ToolGroupRead-onlyDestructiveIdempotentWhat it does
site_contextCore toolsyesnonoRead this token’s site, compact page summaries, urls, resources and baseRevisions.
discover_operationsCore toolsyesnonoLazily discover operations by name or by a word of their description.
read_resourcesCore toolsyesnonoRead 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_opsCore toolsnoyesyesApply one confirmed, revision-checked operation batch to this token’s site; returns inverses, findings and structured conflicts.
dry_run_opsCore toolsyesnonoValidate a complete operation batch with transaction rollback; publication and provider effects are refused.
job_next_stepAssistant jobsnonoyesLease 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_stepAssistant jobsnonoyesReport 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_previewRenderingyesnonoSee 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_referenceRenderingyesnonoCompare 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_issueReporting a problemnononoReport 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.

Strumenti di base

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.

read-only

Input

Nessun argomento: chiamalo con {}.

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.

read-only

Input

FieldTypeRequiredNotes
querystringnoDefault "".
namesarray of stringnoAt least 1 item. At most 20 items.
schemasbooleannoDefault false.
outputSchemasbooleannoDefault false.
cursorintegernoAt least 0. Default 0.
limitintegernoAt 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.

read-only

Input

FieldTypeRequiredNotes
urisarray of stringyesAt 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.

writesdestructiveidempotent

Input

FieldTypeRequiredNotes
format"libretto.batch"yes
v1yes
requestIdstring (uuid)yes
baseRevisionsrecord of integeryes
operationsarray of objectyesAt least 1 item. At most 100 items.
operations[].namestringyes
operations[].inputany JSONyes
operations[].refstringno
dryRunbooleannoDefault false.
confirmedarray of stringnoDefault [].
answerstringnoOne of "receipt", "full". Default "receipt".

Esempio

{
  "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.

read-only

Input

FieldTypeRequiredNotes
format"libretto.batch"yes
v1yes
requestIdstring (uuid)yes
baseRevisionsrecord of integeryes
operationsarray of objectyesAt least 1 item. At most 100 items.
operations[].namestringyes
operations[].inputany JSONyes
operations[].refstringno
dryRunbooleannoDefault false.
confirmedarray of stringnoDefault [].
answerstringnoOne of "receipt", "full". Default "receipt".

Esempio

{
  "format": "libretto.batch",
  "v": 1,
  "requestId": "0b7c6d5e-4f3a-4b2c-8d1e-9f0a1b2c3d4e",
  "baseRevisions": {
    "history": 12,
    "site": 3
  },
  "operations": [
    {
      "name": "site.update",
      "input": {
        "name": "Studio"
      }
    }
  ]
}

Lavori dell’assistente

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.

writesidempotent

Input

FieldTypeRequiredNotes
jobIdstring (uuid)yes

Esempio

{
  "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.

writesidempotent

Input

FieldTypeRequiredNotes
jobIdstring (uuid)yes
stepIdstring (uuid)yes
reportobjectyes
report.summarystringyesAt least 1 character. At most 2000 characters.
report.operationsarray of objectnoAt most 100 items. Default [].
report.donebooleanyes

Esempio

{
  "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
  }
}

Anteprima

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.

read-only

Input

FieldTypeRequiredNotes
pageIdstringyesAt least 1 character.
targetstringnoOne of "draft", "live". Default "draft".
devicestringnoOne of "desktop", "tablet", "mobile". Default "desktop".
modestringnoOne of "screenshot", "document". Default "document".
jobIdstring (uuid)no
findstringnoAt least 2 characters. At most 200 characters.
includearray of stringnoAt least 1 item. At most 4 items.
localestringnoAt least 2 characters. At most 35 characters.
themestringnoAt least 1 character. At most 64 characters.
colorSchemestringnoOne of "light", "dark".
areastringnoOne of "page", "viewport".
cropobjectno
crop.nodeIdstringyesAt least 1 character. At most 100 characters.

Esempio

{
  "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.

read-only

Input

FieldTypeRequiredNotes
pageIdstringyesAt least 1 character.
devicestringnoOne of "desktop", "tablet", "mobile". Default "desktop".
referenceMediaIdstring (uuid)no
referenceUrlstring (uri)noAt most 2048 characters.
localestringnoAt least 2 characters. At most 35 characters.
themestringnoAt least 1 character. At most 64 characters.
colorSchemestringnoOne of "light", "dark".
areastringnoOne of "page", "viewport".
cropobjectno
crop.nodeIdstringyesAt least 1 character. At most 100 characters.

Esempio

{
  "pageId": "<page id>",
  "device": "desktop",
  "referenceUrl": "https://example.com/reference/home-desktop.png"
}

Segnalare un problema

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.

writes

Input

FieldTypeRequiredNotes
titlestringyesAt least 1 character. At most 160 characters.
bodystringyesAt least 1 character. At most 20000 characters.
categorystringyesOne of "bug", "missing-capability", "refusal", "docs", "other".
severitystringnoOne of "low", "medium", "high", "blocking". Default "medium".
pageIdstringnoAt least 1 character. At most 36 characters.
stepsstringnoAt least 1 character. At most 5000 characters.
expectedstringnoAt least 1 character. At most 5000 characters.
actualstringnoAt least 1 character. At most 5000 characters.
requestIdstring (uuid)no

Esempio

{
  "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"
}

Risorse

L’URI di una risorsa è libretto://site/<siteId>/<path>, con l’id del sito del token; site_context elenca quelle che ha un sito.

PathTemplateHolds
contextnoThe site, compact page summaries, its resources and baseRevisions: what site_context answers.
pagesnoThe pages of the site, as site_context summarises them.
catalognoEvery node type this site can place, one line each (catalog.index): id, kind, label, parts, states, slots and what it accepts.
design-systemnoThe 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.
presetsnoThe presets this site can insert, without their trees (preset.index); ?kind=section or ?source=site narrows them.
motionnoThe scene recipes with their knobs, and the diagnosis codes.
ticketsnoThe tickets you reported on this site, with their status and the platform owner's close note (ticket.list).
regionsnoThe header and footer trees, whose node ids a scene names with region.
versionsnoThe published versions, newest first (publication.versions); ?limit=50.
pending-changesnoWhat changed since the live version, by area (publication.pending).
tree/<pageId>yesThe 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>yesThe outline of one page's tree, as tree/<pageId> answers it without node or full.
motion/<pageId>yesOne page's scenes and their findings.
component/<key>yesThe 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>yesOne node type's whole registry entry, props schema included (catalog.entry), such as catalog/ds.button.
preset/<presetId>yesOne preset with its tree (preset.read): ?kind=section is required, source=site for the site library.
versions/<versionId>yesThe pages of one published version, with what a rollback of each would change (publication.versionPages).

Generato dal registro delle operazioni e dal catalogo degli strumenti MCP (sorgente f27cd3d7604f71d9).

Qualcosa non va in questa pagina? Scrivi a docs@librettocms.com.

Guida di Libretto

Colophon. Questa guida è un sito Libretto: 68 pagine in due lingue, 20 pagine della guida importate da Markdown e 41 pagine di riferimento generate dal registro delle operazioni. Composta in Softcore, il codice in IBM Plex Mono. La sua struttura:

/it/ Guida di Libretto /it/start Per iniziare /it/start/request-access Richiedere l'accesso /it/start/workspace Il tuo spazio di lavoro /it/start/first-site Il tuo primo sito /it/start/invite-a-client Invitare un cliente /it/start/connect-claude Connettere Claude a Libretto /it/build Costruire /it/build/first-page Costruire una pagina /it/build/layers-and-canvas Livelli e canvas /it/build/site-components Componenti del sito /it/design-system Design system /it/design-system/tokens Colori, spazi e temi /it/design-system/components Componenti e varianti /it/design-system/fonts Tipografia e font /it/motion Movimento /it/motion/scenes Scene e ricette /it/motion/image-sequences Sequenze di immagini /it/motion/reduced-motion Movimento ridotto /it/publish Pubblicazione /it/publish/languages Le lingue del sito /it/publish/versions Pubblicazione e versioni /it/publish/members-and-forms Iscritti e moduli /it/publish/domains Domini /it/handover Consegnare un sito al cliente /it/glossary Glossario /it/agents Agenti e API /it/agents/mcp Server MCP /it/agents/cli CLI /it/agents/batches Batch /it/agents/errors Errori e segnalazioni /it/agents/operations Operazioni /it/search Cerca