Primitiv
Primitiv provides a design contract layer that reconciles design information from multiple sources (Figma, codebase, Storybook, token files) and exposes it to AI agents via MCP tools.
Get Design Context (
get_design_context): Retrieve the full resolved design system contract, including tokens, components, conflicts, and inferred rules. Supports filtering by category (all,tokens,components,conflicts) and token subcategory (colors,spacing,typography,borderRadius,shadows).Look Up a Token (
get_token): Find a specific design token by name, optionally narrowing results by category (colors, spacing, typography, borderRadius, shadows).Look Up a Component (
get_component): Retrieve details about a specific UI component, including its source provenance, props, and variants — enabling reuse rather than recreation.Get Design Conflicts (
get_conflicts): View conflicts detected between design sources, filterable by type (all,token,component) and status (all,pending,resolved), including suggested fixes.Get Inferred Design Rules (
get_inferred_rules): Access design rules automatically extracted from codebase patterns, filterable by category (spacing, color, typography, border-radius, naming, components).
Scans Figma files to extract design tokens and components, reconciles conflicts with other sources, and includes them in the authoritative design contract.
Scans Storybook documentation to extract component information and props, reconciles conflicts with other sources, and includes them in the authoritative design contract.
Primitiv
The design system contract keeping teams and agents in sync.
Retrieval gives you data. Reconciliation gives you truth.
The problem
Design-system knowledge is spread across code, Figma, Storybook, and documentation. When those sources drift, people reconcile the differences through experience; AI coding agents often fall back to generic patterns that work but do not belong in the product.
Primitiv gives every agent the same current design context through a machine-readable contract and a read-only MCP interface. It helps agents reuse what exists, follow established decisions, and surface inconsistencies before they ship.
Primitiv runs locally. Your code never leaves your machine.
Related MCP server: Figma Context MCP
Quick start
Run these commands from your project root:
npx @ai-by-design/primitiv init
npx @ai-by-design/primitiv build
npx @ai-by-design/primitiv serveinit sets up Primitiv for the current project, build creates its design contract, and serve makes that contract available to MCP-compatible agents.
See the Primitiv documentation for installation, configuration, commands, and integration guides.
Keep Primitiv configured at project level. A global MCP configuration can serve the wrong project's contract when you switch repositories.
Capabilities
Bring design context from your codebase, Figma, and Storybook together
Make existing tokens, components, rules, and rationale available to agents
Surface conflicts, drift, and hardcoded token misuse
Provide read-only access from MCP-compatible agents and editors
Verify that the contract stays current in CI
Primitiv also checks local JSX usage against each codebase component's complete finite prop domains. Known out-of-domain values produce a pending within-source conflict, even under auto-resolve. Align the JSX usage or widen the declared domain to resolve it. warn reports these conflicts without blocking; error and verify --strict exit with code 2. Dynamic values and incomplete domains remain unknown.
When component evidence cannot be compared, primitiv verify reports a short diagnostic summary. Use primitiv verify --verbose for the reasons, or --json for a structured report. Diagnostics explain uncertainty and do not count as conflicts or directly fail verification; changes to them can still make the saved contract stale. --fast reports saved diagnostics instead of rebuilding them.
Agents can read diagnostic counts in the MCP summary and paginated details through get_design_context with category: "diagnostics".
Component drift in CI
Run primitiv verify against your saved contract to check declared prop facts, finite variant values, observed JSX values, and component relationships. Verification also compares Storybook default args, story args, and control choices, including mapped values. Story labels and other presentation metadata do not count as API drift. Observations and examples describe static source evidence, not runtime frequency or breaking-change severity.
For example, changing a Button usage from size="sm" to size="lg" is detected even when the number of JSX sites stays the same. Drift messages identify the component ID and field path, such as components/Button and usage.props.size.
Normal verification scans current sources in memory and uses their current conflicts for reporting and governance. Introducing or fixing an out-of-domain JSX value takes effect in verification immediately. The saved contract remains the drift baseline and is never rewritten by verification: run primitiv build to refresh it, then verify again. MCP continues serving the saved contract until it is rebuilt and reloaded.
Failed sources and incomplete or truncated evidence cannot prove that an unavailable fact was removed or that a conflict was resolved. Verification reports available changes and comparison uncertainty. Older contracts remain readable; newly available evidence makes them stale until rebuilt.
Stale evidence exits with code 1, or 2 under --strict. Pending conflicts exit with code 2 under error governance or --strict; warn-only conflicts do not independently fail verification. --fast uses saved findings and file modification times instead of scanning current API evidence, so use normal verification in CI. Use --json for the verification result and --verbose for comparison diagnostic details.
Project links
Available Tools
6 toolsget_componentARead-only
Look up a component by name or id. Read-only, no side effects. Pass context (your current working file or directory) so same-name components resolve by path scope. Returns the component JSON (with its id) when the lookup resolves to exactly one component, or an error listing available names if not found. Detail is opt-in: pass 'api' for the component's declared prop contract, 'usage' for static JSX-site counts and observed prop values, 'relationships' for sorted outgoing uses and derived incoming usedBy counts, 'conflicts' for bounded source-conflict evidence, or 'all' for every projection. These are static source-site facts, never runtime frequency. When several components share the name and neither governance nor scope decides, returns { ambiguous, matches, instruction } — follow the instruction: match each candidate's rationale.when against the user's intent, and if that doesn't decide, ask the user; never pick arbitrarily. Use this when you need implementation details for a known component to reuse it rather than recreate it. For a list of all components, use get_design_context with category 'components' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No | ||
| detail | No | ||
| offset | No | ||
| context | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several behavioral traits beyond the readOnlyHint annotation: it explains the resolution behavior (exactly one component vs. error listing available names), the ambiguity response structure ({ ambiguous, matches, instruction }), and the nature of the data ('static source-site facts, never runtime frequency'). It also clarifies that detail is opt-in and what each detail option returns. The only minor gap is not explicitly stating pagination behavior for limit/offset, but the schema covers those parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured. It front-loads the core purpose and read-only nature, then explains resolution behavior, detail options, ambiguity handling, and usage guidance. Every sentence adds value, though it is somewhat long. The structure is logical: purpose → behavior → parameters → usage → alternative. It earns a 4 for being comprehensive without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no output schema, and no schema descriptions, the description covers all essential aspects: what it does, how to use it, what the return values look like (component JSON, error, ambiguity object), what each detail option returns, and when to use an alternative. The ambiguity resolution instruction is particularly valuable for an agent. Nothing critical is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does: it explains the 'context' parameter ('Pass context (your current working file or directory) so same-name components resolve by path scope'), the 'detail' parameter (lists all enum values and their meanings), and the 'name' parameter (lookup by name or id). It doesn't explicitly explain 'limit' and 'offset', but those are standard pagination parameters with clear schema constraints. The description adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Look up a component by name or id' and distinguishes it from siblings by noting 'For a list of all components, use get_design_context with category 'components' instead.' It also specifies the resource (component) and the action (look up), making it easy for an agent to understand what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool ('Use this when you need implementation details for a known component to reuse it rather than recreate it') and when not to use it ('For a list of all components, use get_design_context with category 'components' instead'). It also explains the ambiguity resolution process, which is a clear usage guideline for handling multiple matches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conflictsARead-only
Get a bounded, repeatable page of design-system conflicts. Read-only, no side effects. Filter by type, status, scope, exact component name or durable component ID, and a structured fieldPath prefix. Use offset and limit for pagination (default 25, maximum 100). For resolved design values, use get_token or get_component instead.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| scope | No | ||
| offset | No | ||
| status | No | ||
| component | No | ||
| fieldPath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces this with 'Read-only, no side effects' while adding useful behavior: bounded, repeatable pages with pagination defaults. It does not describe sorting or response shape, but for a read-only list tool the disclosed behavior is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: purpose, safety, filters, pagination, and alternatives. The most important facts are front-loaded, and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter read-only paginated endpoint with no output schema, the definition covers the core invocation needs: filters, pagination behavior, and when to choose different tools. It leaves out explicit return details and the relationship to get_violations, but an agent can safely invoke the tool based on this description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates well: it explains type/status/scope filters, clarifies that component is an exact name or durable ID, describes fieldPath as a structured prefix, and gives pagination defaults. Every parameter in the schema is given some operational meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get a bounded, repeatable page of design-system conflicts.' It also routes resolved-value lookups to get_token/get_component, but it does not clearly distinguish this from the sibling get_violations, which could overlap in meaning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context and pagination instructions ('Use offset and limit for pagination, default 25, maximum 100') and explicitly says to use get_token or get_component for resolved design values. It does not, however, say when get_violations or get_inferred_rules would be more appropriate than this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_design_contextARead-only
Get the resolved design system context before building UI. Read-only, no side effects. Default (no category) returns a JSON summary of token counts, component names, conflict counts, comparison diagnostic counts, and contract metadata. Pass category: 'all' | 'tokens' | 'components' | 'conflicts' | 'diagnostics' to get detail. Pass tokenCategory to filter tokens: colors, spacing, sizes, typography, borderRadius, shadows, zIndex, breakpoints, motion (unknown/aliased categories return an actionable error, not a silent empty result). Use this as the first call to understand what exists. For lookups by name, use get_token or get_component instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| category | No | ||
| tokenCategory | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although readOnlyHint=true is already in annotations, the description adds substantial behavioral context beyond it: the default return shape, the category-detail behavior, tokenCategory filtering semantics, and notably the error behavior ('unknown/aliased categories return an actionable error, not a silent empty result'). It also reinforces 'Read-only, no side effects,' which aligns with the annotation. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense with a logical flow: purpose, safety disclaimer, default return, category options, tokenCategory filter with error behavior, usage positioning, and alternatives. Every sentence earns its place, though the parameter enumerations make it longer than necessary. Well front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for an overview tool: default return contents, category values, tokenCategory values, error behavior, and usage positioning are all covered, with no output schema to fall back on. The main gap is pagination semantics for limit and offset, which remain unexplainable given the 0% schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden, and it compensates well for two parameters: category (explicit value list: 'all' | 'tokens' | 'components' | 'conflicts' | 'diagnostics') and tokenCategory (exact filter values: colors, spacing, sizes, typography, borderRadius, shadows, zIndex, breakpoints, motion). However, limit and offset are completely unaddressed in both the bare schema (only type/min/max) and the description, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get the resolved design system context before building UI.' It clearly explains what the tool returns (a summary of token counts, component names, conflict counts, diagnostics, and contract metadata) and explicitly differentiates from siblings by noting 'For lookups by name, use get_token or get_component instead.' An agent can immediately distinguish this overview tool from the lookup tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: 'Use this as the first call to understand what exists.' It also provides clear when-not-to-use direction with named alternatives ('For lookups by name, use get_token or get_component instead'). This is exemplary routing behavior that leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_inferred_rulesARead-only
Get the design rules inferred from your codebase patterns. Read-only, no side effects. Returns JSON with a list of rules including category, pattern, and confidence, or an error if no rules have been generated yet. Pass category to filter: spacing, colors, typography, borderRadius, naming, components. Omit category to get all. Use this to understand implicit conventions the codebase follows. For explicit design token values, use get_token. For source conflicts, use get_conflicts.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description repeats that fact. It adds useful behavioral context beyond the annotation: returns a JSON list with category/pattern/confidence, errors if no rules have been generated, and supports filtering by category.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded, with every sentence adding value: purpose, safety, return shape, filter usage, and alternative tools. No wasted words or repetition of schema-only details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter, no output schema), and the description covers the return format, error case, filter values, and usage context. It is fully adequate for correct tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully compensates by enumerating exact accepted values: spacing, colors, typography, borderRadius, naming, components. It also explains that omitting the parameter returns all rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: "Get the design rules inferred from your codebase patterns." It clearly differentiates from siblings by naming get_token and get_conflicts as alternatives for other intents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ("understand implicit conventions") and provides exclusions: "For explicit design token values, use get_token. For source conflicts, use get_conflicts." Also explains category filtering and omission behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tokenARead-only
Look up a specific design token by name. Read-only, no side effects. Returns the token's name, value, and category, or an error if not found. Pass category to narrow search: colors, spacing, sizes, typography, borderRadius, shadows, zIndex, breakpoints, motion (aliases like 'color'/'radius'/'z-index' are normalized). Omit category to search all. Use this when you know the token name. For a broad overview of all tokens, use get_design_context with category 'tokens' instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnlyHint=true, the description adds meaningful behavioral detail: 'Read-only, no side effects,' explains the return value, and discloses the error condition when the token is not found. It also explains alias normalization for categories, which goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is composed of three well-structured sentences, with the primary action and read-only guarantee front-loaded, followed by return/error behavior, then category semantics and sibling-tool guidance. Each sentence earns its place, though the category-alias list makes it slightly denser than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter look-up tool, the description is complete: it covers input semantics, return behavior, error outcome, category normalization, and alternative tool usage. No output schema is present, but the description explicitly lists what the return contains and the error case, so the agent can predict behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage, so the description carries the full burden of explaining parameters. It explains that 'name' is the token name to search for and 'category' narrows the search, listing all valid categories and alias normalization behavior. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Look up a specific design token by name' and specifies the exact resource (design tokens), the return value, and the error behavior. It is distinguished from sibling tools like get_design_context by explicitly targeting single-token lookup vs broad overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear when-to-use guidance: 'Use this when you know the token name.' It also provides an explicit alternative for a different use case: 'For a broad overview of all tokens, use get_design_context with category 'tokens' instead.' This is model guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_violationsARead-only
Get hardcoded token values: literals in source code typed inline instead of referencing a design token, bypassing the contract. Read-only, no side effects. Returns JSON with a count, suggestion-coverage stats, and a list with file:line:column, the captured literal, the surrounding utility (e.g. 'bg-[#ff0000]'), and an optional smart-match suggestion when a contract token has the same value. Pass category to filter: 'all' | 'colors' | 'spacing' (hardcoded values are only detected for these). Call this BEFORE generating UI with literal values — prefer the suggested token over a hardcoded literal. For available tokens to use instead, use get_design_context or get_token.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only, no side effects,' which aligns with and expands on the readOnlyHint annotation. It additionally discloses return structure, filtering behavior, and the fact that hardcoded values are only detected for certain categories. This provides rich behavioral context beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: it defines the topic, states safety, summarizes output, explains the parameter, and gives usage guidance. No sentence is wasted; it remains readable while packing substantial information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description thoroughly details the return JSON structure (count, suggestion-coverage stats, list with file:line:column, literal, utility, smart-match suggestion). It covers the parameter, use cases, and alternatives, making the tool fully understandable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining that the `category` parameter filters results and lists allowed values ('all' | 'colors' | 'spacing'), also noting why these categories matter. This adds essential meaning not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: getting hardcoded token values (literals in source code instead of design tokens). It distinguishes itself from siblings by explicitly referencing get_design_context and get_token as alternatives for available tokens, and by describing its specific output related to violations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Call this BEFORE generating UI with literal values — prefer the suggested token over a hardcoded literal.' It also names alternative tools for token lookup, giving clear when-to-use vs. when-not-to-use direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v2.19.0- Changed
get_component3 fields changed- changed
Input schema / properties / detail / enumPrevious value: -[ - "api", - "usage", - "relationships", - "all" -]New value: +[ + "api", + "usage", + "relationships", + "conflicts", + "all" +] - added
Input schema / properties / limitAdded value: +{ + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "maximum": 1000000, + "minimum": 0, + "type": "integer" +}
- Changed
get_conflicts7 fields changed- added
Input schema / properties / componentAdded value: +{ + "maxLength": 4096, + "type": "string" +} - added
Input schema / properties / fieldPathAdded value: +{ + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 64, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / limitAdded value: +{ + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "maximum": 1000000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / scopeAdded value: +{ + "enum": [ + "all", + "cross-source", + "within-source" + ], + "type": "string" +} - added
Input schema / properties / status / enumAdded value: +[ + "all", + "pending", + "resolved" +] - added
Input schema / properties / type / enumAdded value: +[ + "all", + "token", + "component" +]
- Changed
get_design_context2 fields changed- added
Input schema / properties / limitAdded value: +{ + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / offsetAdded value: +{ + "maximum": 1000000, + "minimum": 0, + "type": "integer" +}
1 tool update
v2.15.0- Changed
get_component1 field changed- added
Input schema / properties / detailAdded value: +{ + "enum": [ + "api", + "usage", + "relationships", + "all" + ], + "type": "string" +}
5 tool updates
v2.1.2- Changed
get_conflicts1 field changed- removed
Input schema / requiredRemoved value: -[ - "type", - "status" -]
- Changed
get_design_context1 field changed- removed
Input schema / requiredRemoved value: -[ - "category", - "tokenCategory" -]
- Changed
get_inferred_rules1 field changed- removed
Input schema / requiredRemoved value: -[ - "category" -]
- Changed
get_token1 field changed- changed
Input schema / requiredPrevious value: -[ - "name", - "category" -]New value: +[ + "name" +]
- Changed
get_violations1 field changed- removed
Input schema / requiredRemoved value: -[ - "category" -]
1 tool update
v2.0.0- Changed
get_component1 field changed- added
Input schema / properties / contextAdded value: +{ + "type": "string" +}
6 tool updates
v1.8.0- Added
get_component - Added
get_conflicts - Added
get_design_context - Added
get_inferred_rules - Added
get_token - Added
get_violations
5 tool updates
v1.6.0- Removed
get_component - Removed
get_conflicts - Removed
get_design_context - Removed
get_inferred_rules - Removed
get_token
TDQS
Scored across 6 tools
Each tool targets a clearly distinct concern: token lookup, design context overview, component lookup, conflict pagination, inferred rules, and violations. Even the overlapping get_token and get_design_context are explicitly differentiated with guidance on when to use each.
All tools follow a consistent get_<noun> pattern (get_token, get_component, get_conflicts, get_violations). The two compound names (get_design_context, get_inferred_rules) still follow the same verb_noun convention and fit the pattern cleanly.
Six read-only tools is well-scoped for a design system introspection server. Each tool represents a distinct query surface with no redundancy or bloat.
The surface covers token lookup, component lookup, design context overview, conflict discovery, inferred rules, and hardcoded-value violations — a coherent read-only audit toolkit. A minor gap is the lack of a write/update path, but the tool set is explicitly read-only by design, so this is acceptable.
Maintenance
Related MCP Connectors
Serves your design system and coding standards to coding agents, so they stop guessing.
Live React design-system APIs, patterns, and code validation so AI agents build real UI, not slop.
Access and maintain design system docs, tokens, components, skills, and contexts across any project.
Build and manage your design system with AI: tokens, themes, components, icons, Figma and code.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to extract design systems, analyze components, and maintain design-code consistency from Figma files, providing intelligent component analysis and accessibility compliance.150 npm30MIT
- AlicenseAqualityCmaintenanceConverts Figma designs into structured code context with token-aware styling, enabling AI agents to generate production-level frontend code.114 npmMIT
- AlicenseAqualityBmaintenanceProvides deterministic, read-only design knowledge for AI coding agents to help them choose visual directions, plan UI states, and compose design tokens, all without network access.616 npm4MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to score live URLs against a 40-check design contract, validate DTCG tokens and Lottie animations, audit accessibility, and retrieve design-system contracts, catalogs, and review rubrics.4 npmMIT