Provides tools to render UI components using GitHub's Primer design system, allowing AI agents to display rich, themed elements like status labels, navigation, and layout structures directly in conversations.
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., "@mcp-primerCreate a pull request status card with an 'Open' label"
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.
mcp-primer
MCP App that renders Primer React components inline in AI conversations. Built on the MCP Apps extension.

What it does
Exposes two MCP tools:
Tool | Description |
| Renders a Primer component tree from JSON inline in the conversation |
| Returns available components with usage examples |
The LLM sends a component tree as JSON, and the MCP App renders it using real @primer/react components with full GitHub theming (light + dark mode).
Example
Ask Copilot: "Show me a PR status using Primer components"
The LLM calls render-primer with:
{
"tree": {
"type": "Stack",
"props": { "direction": "horizontal", "align": "center", "gap": "normal" },
"children": [
{ "type": "StateLabel", "props": { "status": "pullOpened" }, "children": "Open" },
{ "type": "Heading", "props": { "as": "h3" }, "children": "Add dark mode support" }
]
}
}And it renders as real Primer components in the chat.
Setup
VS Code (Insiders)
Add to your MCP settings (.vscode/mcp.json):
{
"servers": {
"primer": {
"command": "node",
"args": ["${workspaceFolder}/dist/main.js", "--stdio"]
}
}
}Or point to the repo wherever you cloned it:
{
"servers": {
"primer": {
"command": "bash",
"args": ["-c", "cd ~/source/mcp-primer && npm run build >&2 && node dist/main.js --stdio"]
}
}
}HTTP Transport
npm start
# Server listening on http://localhost:3001/mcpDevelopment
npm install
npm run dev # Watch mode (Vite + server)Available Components
Layout: Stack, PageLayout, PageHeader
Typography: Heading, Text
Actions: Button, IconButton, ButtonGroup, LinkButton
Navigation: Breadcrumbs, Link, Pagination, UnderlineNav
Data Display: Avatar, AvatarStack, BranchName, CounterLabel, Label, StateLabel, Token, RelativeTime, Timeline
Feedback: Banner, Spinner, ProgressBar
Forms: TextInput, Textarea, Select, Checkbox, Radio, FormControl, ToggleSwitch, SegmentedControl
Overlays: ActionList, ActionMenu, Dialog
Misc: Truncate, Tooltip, Popover, TreeView, NavList
All compound components (e.g. ActionList.Item, FormControl.Label, Timeline.Badge) are also supported using dot notation.
Component Tree Format
Each node in the tree has:
{
type: string; // Primer component name
props?: object; // Component props
children?: string | node | (string | node)[]; // Text or nested components
}Build
npm run build # Type-check + Vite bundle + compile serverProduces:
dist/mcp-app.html— single-file React app with all Primer components bundleddist/server.js— MCP serverdist/index.js— entry point (stdio + HTTP)
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.