Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Open Design

NPM · @FEIMACODE/OPEN-DESIGN-AGENT-KIT-MCP

Design skills, design systems and artifact tools: landing pages, decks, prototypes, posters, more.

+5 this week 73 Trust /100

Last scanned (1 hour ago)

Scores higher than 44% of npm servers

Category Design and Media

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 38 of 103 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8965 tokens (~389/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management33
  • Stability observed for 10 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "publish_open_design_artifact" implies "publish" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 +1
    • CVE-2026-97058 no longer affects this package ▲ security
    • Known CVEs: partial → pass ▲ security
  • 22 Oct 26 +4
    • Stability: unverified → 0.27 ▲ functional
  • 14 Oct 26 +30
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Tool coverage: unverified → 100 ▲ functional
    • Schema quality: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: excellent functional
    • First check of Schema quality: fail functional
    • First check of Destructive annotations: 0 functional
    • First check of Tool coverage: 100 functional
  • 12 Oct 26 38

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 24 Oct 2026 · Analysed npm/@feimacode/open-design-agent-kit-mcp@0.2.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 103 packages
Packages resolved 103
Stale 38
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 34 exposed · ~13,609 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
adapt_open_design_artifact ~522

Re-composes a finished, registered design for other canvas formats: the same message, copy hierarchy and design system, laid out again for each new size rather than scaled. Use when the user wants a poster or post "in other sizes", "for Instagram and Stories too", "as an A3 print as well", and so on. Returns, per format, instructions (with the master's HTML, that format's canvas rules and re-composition rules), a suggested entry path and the exact arguments to register it with. Writes no design file: write each adaptation yourself, register it with its registerArgs, then preflight and export it with its preset. The master and its adaptations are grouped as one collection (the master is added to a new one if it isn't in one). FLUID designs (data-od-fluid) already reflow to every shape, so for them it returns mode "tune" instead: per shape, instructions to check the master at that shape and fix it in place with @container rules; no new files and no collection.

NameTypeReqDescription
entryPathstringyesWorkspace-relative path to the registered master design's entry file.
formatsarrayyes1–6 target canvas formats. Screen: x-image (1600×900), ig-square (1080×1080 per card), ig-portrait (1080×1350), story (1080×1920), xhs-card (1080×1440 per card), yt-thumbnail (1280×720), linkedin-ima…
notesstring–Optional: what the user said about the adaptations (e.g. "keep the photo on the story").

No output schema declared.

No examples provided.

add_open_design_diagram_runtime ~288

Adds the diagram runtime to a diagram's HTML entry file, or updates it in place: one inline <script data-od-runtime="diagram"> block, placed before </body>, that lays the diagram out in the browser. It places nodes on a grid by rank and lane, draws right-angle connectors through the gaps between them with arrowheads and labels, boxes groups, and lays out sequence diagrams. The same file then renders identically in the preview, in export, in check_open_design_artifact and in any browser. Call it after writing the diagram markup (the diagram skill's workflow says when); it works before or after register_open_design_artifact and changes nothing else in the file. Never write, copy or edit the runtime yourself. The result restates the markup contract: a container with data-od-diagram (data-direction right|down, or ="sequence"); nodes with data-od-node, data-rank, data-lane, optional data-group and data-od-source; hidden <i data-od-link data-from data-to data-label> links; hidden <i data-od-group data-label> groups; for sequences, data-od-participant elements and hidden <i data-od-message data-from data-to data-label data-kind="return"> messages.

NameTypeReqDescription
entryPathstringyesWorkspace-relative path to the diagram's HTML entry file.

No output schema declared.

No examples provided.

check_open_design_artifact ~702

Renders a registered Open Design artifact in a headless browser (an installed Chrome, Edge, or Chromium) and returns what it looks like: screenshots attached as images, plus preflight findings (overflow and clipped text, contrast, text overlap, safe area, broken images/fonts, emoji, QR codes, and horizontal-scroll for pages that scroll sideways). Leaves the artifact and its manifest alone; saves the run's screenshots under .open-design/.checks/ so the user can see them, before and after, in the browser preview's Checks panel or at the listed paths. Call it after creating or substantially editing an artifact and registering it, before telling the user it's done: fix every ERROR, look at the screenshots for what the checks can't measure (balance, hierarchy, crowded or empty areas, text over busy imagery), then re-check — at most two fix rounds; tell the user about anything left. For a 3D design with a review sheet, a clean check isn't the end: get the critique the result asks for, for up to three critique rounds. What it renders: a page without a [data-od-card] at each viewport (default desktop 1440×900 and mobile 390×844, findings tagged by viewport); a card design (poster, social post) at its registered format size; a deck slide by slide (findings tagged by slide, one contact sheet of up to 12 slides — pass slides to see others). Screenshots are JPEG with a long edge of at most 1568 px; maxImages (default 3, max 6) bounds how many are attached, and 0 returns findings only. Returns a 'no-browser' error when no browser is installed: then skip the check and tell the user once that visual checking needs Chrome, Edge or Chromium. For bulk data rows or shape sheets, use export_open_design_artifact with checkOnly instead. A 3D scene that exposes window.odScene.scene, camera and renderer (the 3d-object ready contract) also gets a review sheet, one image showing the overview, close-up, low-angle and wireframe views (placed second), plus 3D evidence (pixel metrics, renderer…

NameTypeReqDescription
atarray–Animations: up to 6 times in seconds. Also captures the artifact at those moments on a virtual clock (labelled t=<seconds>s), so you can see the start, middle and end of an animation. They share maxI…
entryPathstringyesWorkspace-relative path to the registered artifact's entry file.
maxImagesinteger–How many screenshots to attach (default 3). 0 returns findings only.
slidesarray–Decks only: 1-based slide numbers to check (default every slide; the contact sheet shows the first 12 of them).
viewportsarray–Pages without a card only: 1–4 viewports to check instead of the default desktop 1440×900 and mobile 390×844.
views––3D scenes exposing window.odScene.scene/camera/renderer: which review views to put on the sheet (default all four: overview, closeup, low, wireframe), or false for no sheet.

No output schema declared.

No examples provided.

choose_open_design_direction ~172

Call when the user picks a direction from an exploration. Records the choice (marked on the comparison page) and returns instructions for the next step: 'build-out' builds the chosen sketch out at full fidelity, 'merge' does the same while taking named aspects from other directions (needs mergeFrom), and 'save-design-system' turns the direction into a reusable custom design system. Writes no design files.

NameTypeReqDescription
directionIdstringyesThe chosen direction id. It must already be registered.
explorationIdstringyesThe exploration id.
mergeFromarray–Required for 'merge': which aspects to take from which other directions.
nextstringyesWhat to do with the chosen direction.
notesstring–Optional: the user's own adjustments, in their words.

No output schema declared.

No examples provided.

compare_open_design_exploration ~132

Call after registering an exploration's directions. Refreshes and returns the path of its comparison page (compare.html: every direction side by side, opens in any browser from the file system), lists registered and missing directions, and with contactSheet: true renders a PNG of the comparison with the installed browser. If you can view images, check the contact sheet that the directions really differ before showing the user.

NameTypeReqDescription
contactSheetboolean–Also render the comparison page to exports/contact-sheet.png. Default false.
explorationIdstringyesThe explorationId returned by prepare_open_design_exploration.

No output schema declared.

No examples provided.

create_open_design_design_system ~253

Composes instructions for authoring a brand-new, custom design system as a DESIGN.md file plus a sibling tokens.css following the Open Design token contract. Does NOT write any files. If sourceUrl is given, performs a best-effort extraction of candidate colors/fonts from that page. After writing the files, call set_active_design_system with the returned id. To write ONLY a tokens.css for an existing custom design system (id starting with user:), pass existingDesignSystemId instead of name/brief.

NameTypeReqDescription
briefstring–A description of the brand, in the user's own words. Required unless existingDesignSystemId is given.
existingDesignSystemIdstring–Optional: the id of an existing custom design system (user:…). Returns instructions to write only its tokens.css, from its current DESIGN.md.
namestring–A short name for the design system. Required unless existingDesignSystemId is given.
sourceUrlstring–Optional: a website URL to take a rough starting palette and fonts from, by reading its source. For a design system that matches a site, call extract_open_design_design_system first instead: it rende…

No output schema declared.

No examples provided.

create_open_design_qr_code ~246

Generates a real, scannable QR code offline as SVG and saves it in a registered artifact's assets/ folder (listed in its manifest's supportingFiles), returning inline SVG markup to paste into the design. Use whenever a design needs a QR code (event sign-up, menu, ticket, download link); never draw a fake or placeholder one. The markup carries data-od-qr, so export preflight decodes the rendered code and checks it. For one code per row of a spreadsheet, mark the slot with data-od-qr-field="<column>" and export with data instead.

NameTypeReqDescription
entryPathstringyesWorkspace-relative path to the registered artifact the code belongs to.
errorCorrectionstring–Error correction level. Default M; use H when a logo will be placed over the code.
margininteger–Quiet zone in modules (default 4, the standard; don't go below 2).
namestring–File name for the SVG under assets/ (default "qr"), e.g. "signup-qr".
textstringyesWhat the code encodes, usually a full https URL.

No output schema declared.

No examples provided.

export_open_design_artifact ~2,792

Renders a registered Open Design artifact in a headless browser (an installed Chrome, Edge, or Chromium) and writes upload-ready file(s) under the artifact's own exports/ folder. Does not modify the artifact's source files. IMAGES (png/jpeg): use after register_open_design_artifact whenever the user wants an image to post (X, Instagram, Xiaohongshu, a YouTube thumbnail, a poster). Size comes from explicit width/height, else the source skill's aspect hint, else each selected element's box, else 1080×1080. For multi-card designs mark each card with data-od-card and pass selector "[data-od-card]" for one numbered image per card. Pass maxBytes with the platform's upload limit (X 5000000, YouTube thumbnail 2000000, Instagram 8000000) and images are re-encoded as JPEG until they fit. DECKS: format "pptx" gives a PowerPoint file with one full-bleed slide image per slide (pixel-perfect, not editable text); format "pdf" gives one page per slide. Slides are captured at the deck's own measured slide size, at scale 2 by default. Artifacts registered with kind "deck" (or made from an od:deck:* skill) are detected automatically; pass deck: true if a deck was registered as "html". Pass slides (1-based numbers) with format png/jpeg to export just those slides as images. PAGES: format "pdf" on an ordinary page prints it with the browser's print engine (vector, selectable text, A4 unless the page's CSS sets a size). Not for video — HyperFrames videos are rendered with the HyperFrames CLI per the brief's instructions. POSTERS AND PREFLIGHT: page exports run preflight checks (text overflow, safe area, print bleed size, minimum type size, contrast, emoji, image resolution for print, QR codes that don't decode, broken assets) and list findings, errors first; findings never block the export. Pass checkOnly: true to check without writing files, and fix every error before the real export. Pass preset with a format id ("ig-portrait", "story", "a3"…) rather than width/height/selector/maxByte…

NameTypeReqDescription
badgeboolean–standalone/site only: add a small, closeable "Made with Open Design" footer badge. Default: on for site, off for standalone (OPEN_DESIGN_SHARE_BADGE overrides the default).
baseUrlstring–site: the https address the bundle will be served from, so the link-preview image (og:image) can be an absolute URL. email and paste: where the artifact's files are hosted; relative image and link UR…
bleednumber–Print PDFs only: bleed in mm on every side. Default: the format's (3 mm for ISO sizes, 3.175 mm for US sizes). The card must be authored at trim size plus this bleed.
campaignSheetboolean–Fluid designs: also write exports/campaign-sheet.png — the master at every shape in presets (default: the usual poster and social shapes), plus the first screen of every other piece registered in the…
checkOnlyboolean–Run the page load and preflight checks only, writing no files and leaving the manifest alone. Use it to check and fix a design before exporting.
cropMarksboolean–Print PDFs only: add crop marks at the trim corners in a 10 mm slug around the page.
datastring–Workspace-relative CSV, XLSX or JSON-array file. For each row, [data-od-field="<column>"] elements are filled (text, or src on img, href on a) and [data-od-qr-field="<column>"] gets a QR code, in the…
deckboolean–Force deck handling (true) or page handling (false). Omit to detect it from the artifact's kind and source skill.
dpiinteger–Print images only (PNG or JPEG of a print format): the resolution, 150–600 (default 300). The image is the bleed box at this dpi, and the dpi is written into the file. Can't be combined with scale; o…
durationnumber–mp4/webm/gif only: length in seconds. Default: the sum of the frames' data-duration, else the longest CSS/Web animation, else 6.
embedAssetsboolean–standalone only: download the remote assets the page declares (a 3d-scene spec's assets, or an application/od-assets+json block: HDRIs, textures, glTF models with their files) and embed them in the p…
entryPathstringyesWorkspace-relative path to the registered artifact's entry file.
formatstring–Output format. png/jpeg: images; pdf: deck slides or a printed page; pptx: decks only; standalone: one self-contained .html with local CSS, scripts, images and fonts inlined (to attach or send); site…
fpsinteger–mp4/webm/gif only: frames per second. Default 30 (15 for GIF).
heightinteger–Viewport height in CSS pixels. Give together with width.
loopboolean–gif only: loop forever. Default true.
maxBytesinteger–Per-file byte budget; over-budget images are re-encoded as progressively lower-quality JPEG until they fit.
maxResolutionstring–With embedAssets: the highest Poly Haven resolution to fetch for textures and HDRIs (1k, 2k or 4k; default 1k). Models keep the resolution the page uses.
nameFieldstring–With data: the column whose value names each row's file (slugified, made unique), e.g. "name" gives poster-ada-lovelace.png. Default: row numbers.
presetstring–A canvas format id instead of hand-copied sizes. Screen formats (x-image (1600×900), ig-square (1080×1080 per card), ig-portrait (1080×1350), story (1080×1920), xhs-card (1080×1440 per card), yt-thum…
presetsarray–Fluid designs only: export several canvas shapes in one call, each reflowed and preflighted at its own shape and written as <name>-<format>.<ext> (PDF for print shapes, PNG for screen shapes unless f…
printHousestring–A print-house profile id from list_open_design_print_houses, e.g. "boardgamesmaker". Writes each card face at that printer's exact upload size and file type (bleed included, only bleed removed), with…
qualityinteger–JPEG quality (jpeg only). Default 90.
scalenumber–Device scale factor (1–3). Default 2 for deck pptx/pdf (crisp when projected), 1 otherwise.
selectorstring–CSS selector; each matching element is exported as its own numbered image (e.g. "[data-od-card]").
shapeSheetboolean–Fluid designs only: also write exports/<name>-shapes.png, one image showing the design at every shape in presets (default: all catalog formats), each labelled and marked when preflight found errors t…
sheetstring–XLSX data only: the sheet to read (default: the first).
slidesarray–Decks only: 1-based slide numbers to export, e.g. [1, 3]. With png/jpeg, one image per slide; with pdf/pptx, only these slides in this order.
splitboolean–With data and a PDF format: one PDF per row instead of one multi-page PDF.
targetstring–format "paste" only: where it will be pasted. wechat: top-level blocks become <section>s for the WeChat Official Account editor. notion: layout wrappers flattened and code-block languages kept, as No…
transparentboolean–png only: capture without the page background, so everything the design doesn't paint is transparent — for cut-outs such as a 3D product shot to place on slides or pages. The page (and a 3D scene's r…
widthinteger–Width in CSS pixels, given with height. Overrides the skill's size for images, the measured slide size for decks, or the print page size for page PDFs.

No output schema declared.

No examples provided.

extract_open_design_design_system ~335

Renders a website in an installed Chrome, Edge or Chromium and measures its design system: colour roles from the elements that carry them (page background, cards, text, borders, the primary button and its forced :hover/:active states), declared CSS custom properties, the fonts it loaded, text sizes, radii, spacing, container width and motion. Writes an evidence bundle (evidence.json, screenshots, one crop per role, the logo) under <output folder>/.extract/<site>/ and returns a draft token set on the Open Design token contract, with where each value came from and which tokens nothing measured. Does NOT write DESIGN.md or tokens.css: write both from the draft, keeping measured values as measured (the open-design-design-system-from-url skill has the steps), then save it as a custom design system. Only public http(s) pages; at most 4 pages, 20 seconds each; no logins, cookies or form submissions. A bot check, login wall or empty page comes back as blocked with its screenshot. With no browser installed, falls back to reading the page source and marks the result partial.

NameTypeReqDescription
extraUrlsarray–Optional: up to 3 more pages on the same site (a product or pricing page) to fill in roles the first page lacks.
themestring–Which theme to measure (default light). dark and both measure a dark theme only if the site has one (prefers-color-scheme or a theme attribute on the root element).
urlstringyesThe page to measure, e.g. the home page.

No output schema declared.

No examples provided.

find_open_design_3d_assets ~348

Searches Poly Haven (polyhaven.com) for free CC0 3D assets and returns the direct CDN file URLs a three.js page needs: an HDRI (.hdr, for real environment light and reflections), a PBR texture set (diffuse, normal, roughness, AO/roughness/metal JPGs) or a model (.gltf plus its included files). Use it in 3D designs when procedural shapes and RoomEnvironment aren't enough: a stone floor, a wood table, a sky, a lantern, a chair. Each result has its id, name, categories, size in meters for models, a thumbnail, the file URLs at 1k (default) or 2k, the license (CC0: no attribution needed) and a 'Powered by Poly Haven' credit. Load the files straight from their URLs (the CDN allows it) or download them into the design's assets/ for offline use; for a model, map its includes with a LoadingManager URL modifier. Writes nothing. If Poly Haven can't be reached, it says so: fall back to procedural materials.

NameTypeReqDescription
limitinteger–How many results (default 5).
querystringyesWhat to find, in a few words: a material ("cobblestone", "oak floor"), an object ("lantern", "armchair") or a sky ("sunset field", "overcast").
resolutionstring–File resolution (default 1k; 2k only for the hero object).
typestringyeshdri for environment light and sky, texture for a PBR surface, model for an object.

No output schema declared.

No examples provided.

finish_open_design_job_run ~286

Finishes a recurring-job run started with start_open_design_job_run. It runs checks that need no browser on the target entry (missing local files, empty data-od-field elements, leftover placeholder text such as {{, TODO or Lorem ipsum, numbers found in no source, and the artifact viewer's size limits for the preview), settles the status (completed only without check errors; needs-review when the job has checks: required and the run had no browser), records outputs not made with their reasons (captures without a browser as skipped: no-browser), writes the run record to the job's run log, and returns a one-paragraph summary plus the remaining steps (commit or push the state branch, a PR, connector deliveries only for a completed run). Refuses, writing nothing, when runId isn't a started run of this job.

NameTypeReqDescription
jobPathstringyesThe same job path passed to start_open_design_job_run.
notesstring–A sentence or two for the run record and summary: choices made without the person, anything odd.
outputsobject––
runIdstringyesThe runId start_open_design_job_run returned.
statusstringyescompleted when the design is done, needs-review when a person should look first, failed when it could not be made (e.g. a data pull failed).

No output schema declared.

No examples provided.

get_open_design_artifact ~142

Reads back a registered Open Design artifact: its manifest, entry file content, supporting file list, and the user's unaddressed comments from the browser preview or VS Code ('openComments', status open or sent). Each comment names its element (selector, text excerpt, htmlHint, rect) and its note; up to 4 comment screenshots are attached as images, newest first, and every comment's screenshot path is listed. Call it when the user says they left comments; address each one, then pass their ids as resolvedCommentIds to register_open_design_artifact.

NameTypeReqDescription
entryPathstringyesWorkspace-relative path to the artifact's entry file.

No output schema declared.

No examples provided.

list_open_design_design_systems ~246

Lists available Open Design design systems — brand-inspired visual token sets (palette, typography, spacing, component rules), each with a 'category' and an 'active' flag marking the current active design system, if any. Optionally filter by a free-text query and/or an exact category. MOBILE: category 'Mobile Apps' holds systems adapted from real iOS apps (ids ending in '-ios', e.g. 'spotify-ios'). For phone screens prefer them, even over a same-brand web system ('spotify'), which stays the one for web pages. If a query returns few or no results, call this tool again with a broader query or no arguments at all to browse the full catalog — do NOT search the filesystem, grep, or read any file (this catalog is not stored anywhere as a single readable file such as a content.json, index, or schema file; it exists only inside this server's own runtime and is reachable exclusively through this tool).

NameTypeReqDescription
categorystring–Optional exact category filter, e.g. 'E-Commerce & Retail'.
querystring–Optional free-text filter, matched against design system name, summary, and category.

No output schema declared.

No examples provided.

list_open_design_integrations ~388

Looks up trusted third-party MCP servers (Canva, Figma, Notion, Google Drive, Slack, posting services such as Buffer and Metricool, X's official server) that a workflow step can use instead of a manual handoff. Call it whenever a step would hand work to another service (import into Canva, read a Figma frame, save to Drive, share in Slack, post to a social network). With no arguments it returns the catalog of capabilities and integrations. With capability, integration and/or platform it returns the providers in priority order (official platform server, then official service, then posting services), the tool-name patterns that show each one is installed, the setup steps for this agent, and the consent rules. Check your own tools (including deferred ones) against those patterns: if one is installed, use it by its server-defined tool name. If none is, offer setup once and only proceed after the user says yes; never install silently, never ask for or write API keys. If the user declines, continue with the workflow's manual path. This tool only returns text: it installs nothing and contacts no service.

NameTypeReqDescription
agentstring–Which agent the setup steps are for. Defaults to the agent this server is connected to.
capabilitystring–What the step needs, e.g. "design.import", "design.read", "storage.upload", "team.share", "social.post". Call with no arguments to see every capability.
integrationstring–A specific integration id, e.g. "canva", "figma", "notion", "google-drive", "slack", "buffer", "metricool", "x".
platformstring–Social network, for social.* capabilities: x, linkedin, instagram, facebook, threads, tiktok, youtube, pinterest, bluesky, mastodon.

No output schema declared.

No examples provided.

list_open_design_print_houses ~126

Lists the card and sticker printers whose upload sizes the kit knows: each one's id, the formats it takes with the exact pixel size, file type and dpi, how it wants card backs, and the page those sizes came from with the date they were checked. Call it when the user names a printer or says the cards are going to a print house; pass the id as printHouse to export_open_design_artifact. When their printer isn't listed, export print images at 300 dpi and tell them to check the size against the printer's upload page. Read-only.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_open_design_skills ~771

Lists available Open Design skills, design templates, and remixable examples — reusable design-task recipes, rendering styles, and (for 'example' entries) actual starting artifacts bundled with this server. Each result's id is namespaced as 'od:<mode>:<name>' (e.g. 'od:deck:guizang-ppt') — pass this full id as skillId to prepare_open_design_brief or remix_open_design_example. Each result's 'source' field is 'skill', 'design-template', or 'example'. Some results include an 'examplePrompt' — prefer it (or lightly adapt it) over inventing your own brief when it closely fits. A result with remixable: true has an actual rendered starting artifact, bundled inside this server and never a file you can find on disk — prefer remix_open_design_example (which copies it into the workspace for you) over prepare_open_design_brief for those. Optionally filter by a free-text query, an exact mode, an exact source, and/or remixableOnly to see only entries with a rendered starting artifact. SURFACES: when the user names a kind of thing to make — a prototype or landing page, mobile app, slides, document, wireframe, animation, résumé, research synthesis, data report, poster or flier, social post, diagram — call this tool with surface set to that surface's id first (call with surface "list" to see the ids) and pick from its entries; if the surface names a prompt, follow that flow. STUBS: an entry with stub: true only advertises an upstream skill and has no instructions here — never pick one; choose a non-stub entry instead. PAGING: with more than 40 matches the result is { total, offset, nextOffset, modes, note, entries }, 100 compact entries (id, name, one-line summary, mode, source) per page; narrow with mode, source, query or surface for the full entries, or pass nextOffset as offset for the next page. If a query returns few or no results, call this tool again with a broader query or no arguments at all to browse the full catalog — do NOT search the filesystem, grep, or read any file…

NameTypeReqDescription
goalstring–A goal id from the "list" result (e.g. "promote-event", "get-hired"): returns the surfaces that goal leads to, in order, the first marked default. Use it when the user said what the design is for but…
modestring–Optional exact mode filter.
offsetinteger–Optional: where a paged listing starts. Pass the previous result's nextOffset for the next page.
querystring–Optional free-text filter, matched against skill name, description, and triggers.
remixableOnlyboolean–Optional: when true, only return entries with remixable: true (an actual rendered starting artifact to remix).
sourcestring–Optional exact source filter.
surfacestring–A kind of thing to make — returns that surface's entries in curated order (the recipe first, then its remixable example; never catalog stubs), plus the surface's own prompt and clarifying questions.…

No output schema declared.

No examples provided.

open_open_design_preview ~222

Shows a registered Open Design artifact to the user in a live browser preview: an app window of their installed Chrome, Edge or Chromium (else their default browser; else it returns the URL to open). The preview reloads whenever the design's files change. In its Comment mode the user clicks an element to leave a comment with a screenshot; its Send to agent button copies an instruction for them to paste here, and get_open_design_artifact returns the comments. Its Checks panel shows the screenshots of each check_open_design_artifact run, before and after. Call it once per session after the first register_open_design_artifact, unless the user declined; later calls switch the same window to another artifact. Omit entryPath for a list of the workspace's designs. Pass open: false to only get the URL.

NameTypeReqDescription
entryPathstring–Workspace-relative path to the registered artifact's entry file. Omit for the list of designs.
openboolean–Open a window (default true). false only starts the preview and returns its URL.

No output schema declared.

No examples provided.

port_open_design_artifact_to_app ~126

Composes instructions for porting a finished Open Design artifact's design into this workspace's actual, existing application as real, idiomatic production code. Does NOT write any files. Directs the model to ground the port in a real existing component and explicitly excludes routing/navigation wiring.

NameTypeReqDescription
entryPathstringyesThe workspace-relative path of the artifact to promote.
referenceComponentPathstring–Optional: an existing component file to use as the pattern reference.
targetComponentPathstring–Optional: where the new component/code file should be written.

No output schema declared.

No examples provided.

prepare_open_design_brief ~818

Composes generation instructions for an Open Design artifact by combining the chosen skill's workflow, an optional design system's visual tokens, universal craft rules, and the user's brief. Returns an 'instructions' string you must follow, plus a 'suggestedEntryPath'. Does NOT write any files — after calling it, author the entry file (and any supporting files) yourself with your normal file-editing tools, then call register_open_design_artifact.

NameTypeReqDescription
briefstringyesThe user's design brief / request, in their own words.
collectionIdstring–Set this (a slug you derive once from the collection name, reused verbatim on every call) when this artifact is one screen of a multi-screen design collection — see the "design collections" guidance…
collectionNamestring–A short display name for the collection, e.g. "Fintech Onboarding Flow". Required together with collectionId.
designSystemIdstring–Optional design system id from list_open_design_design_systems. If omitted, falls back to the active design system. If given explicitly, it also becomes the new active one.
fluidboolean–With format (or alone): build a fluid design that reflows to any canvas shape, sized in container units with layout rules for wide and tall shapes; the shape is then picked at export (preset/presets)…
formatstring–Optional canvas format. Adds a Canvas section with the exact size, units, safe area and, for print, bleed and minimum type size, so any skill can produce a post or poster at that size. Screen: x-imag…
screenRolestring–Required together with collectionId — this screen's short role label, e.g. "splash", "value-prop", "checkout".
screenTotalnumber–Optional: the total number of screens you've planned for this collection, for an accurate "screen N of M" framing.
skillIdstringyesA skill id from list_open_design_skills, in its full 'od:<mode>:<name>' form.
sourcesarray–Workspace paths of documents to build the design from (1–10): reports, specs, spreadsheets, existing decks, or repository files such as CHANGELOG.md or docs/adr/*.md. When given, the instructions add…

No output schema declared.

No examples provided.

prepare_open_design_exploration ~534

Use INSTEAD of prepare_open_design_brief when the user explicitly asks for options, directions, alternatives or several versions of a design. Assigns 2–4 deliberately different directions (visual styles when no design system is active, layout/narrative structures when one is, or labels you pass for a named axis), writes the exploration's plan, and returns sharedInstructions plus one short instructions block, entry path and directionId per direction. Directions are quick sketches; only the one the user picks is built out. Writes no design files: write each direction yourself (follow sharedInstructions + that direction's instructions), register it with explorationId and directionId, then call compare_open_design_exploration. STYLE TILES: with skillId od:design-system:style-tile the directions are compact color + type tiles (default 4, visual axis even with an active design system; axis "custom" with an active system evolves it). Choosing one with next "save-design-system" copies the tile's tokens verbatim.

NameTypeReqDescription
axisstring–What the directions differ in. Omit for the default: 'structure' when a design system is active (brand stays fixed), otherwise 'visual'. 'visual' with an active design system sets that system aside f…
briefstringyesThe user's design brief / request, in their own words.
countinteger–How many directions: 2–4, default 3; for the style-tile skill 2–6, default 4.
customDirectionsarray–For a user-named axis (e.g. "three hero concepts"): 2–4 directions (style tiles: up to 6), each a distinct label and a one-paragraph brief.
designSystemIdstring–Optional design system id. If omitted, the active one is used. If given, it also becomes the active one.
directionIdsarray–Optional: pick specific directions instead of the default order. Visual ids: modern-minimal, human-approachable, tech-utility, editorial-monocle (editorial/publishing briefs), brutalist-experimental…
skillIdstringyesA skill id from list_open_design_skills, in its full 'od:<mode>:<name>' form.

No output schema declared.

No examples provided.

publish_open_design_artifact ~614

Publishes a registered Open Design artifact as a live web page, so the user can share a link with teammates or stakeholders. Use when the user asks to share, publish, deploy, host or "get a link" for a design. (For a single file to attach or send, use export_open_design_artifact with format "standalone" instead.) It builds a deploy-ready folder (exports/site/) locally, then returns step-by-step instructions for publishing it with the host's own CLI from your terminal, under the user's own login or a temporary no-account link: netlify-temporary or cloudflare-temporary (no account, about 60 minutes unless claimed), or netlify, vercel, cloudflare-pages or github-pages (the user's own account). It never deploys anything itself and never handles tokens. Without provider, the instructions ask the user to choose. The instructions require the user's explicit yes before anything goes online. With provider claude-artifact (only if you have an Artifact tool: Claude Code or Claude Desktop), it writes the standalone file instead, checks it against the artifact viewer's limits, and returns instructions to publish that file by path with your Artifact tool; the artifact stays private until the user shares it, so there is no confirmation step. After a successful deploy or publish, call this tool again with published: { provider, url, claimUrl?, expiresAt?, siteRef? } to record the link, so the next publish updates the same site or artifact. With claude-artifact, sync: true also carries the design's working files in the page, so it can be restored elsewhere with restore_open_design_artifact; turn it on only after the user agrees.

NameTypeReqDescription
badgeboolean–Add the small, closeable "Made with Open Design" footer badge to the published page. Default true (OPEN_DESIGN_SHARE_BADGE=0 turns the default off).
entryPathstringyesWorkspace-relative path to the registered artifact's entry file.
includeFilesarray–Workspace paths of files in this artifact's own exports/ folder (e.g. an exported PDF) to host alongside the page, at files/<name> in the bundle, publicly downloadable at <site URL>/files/<name>. Use…
providerstring–Where to publish. Omit to get the choices to show the user.
publishedobject–Record mode: what the deploy reported. Doesn't rebuild anything.
syncboolean–claude-artifact only: carry the design's working files (entry, manifest, comments, supporting files, a custom design system's DESIGN.md) in the page, so restore_open_design_artifact can pick the desi…

No output schema declared.

No examples provided.

publish_open_design_artifact_to_canva ~346

Gets a finished Open Design artifact into Canva. Called with entryPath alone, it composes instructions and writes nothing. The instructions have you export the artifact (PDF, or PPTX for a deck), check whether the user's Canva MCP server is connected (via list_open_design_integrations), and then: when Canva is connected, let the user choose between an editable import (the export is hosted briefly on a public link with publish_open_design_artifact, then Canva's import-design-from-url converts it into a design, optionally published as a Brand Template after their yes) and a private upload into their Canva Uploads; when it isn't, offer setup once and otherwise give them Canva's manual Import a file steps. For the private upload, call it again with filePath (the export) and uploadUrl (from Canva's create-upload-url): the server then POSTs the file's bytes to that canva.com URL from the machine the file is on, so no terminal is needed, and returns the fileId. Use when the user wants an artifact in Canva, as a Canva design or a Canva template.

NameTypeReqDescription
entryPathstringyesThe workspace-relative path of the artifact to get into Canva (as passed to register_open_design_artifact).
filePathstring–The exported file to upload (route B), workspace-relative as export_open_design_artifact returned it; must be in the artifact's exports/ folder. Pass with uploadUrl.
uploadUrlstring–The single-use upload URL from Canva's create-upload-url (https, canva.com). With filePath, the server uploads the file there instead of returning instructions.

No output schema declared.

No examples provided.

publish_open_design_artifact_to_shop ~425

Gets finished shop designs into the user's online shop: the product images (and any other design filled per product) from the product list. For shop "shopify" it composes instructions and writes nothing: check whether Shopify's connector is connected (via list_open_design_integrations and your own tools), and if it is, show the product matches first, make the first three updates one at a time with the user's go-ahead, create new products only as drafts, leave price, stock and visibility alone unless asked, attach images only if a connector tool can, and report what changed per product. Otherwise, and for bigcartel, etsy and other shops, it exports each design once per product and writes <design folder>/for-<shop>/: images named <product>-1.png, <product>-2.png…, copy.md with each product's title, price and description, and for Shopify a products.csv in Shopify's import format (unpublished, image links empty), plus the shop's own upload steps to pass on. Cost, margin, supplier, stock and note columns are never used. This tool never contacts the shop.

NameTypeReqDescription
datastring–Workspace-relative product list (CSV, XLSX or JSON array), one row per product: the same list the designs were exported with. Needed for the folder.
entryPathsarrayyesWorkspace-relative entry files of the registered designs to put in the shop, each with [data-od-field] fields filled per product (e.g. the product image, then a second angle). Their images become <pr…
folderboolean–Shopify only: write the hand-off folder now instead of the connector instructions (when the connector isn't connected, the user declined it, or it can't attach images). Other shops always get the fol…
nameFieldstring–The column holding each product's title. Default: a title, name or product column.
shopstringyesWhere the user sells.

No output schema declared.

No examples provided.

pull_open_design_figma_frame ~231

Composes instructions for translating a Figma frame into a real code artifact with 1:1 visual fidelity. When the user's Figma MCP server is connected (checked via list_open_design_integrations), the instructions use Figma's own get_design_context, get_variable_defs and get_screenshot; no token needed. A Figma personal access token is optional: when one is configured, the frame's structural summary and a rendered image are fetched too and included as ground truth, and it's the fallback when Figma isn't connected. Does NOT write any files — author the entry file yourself with your normal file-editing tools, then call register_open_design_artifact. figmaUrl must be a frame-scoped link (Figma's "Copy link to selection", with node-id), not a bare file link.

NameTypeReqDescription
designSystemIdstring–Optional design system id from list_open_design_design_systems to align the translated code with.
figmaUrlstringyesA Figma frame URL, e.g. from "Copy link to selection" — must include a node-id.

No output schema declared.

No examples provided.

push_open_design_artifact_to_figma ~273

Pushes a finished Open Design artifact into Figma as editable layers through the user's Figma MCP server. Renders the artifact in a headless browser and captures its layers (or reuses a capture newer than the file), then writes ready-to-run code parts and image files under the artifact's exports/figma/ and returns instructions: check Figma is connected (list_open_design_integrations), ask the user whether to add to an existing Figma file (a link) or create a new one, load Figma's figma-use guidance, run each part with Figma's use_figma exactly as written, upload the images with upload_assets, then verify with get_screenshot and share the link. Never contacts Figma itself. When Figma isn't connected, the instructions offer setup and otherwise give the OD Figma Import plugin steps. Use when the user wants a design in Figma ("push this to Figma", "get this into Figma", "hand this off to design").

NameTypeReqDescription
entryPathstringyesThe workspace-relative path of the artifact's entry file (as passed to register_open_design_artifact).
refreshboolean–Re-capture the artifact even when a capture newer than the file exists (for example after changing assets the capture can't see).

No output schema declared.

No examples provided.

read_open_design_source ~172

Converts a workspace document (DOCX, PPTX, XLSX, PDF, Markdown, text or CSV) into Markdown under the output directory's sources/ folder, extracts its embedded images, and returns an outline (headings with line ranges and sizes), never the full text. Read the returned markdownPath yourself, by line range, for the sections you need. Cached by content hash. Use it to look into a source before deciding how to use it; prepare_open_design_brief with `sources` calls it for you. PDFs need `pdftotext` (poppler); without it the result says to read the PDF with your own tools.

NameTypeReqDescription
pathstringyesWorkspace-relative path of the document, e.g. "docs/q3-report.docx" or "CHANGELOG.md".

No output schema declared.

No examples provided.

recommend_open_design_design_systems ~344

Recommends 3 to 5 Open Design design systems for a design, ranked the same way every time, each with a one-line reason and its look (light or dark, accent, display type, corner shape). Use it before prepare_open_design_brief when the user hasn't named a design system or a look, no design system is active, and they want a new design (not an edit, remix or export). Fill the profile from the request, the conversation and the workspace; leave out what you don't know. If the result includes `questions`, ask them once, in one message, and accept "you pick" (then use the first recommendation). Otherwise use the first recommendation, say which one you used and that they can switch. Does NOT change the active design system: pass the chosen id to prepare_open_design_brief. Product-named looks (Stripe, Linear…) are recommended only when the user names that product, via likeBrands or the brief.

NameTypeReqDescription
avoidarray–Design system ids or moods to leave out.
briefstring–The request in the user's words.
industriesarray–What the design is for.
likeBrandsarray–Products or sites the user wants it to feel like, e.g. ['Notion'].
limitnumber–How many to return, 3 to 5 (default 5).
moodsarray–How it should feel, most important first.
surfacestring–Where it will be seen.
themestring–Light or dark, only if the user said or the context makes it clear.

No output schema declared.

No examples provided.

register_open_design_artifact ~503

Call this AFTER you have written an artifact's entry file (and any supporting files) into the workspace with your normal file-editing tools. Validates the artifact and writes its manifest sidecar (<entry>.artifact.json) next to the entry file. Fails clearly if entryPath does not exist yet.

NameTypeReqDescription
collectionIdstring–The same collectionId passed to prepare_open_design_brief, if this screen is part of a design collection.
collectionNamestring–The same collectionName passed to prepare_open_design_brief, if this screen is part of a design collection.
designSystemIdstring–The designSystemId used to generate this artifact, if any.
directionIdstring–The direction's directionId, for an exploration sketch. Leave it out for a built-out or merged version registered against the exploration.
entryPathstringyesWorkspace-relative path to the artifact's entry file.
explorationIdstring–The explorationId from prepare_open_design_exploration, if this artifact belongs to a design exploration. Updates its comparison page.
formatstring–The canvas format passed to prepare_open_design_brief (or the adaptation's registerArgs), if any. Recorded in the manifest's metadata.format so export, preflight and adaptation use it without repeati…
kindstringyesThe kind of artifact.
resolvedCommentIdsarray–Ids of the user's comments (from get_open_design_artifact's openComments) that this edit addressed. They're marked resolved and their pins leave the preview.
screenIndexnumber–0-based position of this screen within its collection (0 for the first screen, 1 for the second, ...).
screenRolestring–The same screenRole passed to prepare_open_design_brief, if this screen is part of a design collection.
sourceSkillIdstring–The skillId used to generate this artifact, if any.
sourcesarray–The same source document paths passed to prepare_open_design_brief. Records each source's hash in the manifest and, for HTML, reports numbers on the page that appear in none of the sources so you can…
supportingFilesarray–Workspace-relative paths to sibling files the entry depends on, relative to the entry file's directory.
titlestringyesA short human-readable title for the artifact.

No output schema declared.

No examples provided.

remix_open_design_example ~74

Copies a curated Open Design example artifact (identified by its skillId, which must have remixable: true) into the workspace as a starting point, registers it, and returns instructions to MODIFY the copied file rather than regenerate it from scratch.

NameTypeReqDescription
skillIdstringyesA skillId with remixable: true.

No output schema declared.

No examples provided.

restore_open_design_artifact ~261

Restores an Open Design design from a synced Claude artifact (one published with publish_open_design_artifact, provider claude-artifact and sync: true) into this workspace, so it can be edited and republished here. Use when the user gives a Claude artifact link to pick a design back up on another device or in a new session. First read the artifact with your Artifact tool, which saves the page to a file; pass that file's path (in Claude Desktop with a folder, a path in the connected folder) and the artifact link. It writes the design's files under the output directory, all or nothing, refuses paths that leave it, and doesn't overwrite local files that differ unless overwrite is true. It records the link, so the next preview publish updates the same artifact. Never makes a network request.

NameTypeReqDescription
artifactUrlstringyesThe artifact's https://claude.ai/... link.
overwriteboolean–Replace local files whose content differs from the artifact's. Default false: the restore then writes nothing and lists them. Only after the user chooses the artifact's version.
pagePathstringyesPath of the page your Artifact tool saved when reading the artifact: absolute, or relative to the workspace.

No output schema declared.

No examples provided.

set_active_design_system ~83

Sets (or clears, if designSystemId is omitted/empty) the active Open Design design system, persisted for this workspace. Used automatically by prepare_open_design_brief whenever called without an explicit designSystemId.

NameTypeReqDescription
designSystemIdstring–A design system id from list_open_design_design_systems. Omit or pass an empty string to clear.

No output schema declared.

No examples provided.

set_open_design_workspace ~194

Sets the folder Open Design works in for the rest of this session: where designs, manifests and .open-design/config.json are written, and what every workspace-relative path in other tools' results is relative to. Call it once, before any other Open Design tool, when this server can't know the user's folder on its own — in Claude Desktop chats with a connected folder it starts in the user's home folder. Pass the folder's absolute path on the machine this server runs on (in Claude Desktop, the path get_device_info lists under connectedFolders), not the path your own file tools see it under. Afterwards, join the workspace-relative paths other tools return onto your own path for that folder when you read or write files. Not needed in Claude Code, Codex or VS Code, which start the server in the project.

NameTypeReqDescription
pathstringyesAbsolute path of the user's folder on the machine this server runs on.

No output schema declared.

No examples provided.

show_open_design_artifact ~330

Shows a registered Open Design artifact, or an exploration's directions side by side, or a fluid master's campaign sheet, to the user inline in the conversation, in hosts that render MCP Apps (Claude Desktop Chat). There the user can switch to Comment mode, click an element and leave a comment, then click "Ask Claude to apply", which posts a message here naming the comment ids; export buttons post a request for export_open_design_artifact (the page never downloads). For an exploration, "Take this one" posts the user's pick; confirm the next step with them before calling choose_open_design_direction. A style-tile exploration also offers "Use as design system", which asks directly for next: "save-design-system". With campaign: true (after export_open_design_artifact with campaignSheet: true) it shows every tile of the master's campaign sheet with its errors; "Fix this piece" posts the tile and its errors here. Every host also gets a text result (title, path, open comments, or the campaign tiles); hosts without MCP Apps are told to use open_open_design_preview. In Claude Desktop Chat call it after register_open_design_artifact and after applying comments. Pass entryPath, or explorationId for an exploration.

NameTypeReqDescription
campaignboolean–With a fluid master's entryPath: show its last campaign sheet, tile by tile, instead of the design.
entryPathstring–Workspace-relative path to the registered artifact's entry file.
explorationIdstring–An exploration id from prepare_open_design_exploration, to show its directions instead.

No output schema declared.

No examples provided.

start_open_design_job_run ~310

Starts one run of a recurring Open Design job: a job file at .open-design/jobs/<id>.job.md (YAML frontmatter naming the recipe, period, timezone, mode, target and outputs, then the brief). Call it first whenever a prompt says "Run the Open Design job <path>" (usually a scheduled task), or for the supervised first run after writing a job. It validates the job (listing every problem by field), works out the period key in the job's timezone (2026-10-21, 2026-W43 or 2026-10), and returns skip with a reason when this period already has a completed run and the sources haven't changed: then report that in one line and change nothing. Otherwise it records a started run and returns its runId, the target entry's state (exists, staleSources, the preview link), the run's capabilities (browser, cloud) and the ordered steps to follow, ending with finish_open_design_job_run. In a cloud session it first asks you to check out the job's state branch. Runs stay private: never publish publicly or post to social networks from a job run.

NameTypeReqDescription
jobPathstringyesWorkspace-relative path of the job file, e.g. ".open-design/jobs/weekly-kpis.job.md".
runNowboolean–Rebuild even though this period already has a completed run (the person asked for a fresh run). Don't set it from a scheduled prompt.

No output schema declared.

No examples provided.

Install

How do I install the Open Design MCP server?

Open Design runs locally as an npm package, launched with npx -y @feimacode/open-design-agent-kit-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @feimacode/open-design-agent-kit-mcp

# add to Claude Code
claude mcp add feimacode-open-design -- npx -y @feimacode/open-design-agent-kit-mcp
Common questions

What is the Open Design MCP server?

Open Design is an MCP server listed in the public MCP registry as io.github.feimacode/open-design. Design skills, design systems and artifact tools: landing pages, decks, prototypes, posters, more. This page covers its npm package (@feimacode/open-design-agent-kit-mcp).

Is the Open Design MCP server safe to use?

Open Design scores 73 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Open Design MCP server expose?

Open Design exposes 34 tools: list_open_design_skills, list_open_design_design_systems, recommend_open_design_design_systems, read_open_design_source, prepare_open_design_brief, and 29 more. Their descriptions and schemas cost roughly 13,609 tokens of context every time the server is loaded.

Is the Open Design MCP server still maintained?

Open Design is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Open Design MCP server under?

Open Design declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.