A comprehensive Model Context Protocol (MCP) server for Penpot , the open-source design platform. This server provides full access to Penpot's capabilities through 14 powerful tools covering projects, files, components, design tokens, exports, comments, teams, and more.
🗂️ Project Management : Full CRUD operations for projects with file organization
📁 File Operations : Create, edit, duplicate, move files with version history
🧩 Component Library : Manage reusable components with instances, annotations, and stats
🎨 Design Tokens : Colors, typography with export to CSS/JSON/SCSS/Tailwind
📤 Asset Export : PNG, SVG, PDF, JPEG, WebP with multi-scale and batch support
💬 Comments & Reviews : Thread-based commenting with resolution tracking
👥 Team Collaboration : Team management, invitations, roles, and permissions
👤 Profile Management : User settings, notifications, recent files
📚 Library Sharing : Shared libraries, linking, publishing, and sync
🔍 Global Search : Search across files, objects, components, tokens
📊 Design Analysis : Design system audits, accessibility, duplicates detection
penpot-mcp/
├── src/
│ ├── index.ts # Entry point
│ ├── server-core.ts # MCP server implementation
│ ├── config.ts # Configuration management
│ ├── logger.ts # Logging utility
│ ├── api/
│ │ ├── client-factory.ts # API client factory (9 domain clients)
│ │ ├── base/ # Base API client & utilities
│ │ │ ├── base-client.ts
│ │ │ ├── error-handler.ts
│ │ │ ├── response-formatter.ts
│ │ │ └── index.ts
│ │ └── domains/ # Domain-specific API clients
│ │ ├── projects-api.ts # Project CRUD, files, stats
│ │ ├── files-api.ts # File operations, pages, objects
│ │ ├── components-api.ts # Components, instances, annotations
│ │ ├── tokens-api.ts # Colors, typography, export
│ │ ├── exports-api.ts # Asset export (PNG/SVG/PDF/etc)
│ │ ├── comments-api.ts # Threads, comments, resolution
│ │ ├── team-api.ts # Team management, invitations
│ │ ├── profile-api.ts # User profile, settings
│ │ ├── library-api.ts # Shared libraries, linking
│ │ └── index.ts
│ └── tools/
│ ├── tool-definitions.ts # MCP tool schemas (14 tools)
│ ├── index.ts
│ └── orchestration/ # High-level orchestration tools
│ ├── projects.ts # penpot_projects
│ ├── files.ts # penpot_files
│ ├── components.ts # penpot_components
│ ├── tokens.ts # penpot_tokens
│ ├── exports.ts # penpot_exports
│ ├── comments.ts # penpot_comments
│ ├── team.ts # penpot_team
│ ├── profile.ts # penpot_profile
│ ├── library.ts # penpot_library
│ ├── search.ts # penpot_search
│ ├── analyze.ts # penpot_analyze
│ ├── navigate.ts # penpot_navigate (legacy)
│ ├── inspect.ts # penpot_inspect (legacy)
│ ├── assets.ts # penpot_assets (legacy)
│ ├── types.ts
│ └── index.ts
├── package.json
├── tsconfig.json
└── README.md
npm install
npm run build
Create a .env file:
# Required: Penpot credentials
PENPOT_USERNAME = your-email@example.com
PENPOT_PASSWORD = your-password
# Optional: Custom Penpot instance URL (defaults to design.penpot.app)
PENPOT_API_URL = https://design.penpot.app/api
# Optional: Default project scope
PENPOT_PROJECT_ID = your-project-id
# Optional: Logging level
LOG_LEVEL = info
Usage with Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers" : {
"penpot" : {
"command" : " node" ,
"args" : [" /path/to/penpot-mcp/dist/index.js" ],
"env" : {
"PENPOT_USERNAME" : " your-email@example.com" ,
"PENPOT_PASSWORD" : " your-password"
}
}
}
}
Available Tools (14 Total)
Tool
Description
penpot_projects
Project management: list, create, rename, delete, duplicate, move
penpot_files
File operations: CRUD, pages, objects, tree, search, history
penpot_components
Component library: list, search, instances, create, delete, annotations
penpot_tokens
Design tokens: colors, typography, CRUD, export to CSS/JSON/SCSS/Tailwind
penpot_exports
Asset export: PNG, SVG, PDF, JPEG, WebP with batch and multi-scale
penpot_comments
Comment management: threads, replies, resolve, reopen
penpot_team
Team management: members, invitations, roles, permissions
penpot_profile
User profile: settings, notifications, recent files
penpot_library
Shared libraries: link, unlink, publish, sync
penpot_search
Global search: files, objects, components, tokens
penpot_analyze
Design analysis: design system, accessibility, duplicates
Legacy Tools (Backward Compatibility)
Tool
Description
penpot_navigate
Navigate projects, files, pages
penpot_inspect
Deep inspection of file structure
penpot_assets
Basic asset export
Action
Description
Required Params
list
List all projects
-
get
Get project details
projectId
create
Create new project
name
rename
Rename project
projectId, name
delete
Delete project
projectId
duplicate
Duplicate project
projectId
move
Move to team
projectId, targetTeamId
files
List project files
projectId
stats
Project statistics
projectId
Action
Description
Required Params
get
Get file details
fileId
create
Create new file
projectId, name
rename
Rename file
fileId, name
delete
Delete file
fileId
duplicate
Duplicate file
fileId
move
Move to project
fileId, projectId
pages
List file pages
fileId
page
Get page objects
fileId, pageId
objects
Get page objects
fileId, pageId
object
Get specific object
fileId, pageId, objectId
tree
Get object tree
fileId, objectId
search
Search objects
fileId, query
analyze
Analyze structure
fileId
history
Version history
fileId
snapshot
Create/restore
fileId
Action
Description
Required Params
list
List components
fileId
get
Get component
fileId, componentId
search
Search components
fileId, query
instances
Get instances
fileId, componentId
structure
Get structure
fileId, componentId
create
Create component
fileId, objectId, name
delete
Delete component
fileId, componentId
rename
Rename component
fileId, componentId, name
annotate
Add annotation
fileId, componentId, annotation
stats
Component stats
fileId
detach
Detach instance
fileId, instanceId
reset
Reset instance
fileId, instanceId
Action
Description
Required Params
colors
List colors
fileId
color
Get color
fileId, colorId
create_color
Create color
fileId, name, color
update_color
Update color
fileId, colorId
delete_color
Delete color
fileId, colorId
typography
List typography
fileId
typography_style
Get style
fileId, styleId
create_typography
Create style
fileId, name
update_typography
Update style
fileId, styleId
delete_typography
Delete style
fileId, styleId
all
Get all tokens
fileId
search
Search tokens
fileId, query
export_css
Export as CSS
fileId
export_json
Export as JSON
fileId
export_scss
Export as SCSS
fileId
export_tailwind
Export Tailwind
fileId
stats
Token statistics
fileId
Action
Description
Required Params
export
Export object
fileId, objectId, format
batch
Batch export
fileId, objectIds
page
Export page
fileId, pageId
file_pdf
Export as PDF
fileId
multi_scale
Multi-scale export
fileId, objectId, scales
multi_format
Multi-format export
fileId, objectId, formats
list
List exportable
fileId
settings
Export settings
fileId, objectId
download
Download export
exportId
formats
Supported formats
-
penpot_comments
Action
Description
Required Params
list
List threads
fileId
thread
Get thread
threadId
create_thread
Create thread
fileId, pageId, content
add
Add comment
threadId, content
update
Update comment
commentId, content
delete
Delete comment
commentId
delete_thread
Delete thread
threadId
resolve
Resolve thread
threadId
reopen
Reopen thread
threadId
unread
Unread count
fileId
Action
Description
Required Params
list
List teams
-
get
Get team
teamId
create
Create team
name
rename
Rename team
teamId, name
delete
Delete team
teamId
members
List members
teamId
invite
Invite member
teamId, email, role
remove_member
Remove member
teamId, memberId
update_role
Update role
teamId, memberId, role
invitations
Pending invites
teamId
cancel_invite
Cancel invite
invitationId
leave
Leave team
teamId
stats
Team statistics
teamId
Action
Description
Required Params
get
Get profile
-
update
Update profile
-
password
Change password
oldPassword, newPassword
props
Get properties
-
update_props
Update props
props
email
Request email change
newEmail
delete
Delete account
-
recent
Recent files
-
notifications
Notifications
-
mark_read
Mark as read
notificationId
Action
Description
Required Params
shared
List shared
teamId
link
Link library
fileId, libraryId
unlink
Unlink library
fileId, libraryId
linked
List linked
fileId
publish
Publish library
fileId
unpublish
Unpublish
fileId
summary
Library summary
fileId
sync
Sync library
fileId, libraryId
colors
Library colors
libraryId
typography
Library typography
libraryId
components
Library components
libraryId
search
Search libraries
teamId, query
Action
Description
Required Params
files
Search files
query
objects
Search objects
fileId, query
components
Search components
fileId
colors
Search colors
fileId
typography
Search typography
fileId
recent
Recent files
-
global
Global search
query
Action
Description
Required Params
design_system
Design system audit
fileId
accessibility
Accessibility check
fileId
naming
Naming conventions
fileId
structure
File structure
fileId
colors
Color analysis
fileId
typography
Typography analysis
fileId
components
Component usage
fileId
duplicates
Find duplicates
fileId
{
"tool" : " penpot_projects" ,
"arguments" : {
"action" : " list"
}
}
{
"tool" : " penpot_search" ,
"arguments" : {
"action" : " files" ,
"query" : " dashboard"
}
}
{
"tool" : " penpot_exports" ,
"arguments" : {
"action" : " export" ,
"fileId" : " file-uuid" ,
"objectId" : " object-uuid" ,
"format" : " png" ,
"scale" : 2
}
}
{
"tool" : " penpot_tokens" ,
"arguments" : {
"action" : " export_css" ,
"fileId" : " file-uuid"
}
}
{
"tool" : " penpot_analyze" ,
"arguments" : {
"action" : " design_system" ,
"fileId" : " file-uuid"
}
}
# Development mode with hot reload
npm run dev
# Build
npm run build
# Run tests
npm test
This MCP server uses Penpot's RPC API with Transit+JSON encoding:
UUIDs are encoded with ~u prefix
Keywords are encoded with ~: prefix
All requests go through /rpc/command/{command-name}
MIT