storybook-mcp
The Storybook MCP server enables automated extraction of component documentation and custom data from any configured Storybook instance.
List all components - Retrieve a complete list of available components from your Storybook
Extract component props - Get detailed property information for multiple components including names, types, default values, descriptions, and required/optional status
Create custom tools - Define JavaScript-based tools to extract specific information from any Storybook page (e.g., icon lists, color palettes, design tokens)
Headless browser automation - Uses Playwright to navigate and extract structured data from Storybook pages
Flexible integration - Works with any Storybook exposing
index.jsonorstories.json(v3) filesRobust error handling - Includes comprehensive error handling for network issues, missing components, and browser automation failures
Provides specific integration with Adobe's Spectrum Web Components, allowing access to component documentation and icon lists through the MCP server.
Provides tools for extracting component lists, props information, and custom data from Storybook documentation, enabling AI to understand and reference UI component libraries.
Click on "Install 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., "@storybook-mcpget props for Button and Input components"
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.
Storybook MCP Server
A Model Context Protocol (MCP) server that provides tools to interact with Storybook documentation and component information.
Features
getComponentList: Get a list of all components from a configured Storybook
getComponentsProps: Get detailed props information for multiple components using headless browser automation
Custom Tools: Create custom tools that can extract any information from your Storybook pages using JavaScript
Related MCP server: dbt-mcp
Installation and Configuration
MCP Settings
Add the following configuration to MCP settings:
{
"mcpServers": {
"storybook": {
"command": "npx",
"args": ["-y", "storybook-mcp@latest"],
"env": {
"STORYBOOK_URL": "<your_storybook_url>/index.json"
}
}
}
}storybook-mcp starts immediately and installs Chromium in the background the first time it runs. If you want to preinstall the browser ahead of time, run npx -y storybook-mcp@latest install-browser. Until that download finishes, the first browser-backed tool call can take longer.
Environment Variables
STORYBOOK_URL(required): The URL to your Storybook's index.json fileCUSTOM_TOOLS(optional): JSON array of custom tool definitions for extracting specific information from your Storybook
Usage
The server provides built-in tools and supports custom tools:
Built-in Tools
1. getComponentList
Retrieves a list of all available components from the configured Storybook.
Example:
Available components:
Accordion
Avatar
Badge
Button
...2. getComponentsProps
Gets detailed props information for multiple components, including:
Property names
Types
Default values
Descriptions
Required/optional status
Parameters:
componentNames(array of strings): Array of component names to get props information for
Example usage:
Tool: getComponentsProps
Parameters: { "componentNames": ["Button", "Input", "Avatar"] }Custom Tools
You can define custom tools to extract specific information from your Storybook pages. Each custom tool can:
Navigate to any page in your Storybook
Execute custom JavaScript to extract data
Return structured data to the AI assistant
Custom Tool Structure:
interface CustomTool {
name: string; // Unique tool name
description: string; // Tool description for the AI
parameters: object; // Input parameters schema (optional)
page: string; // URL to navigate to
handler: string; // JavaScript code to execute on the page
}Example Custom Tools:
[
{
"name": "getIconList",
"description": "Get All Icons from the Icon page",
"parameters": {},
"page": "https://your-storybook.com/?path=/docs/icon--docs",
"handler": "Array.from(document.querySelectorAll('.icon-name')).map(i => i.textContent)"
},
{
"name": "getColorPalette",
"description": "Extract color palette from design tokens",
"parameters": {},
"page": "https://your-storybook.com/?path=/docs/design-tokens--colors",
"handler": "Array.from(document.querySelectorAll('.color-swatch')).map(el => ({ name: el.getAttribute('data-color-name'), value: el.style.backgroundColor }))"
}
]For more examples and detailed documentation, see examples/custom-tools-example.md.
Example
Set Spectrum storybook-mcp config with STORYBOOK_URL and CUSTOM_TOOLS environment variables.
{
"mcpServers": {
"storybook-mcp": {
"command": "npx",
"args": ["-y", "storybook-mcp@latest"],
"env": {
"STORYBOOK_URL": "https://opensource.adobe.com/spectrum-web-components/storybook/index.json",
"CUSTOM_TOOLS": "[{\"name\":\"getIconList\",\"description\":\"Get All Icons from the Icon page\",\"parameters\":{},\"page\":\"https://opensource.adobe.com/spectrum-web-components/storybook/iframe.html?viewMode=docs&id=icons--docs&globals=\",\"handler\":\"Array.from(document.querySelector('icons-demo').shadowRoot.querySelectorAll('.icon')).map(i => i.textContent)\"}]"
}
}
}
}How it works
Component List: The server fetches the Storybook's
index.jsonfile(v3 isstories.json) and extracts all components marked as "docs" typeProps Information: For component props, the server:
Finds the component's documentation ID from the index.json
Constructs the iframe URL for the component's docs page
Uses Playwright to load the page in a headless browser
Extracts the props table HTML from the documentation
Supported Storybook URLs
The server works with any Storybook that exposes an index.json file(v3 is stories.json). Common patterns:
https://your-storybook-domain.com/index.jsonhttps://your-storybook-domain.com/storybook/index.json
Development
Local Development
Clone the repository
Install dependencies:
yarn installInstall Playwright browsers:
yarn install:browserSet the environment variable:
export STORYBOOK_URL="your-storybook-url"Run in development mode:
yarn dev
Note: You can also use
npx @modelcontextprotocol/inspector tsx src/index.tsinstead ofyarn devif you prefer.
Building
yarn buildTesting
yarn testRequirements
Node.js 18.0.0 or higher
Chromium browser installed by Playwright
Error Handling
The server includes comprehensive error handling for:
Missing or invalid Storybook URLs
Network connectivity issues
Component not found scenarios
Playwright browser automation failures
License
Storybook MCP is MIT licensed.
Available Tools
2 toolsgetComponentListA
Get a list of all components from the configured Storybook
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description does not disclose any behavioral traits such as side effects, permissions, or constraints. It only states the basic action.
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 extraneous words. Efficient and clear.
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 zero parameters and no output schema, the description is reasonably complete for a simple list tool, though it could mention the output format or read-only nature.
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 has zero parameters and 100% coverage, so the description adds no param info. Baseline for 0 params is 4, and the description is consistent.
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', resource 'list of all components', and source 'configured Storybook', distinguishing it from sibling 'getComponentsProps' which likely focuses on props.
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 provided on when to use this tool versus the sibling 'getComponentsProps' or any other context. The description is purely functional without usage hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getComponentsPropsB
Get props information for multiple components
| Name | Required | Description | Default |
|---|---|---|---|
| componentNames | Yes | Array of component names to get props information for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose any behavioral aspects such as read-only nature, error handling, or prerequisites. For a tool with no annotations, the description carries the full burden but fails to add context.
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 sentence that is efficient and to the point, with no unnecessary words. For such a simple tool, this level of brevity is appropriate.
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 low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate but lacks any behavioral context or return format hints. It could be improved by noting the output structure or error cases.
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 100%, so the schema already documents the parameter. The description does not add meaning beyond what the schema provides, meeting the baseline for high coverage.
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' and the resource 'props information for multiple components'. It effectively distinguishes from the sibling tool 'getComponentList', which likely lists components rather than their props.
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 provided on when to use this tool versus alternatives. The sibling tool 'getComponentList' is mentioned but not contrasted, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct purpose: one returns component list, the other returns props information. No overlap.
Both use 'get' prefix followed by a noun, but one uses singular 'ComponentList' and the other plural 'ComponentsProps', a minor inconsistency.
Only 2 tools feels thin for a Storybook assistant; more tools like individual component details or stories would be expected for a richer surface.
Covers listing components and their props, but lacks operations like getting individual component details, searching, or accessing stories, leaving notable gaps.
Maintenance
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
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
Model Context Protocol server for Studex tools, notifications, and profile integrations
A Model Context Protocol server for Wix AI tools
Remote MCP server for AIStoryHub: stories, chapters, story bible, Voiceprints, AI generation.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that integrates with Storybook to help AI tools query UI components and retrieve usage examples from static Storybook files.290821MIT
- AlicenseBqualityAmaintenanceA MCP (Model Context Protocol) server for interacting with dbt.16603Apache 2.0
- AlicenseNot gradedqualityAmaintenanceA generic, modular server for implementing the Model Context Protocol (MCP).8445ISC
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI assistants to browse Storybook components, manage stories, inspect props, and capture screenshots of components.6,36014AGPL 3.0
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mcpland/storybook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server