@sorb/tap
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@sorb/tapWhat's the button background token, and where does it come from?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@sorb/tap
Give your AI agent read access to your design system. @sorb/tap is an
MCP (Model Context Protocol) server for
design tokens: point it at a
DTCG token file, a
Sorb™ project, or a running Sorb bridge, and your
agent can answer questions like "where does this button color come from?" —
with the actual alias chain and the components that use it. Read-only by design.
Quickstart
# Claude Code — try it against the bundled example set:
claude mcp add sorb-tap -- npx -y @sorb/tap --tokens node_modules/@sorb/tap/examples/acme-tokens.json
# …or your own DTCG file(s):
claude mcp add sorb-tap -- npx -y @sorb/tap --tokens tokens.jsonThen ask: "What's the button background token, and where does it come from?"

Other MCP clients (Cursor, LangChain, anything that speaks MCP over
stdio): register the same command — npx -y @sorb/tap --tokens tokens.json —
as a stdio server, using your client's own config format.
Related MCP server: ds-mcp
What the agent sees
Real output against examples/acme-tokens.json:
▸ resolve_token { "id": "component.button.bg" }
{
"id": "component.button.bg",
"cssVar": "--component-button-bg",
"value": "#3b82f6",
"chain": ["semantic.brand.primary", "primitive.blue.500"]
}
▸ list_tokens { "tier": "semantic" }
{
"count": 4,
"tokens": [
{ "id": "semantic.brand.primary", "cssVar": "--semantic-brand-primary",
"value": "#3b82f6", "tier": "semantic", "type": "color" },
…
]
}Tools
Six tools, all read-only. Token ids are dot paths (component.button.bg);
everywhere an id is accepted, the CSS variable form (--component-button-bg)
works too.
tool | what it returns |
| tokens with id, CSS variable, resolved value, tier, type — filter by tier ( |
| one token, raw authored value + resolved |
| final value with the alias chain that produced it |
| captured components/stories |
| role → token map ( |
| reverse index: which components bind a token, and in which roles |
Plus one resource, sorb-tap://tokens — the full resolved token map as JSON.
The three component tools need Sorb capture artifacts (sorb-seed capture) or
a bridge; in bare-DTCG mode they say so instead of returning silent emptiness,
so the agent knows what would unlock them.
Sources
flag | serves |
| bare DTCG token file(s) — no Sorb required |
| a Sorb project: |
| a running Sorb bridge ( |
No flags: auto-detects .sorb/ in the cwd, else tokens/*.json.
Env: SORB_TAP_BRIDGE (bridge URL), SORB_TAP_PK (read-only key).
LangChain
A runnable example agent lives in
examples/langchain-client — the same six tools
loaded through @langchain/mcp-adapters into a LangChain (LangGraph) agent.
Limitations
Read-only. No tool writes, proposes, or applies changes — by design.
The DTCG reader resolves
$value/$type/{alias}references only: no Style Dictionary transforms, no math expressions, no modes/theming. For those, run the file through your build and point tap at the output — or at a Sorb project, where.sorb/resolved.jsonis the built map.Bridge mode snapshots at startup; restart (or call
refresh()when embedding) to pick up new captures.Component bindings come from Sorb captures — bare DTCG files have none.
Programmatic use
import { loadDtcgFiles, runTool } from '@sorb/tap'
const source = loadDtcgFiles(['tokens.json'])
runTool(source, 'resolve_token', { id: 'component.button.bg' })
// → { id, cssVar, value: '#3b82f6', chain: ['semantic.brand.primary', …] }Development
npm install && npm test # node:test, 17 cases, incl. a stub bridge
npm run build # esbuild → dist/ (JS only — no TypeScript, ever)Roadmap: authenticated write tools (propose/apply) may arrive later via Sorb Cloud; the read surface here stays free and open.
Part of the Sorb tree — Seed captures · Juice bridges · Leaf renders · Canopy designs · Tap is how agents draw from it.
MIT © Metatoy LLC · Sorb™ is a trademark of Metatoy LLC. Works with Figma. Not affiliated with, or endorsed by, Figma. Figma is a trademark of Figma, Inc.
This server cannot be deployed
Maintenance
Related MCP Connectors
The Figma MCP server brings Figma design context directly into your AI workflow.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Build and manage your design system with AI: tokens, themes, components, icons, Figma and code.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes your design system components and tokens to AI agents, preventing duplicate component creation and hardcoded token values.5 npm9MIT
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that provides AI coding agents with a queryable contract for design system tokens, components, patterns, and anti-patterns.6 npm1Apache 2.0
- AlicenseBqualityBmaintenanceEnables AI agents to access design system tokens and component contracts through MCP, reducing token usage and ensuring consistency.29MIT
- AlicenseAqualityDmaintenanceAn MCP server that connects AI clients to Figma components, design tokens, and variables from the BrixUI Design System, enabling component browsing, searching, and token retrieval.44 npmMIT