Skip to main content
Glama

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 serve

init 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.

IMPORTANT

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.

Available Tools

6 tools
get_componentA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
limitNo
detailNo
offsetNo
contextNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_conflictsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
scopeNo
offsetNo
statusNo
componentNo
fieldPathNo

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_contextA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
categoryNo
tokenCategoryNo

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_rulesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_tokenA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
categoryNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_violationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 3 tool updatesv2.19.0
    • Changedget_component3 fields changed
      • changedInput schema / properties / detail / enum
        Previous value: -[
        -  "api",
        -  "usage",
        -  "relationships",
        -  "all"
        -]New value: +[
        +  "api",
        +  "usage",
        +  "relationships",
        +  "conflicts",
        +  "all"
        +]
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedget_conflicts7 fields changed
      • addedInput schema / properties / component
        Added value: +{
        +  "maxLength": 4096,
        +  "type": "string"
        +}
      • addedInput schema / properties / fieldPath
        Added value: +{
        +  "items": {
        +    "maxLength": 4096,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "maxItems": 64,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / scope
        Added value: +{
        +  "enum": [
        +    "all",
        +    "cross-source",
        +    "within-source"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "all",
        +  "pending",
        +  "resolved"
        +]
      • addedInput schema / properties / type / enum
        Added value: +[
        +  "all",
        +  "token",
        +  "component"
        +]
    • Changedget_design_context2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
  2. 1 tool updatev2.15.0
    • Changedget_component1 field changed
      • addedInput schema / properties / detail
        Added value: +{
        +  "enum": [
        +    "api",
        +    "usage",
        +    "relationships",
        +    "all"
        +  ],
        +  "type": "string"
        +}
  3. 5 tool updatesv2.1.2
    • Changedget_conflicts1 field changed
      • removedInput schema / required
        Removed value: -[
        -  "type",
        -  "status"
        -]
    • Changedget_design_context1 field changed
      • removedInput schema / required
        Removed value: -[
        -  "category",
        -  "tokenCategory"
        -]
    • Changedget_inferred_rules1 field changed
      • removedInput schema / required
        Removed value: -[
        -  "category"
        -]
    • Changedget_token1 field changed
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "category"
        -]New value: +[
        +  "name"
        +]
    • Changedget_violations1 field changed
      • removedInput schema / required
        Removed value: -[
        -  "category"
        -]
  4. 1 tool updatev2.0.0
    • Changedget_component1 field changed
      • addedInput schema / properties / context
        Added value: +{
        +  "type": "string"
        +}
  5. 6 tool updatesv1.8.0
    • Addedget_component
    • Addedget_conflicts
    • Addedget_design_context
    • Addedget_inferred_rules
    • Addedget_token
    • Addedget_violations
  6. 5 tool updatesv1.6.0
    • Removedget_component
    • Removedget_conflicts
    • Removedget_design_context
    • Removedget_inferred_rules
    • Removedget_token

TDQS

A4.6/5.0

Scored across 6 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to extract design systems, analyze components, and maintain design-code consistency from Figma files, providing intelligent component analysis and accessibility compliance.
    150 npm
    30
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Converts Figma designs into structured code context with token-aware styling, enabling AI agents to generate production-level frontend code.
    1
    14 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides 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.
    6
    16 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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 npm
    MIT