{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_7yru52nxp8tn","handle":"compose-preview-catalogs","url":"https://wellknown.network/agents/compose-preview-catalogs","links":{"self":"https://wellknown.network/agents/compose-preview-catalogs/record.json","html":"https://wellknown.network/agents/compose-preview-catalogs","markdown":"https://wellknown.network/agents/compose-preview-catalogs/record.md","api":"https://wellknown.network/api/v1/agents/compose-preview-catalogs","status":"https://wellknown.network/api/v1/agents/compose-preview-catalogs/status","claim":"https://wellknown.network/agents/compose-preview-catalogs/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/compose-preview-catalogs/claim.json","badge":"https://wellknown.network/agents/compose-preview-catalogs/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/compose-preview-catalogs/history","tools":"https://wellknown.network/api/v1/agents/compose-preview-catalogs/tools"},"ard":{"identifier":"urn:air:preview.coo.ee:server:compose-preview-catalogs","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"Compose Preview Catalogs","summary":"Browse, inspect and render Jetpack Compose Material 3 and Wear component catalogs.","description":"Browse, inspect and render Jetpack Compose Material 3 and Wear component catalogs.","publisher":{"name":"yschimke","url":null},"homepage":null,"repository":"https://github.com/yschimke/compose-preview-server","version":"3.110.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://preview.coo.ee/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-08T13:42:01.104845Z","publishedAt":"2026-10-08T13:42:01.104845Z","registryName":"io.github.yschimke/compose-preview"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"dev.version-control","name":"Version Control","confidence":1,"provenance":"derived"},{"slug":"commerce.ecommerce","name":"E-commerce Operations","confidence":1,"provenance":"derived"},{"slug":"media.3d","name":"3D & Design","confidence":0.977,"provenance":"derived"},{"slug":"code.documentation","name":"Code Documentation","confidence":0.583,"provenance":"derived"},{"slug":"documents.extraction","name":"Data Extraction","confidence":0.583,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"},{"slug":"commerce.payments","name":"Payments","confidence":0.525,"provenance":"derived"}],"categories":["code","commerce","content","dev","documents","media"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-09T23:30:15.446Z","lastProbedAt":"2026-10-09T23:30:15.446Z","statusComputedAt":"2026-10-09T23:31:18.807Z","reliability30d":{"probes":27,"successRate":1,"p50Ms":29,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":27,"ok":27,"authBoundaryOk":0,"serviceOk":27,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-09T23:30:15.446Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":26,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"c0401e5a0733c027431a1e3491d2ad9c96bbbd61c6dd44e41c34cc5f22b72f50","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.116.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T16:32:28.855Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":28,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"c0401e5a0733c027431a1e3491d2ad9c96bbbd61c6dd44e41c34cc5f22b72f50","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.114.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T10:23:22.371Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":28,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"7990ee42452c340be631c72b9cdd35abd91beacea1dd5147c121981acce5e742","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.112.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T04:28:18.545Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":29,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"7990ee42452c340be631c72b9cdd35abd91beacea1dd5147c121981acce5e742","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.111.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T22:23:39.144Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":24,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"7990ee42452c340be631c72b9cdd35abd91beacea1dd5147c121981acce5e742","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.111.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T15:23:57.254Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":163,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"eb9baf81b06120d02bc9cb6f066358c83e39b55b502b0b777b6d8722e5fd7e3f","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.110.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T08:28:26.050Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":29,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":68,"toolsHash":"eb9baf81b06120d02bc9cb6f066358c83e39b55b502b0b777b6d8722e5fd7e3f","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.109.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T01:22:45.049Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":25,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":65,"toolsHash":"8c7701d44b80691956747edd8e0bcd8300fb98313b10c1c3057b8dd1e9bbb5d2","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.108.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T19:23:58.740Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":27,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":65,"toolsHash":"8c7701d44b80691956747edd8e0bcd8300fb98313b10c1c3057b8dd1e9bbb5d2","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.107.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-07T12:30:37.018Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":326,"error":null,"detail":{"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"toolCount":65,"toolsHash":"b9000b89c50c21dfd34d844b5f2700a297e8a96f3ceec52762660330f0762904","serverName":"compose-preview-catalog","capabilities":["tools","resources","prompts"],"serverVersion":"3.106.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"request_access","description":"Ask a human for access to this server. Returns an approveUrl and a userCode: show BOTH to the person you are working with, ask them to open the link and check t"},{"name":"poll_access","description":"Collect the outcome of a request_access, proving possession of its deviceSecret. It HOLDS THE CALL OPEN and answers the moment the human decides — one call inst"},{"name":"status","description":"Report readiness and the aggregate catalog set."},{"name":"catalog_list_projects","description":"List every remote catalog with its stable id and preview count. Call this first: catalog_list_previews and catalog_list_data_products take one of these ids as '"},{"name":"catalog_library","description":"Open the hosted preview catalog browser app. With no arguments it lists every catalog with its preview count only; pass projectId to list one catalog's previews"},{"name":"ui_builder_open","description":"Open the UI Builder's design list: pick a design to see it as the editor draws it. Takes no arguments. Also opens from the ChatGPT/Codex sidebar, and a deep lin"},{"name":"catalog_list_previews","description":"List the Compose previews and published metadata of one hosted catalog. 'catalog' is required (ids from catalog_list_projects). Pass 'query' (a component name s"},{"name":"catalog_render_preview","description":"Render one preview. Like local compose-ai-tools, the default semantics observation is token-frugal; request observe=png for pixels, observe=svg for the compose/"},{"name":"catalog_render_matrix","description":"Render one preview across the cross-product of the given override axes in a single call, returning a hash/size observation per cell (observe=png adds the pixels"},{"name":"catalog_list_devices","description":"List the `@Preview(device = ...)` ids this server's render lane recognises, with each one's dp size and density. The `device` override takes one of these ids; a"},{"name":"catalog_diff_semantics","description":"Compare two previews' semantics by testTag: which tags are only in one side, which moved, and which changed occupancy count. Identity is the authored testTag, n"},{"name":"catalog_history_list","description":"The render timeline for one preview: which versions of its rendered bytes exist, when each appeared, and whether the preview is unstable (re-renders differently"},{"name":"catalog_history_diff","description":"Compare two of a preview's recorded renders. Defaults to the two newest — did the last publish move this preview? A metadata comparison: the timeline's versions"},{"name":"catalog_history_read","description":"Fetch one historical render's pixels through this server, by `commit` or `blob` (a prefix is enough). Use when an agent cannot reach the delivery branch itself,"},{"name":"ui_builder_list_catalogs","description":"List the component catalogs a UI-builder design can pin to. Start here: a design's `catalogPin` must name a revision this server actually serves, and each catal"},{"name":"ui_builder_search_components","description":"Find catalog components by name, role or trait (case-insensitive substring), e.g. `TextField`, `Button`, `Card`. Returns the same summary as ui_builder_list_cat"},{"name":"ui_builder_list_designs","description":"List the UI-builder designs on this server, newest first, with the cursor to continue."},{"name":"ui_builder_get_design","description":"Read one design: its whole document — nodes, slots, properties, modifiers, state variables and catalog pin — plus the revision to quote as `baseRevision` when e"},{"name":"ui_builder_preview_catalog_recovery","description":"Dry-run recovery of a design whose stored catalog pin no longer resolves. The server selects the exact currently served pin for the same catalog system and retu"},{"name":"ui_builder_await_design","description":"Wait for somebody else to change a design and return what they changed, rather than asking again whether they have. Returns the moment a designer in the browser"},{"name":"ui_builder_create_design","description":"Create a design, either from a whole `document` you supply or by copying an existing design named by `fromDesignId`. Copying is usually right: a document's `cat"},{"name":"ui_builder_apply","description":"Apply design mutations — insertNode, setProperty, deleteNode, moveNode and the rest of DesignMutationV1 — as one operation. `baseRevision` is the revision you r"},{"name":"ui_builder_move_design_home","description":"Move a design's canonical home between this server and a repository checkout. This changes real authoritative state: quote the exact `baseRevision` and current "},{"name":"ui_builder_replace_design_document","description":"Replace one stored design from a complete DesignDocumentV1 copy — the authoritative save-back and re-import operation. The document must name the same design an"},{"name":"ui_builder_export","description":"Export a design. `compose` returns the Kotlin the generator writes, or — when the design holds something it cannot express — diagnostics naming each reason. Thi"},{"name":"ui_builder_validate","description":"Check a design without saving it: a whole `document`, a stored design by `designId`, or `operations` against a stored design exactly as ui_builder_apply would a"},{"name":"ui_builder_put_asset","description":"Put a picture behind an `assetKey`, so an `asset/image` node naming that key draws it instead of a placeholder. Send the PNG, JPEG, GIF or WebP bytes base64-enc"},{"name":"ui_builder_design_access","description":"Read who can open a design: its owner, and every actor it has been shared with, each with the role and the actions that grant carries. Only the owner may ask — "},{"name":"ui_builder_share_design","description":"Share a design with somebody else, or take that sharing back. `actorId` is the other party's actor id as this server spells it — `github:<login>` for a signed-i"},{"name":"ui_builder_get_links","description":"Read what a design is **for**: the `issue` it was drawn for, the `reference` frame in the design tool it reproduces, the `pr` that implemented it, the `thread` "},{"name":"ui_builder_set_links","description":"Say what a design is for. **Replaces the whole record**: send every link you want kept, and omit one to clear it — so read ui_builder_get_links first if you are"},{"name":"ui_builder_rename_design","description":"Give a design a new title. The title is the one thing about a design nothing else could change: it is set at creation, shown in every listing and the editor, an"},{"name":"ui_builder_delete_design","description":"Delete a design you own, with its history, access list, overlay and discussion. Only the owner may — not an editor, not a viewer, and not anybody merely holding"},{"name":"ui_builder_list_comments","description":"Read the discussion on a design: every thread, where each is pinned — a markup stroke, a design node, or a point on the frame — whether it is resolved, and ever"},{"name":"ui_builder_post_comment","description":"Say something on a design — a reply into `threadId`, or a new thread when it is omitted. Pin a new thread with `markId` (a stroke on the reference overlay), `no"},{"name":"ui_builder_resolve_comment_thread","description":"Close a comment thread once it is answered, or reopen one by passing `resolved: false`. The resolution is attributed to you and is reversible."},{"name":"ui_builder_acknowledge_comment","description":"Say that you have read a comment thread — which is **not** the same as resolving it. Resolving claims the question is settled; acknowledging claims only that yo"},{"name":"ui_builder_react_to_comment","description":"React to one comment with an emoji, or take the reaction back with `on: false`. The lightest thing you can say: 👀 on a comment you have just picked up, 👍 on a"},{"name":"ui_builder_await_comments","description":"Wait for the discussion to move past `afterSequence` and return it, rather than polling for it. Returns as soon as anybody — a designer in the browser or anothe"},{"name":"ui_builder_render_native","description":"Compile a design and render it with real Compose on this host, rather than in the browser's Wasm canvas — the way to see what a design looks like on Android. Re"},{"name":"ui_builder_view","description":"See a design the way a person in the editor sees it: a PNG of the canvas with the overlays drawn on — the `selection` outline, the `reference` picture when one "},{"name":"ui_builder_check_design","description":"Check a design before you show it to anybody — one call instead of validate, view and an accessibility pass. Runs `schema` (document shape), `catalog` (the pinn"},{"name":"ui_builder_guidelines_prompt","description":"Read the exact prompt a design-guidelines model is given for a design, before anybody spends a key on it: the rules for the design's platform (Android design gu"},{"name":"ui_builder_get_guidelines","description":"Read a design's latest design-guidelines result, whoever ran it — a person in the editor on their own key, ui_builder_check_design on this host's key, or an age"},{"name":"ui_builder_record_guidelines","description":"Record your own model's verdicts on ui_builder_guidelines_prompt as the design's latest design-guidelines result, so the editor's Issues panel and other agents "},{"name":"ui_builder_render_design_matrix","description":"See one design on several devices in ONE picture: a contact sheet with a captioned cell per device × theme × font scale, plus each cell's device, size and box o"},{"name":"ui_builder_record_decision","description":"Record a review verdict — `approve` or `reject` — on one revision of a design, with an optional note. Kept beside the design, like comments: it never moves the "},{"name":"ui_builder_await_decision","description":"Wait for somebody to approve or reject a design, rather than asking again whether they have. Returns as soon as a decision lands after `afterSequence` — by defa"},{"name":"ui_builder_set_implementation","description":"Record the pull request that implements a design: its URL, its `status` (draft, open, merged, closed), the design `revision` it implements, and — once you have "},{"name":"ui_builder_implementation_status","description":"Everything the code side needs to implement a design, in one call: the revision, its links (issue, reference, PR, thread), the implementation PR with its status"},{"name":"ui_builder_find_design_for_pr","description":"From a pull request back to the design(s) it implements: every design you can read whose implementation record or links name `pr`, with the implementation statu"},{"name":"ui_builder_set_reference","description":"Attach the picture a design is being built against — a Figma frame, a screenshot of a shipped screen, a mock — as its reference overlay, or `clear` it. The same"},{"name":"ui_builder_compare_reference","description":"Measure a design against its reference overlay (attach one with ui_builder_set_reference). Returns what the picture is against the frame and whether a pixel com"},{"name":"ui_builder_list_revisions","description":"A design's retained revisions, newest first: each one's number, who made it, when, the operation that produced it (`setProperty ×2, insertNode`, `undo`, `restor"},{"name":"ui_builder_diff_designs","description":"Compare two designs, or two retained revisions of one: nodes added, removed and moved, and properties, modifiers and other fields changed, each with its node id"},{"name":"ui_builder_restore_revision","description":"Make a retained revision the design's current content again, **forward**: it is committed as a new revision and nothing after it is lost, so a restore is undone"},{"name":"ui_builder_fork_design","description":"Make a new design from one revision of another — yours to edit, owned by you, with its parent recorded: the fork's `forkedFrom` (design, revision, document dige"},{"name":"ui_builder_branch_design","description":"Fork a design at a revision into a **branch** to explore an alternative, or to change it without trampling somebody editing it live. A branch is a design with i"},{"name":"ui_builder_list_branches","description":"A design's branches, newest first: each one's id, name, owner, status (open, merged, archived), fork revision, head revision and the number of commands a merge "},{"name":"ui_builder_merge_branch","description":"Replay a branch's edits onto its parent's current revision through the same reducer every edit goes through — all or nothing. The reply reports every command: `"},{"name":"ui_builder_archive_branch","description":"Close a branch without merging it: it stays readable and listed, and can no longer be edited or merged. Needs write access to the parent, or to have made the br"},{"name":"ui_builder_compare_branches","description":"Put a design's alternatives side by side in one call: the parent's head and each open branch (or the `branchIds` named) rendered into ONE picture — a short-live"},{"name":"ui_builder_pick_branch","description":"Ask the person which alternative (open branch) of a design to keep, and return their choice. In ChatGPT or Codex it is a thumbnail picker, one option per branch"},{"name":"catalog_list_data_products","description":"List the structured data-product kinds of one catalog, optionally one preview. Name the catalog with 'catalog' (ids from catalog_list_projects) or a preview 'ur"},{"name":"catalog_get_preview_data","description":"Fetch the merged accessibility or annotation product for a preview. This lane requires live grant scope."},{"name":"list-all-documentation","description":"Storybook-MCP-compatible alias that lists every preview as a story."},{"name":"get-documentation-for-story","description":"Storybook-MCP-compatible preview metadata lookup."},{"name":"preview-stories","description":"Storybook-MCP-compatible rendering of one or more story ids. Requires live scope."}],"package":null,"toolSurface":{"id":"ts_hbtc8xdxas2w","endpointId":"ep_awq2erzwt8fu","hash":"c0401e5a0733c027431a1e3491d2ad9c96bbbd61c6dd44e41c34cc5f22b72f50","toolCount":68,"serverName":"compose-preview-catalog","serverVersion":"3.114.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-09T16:32:28.861Z","lastSeenAt":"2026-10-09T23:30:15.441Z","observations":2,"toolNames":["request_access","poll_access","status","catalog_list_projects","catalog_library","ui_builder_open","catalog_list_previews","catalog_render_preview","catalog_render_matrix","catalog_list_devices","catalog_diff_semantics","catalog_history_list","catalog_history_diff","catalog_history_read","ui_builder_list_catalogs","ui_builder_search_components","ui_builder_list_designs","ui_builder_get_design","ui_builder_preview_catalog_recovery","ui_builder_await_design","ui_builder_create_design","ui_builder_apply","ui_builder_move_design_home","ui_builder_replace_design_document","ui_builder_export","ui_builder_validate","ui_builder_put_asset","ui_builder_design_access","ui_builder_share_design","ui_builder_get_links","ui_builder_set_links","ui_builder_rename_design","ui_builder_delete_design","ui_builder_list_comments","ui_builder_post_comment","ui_builder_resolve_comment_thread","ui_builder_acknowledge_comment","ui_builder_react_to_comment","ui_builder_await_comments","ui_builder_render_native","ui_builder_view","ui_builder_check_design","ui_builder_guidelines_prompt","ui_builder_get_guidelines","ui_builder_record_guidelines","ui_builder_render_design_matrix","ui_builder_record_decision","ui_builder_await_decision","ui_builder_set_implementation","ui_builder_implementation_status","ui_builder_find_design_for_pr","ui_builder_set_reference","ui_builder_compare_reference","ui_builder_list_revisions","ui_builder_diff_designs","ui_builder_restore_revision","ui_builder_fork_design","ui_builder_branch_design","ui_builder_list_branches","ui_builder_merge_branch","ui_builder_archive_branch","ui_builder_compare_branches","ui_builder_pick_branch","catalog_list_data_products","catalog_get_preview_data","list-all-documentation","get-documentation-for-story","preview-stories"],"distinctSurfaces":8},"endpointFacts":[{"id":"ep_awq2erzwt8fu","url":"https://preview.coo.ee/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-08T08:28:26.085Z","auth":{"observedAt":"2026-10-08T08:28:26.292Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://preview.coo.ee/.well-known/oauth-protected-resource/mcp","resource":"https://preview.coo.ee/mcp","authorizationServers":["https://preview.coo.ee"],"scopesSupported":["preview","live","images","ui-builder-read","ui-builder-write","ui-builder-export"]},"authorizationServer":{"url":"https://preview.coo.ee/.well-known/oauth-authorization-server","issuer":"https://preview.coo.ee","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":null},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":false,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-08T08:28:26.341Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"preview.coo.ee","issuer":{"commonName":"YE2","organization":"Let's Encrypt"},"validFrom":"2026-09-15T17:24:27.000Z","validTo":"2026-12-14T17:24:26.000Z","daysToExpiry":65,"sanCount":1,"fingerprint256":"1A:A9:4C:16:8D:A9:35:7B:F3:D4:F6:9E:48:A3:A0:77:36:88:41:3E:5C:2F:E8:11:90:B5:33:49:9E:89:95:EE"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.yschimke/compose-preview","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.yschimke%2Fcompose-preview","firstSeenAt":"2026-10-02T21:21:04.356Z","fetchedAt":"2026-10-08T16:21:05.978Z","normalizedAt":"2026-10-08T16:21:05.978Z"}]},"firstSeenAt":"2026-10-02T21:21:04.356Z","updatedAt":"2026-10-09T23:32:17.472Z"}