{
  "$comment": "Generated by scripts/generate-surfaces.ts from the @texuli/tools operations registry; do not edit. pnpm check:surfaces fails on drift.",
  "serverInfo": {
    "name": "texuli",
    "title": "Texuli MCP Server",
    "version": "0.18.0",
    "description": "Every Texuli operation as an MCP tool: search the component catalog, read manifests and examples, validate manifests and blueprints, search, read and preview themes, and run deck and document commands. Local over stdio (npx -y @texuli/mcp, the edge and node operations) or remote over Streamable HTTP (https://texuli.com/mcp, the edge operations plus the site operations that list, read and search texuli.com's pages as Markdown). Read-only: nothing is stored, fetched from the network or modified.",
    "documentation": "https://github.com/DailybotHQ/texuli/blob/main/packages/tools/docs/mcp.md"
  },
  "protocolVersion": "2025-11-25",
  "protocolVersions": ["2025-11-25", "2025-06-18", "2025-03-26", "2024-11-05"],
  "statelessProtocolVersions": ["2026-07-28"],
  "transport": {
    "streamableHttp": {
      "url": "https://texuli.com/mcp",
      "stateless": true,
      "responses": "application/json",
      "authentication": "none",
      "operations": "edge, site",
      "limits": {
        "bodyBytes": 262144,
        "batch": 10,
        "callTimeoutMs": 5000,
        "ratePerMinute": 60
      }
    },
    "stdio": {
      "launch": "npx -y @texuli/mcp",
      "package": "@texuli/mcp",
      "authentication": "none",
      "operations": "edge, node",
      "limits": {
        "messageBytes": 2097152
      }
    }
  },
  "capabilities": ["tools", "resources", "prompts", "completions"],
  "tools": [
    {
      "name": "catalog.search",
      "title": "Search the component catalog",
      "description": "Search the built, content-addressed Texuli component catalog by text, group and emit tier. Returns the catalog hash and file name, the match count and one summary per component (id, package, label, summary, tier, group, emit tiers).",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "catalog.validate",
      "title": "Validate catalog manifests",
      "description": "Validate one candidate catalog manifest, or a set (which also catches duplicate ids), without writing files. Returns valid and a list of diagnostics, each with a code, a JSONPath, a message and a hint.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "component.get",
      "title": "Read a component manifest",
      "description": "Read one component manifest from the catalog by id. Returns { component }: its props with kinds and schemas, events, worked examples, useWhen and dontUseWhen guidance, accessibility notes and the emit tiers that may place it (an empty emit list means agent output may not).",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "example.search",
      "title": "Find component examples",
      "description": "Find worked manifest examples (props an agent can copy) by component id and/or example id, or search their titles and descriptions. Returns the match count and each example with its component id and package.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "blueprint.validate",
      "title": "Validate a blueprint draft",
      "description": "Validate a blueprint draft (a catalog tree, an array of trees, or a texuli-blueprint envelope, migrated first) with the catalog's checks: structure, sinks, tree limits, component ids, tiers, prop, block and document schemas, the envelope's designSystem (codes under $.designSystem), grammar and the frame root. Returns valid, status, tier, migratedFrom and diagnostics with stable codes.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "blueprint.theme",
      "title": "Apply a design system to a blueprint",
      "description": "Set a blueprint envelope's designSystem to a reference ({ ref: \"acme@2.1.0\" } or a library theme \"texuli:ocean\") or an inline document, wrapping a bare tree in a draft envelope first, then validate the result as blueprint.validate does; an inline document is also compiled for the contrast, focus and target guarantees. Returns valid, the themed blueprint and diagnostics with stable codes.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "block.list",
      "title": "List block types",
      "description": "List the content block types the blocks-* components render (table, stat, cta, poll …), optionally for one component or matching words. Returns the match count and, per type, the component that renders it, a label and when to use it; read one shape with block.schema.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "block.schema",
      "title": "Read a block shape",
      "description": "Read the shape of one content block type: the component that renders it, its fields as compact text and as a JSON Schema (required fields are the ones the validator refuses a block without), examples that validate in a blueprint, limits, when to use it and whether it can pass blueprint.validate today. Returns what a blocks-* node’s block prop needs.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "theme.search",
      "title": "Search the theme library",
      "description": "Search the Texuli theme library (200+ offline themes) by words, category, collection, mood or tag. Returns the match count and each theme’s metadata: id, name, description, category, collection, mood, tags, contrast level and whether it is dark-first.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "theme.get",
      "title": "Read a full theme",
      "description": "Read the full token definition of one library theme by id. Returns { theme }: its id, name, description and every light and dark color, radius, font and chart token, ready to compile or apply.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "theme.preview",
      "title": "Preview a theme",
      "description": "Preview one library theme in light or dark mode. Returns its summary, the key tokens of that mode (background, foreground, primary, border, radius, font …) and the WCAG 2.x AA contrast report for both modes (aa.pass and issue counts).",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.validate",
      "title": "Validate a design system",
      "description": "Validate a design-system document. Set full to run the complete locked-design-system validator, including catalog allow sets, extensions and an optional prototype's component and CSS policy checks. Returns every finding with stable code, severity, area, path and fix hint; the full mode is read-only and does not execute prototype sources.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.compile",
      "title": "Compile a design system",
      "description": "Compile a design-system document to concrete --tx-* variables per mode and emit one format: compiled JSON, scoped CSS, a Tailwind preset, DTCG or Tokens Studio. Returns valid, the format, its media type, the content as text, the hash and warnings; a refused document returns errors with stable codes instead.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.contrast",
      "title": "Report design-system contrast",
      "description": "Compile a design-system document and report every contrast pair the guarantees check, per mode: foreground and background roles, kind (text, ui, focus), ratio, requirement and pass, plus the solver adjustments. Returns valid, the target (AA or AAA), targetMin and the per-mode pairs, or errors with stable codes.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.suggest",
      "title": "Suggest a design system",
      "description": "Suggest a starting design-system document from one seed color, up to three brand colors (seed, secondary, accent) or a logo as RGBA pixels (the dominant colors pick the seed). Returns valid, the document, the dominant palette for pixels, the key tokens of each mode and warnings.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.import",
      "title": "Import a design system",
      "description": "Turn what a team already has into a valid design-system document: a brand one-liner (\"brand #4f46e5, font Inter, rounded, compact\"), a W3C DTCG file, a Tokens Studio file, a flat role palette or a Texuli theme (an object, or a library theme id). Returns valid, the document and warnings for every value it dropped, or errors with stable codes.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.generate",
      "title": "Generate a design-system draft",
      "description": "Combine a brand brief, token JSON, site CSS, logo pixels and/or a Texuli theme into a validated design-system draft. Returns the document, every reported loss, automatic AA repairs and guarantee results; it never saves or approves the draft.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.allow",
      "title": "List allowed components for a locked design system",
      "description": "Build the allow section of a locked design system from the catalog: a preset (minimal, a documented core; all, every component) or the ids you name, each with every variant, size, tone, density, color and state the catalog declares. Narrow it, put it under \"allow\" and run ds.validate. Returns allow, count, unknown ids and the minimal preset ids.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.bundle",
      "title": "Pack or unpack a portable design-system bundle",
      "description": "Pack a design-system document with its library sources and release history into one JSON bundle, or unpack a bundle and return those parts. Returns ok, the bundle or the document, allowManifest, librarySources and history; hash mismatches, oversized sources and path-traversing ids are refused with stable codes. Sources are never executed.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.diff",
      "title": "Diff two design systems",
      "description": "Compile two design-system documents (before is the baseline) and compare them: every added, removed or changed --tx-* variable per mode, contrast pairs that regressed below the target, changed component defaults and attributes. Returns valid, identical, the summary counts and each list, or errors tagged with their side.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.preview",
      "title": "Preview a design system",
      "description": "Render a static, deterministic snapshot of a compiled design system: svg (swatches, a button and a card per mode) or html (the review report: swatches, type ramp, component sheet, contrast table and adjustments). Fixed fonts, no time, no scripts; every value escaped. Returns valid, the format, media type, content and hash.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "ds.save",
      "title": "Save a design system to a file",
      "description": "Validate a design-system document (as ds.validate does) and write it as two-space JSON to an explicit .json path inside the working directory (traversal, symlinks, dot paths, node_modules, package.json and existing files without overwrite are refused). Anything marked approved is refused (approval-human-only). Local doors only. Returns saved, the path and bytes, or errors with stable codes.",
      "runtime": "node",
      "remote": false,
      "local": true,
      "readOnly": false
    },
    {
      "name": "deck.run",
      "title": "Run a deck command",
      "description": "Inspect, lint and convert a Texuli deck on the shared v2 model: capabilities, the JSON Schema, layouts, lint, inspect, from-markdown and to-markdown. Pure compute; returns { result } with the command output (ok, issues, deck, markdown …).",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "document.run",
      "title": "Run a document command",
      "description": "Create, validate, inspect, patch and convert a Texuli document (spec 0.7.0): capabilities, the JSON Schema, validate, inspect, a bounded RFC 6902 patch (at most 1000 operations), from-markdown, to-markdown and to-blueprint. Returns { result } with the command output; PDF and DOCX are document.export.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "document.export",
      "title": "Export a document as PDF or DOCX",
      "description": "Write a Texuli document as PDF or DOCX bytes with the owned writers, links and media checked at the tier. Returns { result } with ok, mime, byteLength, base64 bytes (no files are written), diagnostics and, for PDF, pageCount. Needs Node.",
      "runtime": "node",
      "remote": false,
      "local": true,
      "readOnly": true
    },
    {
      "name": "md.convert",
      "title": "Convert Markdown, HTML or a chat dialect",
      "description": "Convert untrusted Markdown, HTML or a chat dialect (Slack, Discord, WhatsApp, Telegram MarkdownV2 and HTML, Teams, Google Chat, Mattermost, plain text) through the texuli-md/v1 AST. URLs use the untrusted policy. Returns { value, diagnostics }.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "md.render",
      "title": "Render Markdown to safe HTML",
      "description": "Parse untrusted Markdown (GFM by default; gfm: false for strict CommonMark 0.31.2) and write a safe HTML fragment through the markup allowlist. Every href and src uses the untrusted URL policy; raw HTML is dropped. Returns { html, diagnostics }.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "emoji.search",
      "title": "Search the Texuli emoji catalog",
      "description": "Search the closed Unicode emoji catalog by name, shortcode or keyword. Returns { items }: approved ids with unicode, name, shortcode, category and score. Query at most 256 characters; at most 100 hits. Untrusted input; never throws. Needs Node (local MCP and CLI; not on texuli.com/mcp).",
      "runtime": "node",
      "remote": false,
      "local": true,
      "readOnly": true
    },
    {
      "name": "emoji.get",
      "title": "Read one emoji by id",
      "description": "Look up one closed catalog record by hyphenated id, Unicode sequence or :shortcode:. Returns { emoji } with unicode, name, shortcode, category and variant fields. Unknown ids are not-found. Untrusted input; never throws. Needs Node (local MCP and CLI; not on texuli.com/mcp).",
      "runtime": "node",
      "remote": false,
      "local": true,
      "readOnly": true
    },
    {
      "name": "emoji.convert",
      "title": "Convert shortcodes and Unicode emoji",
      "description": "Convert untrusted plain text between Unicode sequences and canonical Texuli shortcodes through the lean engine. dialect texuli is the default. dialect legacy is unsupported here and returns a diagnostic pointing at the local MCP. Returns { value, diagnostics }. Never throws.",
      "runtime": "edge",
      "remote": true,
      "local": true,
      "readOnly": true
    },
    {
      "name": "emoji.categories",
      "title": "List emoji categories",
      "description": "List the closed Unicode emoji categories with how many catalog records each holds. Returns { categories: [{ id, count }] }. No input. Never throws. Needs Node (local MCP and CLI; not on texuli.com/mcp).",
      "runtime": "node",
      "remote": false,
      "local": true,
      "readOnly": true
    },
    {
      "name": "emoji.variants",
      "title": "List emoji variants",
      "description": "List tone and other variants for a closed catalog id (or a variant of it). Returns { base, variants }. Unknown ids are not-found. Untrusted input; never throws. Needs Node (local MCP and CLI; not on texuli.com/mcp).",
      "runtime": "node",
      "remote": false,
      "local": true,
      "readOnly": true
    },
    {
      "name": "site.pages",
      "title": "List texuli.com pages",
      "description": "List the pages of texuli.com from its Markdown twin manifest, in path order, optionally under a path prefix, a page at a time. Returns the total, the offset, the next offset when more follow, and each page’s path, twin path, URL, title and description.",
      "runtime": "site",
      "remote": true,
      "local": false,
      "readOnly": true
    },
    {
      "name": "site.read",
      "title": "Read a texuli.com page as Markdown",
      "description": "Read one texuli.com page as its Markdown twin: the page’s own content with a header block (title, description, canonical URL, last updated). Accepts a route, its .md twin path or a texuli.com URL. Returns the path, twin, URL, title, the Markdown, its size and whether it was cut at the size cap.",
      "runtime": "site",
      "remote": true,
      "local": false,
      "readOnly": true
    },
    {
      "name": "site.search",
      "title": "Search texuli.com pages",
      "description": "Search texuli.com pages by words in their titles, headings, descriptions and paths, ranked deterministically (more matched words first, then title over path over heading over description). Returns the total and, per hit, the path, twin, URL, title, description, score and up to three matching headings.",
      "runtime": "site",
      "remote": true,
      "local": false,
      "readOnly": true
    }
  ],
  "deprecatedTools": [],
  "removedTools": [
    {
      "name": "deck",
      "replacedBy": ["deck.run"],
      "removedIn": "0.10.0"
    },
    {
      "name": "document",
      "replacedBy": ["document.run", "document.export"],
      "removedIn": "0.10.0"
    },
    {
      "name": "catalog",
      "replacedBy": ["catalog.search"],
      "removedIn": "0.10.0"
    },
    {
      "name": "component",
      "replacedBy": ["component.get"],
      "removedIn": "0.10.0"
    },
    {
      "name": "validate",
      "replacedBy": ["catalog.validate"],
      "removedIn": "0.10.0"
    },
    {
      "name": "example",
      "replacedBy": ["example.search"],
      "removedIn": "0.10.0"
    },
    {
      "name": "theme",
      "replacedBy": ["theme.search", "theme.get"],
      "removedIn": "0.10.0"
    }
  ]
}
