MCP server for moco — editorial React components. Lets Claude (or any MCP client) browse, search, and install moco components into your project.
moco-mcp is a well-intentioned read-only component registry server with clear naming and solid descriptions. All 5 tools follow verb_noun convention (list_, search_, get_). Descriptions are substantive (100-250 chars), explaining WHAT and WHEN. Tool annotations (readOnlyHint) are correctly applied. However, input schemas are minimal: list_components and get_theme have empty objects ({}), search_components uses Zod but schema visibility in output is unclear, and get_component uses enum but lacks detailed parameter docs. Output schemas are not formally documented, responses are text-wrapped JSON without declared field contracts. Error handling is absent: no guidance on invalid component names, missing registry, or malformed queries. Composition is sound (each tool has one job), but the server lacks pagination, result limits, and structured output contracts that production tools require.
Get a moco component: full source files (tsx + css) to copy into the project, npm dependencies, other moco items it needs, and a usage example. Write each file to its `target` path (adjust the components/moco/ prefix to the project's conventions), install `dependencies` from npm, and fetch each entry of `registryDependencies` with this tool too (they are moco item names/urls — `tokens` is required once per project).
One-time moco project setup instructions: token import, fonts, framework notes, accessibility guarantees. Call this before installing the first component into a project.
Get moco's design token contract (tokens.css: light + dark themes) and how to retheme: override any --moco-* variable after the import. Required setup for every moco component.
List all moco components (editorial React components: scrollytelling, margin notes, sparklines, before/after compare, diagrams, code walkthroughs, …) with one-line descriptions and tags.
Search moco components by need, e.g. 'before/after image comparison', 'animated number', 'table of contents'. Matches name, title, description and tags.
Empty input schemas for list_components and get_theme. Both tools accept no parameters but schemas are not formally declared. LLMs cannot verify these are truly parameter-free.
Output schemas are undocumented. Responses are text-wrapped JSON blobs without declared field contracts. LLMs cannot plan downstream operations or extract specific fields reliably.
No error handling or recovery guidance. If a component name is invalid, the registry lookup fails silently. No guidance on 'try search_components()' or available alternatives.
search_components lacks result limits and pagination. A broad query could return all 50+ components in one response, wasting tokens. No limit or offset parameters.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
get_component parameter 'name' uses enum(names) but lacks description of what happens if the name is invalid or how to discover valid names.