Skip to main content
Glama
vasyl-bilous

Component Library MCP

by vasyl-bilous

Component Library MCP

An MCP (Model Context Protocol) server that scans React and Vue projects, extracts component metadata (props, slots, events, imports, usage), and exposes it to AI coding agents via structured tools.

What it solves: When an AI coding agent writes UI code without context, it produces three recurring problems:

  1. Duplicate components — creates <UserCard> when <UserProfile> already exists.

  2. Wrong prop APIs — passes label when the component expects title, or misses a required prop.

  3. Inconsistent patterns — builds a one-off dialog instead of using the project's <BaseDialog>.

This MCP gives the agent full visibility into your component library before it writes any UI code.


Requirements

  • Node.js ≥ 20

  • pnpm (other package managers also work — install deps however you like, the server is a plain Node script at runtime)

Related MCP server: tsx-query

Install & build

git clone <this-repo>
cd component-library-mcp
pnpm install
pnpm build

pnpm build emits a runnable server at dist/index.js.

Configure in Claude Code

The server scans whatever directory it is launched from (process.cwd()). Pick one of the two setups below — no PROJECT_ROOT needed.

Option A — Per-project .mcp.json (recommended)

Drop a .mcp.json file at the root of every React/Vue project you want to use the MCP with:

{
  "mcpServers": {
    "component-library": {
      "command": "node",
      "args": ["/absolute/path/to/component-library-mcp/dist/index.js"]
    }
  }
}

Claude Code auto-loads .mcp.json from the open workspace. Each project can have its own env overrides (see below) without polluting other projects.

Option B — Global ~/.claude.json

If you usually work in one project at a time and always launch Claude Code from that project's directory:

{
  "mcpServers": {
    "component-library": {
      "command": "node",
      "args": ["/absolute/path/to/component-library-mcp/dist/index.js"]
    }
  }
}

With no env vars set, the server scans process.cwd() — which is the directory Claude Code is opened in. Switch projects by opening a different folder in your editor / re-launching Claude Code from a different directory.

Restart Claude Code after changing either config. The server runs on stdio — there's no port, no daemon.

Environment variables (optional)

All env vars are optional. Set them under env: { ... } in the MCP config only when you need to override defaults.

Variable

Default

Description

PROJECT_ROOT

process.cwd()

Absolute path to scan. Usually you don't need to set this — the server uses the directory it was launched from. Only set it when that isn't what you want.

COMPONENT_DIRS

auto

Comma-separated dirs to scan. auto probes src/components, src/ui, src/shared, components, lib/components, app/components and falls back to src/ or the project root.

FRAMEWORK

auto

react | vue | auto. Auto detects from package.json deps.

EXCLUDE_PATTERNS

node_modules,dist,.next,.nuxt

Comma-separated dir names or globs. Bare names become **/<name>/**.

MAX_DEPTH

10

Max recursion depth for fast-glob.

INCLUDE_STORIES

true

Parse .stories.(ts|tsx|js|jsx) and attach story examples to components.

LOG_LEVEL

silent

silent | info | debug. All logs go to stderr.

Example .mcp.json with overrides:

{
  "mcpServers": {
    "component-library": {
      "command": "node",
      "args": ["/absolute/path/to/component-library-mcp/dist/index.js"],
      "env": {
        "COMPONENT_DIRS": "src/components,src/ui",
        "FRAMEWORK": "react",
        "EXCLUDE_PATTERNS": "node_modules,dist,__tests__,stories",
        "INCLUDE_STORIES": "false",
        "LOG_LEVEL": "info"
      }
    }
  }
}

Available tools

All 7 tools accept Zod-validated JSON input and return both content (text) and structuredContent (same data as structured output).

1. list_components

Summary of every component in the project. Agents typically call this first.

{ "framework": "react", "min_usage": 1, "include_props": false }

Returns an alphabetically sorted array: { name, file_path, framework, prop_count, usage_count, has_stories, description?, tags? }.

2. get_component_details

Full metadata for one component — props, slots, events, description, story examples.

{ "name": "Button" }
// or
{ "file_path": "src/components/Button.tsx" }

Fuzzy fallback: if name has no exact match, suggestions within Levenshtein distance ≤ 3 are returned.

3. search_components

Natural-language + structured search.

{
  "query": "dialog modal",
  "prop_type": "boolean",
  "has_slot": "footer",
  "limit": 10
}

Returns ranked { name, score, reasons[] } hits. Weights: name 1.0, description 0.5, tags 0.6, prop names 0.35, path 0.2.

4. get_import_graph

Who imports what.

{ "component_name": "Button", "direction": "both", "depth": 2 }

Returns dependencies[] (what this component imports) and dependents[] (who imports it, with is_page: true for pages/routes). Barrel files are followed through but not counted as dependents.

5. check_duplicatehighest-value tool

Call this before creating a new component.

{
  "proposed_name": "UserCard",
  "proposed_props": ["user", "size", "avatarUrl"],
  "purpose": "display user profile card"
}

Returns { has_duplicates, existing_matches[], recommendation } where recommendation is use_existing | extend_existing | create_new. Score combines name similarity (0.45), prop overlap (0.35), and purpose/description overlap (0.2), with a short-circuit to use_existing when proposed props are a full subset of an existing component.

6. get_component_usage_example

Real usage snippets from the codebase.

{ "component_name": "Button", "limit": 3 }

Returns up to limit { file_path, code_snippet, props_used[] } examples (5–15 lines around the import line), plus story_examples[] from any matching .stories.(t|j)sx files.

7. refresh_cache

Force re-scan. Incremental by default.

{ "full_scan": true }

Returns { components_found, scan_duration_ms, new_components[], removed_components[], reparsed_files[] }.

How it works

  • First tool call triggers a full scan. Subsequent calls do an mtime-based incremental scan — only re-parses files that changed.

  • React parsing handles function/arrow/FC components, HOC unwrapping (memo, forwardRef, observer, nested), legacy propTypes, JSDoc, and cross-file type expansion via the TypeScript compiler API.

  • Vue parsing handles <script setup> typed + runtime defineProps / defineEmits, Options API, defineComponent, named + scoped slots.

  • Import graph includes page/route directories as consumers (so usage_count reflects imports from src/pages/**), follows barrel re-exports to source files, and resolves tsconfig paths aliases.

  • Performance — 200-component project scans in ~150ms; 2-file incremental scans in ~30ms.

Development

pnpm dev          # tsx watch mode
pnpm test         # vitest, all tests
pnpm test:perf    # perf tests only
pnpm test:watch   # vitest watch mode
pnpm build        # tsc → dist/

Troubleshooting

The server returns { components: [], total: 0 } for my project.

  • Make sure Claude Code was launched from (or has opened) the project root — where package.json lives. The server scans process.cwd() by default.

  • If the project root is somewhere else, set PROJECT_ROOT in the MCP config's env block as a last resort.

  • Run with LOG_LEVEL=info. stderr will show which dirs the scanner tried and how many files it found.

  • If you have a non-standard layout, set COMPONENT_DIRS explicitly (e.g., "lib/ui,packages/core/components").

Framework is wrong.

  • Set FRAMEWORK=react or FRAMEWORK=vue explicitly. Auto-detection reads package.json deps (react, next, vue, nuxt).

Cross-file types show up as "Props" instead of "a" | "b".

  • The TS type resolver runs automatically. If it fails, the parser falls back to the alias name. Check LOG_LEVEL=debug for resolver errors — usually a missing tsconfig.json path alias.

usage_count is 0 for a component that's clearly used.

  • Your importing files must live inside the scanned directories, or inside one of the auto-detected page dirs (src/pages, src/routes, src/app, pages, routes, app). If imports come from a non-standard dir, add it to COMPONENT_DIRS.

JSON-RPC protocol errors from the client.

  • The server writes only JSON-RPC to stdout. If you see garbage there, a dependency is using console.log — open an issue. All of our logging goes to stderr via src/logger.ts.

Project layout

src/
  index.ts                  # stdio entry point
  server.ts                 # MCP server + tool registration
  config.ts                 # env var parsing
  logger.ts                 # stderr-only logger
  lib/
    types.ts                # ComponentInfo, PropInfo, etc.
    schemas.ts              # Zod schemas for tool inputs
  scanner/
    file-scanner.ts         # component dir discovery
    page-scanner.ts         # page/route dir discovery (for graph only)
    framework-detector.ts   # react vs vue
    import-resolver.ts      # relative + tsconfig paths
    import-extractor.ts     # AST → import statements
    import-graph.ts         # dependencies / dependents / usages
  parsers/
    react-parser.ts         # TSX + HOC unwrap
    vue-sfc-parser.ts       # <script setup> / Options API / template slots
    vue-tsx-parser.ts       # Vue TSX (thin wrapper over react parser)
    story-parser.ts         # .stories.tsx
    jsdoc-parser.ts         # @tag, @param, description
    ts-type-resolver.ts     # cross-file type expansion via ts.Program
    shared.ts
  search/
    fuzzy-match.ts          # Levenshtein + token overlap
    text-search.ts          # ranked + structured filters
    duplicate-detector.ts   # name + prop + purpose scoring
  cache/
    component-cache.ts      # in-memory file_path → entry
    incremental-scan.ts     # mtime diff + graph rebuild + story join
  tools/
    list-components.ts
    get-component-details.ts
    search-components.ts
    get-import-graph.ts
    check-duplicate.ts
    get-usage-example.ts
    refresh-cache.ts
tests/
  fixtures/                 # react-project, vue-project, mixed, nonstandard
  parsers/ scanner/ search/ cache/ tools/ perf/

License

ISC.

Available Tools

7 tools
check_duplicateA

Check if a proposed component would duplicate an existing one. Call this BEFORE creating a new component. Returns similarity-ranked matches and a recommendation.

ParametersJSON Schema
NameRequiredDescriptionDefault
proposed_nameYes
proposed_propsNo
purposeNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states the tool is a 'check' and returns matches and a recommendation, implying read-only behavior. However, it does not explicitly confirm non-destructive nature or disclose any side effects, leaving some ambiguity.

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 extremely concise, consisting of two sentences that front-load the action and usage. Every word adds value, with no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, annotations, and parameter explanations, the description provides basic purpose and usage but omits details on what constitutes a duplicate or how the recommendation is structured. It is adequate but not fully complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the parameters beyond their names (proposed_name, proposed_props, purpose). It fails to add meaning about formats, constraints, or usage rules for these parameters, which is insufficient for a tool with three parameters.

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: 'Check if a proposed component would duplicate an existing one.' It also specifies when to call it ('BEFORE creating a new component') and what it returns ('similarity-ranked matches and a recommendation'), making it distinct from sibling tools like search_components.

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?

The description provides explicit usage guidance: 'Call this BEFORE creating a new component.' This clearly indicates when to use the tool. However, it does not discuss when not to use it or suggest alternatives, but the context is sufficient for an AI agent to decide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_component_detailsA

Get full metadata for a specific component: props, slots, events, description, and story examples. Accepts component name or file_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
file_pathNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. The description indicates a read operation (retrieving metadata) but does not explicitly state it is non-destructive or disclose potential errors, auth needs, or side effects. For a read-only tool, basic transparency is present but could be more explicit.

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?

Two sentences, no fluff. The main purpose is front-loaded, and every sentence adds value. Efficiently conveys key information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description provides essential info but lacks details on return format, error handling, behavior when both parameters are used, and what happens if both are omitted. Adequate but not fully complete.

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 description coverage is 0%. The description adds meaning by stating that the tool accepts either 'name' or 'file_path' as identifiers, implying they are alternatives. However, it does not explain constraints, precedence if both are provided, or what happens if neither is given.

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 verb 'Get', the resource 'full metadata for a specific component', and lists specific metadata types (props, slots, events, description, story examples). It also mentions the two parameters, distinguishing it from sibling tools like 'list_components'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the tool accepts component name or file_path but does not provide explicit guidance on when to use this tool versus siblings like 'list_components' or 'search_components'. No when-not-to-use or alternative suggestions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_component_usage_exampleC

Get real usage examples of a component from the codebase (JSX/template snippets with surrounding context).

ParametersJSON Schema
NameRequiredDescriptionDefault
component_nameYes
limitNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavioral traits. It mentions 'real usage examples' and 'snippets with context', but does not specify if it is read-only, performance implications, or what happens with limit. Minimal transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, concise and without redundancy. However, it is under-specified given the lack of parameter info, so it could be improved without sacrificing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With two parameters and no output schema, the description does not fully inform the agent. It omits return format, limit behavior, and edge cases, leaving the agent underinformed for a low-complexity tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not explain the parameters at all. The agent has no guidance on what 'component_name' or 'limit' mean, despite 'limit' having an exclusiveMinimum constraint.

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?

The description clearly states the tool retrieves real usage examples of a component from the codebase, specifying snippets with context. It is not explicitly differentiated from siblings, but the purpose is specific enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidelines are provided about when to use this tool versus alternatives like search_components or get_component_details. The agent has no indication of when to choose this over sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_import_graphC

Get dependencies and dependents for a component. Shows composition patterns and which pages/components use it.

ParametersJSON Schema
NameRequiredDescriptionDefault
component_nameNo
directionNo
depthNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, and the description does not disclose behavioral traits like whether the tool is read-only, any performance implications of depth, or required permissions. The agent has no information about side effects or limitations.

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?

Two concise sentences effectively front-load the action ('Get dependencies and dependents') and add context ('Shows composition patterns'). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three parameters, no output schema, and no annotations, the description is insufficient for complete understanding. It lacks details on parameter constraints, return format, and edge cases, making it hard for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain the three parameters (component_name, direction, depth). The agent must infer what values to use, especially for direction and depth, without any guidance.

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?

The description clearly indicates the tool retrieves dependencies and dependents for a component, distinguishing it from siblings like get_component_details (which gives broader details) and get_component_usage_example (which shows usage patterns). It mentions composition and page usage, adding specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus siblings. The description only states what it does, not context or alternatives. For example, it doesn't say when to prefer this over get_component_details or search_components.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_componentsC

List all components in the project with summary info (name, path, prop count, usage count). Call this first to see what's available.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNo
frameworkNo
min_usageNo
include_propsNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It indicates a read operation (listing), which is appropriate. However, it lacks details about pagination, ordering, or whether the list is live or cached. For a simple list tool, this is adequate but not thorough.

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 very concise (two sentences), front-loading the core purpose and a usage hint. No unnecessary words, though it could be slightly more structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with four parameters and no output schema, the description is incomplete. It omits parameter explanations, output format, and any constraints. The agent would need additional information to use the tool effectively, especially given the parameter complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not explain any of the four parameters (directory, framework, min_usage, include_props). Since schema description coverage is 0%, the description fails to add meaning beyond the schema. The agent has no guidance on how to use these parameters, which is a critical gap.

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?

The description clearly states it lists all components and specifies the summary info fields (name, path, prop count, usage count). The verb 'list' and resource 'components' are unambiguous, and the suggestion to call it first gives context, though it does not explicitly distinguish from sibling tools like search_components.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises to 'call this first to see what's available,' providing a general usage hint. However, it does not specify when not to use this tool (e.g., when filtering or searching is needed) or mention alternatives like search_components or get_component_details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

refresh_cacheA

Force re-scan of all component files. Incremental by default; pass full_scan=true to clear the cache entirely.

ParametersJSON Schema
NameRequiredDescriptionDefault
full_scanNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses incremental vs full scan behavior but omits details like side effects, performance impact, or safety of repeated calls.

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?

Two sentences with no wasted words, front-loaded purpose, and clear conditional guidance.

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 simple tool with one boolean param, the description covers the core behavior. Lacks context about what 'component files' are or any prerequisites, but still adequate.

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 coverage is 0%, but the description explains the sole parameter (full_scan=true clears cache entirely), adding meaning beyond the schema's type-only definition.

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 action ('force re-scan of all component files') and differentiates from siblings (check_duplicate, get_component_details, etc.) by its cache refresh function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the full_scan parameter (to clear cache entirely) but does not provide explicit guidance on when to use this tool vs alternatives, nor any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_componentsA

Search components by natural-language query, prop name, prop type, or slot name. Returns ranked results.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
prop_nameNo
prop_typeNo
has_slotNo
limitNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that results are ranked, but lacks details on the ranking mechanism, potential side effects, authentication requirements, or result limits. The behavior is partially transparent but not comprehensive.

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 extremely concise with two sentences. The first sentence front-loads the purpose and lists search criteria. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/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 annotations, the description is insufficient. It lacks explanation of how multiple search criteria interact, result format, pagination, ranking details, and any constraints. More information is needed for an agent to use this tool reliably.

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 description coverage is 0%, so the description must add meaning beyond parameter names. It mentions the search modes (query, prop_name, prop_type, has_slot) which clarifies their role as search criteria. However, it does not explain parameter formats, combinations, or default behavior. This is adequate but not complete.

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 searches components by multiple criteria (natural-language query, prop name, prop type, slot name) and returns ranked results. This distinguishes it from sibling tools like list_components (lists all) and get_component_details (retrieves specific component info).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching components but does not explicitly state when to use this tool vs alternatives like list_components or get_component_details. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a distinct purpose: checking duplicates, getting details, usage examples, import graph, listing, refreshing cache, and searching. No overlap, clear boundaries.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., check_duplicate, list_components, refresh_cache), making them predictable and readable.

Tool Count5/5

Seven tools cover the essential operations for a component library: discovery, inspection, dependency analysis, and cache management. The scope is well-balanced, neither too sparse nor excessive.

Completeness3/5

The tool surface covers querying and analysis well (list, search, details, examples, dependencies) but lacks any creation or modification tools, which is a notable gap given the server's domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that scans codebases to extract structural information (classes, functions, etc.) with flexible filtering options and outputs in LLM-friendly formats.
    1
    2
    GPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Universal MCP server that analyzes any codebase and provides structured context to AI assistants. Dynamic, accurate, and token-efficient.
    14
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vasyl-bilous/component-library-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server