Skip to content

Commit 53c4e1f

Browse files
committed
feat: add screenshot-story MCP tool for visual verification
Adds a new `screenshot-story` tool that renders a Storybook story in a headless browser (via Playwright) and returns a PNG screenshot as MCP image content. This closes the visual feedback loop so AI agents can verify rendered components without manual inspection.
1 parent eccfa39 commit 53c4e1f

File tree

8 files changed

+698
-0
lines changed

8 files changed

+698
-0
lines changed

packages/addon-mcp/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,20 @@
4747
"devDependencies": {
4848
"@storybook/addon-a11y": "catalog:",
4949
"@storybook/addon-vitest": "catalog:",
50+
"playwright": "^1.50.0",
5051
"storybook": "catalog:"
5152
},
5253
"peerDependencies": {
5354
"@storybook/addon-vitest": "^9.1.16 || ^10.0.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0",
55+
"playwright": "^1.50.0",
5456
"storybook": "^9.1.16 || ^10.0.0 || ^10.1.0-0 || ^10.2.0-0 || ^10.3.0-0 || ^10.4.0-0"
5557
},
5658
"peerDependenciesMeta": {
5759
"@storybook/addon-vitest": {
5860
"optional": true
61+
},
62+
"playwright": {
63+
"optional": true
5964
}
6065
},
6166
"storybook": {

packages/addon-mcp/pnpm-lock.yaml

Lines changed: 29 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/addon-mcp/src/mcp-handler.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import type { AddonContext, AddonOptionsOutput } from './types.ts';
1818
import { logger } from 'storybook/internal/node-logger';
1919
import { getManifestStatus } from './tools/is-manifest-available.ts';
2020
import { addRunStoryTestsTool } from './tools/run-story-tests.ts';
21+
import { addScreenshotStoryTool } from './tools/screenshot-story.ts';
2122
import { estimateTokens } from './utils/estimate-tokens.ts';
2223
import { isAddonA11yEnabled } from './utils/is-addon-a11y-enabled.ts';
2324
import type { CompositionAuth } from './auth/index.ts';
@@ -57,6 +58,7 @@ const initializeMCPServer = async (options: Options, multiSource?: boolean) => {
5758
// Register dev addon tools
5859
await addPreviewStoriesTool(server);
5960
await addGetUIBuildingInstructionsTool(server);
61+
await addScreenshotStoryTool(server);
6062

6163
// Register test addon tools
6264
a11yEnabled = await isAddonA11yEnabled(options);

0 commit comments

Comments
 (0)