Storybook
Interactive component explorers for Angular, React, and Vue. Browse stories, inspect props, and test accessibility in isolation.
MCP server
All three Storybook instances expose a hosted MCP endpoint so AI coding assistants can read component documentation directly — no local setup required.
Add the MCP server to your project
In your AI assistant's MCP configuration (e.g. .claude/settings.json for Claude Code) add one or more servers:
{ "mcpServers": { "storybook-react": { "type": "http", "url": "https://atelier.pieper.io/storybook-react/mcp" }, "storybook-angular": { "type": "http", "url": "https://atelier.pieper.io/storybook-angular/mcp" }, "storybook-vue": { "type": "http", "url": "https://atelier.pieper.io/storybook-vue/mcp" } }}Use it in your prompts
Once connected, your AI assistant can look up component props, variants, and usage examples directly from Storybook:
Build a settings page using @atelier-ui/react components.Use the storybook-react MCP to check available props.Two MCP surfaces, three toolsets
Storybook 10.4 ships MCP in two layers. The hosted endpoint serves docs from a static manifest — works for any framework, no install. The local dev surface adds dev & test tools while a local Storybook is running, and is officially React-preview only as of 10.4. Tools are grouped into three toolsets (dev, docs, test), each toggleable in the addon options.
| Toolset | Tool | Hosted (atelier.pieper.io) | Local dev (nx storybook <fw>) |
|---|---|---|---|
docs | list-all-documentation | React: components + docs · Angular/Vue: docs only | All frameworks |
get-documentation | React: full · Angular/Vue: docs only | All frameworks | |
get-documentation-for-story | React: full · Angular/Vue: docs only | All frameworks | |
dev | get-storybook-story-instructions | — | React (preview); Vue/Angular experimental |
preview-stories | — | React (preview); Vue/Angular experimental | |
get-changed-stories (10.4) | — | Requires features.changeDetection | |
test | run-story-tests | — | Requires @storybook/addon-vitest; a11y via @storybook/addon-a11y |
The hosted endpoint reads manifests/components.json emitted by @storybook/addon-mcp at build time. As of Storybook 10.4 that file is only generated for React (via TypeScript Language Server docgen — the new experimentalReactComponentMeta docgen path). Angular & Vue static builds only emit docs.json — hosted MCPs for those frameworks return MDX docs (foundations, tokens) but no per-component props. Run the local Storybook dev server for per-component data in Angular/Vue, or use the React MCP as the cross-framework API reference (the spec is identical, only the binding differs).
The dev / test toolsets require a running Node.js Storybook dev server and are gated by Storybook 10.4 to React for now. docs tools support a storybookId parameter to scope a request to one source in multi-source (composition) setups; list-all-documentation accepts withStoryIds: true when downstream tools need story IDs.
What's new in Storybook 10.4 MCP
The 10.4 release tightens the agentic loop on four fronts:
| Capability | What it does | How to enable |
|---|---|---|
experimentalReactComponentMeta (RCM) | Volar + TypeScript Language Server docgen replaces react-docgen / react-docgen-typescript — faster, better detection, faster dev-mode HMR for prop edits. Powers React components.json. | experimentalReactComponentMeta: true in .storybook/main.ts (React). @storybook/mcp@0.6.2+ reads the new reactComponentMeta payload automatically. |
Change Review sidebar & get-changed-stories | Storybook tracks new, modified, and affected stories. The MCP tool returns just that subset so agents can scope review to recent edits. | Set features.changeDetection: true in .storybook/main.ts. Tool registers automatically. |
| Multi-source composition + OAuth | Compose several Storybooks behind one MCP endpoint via Storybook refs. The addon serves /.well-known/oauth-protected-resource and accepts bearer tokens so agents can reach private composed Storybooks. | Add refs to .storybook/main.ts; pass storybookId to docs tools to disambiguate. |
| MCP Apps preview resource | preview-stories exposes a ui://preview-stories/preview.html resource so MCP-Apps-capable hosts render the story preview inline in chat (Cursor, Claude Desktop with MCP Apps). Non-capable hosts get the previewUrl per story instead. | Automatic when the host advertises MCP Apps support. |
| Subcomponent docs | get-documentation surfaces subcomponent props for compound components. | @storybook/mcp@0.7.0+ & @storybook/addon-mcp@0.6.0+. No config. |
Self-host API (createStorybookMcpHandler) | Reusable docs handler for serving manifests from any runtime (Cloudflare Workers, Netlify Functions, Node). Hooks: manifestProvider, onListAllDocumentation, onGetDocumentation, onSessionInitialize. Tool-registration exports (addListAllDocumentationTool, etc.) for custom tmcp servers. | import { createStorybookMcpHandler } from '@storybook/mcp'. See worker/mcp.ts in this repo. |
Toolset configuration
All three toolsets default to true. Disable a toolset when an agent should not see those tools — e.g. read-only agents:
import type { StorybookConfig } from '@storybook/react-vite';
const config: StorybookConfig = { addons: [ { name: '@storybook/addon-mcp', options: { toolsets: { dev: true, // preview-stories, get-storybook-story-instructions, get-changed-stories docs: true, // list-all-documentation, get-documentation, get-documentation-for-story test: false, // disable run-story-tests for read-only agents }, }, }, ], features: { experimentalComponentsManifest: true, // gates the docs toolset changeDetection: true, // gates get-changed-stories },};
export default config;
Telemetry is on by default — disable with Storybook's core.disableTelemetry.
Endpoints
| Library | Hosted URL | Local dev URL |
|---|---|---|
@atelier-ui/react | https://atelier.pieper.io/storybook-react/mcp | http://localhost:6006/mcp |
@atelier-ui/angular | https://atelier.pieper.io/storybook-angular/mcp | http://localhost:6006/mcp |
@atelier-ui/vue | https://atelier.pieper.io/storybook-vue/mcp | http://localhost:6006/mcp |
Only one local Storybook can bind localhost:6006 at a time — pick the framework you're actively working in.