nebula-mcp
Provides access to Galaxy UI component manifests, source code, and framework availability for Angular.
Provides access to Galaxy UI component manifests, source code, and framework availability for Flutter, including coverage status.
Provides access to Galaxy UI component manifests, source code, and framework availability for React, including React Native coverage.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nebula-mcpList Galaxy UI components for React"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@galaxy-stack/nebula-mcp
Nebula MCP Server — exposes Galaxy UI components to AI assistants through the Model Context Protocol. Works with Claude Desktop, Cursor, Windsurf, Cline, and any MCP-compatible client.
Tools
Tool | Description |
| All components with per-framework availability (React, Vue, Angular, React Native, Flutter) |
| Detailed manifest — props, files, dependencies, framework status |
| Actual source code for a specific component file |
| Coverage matrix across all 5 frameworks (67 components) |
| Search by name or description |
All component data + 700 source files are bundled inside the package — zero setup, works offline.
Related MCP server: Grafana UI MCP Server
Install
Smithery (recommended)
npx -y @smithery/cli@latest install galaxy-stack/design-mcp --client claudenpx (manual)
Add to your MCP client config:
{
"mcpServers": {
"galaxy-ui": {
"command": "npx",
"args": ["-y", "@galaxy-stack/nebula-mcp"]
}
}
}Claude Desktop:
~/Library/Application Support/Claude/claude_desktop_config.jsonCursor:
~/.cursor/mcp.json
Remote endpoint
Paste into clients that support remote MCP (Claude web Custom Connectors):
https://nebula-mcp--galaxy-stack.run.toolsTry it
"List Galaxy UI components for React"
"Show me the source code of the Vue Select component"
"Which components are missing in Flutter?"
Registries
Official MCP Registry: io.github.galaxy-nebula/nebula-mcp
Publishing (maintainers)
Bump
versioninpackage.jsonPush to
main— GitHub Actions workflowpublish-mcp.ymlbuilds contracts artifacts, bundles data, verifies the version is new, and publishes via npm Trusted Publishing (OIDC) — no NPM_TOKEN requiredRebuild the MCPB bundle and run
smithery mcp publishfor Smithery
License
Available Tools
5 toolsget_componentA
Get detailed metadata for a specific component including props, files, and per-framework status
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Component ID (e.g. button, dialog) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a read operation ('Get') and enumerates returned content, which implies no destructive side effects. But it does not explicitly state that it is read-only, nor does it mention error behavior (e.g., invalid ID) or any auth/rate-limit considerations, leaving some transparency gap.
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 a single, efficiently front-loaded sentence that begins with the action and object, then adds relevant detail. No filler or redundant phrasing.
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 one required parameter and no output schema, the description communicates the core purpose and the kind of data returned. It does not cover edge-case behavior like not-found responses, but that is a minor omission for a simple read-only metadata call, so it is mostly complete.
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 100% (the 'id' parameter is described as 'Component ID (e.g. button, dialog)'). The description adds only the context of a 'specific component', which aligns with the schema but does not provide additional syntax, constraints, or examples beyond it, so baseline 3 applies.
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 ('Get') and names the resource ('detailed metadata for a specific component') with concrete content ('props, files, and per-framework status'). This clearly differentiates it from siblings like list_components (listing), get_component_source (source code), and search_components (searching).
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 phrase 'for a specific component' establishes a clear context: use this when you have a component ID and need details, not for browsing or searching. However, it does not explicitly name alternatives or state when not to use it, so it falls short of explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_component_sourceC
Read the source code of a specific component file
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Component ID | |
| file | Yes | File name (e.g. Button.tsx) | |
| framework | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The word 'Read' implies a safe read-only operation, but the description does not state whether the full file is returned, how errors or missing files are handled, or whether any special permissions/framework context are needed.
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?
A single sentence with no filler or redundancy; the core action is front-loaded. It is appropriately concise for a simple tool, though it sacrifices useful context for brevity.
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 three required parameters and no output schema, the description is minimal. It does not clarify return format, the meaning of the framework parameter in practice, or how 'file' should be specified relative to the component, leaving significant gaps 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?
Schema coverage is 67%, with id and file already described in the schema and framework constrained by an enum. The description itself contributes no parameter-level meaning, so it adds little beyond the structured schema, but the schema covers most of the burden.
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 clear verb ('read') and a specific resource ('source code of a specific component file'), which effectively conveys the core action and object. However, it does not differentiate this tool from the sibling get_component, so an agent must infer the boundary from the name alone.
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?
No guidance is given about when to use this tool versus siblings like get_component or search_components. There are no usage contexts, prerequisites, or exclusions stated, leaving the agent to guess based on the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coverageA
Get component availability coverage across all frameworks
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It only states what the tool does (gets coverage) without revealing whether it is a read-only operation, any performance implications, or what the response format looks like. For a tool with zero parameters and no output schema, this is a notable gap.
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 a single, well-formed sentence that front-loads the action and scope. It contains no extraneous words and is immediately understandable.
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 no parameters and no output schema, the description provides a minimal but sufficient idea of the tool's purpose. However, it does not clarify what 'coverage' means in terms of output structure, such as whether it returns counts, percentages, or per-framework breakdowns. An agent might need more detail to interpret the result 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?
The input schema has 0 parameters, so the baseline is 4. The description does not need to explain parameters, and it correctly omits any parameter-specific information. This score reflects the absence of parameter complexity rather than any descriptive effort.
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 verb 'Get', the resource 'component availability coverage', and the scope 'across all frameworks'. This differentiates it from sibling tools like list_components (which lists components) and get_component (which fetches a specific component) by focusing on coverage metrics.
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 implies that this tool is used when coverage data is needed, but it does not explicitly state when to prefer it over alternatives or mention any exclusion criteria. No alternatives are referenced, leaving the agent to infer the appropriate context from the tool's purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsA
List all available Galaxy UI components with their availability per framework
| Name | Required | Description | Default |
|---|---|---|---|
| framework | No | Filter by framework (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It indicates a read-only listing operation and mentions that output includes framework availability, but it does not describe potential limitations like pagination, sorting, or response size. For a simple list tool, this is adequate but leaves some behavioral aspects undisclosed.
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 a single, efficient sentence that front-loads the primary action and scope. No unnecessary words or redundancy.
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?
Given the simple optional parameter (fully documented in schema) and no output schema, the description is sufficiently informative. It communicates the main purpose and output content (framework availability). Minor omissions like pagination or result ordering are acceptable for a list tool and do not hinder correct 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?
The schema fully documents the single optional 'framework' parameter with enum values and a clear description (100% coverage). The tool description does not add any additional meaning beyond the schema, so the baseline of 3 applies.
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 ('List') and a clear resource ('all available Galaxy UI components'), and adds a distinguishing detail ('with their availability per framework'). This clearly separates it from siblings like get_component (retrieves a specific component) and search_components (searches for components).
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 clearly states the tool's purpose, making it obvious when to use it (when you need a complete list of components). However, it does not explicitly exclude alternatives or mention when not to use it (e.g., for a specific component or search), so it lacks explicit guidance but is contextually clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_componentsB
Search components by name or description
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral disclosure. It only says 'Search', which implies a read operation, but doesn't describe matching behavior (partial/fuzzy), result ordering, pagination, or what happens with an empty query. This is a significant gap for a tool with no annotation safety net.
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?
A single, front-loaded sentence with no filler. Every word contributes: the verb, target, and searchable fields are all present, making it maximally concise while remaining informative.
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 tool this is thin: the query parameter is not marked required, yet the description gives no clue about calling with an empty query or what the output looks like. Compound that with zero annotations and usage guidance, and the agent is left to guess at core calling expectations.
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 schema only says 'Search query' for the query parameter. The tool description adds that the query matches against name or description, giving the parameter meaningful context beyond the schema. Although coverage is 100%, this added semantic value lifts the score above baseline.
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 states a clear action ('Search'), a resource ('components'), and the search fields ('name or description'). It is specific enough to distinguish from list_components (list all vs query-based search) and get_component (retrieve specific by ID), though it doesn't explicitly name alternatives.
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?
No guidance is given about when to use this tool versus siblings like list_components or get_component. An agent cannot infer whether search is for free-text exploration or exact lookups, and there is no mention of exclusions, prerequisites, or query optionality.
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.
5 tool updates
v1.0.1- First observed
get_component - First observed
get_component_source - First observed
get_coverage - First observed
list_components - First observed
search_components
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: listing all, getting metadata, reading source, coverage statistics, and searching. There is no ambiguity between them.
All tools follow a consistent verb_noun pattern (list_, get_, get_, get_, search_) with clear resource names, making them predictable and easy to distinguish.
With 5 tools, the set is well-scoped for a component registry server, providing exactly the necessary operations without unnecessary bloat or gaps.
The read-only surface covers all core needs: listing, detailed metadata, source retrieval, coverage reporting, and search. There are no obvious missing operations for this domain.
Related MCP Connectors
Serves your design system and coding standards to coding agents, so they stop guessing.
Find UI components and themes, retrieve code, and generate with hosted 21st AI when enabled.
Direct access to Cypress tests results and accessibility reports in your AI workflow.
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides reference information for shadcn/ui components through a Model Context Protocol server that helps AI assistants access component documentation and examples.4876 npmMIT

Grafana UI MCP Serverofficial
AlicenseCqualityDmaintenanceProvides AI assistants with comprehensive access to Grafana's React component library, including TypeScript source code, MDX documentation, Storybook examples, test files, and design system tokens for building Grafana-compatible interfaces.113 npm9MIT- AlicenseNot gradedqualityCmaintenanceProvides AI assistants with access to AegisX UI components, CRUD generator commands, development patterns, and API contract discovery tools. It enables developers to browse component documentation, build generation commands, and test authenticated API endpoints through the Model Context Protocol.6 npmMIT
- AlicenseAqualityCmaintenanceProvides AI coding assistants with on-demand access to component specs, test scenarios, accessibility requirements, and build guides from the Web UI Component Specification.10MIT