Connecting Your Design Tools
MCP servers, Figma integration, browser testing, and building your tool integration map
Every chapter so far treated Claude Code as a standalone tool. You prompted, Claude built, you reviewed. This chapter opens the door to everything else on your computer. Figma files, Notion docs, Slack conversations, your browser — all of it can feed into Claude Code through a standard called MCP. By the end, you will have a connected workspace where your design tools talk to each other through Claude Code as the hub.
Think of Claude Code as a hub with spokes reaching out to your other tools. Each spoke is an MCP server — a small plugin that adds a new connection. Figma for design data. Notion for documentation. Slack for team communication. Your browser for visual verification. Each one you add makes Claude Code more useful.
8.1 What Is MCP
What Is MCP
MCP is a standard for connecting AI tools to external systems. For designers, it works like a plugin system — each MCP server you add gives Claude Code a new connection to a tool you already use.
MCP stands for Model Context Protocol. It is an open-source standard, maintained by Anthropic, that defines how AI applications talk to external tools and data sources. The official analogy: "Think of MCP like a USB-C port for AI applications." Every USB-C cable fits every USB-C port. Every MCP server fits every MCP-compatible client.
You do not need to understand the protocol itself. You need to know three things MCP servers can do:
| Capability | What It Means | Design Example |
|---|---|---|
| Resources | File-like data Claude can read | A Figma file's component hierarchy, a Notion page's content |
| Tools | Functions Claude can call (with your approval) | "Get the login screen from Figma", "Create a Notion page" |
| Prompts | Pre-written templates for common tasks | "Extract all design tokens from this file" |
The ecosystem is broad. MCP is supported by Claude Code, Claude Desktop, ChatGPT, Cursor, VS Code, JetBrains IDEs, and over forty other clients. The servers you set up for Claude Code also work in these other tools. One connection, many surfaces.
Transport types
MCP servers connect to Claude Code through one of three transport mechanisms:
| Transport | How It Works | When to Use |
|---|---|---|
http |
Remote server over HTTPS (recommended) | Cloud-hosted services like Notion MCP |
stdio |
Local process running on your machine | Community servers, custom servers, local tools |
sse |
Legacy remote (deprecated) | Only for servers that have not migrated to HTTP |
For most design tool connections, you will use http for cloud services and stdio for local tools. The command to add a server is the same pattern regardless of transport.
Server scopes
When you add an MCP server, you choose where it lives:
| Scope | Available In | Shared with Team? | Stored In |
|---|---|---|---|
| Local | Current project only | No | ~/.claude.json |
| Project | Current project only | Yes, via version control | .mcp.json in project root |
| User | All your projects | No | ~/.claude.json |
For design teams, project scope is the sweet spot. Check .mcp.json into your repository and every team member gets the same Figma, Notion, and design token connections when they clone the project.
# List all configured servers
claude mcp list
# Check status inside a session
/mcp
8.2 Connecting Figma
Connecting Figma
Figma is the tool most designers want to connect first. The MCP approach lets Claude Code read your design files, extract tokens, pull component specs, and export frames — all without leaving the conversation.
Figma now documents an official Figma MCP path for Claude Code. The recommended route is the remote Figma MCP server, usually installed through Figma's Claude Code plugin and OAuth flow. Community servers still exist, and they can be useful for custom pipelines, but they should no longer be presented as the default path.
Adding a Figma MCP server
# Preferred setup path for most designers
claude plugin install figma@claude-plugins-official
# After install, open /plugin or /mcp and complete OAuth.
Use personal access tokens only when a documented workflow requires them. Prefer OAuth where the official plugin supports it, because scopes, revocation, and account approval are easier to manage.
Once connected, Claude Code gains access to Figma tools:
| Tool | What It Does | Designer Use Case |
|---|---|---|
get_file |
Fetch a Figma file's JSON structure | Understand the full component hierarchy |
get_node |
Get a specific node or component | Extract specs for a single screen or component |
get_styles |
Retrieve design tokens | Extract colors, typography, spacing as CSS variables |
export_image |
Render a frame as PNG or SVG | Get a visual reference for comparison |
The Figma-to-code workflow
The canonical workflow looks like this:
"Implement the login screen from this Figma file:
https://www.figma.com/file/abc123/Login-Flow
Use our design tokens from CLAUDE.md. Extract the colors
and typography from the Figma styles first, then build the
component."
Claude Code fetches the design data, reads your CLAUDE.md for conventions, and generates a working component. You iterate from there, the same way you refined prototypes in Chapter 3.
Using @ mentions for Figma resources
MCP servers can expose resources you reference with @ in your prompt:
"Analyze @figma:file://abc123 and create a React component
for the hero section. Compare it to
@figma:component://hero-v2 if that exists."
Resources appear in the autocomplete menu. You do not need to type the full URI — start typing @figma and select from the list.
Figma API data is not pixel-perfect
The Figma REST API returns structured JSON that approximates what you see in the Figma UI. Some properties — like complex auto-layout nesting, component instance overrides, or plugin-rendered content — may not translate exactly. Always verify the extracted data against your Figma file before trusting it for production code.
8.3 Design Tool Integrations
Design Tool Integrations
MCP is tool-agnostic. Any design application with an API can be connected using the same pattern: find or build an MCP server, add it to Claude Code, use the tools in conversation.
Figma is the most common starting point, but the pattern generalizes. Sketch, Adobe XD, Storybook, design token platforms — if it has an API, it can have an MCP server.
| Design Tool | MCP Server Status | What You Get | Setup Effort |
|---|---|---|---|
| Figma | Official remote MCP plus desktop/local options | Design context, components, variables, Code Connect, image export, and selected write workflows | Low-Medium |
| Sketch | Community or build your own | Layer hierarchy, artboard export, shared styles | Medium |
| Adobe XD / Creative Cloud | Build your own via Creative SDK | Design specs, asset export, color extraction | High |
| Storybook | Community servers available | Component docs, usage examples, prop tables | Low |
| Tokens Studio / Style Dictionary | Build your own or use file-based access | Design token files in any format | Low |
| Zeroheight / Supernova | Build your own | Design system documentation, guidelines | Medium |
Three tools in that table list "Build your own" as the MCP server path. If you use Sketch, Adobe XD, or Zeroheight and want a custom server, see section 8.6 for the build process. The MCP ecosystem is growing — a "build your own" entry today may have a community server next month.
The universal design token extraction pattern
Regardless of which design tool you use, the MCP server pattern for designers follows a consistent shape. Here is what a tool for extracting design data looks like in Python:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("design-tools")
@mcp.tool()
async def extract_colors(design_url: str) -> str:
"""Extract the color palette from a design file URL."""
colors = await fetch_colors(design_url)
return format_as_css_vars(colors)
@mcp.tool()
async def get_spacing_system(design_url: str) -> str:
"""Extract spacing values from a design file."""
spacing = await analyze_spacing(design_url)
return format_as_tailwind_config(spacing)
@mcp.tool()
async def compare_designs(url_a: str, url_b: str) -> str:
"""Compare two design files and highlight differences."""
diff = await compute_diff(url_a, url_b)
return format_diff(diff)
mcp.run(transport="stdio")
Three tools. Three capabilities. This is the pattern that works across every design tool integration — read data, extract structured information, compare versions. You build this once for your tool of choice and it works everywhere.
Adding any community server
The command is the same regardless of the design tool:
# Add any stdio-based design MCP server
claude mcp add --transport stdio sketch -- npx -y sketch-mcp-server
# Add Storybook integration
claude mcp add --transport stdio \
--env STORYBOOK_URL=http://localhost:6006 \
storybook -- npx -y storybook-mcp
If a server does not exist for your tool, you can build one. Section 8.6 covers that process.
8.4 Slack and Notion Workflows
Slack and Notion Workflows
Slack routes design tasks from team chat to working code. Notion gives Claude Code access to design briefs, specs, and documentation. Together, they turn conversations into implementations.
Slack integration
Claude Code has two distinct Slack features. Understanding the difference matters.
| Feature | What It Does | Designer Use Case |
|---|---|---|
| Claude Code in Slack | Full coding sessions triggered by @mention | Post a Figma link, ask Claude to implement it, get a PR back |
| Channels (push) | Push events into a running session | Get notified when a build finishes, send tweaks from your phone |
Claude Code in Slack is the feature most design teams will use day-to-day. You install the Claude app from the Slack Marketplace, connect your account, and invite @Claude to a channel. When you mention Claude with a coding task, it detects the intent, creates a Claude Code session on the web, and posts status updates back to the thread.
The session flow:
1. You @mention Claude with a request in a Slack channel
2. Claude detects coding intent
3. A new Claude Code session starts on claude.ai/code
4. Status updates appear in the Slack thread
5. On completion: summary + "View Session" and "Create PR" buttons
You choose a routing mode during setup. "Code only" sends every mention to a Claude Code session. "Code + Chat" routes intelligently — coding tasks to Code, writing and analysis tasks to Chat. For design teams, "Code + Chat" is the better choice because you will mix implementation requests with design feedback discussions.
Notion integration
Notion has an official, production-ready MCP server at https://mcp.notion.com/mcp. This is one of the most reliable integrations available — maintained by Notion itself, with OAuth authentication and enterprise controls.
# Add the official Notion MCP server
claude mcp add --transport http notion https://mcp.notion.com/mcp
After adding, authenticate inside a session:
/mcp
This opens the OAuth flow. Grant access to the workspaces and pages you want Claude Code to reach. Notion's admin controls let enterprise teams approve or block specific AI apps at the organization level.
Once connected, you can reference Notion pages directly:
"Read the design brief at @notion:page://design-brief-v3
and build the component library based on the specifications.
Cross-reference with our existing components in src/components/."
The combined workflow
This is where the hub model pays off. A single workflow can span three tools:
Designer posts Figma link in Slack channel
→ Claude Code reads the Slack message
→ Claude Code fetches the Figma design via MCP
→ Claude Code reads the Notion design brief for context
→ Claude Code implements the design
→ Claude Code creates a pull request
→ Claude Code updates the Notion task with implementation notes
→ Status posted back to the Slack thread
Each step uses a different MCP server. Claude Code orchestrates the sequence because it has access to all three tools simultaneously.
Channels for mobile design ops
Channels push events into a running Claude Code session. They are currently in research preview and support Telegram, Discord, and iMessage.
# Install a channel plugin
claude --channels plugin:telegram@claude-plugins-official
claude --channels plugin:discord@claude-plugins-official
Channels are research preview
The pairing code flow and setup steps may change as the feature evolves. For designers, channels enable lightweight mobile interactions: "Increase the header padding to 24px" sent from iMessage while you are away from your desk.
8.5 Browser-Based Design Verification
Browser-Based Design Verification
The Chrome extension closes the feedback loop between code generation and visual output. It lets you see what Claude built, compare it to your design reference, and iterate without leaving the browser.
Every chapter in this book follows the same loop: describe your design, review the output, refine. But reviewing the output has always required a manual step. You generate code, open a browser, refresh, check it against your Figma file. That context switch breaks your flow. The Chrome extension removes it.
Think of it like the preview pane in Figma that shows your component in context. Except here, the "context" is a real browser rendering real code, and Claude can see what you see.
The visual verification workflow
The workflow is a three-step loop that replaces the old "generate, switch tabs, squint, switch back" routine:
Open the page Claude built in Chrome. The extension captures a screenshot and sends it back to the conversation.
Paste your design reference (a Figma export, a screenshot, or a description of the expected visual). Ask Claude to compare.
Claude lists the visual differences and fixes them. Repeat until the output matches your intent.
The prompt that triggers this workflow:
"Open the login page in Chrome. Take a screenshot. Compare
it to the design reference I pasted. List any visual
differences and fix them."
Claude opens the page, captures what it sees, compares pixel-level details against your reference, and returns a structured list: spacing is off by 8px on the heading, the button color is #3B82F6 instead of #4F46E5, the border radius is 4px instead of 8px. Then it fixes each one.
Why this matters for designers
Designers judge output visually, not by reading code. The Chrome extension meets you where your judgment is strongest: looking at the rendered result. You do not need to parse CSS to know something is wrong. You can see it, describe what you see, and Claude adjusts.
This is the quality gate that was missing. Without it, you generate code, mentally render it in your head (or open a browser separately), and try to describe the visual gap in words. With it, Claude sees the same rendering you do. The feedback loop shrinks from minutes to seconds.
The comparison works best when your CLAUDE.md is loaded (Chapter 5). With design tokens defined, Claude can identify that "the blue is wrong" means the CSS is using #3B82F6 instead of your defined --color-primary: #4F46E5. The visual check plus the token reference gives Claude enough context to fix the problem in one pass.
My Take
The Chrome extension is the most immediately valuable integration for designers — even more than Figma. Being able to see what you built, compare it to a reference, and iterate visually closes the feedback loop that has been missing from AI-assisted design. Figma integration is more valuable long-term for design system workflows, but the Chrome extension changes how you work on day one.
Tip
Pair the Chrome extension with a screenshot of your Figma frame for the most accurate comparison. Export the frame as a 2x PNG, paste it into the conversation alongside the Chrome screenshot, and ask Claude to diff them. The side-by-side visual comparison catches spacing, color, and typography issues that text descriptions miss.
8.6 Custom Servers and Connected Workspaces
Custom Servers and Connected Workspaces
When no existing MCP server fits your design tool, you build one. When you have multiple servers running, you orchestrate them into a connected workspace. This section covers both.
Think of building an MCP server like creating a Figma plugin — you define what data your tool can provide and what actions it can take, and Claude Code handles the rest. The MCP SDK gives you the structure. You fill in the design-specific logic.
The fastest path is asking Claude Code to scaffold the server for you:
/plugin install mcp-server-dev@claude-plugins-official
/mcp-server-dev:build-mcp-server
Claude asks about your use case and generates a working server with the right transport and tool definitions. This works for both local stdio servers and remote HTTP servers.
A design token MCP server in TypeScript
Here is a complete structural example — a server that exposes design-token and component tools. The fetch helpers are intentionally small placeholders because every design source has a different API contract:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "design-tokens",
version: "1.0.0",
});
type TokenSet = Record<string, string | number>;
async function fetchAndExtractTokens(fileUrl: string): Promise<TokenSet> {
// Replace with your Figma, token repository, or design-system API call.
return { "color.primary": "#4F46E5", "radius.md": 8, "spacing.4": 16 };
}
function formatTokens(tokens: TokenSet, format: "css" | "scss" | "json" | "tailwind"): string {
if (format === "json") return JSON.stringify(tokens, null, 2);
return Object.entries(tokens)
.map(([key, value]) => `--${key.replaceAll(".", "-")}: ${value};`)
.join("\\n");
}
async function fetchComponent(fileUrl: string, componentName: string) {
// Replace with your real component lookup.
return { fileUrl, componentName, states: ["default", "hover", "disabled"] };
}
server.registerTool(
"get_tokens",
{
description: "Get design tokens from a design file",
inputSchema: {
file_url: z.string().describe("URL to the design file"),
format: z.enum(["css", "scss", "json", "tailwind"])
.describe("Output format"),
},
},
async ({ file_url, format }) => {
const tokens = await fetchAndExtractTokens(file_url);
const output = formatTokens(tokens, format);
return { content: [{ type: "text", text: output }] };
}
);
server.registerTool(
"get_component",
{
description: "Get component specs from a design file",
inputSchema: {
file_url: z.string().describe("URL to the design file"),
component_name: z.string().describe("Component name"),
},
},
async ({ file_url, component_name }) => {
const specs = await fetchComponent(file_url, component_name);
return {
content: [{ type: "text", text: JSON.stringify(specs, null, 2) }],
};
}
);
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
main().catch(console.error);
Two tools. One fetches design tokens in the format your project needs. One fetches component specifications. Both return plain text that Claude Code reads and acts on. In design terms: the first tool is like exporting your Figma variables as CSS. The second is like reading a component's inspect panel.
Team configuration with .mcp.json
Once your custom server is built, add it to the project configuration alongside the other design tools:
{
"mcpServers": {
"figma": {
"type": "stdio",
"command": "npx",
"args": ["-y", "figma-mcp-server"],
"env": {
"FIGMA_ACCESS_TOKEN": "${FIGMA_TOKEN}"
}
},
"notion": {
"type": "http",
"url": "https://mcp.notion.com/mcp"
},
"design-tokens": {
"type": "stdio",
"command": "node",
"args": ["${CLAUDE_PROJECT_DIR}/tools/design-tokens-mcp/build/index.js"]
},
"storybook": {
"type": "stdio",
"command": "npx",
"args": ["-y", "storybook-mcp"],
"env": {
"STORYBOOK_URL": "http://localhost:6006"
}
}
}
}
Check this file into version control only after a security review. Every team member who clones the repository gets the same MCP connection definitions, so each server should be trusted, documented, and scoped. Environment variables such as ${FIGMA_TOKEN} are set individually and should never be committed.
MCP trust checklist
Before adding an MCP server, confirm who maintains it, what scopes it requests, whether it can write, where secrets live, and how to revoke access. New servers can expose prompts, files, and tool outputs to another system. Treat them like browser extensions or Figma plugins: useful, but only after trust and permission review.
Enterprise managed configuration
For organizations, admins can deploy a fixed set of MCP servers to all machines:
| Platform | Config Location |
|---|---|
| macOS | /Library/Application Support/ClaudeCode/managed-mcp.json |
| Linux | /etc/claude-code/managed-mcp.json |
Managed configuration ensures every designer on the team has the same Figma, Notion, and design system connections without manual setup. IT deploys the file, and the tools appear in everyone's Claude Code.
Choosing your connections
Not every team needs every integration. Here is a decision framework:
| Tool | When to Connect | When to Skip | Priority |
|---|---|---|---|
| Figma | Design in Figma and need code to match | Do not use Figma or designs are not detailed | High |
| Notion | Store design briefs, specs, or task tracking in Notion | Use a different tool for documentation | High |
| Slack | Team routes design requests through Slack channels | Work solo or use a different chat tool | Medium |
| Storybook | Have a running Storybook with existing components | Do not use Storybook yet | Medium |
| Custom token server | Have a complex design token pipeline | Tokens live in CLAUDE.md or CSS files | Low |
| Channels (Telegram/Discord/iMessage) | Want mobile access to Claude Code sessions | Always at your desk | Low |
Start with one connection that solves a real pain point. For most designers, that is Figma — being able to say "implement this screen from Figma" and have Claude Code pull the design data directly is the most immediate workflow improvement. Notion is the second priority if your team stores specs there. Slack comes third for teams that route work through channels.
My Take
Do not try to connect every tool at once. Each integration adds setup complexity and ongoing maintenance. Start with the one that hurts the most — the tool you find yourself copying data from into Claude Code prompts manually. That is your first MCP server. Once that connection is stable and useful, add the next one. Three working connections beat six half-configured ones.
The compound value kicks in at two or three connections. Figma alone is useful. Figma plus Notion means Claude Code reads your design and your brief simultaneously. Figma plus Notion plus Slack means a teammate can trigger the whole workflow from a chat message. That is the hub model paying off.
Claude Code as an MCP server
Claude Code itself can act as an MCP server. This means other AI tools — Claude Desktop, Cursor, or any MCP-compatible client — can use Claude Code's file editing, terminal access, and development capabilities through the same protocol.
{
"mcpServers": {
"claude-code": {
"type": "stdio",
"command": "claude",
"args": ["mcp", "serve"]
}
}
}
Add this configuration to another MCP client, and that client gains the ability to read your project files, run commands, and edit code — all powered by Claude Code. For designers who prefer Claude Desktop's interface for exploration but need Claude Code's execution capabilities, this bridge gives you both.
The connected workspace is not about connecting everything. It is about connecting the right things — the tools where your design work already lives — so Claude Code operates on real data instead of pasted prompts.