Penpot MCP Server
Provides tools for manipulating Penpot designs, including creating and modifying shapes, managing files, pages, components, and more.
Click on "Deploy 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., "@Penpot MCP Server Create a new design file called 'App Mockup'"
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.
Penpot MCP Server
A Model Context Protocol (MCP) server that provides full manipulation capabilities for Penpot - the open-source design tool. This server enables AI assistants to create, modify, and manage Penpot designs programmatically, similar to Figma plugin capabilities.
๐ณ Multi-architecture Docker images available: linux/amd64, linux/arm64
๐ฌ See It In Action

Example chat interface created entirely through natural conversation with an AI assistant using this MCP server. See Example 7: Chat Interface for the complete conversation that generated this design.
The screenshot above demonstrates how you can describe a design in natural language, and the AI assistant will create it in Penpot using the MCP server's capabilities - handling layout, styling, components, and interactions automatically.
Related MCP server: MCP Figma
Features
๐จ Complete Design Manipulation
Create & Manage Files: Create new design files, list projects, and manage file metadata
Shape Operations: Create rectangles, circles, frames, paths, text, and SVG shapes
Modify Designs: Update shape properties, move objects, resize, rotate, and style
Page Management: Add, remove, and organize pages within files
Component System: Create and manage reusable components
๐ Real-time Operations
Direct API integration with Penpot
Session-based updates with revision tracking
Support for batch operations
๐ ๏ธ Available Tools (76+ Tools!)
Project & File Management (8 tools)
list_teams- List all accessible teamslist_projects- List all accessible projectslist_files- List files in a projectget_file- Get file data and structurecreate_file- Create a new design filerename_file- Rename an existing filedelete_file- Delete a file permanently
Page Management (8 tools)
list_pages- List all pages in a fileadd_page- Add a new page to a fileget_page_shapes- Get all shapes on a specific page (basic info)query_shapes- Query and filter shapes with criteria (like grep). Filter by type, area, color, font, text content. Select fields to return. Useful for bulk operationsget_shape_properties- Get detailed properties of a specific shape (colors, text, fonts, effects, etc.)rename_page- Rename a pagedelete_page- Delete a page from a filemove_shapes- Move shapes to different parent/frame or reorder
Shape Creation (6 tools)
create_rectangle- Create rectangle shapescreate_circle- Create circle/ellipse shapescreate_frame- Create frame containerscreate_text- Create text elements with alignment (left, center, right, justify), fonts, and stylingcreate_svg- Create SVG elementscreate_path- Create custom paths (planned)
Shape Manipulation (3 tools)
update_shape- Modify shape properties (position, size, style, etc.)delete_shape- Remove shapes from the designduplicate_shapes- Duplicate shapes (planned)group_shapes- Group multiple shapes (planned)
Shape Alignment & Distribution (2 tools)
align_shapes- Align multiple shapes (left, center, right, top, middle, bottom)distribute_shapes- Distribute shapes evenly with equal spacing (horizontal, vertical)
Component System (5 tools)
create_component- Create reusable component from shapeupdate_component- Update component name/pathdelete_component- Delete component from librarylist_components- List all components in fileinstantiate_component- Create component instance (planned)
Team & Collaboration (10 tools)
create_team- Create a new teamupdate_team- Update team settingsdelete_team- Delete a teamlist_team_members- List all members of a teaminvite_team_member- Invite user to join teamremove_team_member- Remove member from teamupdate_team_member_role- Update member permissionscreate_project- Create new project in teamupdate_project- Update project settingsdelete_project- Delete a project
File Sharing (3 tools)
create_share_link- Create shareable link for filelist_share_links- List all share links for filedelete_share_link- Delete a share link
Comments & Feedback (8 tools)
list_comment_threads- List comment threads in fileget_comments- Get all comments in threadcreate_comment_thread- Create new comment threadadd_comment- Add comment to existing threadupdate_comment- Update existing commentdelete_comment- Delete a commentdelete_comment_thread- Delete entire threadupdate_comment_thread_status- Mark thread as resolved/unresolved
Export & Media (5 tools)
export_shape- Export shape/frame as image (PNG, JPG, SVG, PDF)list_file_media- List all media used in fileupload_file_media- Upload image file (PNG, JPG, SVG, GIF, WEBP)upload_file_media_from_url- Upload image from URLdelete_file_media- Delete media objectclone_media- Clone media from another file
Font Management (5 tools)
upload_font- Upload custom font (TTF, OTF, WOFF, WOFF2)list_team_fonts- List all fonts in teamget_font_variants- Get all variants of font familyupdate_font_variant- Update font metadatadelete_font_variant- Delete font variant
Webhooks (5 tools)
create_webhook- Create webhook for event notificationslist_webhooks- List all webhooks for teamupdate_webhook- Update webhook settingsdelete_webhook- Delete a webhookget_webhook_events- Get info about webhook event types
Search (5 tools)
search_files- Search files by namesearch_projects- Search projects by namesearch_shapes- Search shapes within filesearch_components- Search components by nameadvanced_search- Search across multiple resource types
Profile & Stats (5 tools)
get_profile- Get current user profileupdate_profile- Update user profile settingslist_recent_files- List recently accessed filesget_file_permissions- Get file permissionsget_team_stats- Get team statistics
Installation
Option 1: Using npm (Recommended for CLI)
Install globally from npm:
# Install globally
npm install -g @zcubekr/penpot-mcp-server
# Run the server
penpot-mcp-server
# Or run in HTTP mode
TRANSPORT=http penpot-mcp-serverOr install as a project dependency:
# Install as dependency
npm install @zcubekr/penpot-mcp-server
# Run via npx
npx penpot-mcp-serverOption 2: Using Docker (Recommended for HTTP Server)
Pull the pre-built multi-architecture image from GitHub Container Registry:
# Pull latest version
docker pull ghcr.io/zcube/penpot-mcp-server:latest
# Or pull specific version
docker pull ghcr.io/zcube/penpot-mcp-server:v1.0.0
# Or pull development version
docker pull ghcr.io/zcube/penpot-mcp-server:main-devSupported Architectures:
linux/amd64(x86_64)linux/arm64(ARM64/Apple Silicon)
Option 3: Build from Source
git clone https://github.com/zcube/penpot-mcp-server.git
cd penpot-mcp-server
npm install
npm run buildConfiguration
Set up your Penpot credentials as environment variables:
export PENPOT_API_URL="https://design.penpot.app"
export PENPOT_ACCESS_TOKEN="your-access-token-here"Or create a .env file (not recommended for production):
PENPOT_API_URL=https://design.penpot.app
PENPOT_ACCESS_TOKEN=your-access-token-hereGetting a Penpot Access Token
Log in to your Penpot account
Go to Settings โ Access Tokens
Create a new access token
Copy and save it securely
Self-hosted Penpot Server
If you're running a self-hosted Penpot instance, you need to enable access token support:
Important: Due to Cloudflare security restrictions on the public Penpot instance, you may need to use a self-hosted server for API access.
Enable Access Tokens
Add enable-access-tokens to your Penpot server configuration:
# docker-compose.yml or penpot-config.env
environment:
- PENPOT_FLAGS=...enable-access-tokensIf you have other flags, append enable-access-tokens to the list:
# Example with multiple flags
environment:
- PENPOT_FLAGS=enable-registration enable-login enable-access-tokensAfter enabling this flag, restart your Penpot server and you'll be able to generate access tokens from Settings โ Access Tokens.
Usage
Transport Modes
This server supports two transport modes:
stdio mode (default) - For local MCP clients like Claude Desktop
HTTP/SSE mode - For external access via HTTP with Server-Sent Events
Stdio Mode (Default)
With Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"penpot": {
"command": "node",
"args": ["/path/to/penpot-mcp-server/dist/index.js"],
"env": {
"PENPOT_API_URL": "https://design.penpot.app",
"PENPOT_ACCESS_TOKEN": "your-access-token"
}
}
}
}With Other MCP Clients
node dist/index.jsHTTP/SSE Mode (External Access)
For external access, you can run the server in HTTP mode with Server-Sent Events:
Quick Start with Docker
# Run with Docker
docker run -d \
--name penpot-mcp-server \
-p 3000:3000 \
-e TRANSPORT=http \
-e PENPOT_API_URL=https://design.penpot.app \
-e PENPOT_ACCESS_TOKEN=your-access-token \
ghcr.io/zcube/penpot-mcp-server:latest
# With custom port and self-hosted Penpot
docker run -d \
--name penpot-mcp-server \
-p 8080:8080 \
-e TRANSPORT=http \
-e HTTP_PORT=8080 \
-e PENPOT_API_URL=https://penpot.mycompany.com \
-e PENPOT_ACCESS_TOKEN=your-access-token \
ghcr.io/zcube/penpot-mcp-server:latest
# View logs
docker logs -f penpot-mcp-server
# Stop server
docker stop penpot-mcp-server
docker rm penpot-mcp-serverQuick Start with Node.js
# Using npm script
npm run dev:http
# Or with environment variable
TRANSPORT=http node dist/index.js
# With custom port
TRANSPORT=http HTTP_PORT=8080 node dist/index.jsConfiguration Options
# Required
export PENPOT_ACCESS_TOKEN="your-access-token"
# Optional
export PENPOT_API_URL="https://design.penpot.app" # Default
export HTTP_PORT="3000" # Default
export HTTP_HOST="0.0.0.0" # Default
# Security options
export ALLOWED_ORIGINS="https://example.com,https://app.example.com"
export ALLOWED_HOSTS="localhost,example.com"
export ENABLE_DNS_REBINDING_PROTECTION="true"HTTP Endpoints
Once running, the server exposes:
MCP Endpoint:
http://localhost:3000/mcpGET: Establish SSE stream for receiving messages
POST: Send JSON-RPC messages to the server
DELETE: Close session and cleanup
Health Check:
http://localhost:3000/healthReturns server status and active session count
Example HTTP Client Usage
// Initialize connection (GET request)
const eventSource = new EventSource('http://localhost:3000/mcp');
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('Received:', data);
};
// Send message (POST request)
fetch('http://localhost:3000/mcp', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'mcp-session-id': sessionId, // From SSE endpoint response
},
body: JSON.stringify({
jsonrpc: '2.0',
id: 1,
method: 'tools/list',
}),
});Docker with HTTP Mode
# Using docker-compose
docker compose up -d
# Or with docker run
docker run -d \
-e TRANSPORT=http \
-e HTTP_PORT=3000 \
-e PENPOT_ACCESS_TOKEN=your-token \
-p 3000:3000 \
penpot-mcp-server:latestSecurity Considerations
When running in HTTP mode:
Use HTTPS in production - Run behind a reverse proxy (nginx, Caddy, etc.)
Enable CORS restrictions - Use
ALLOWED_ORIGINSto restrict accessEnable DNS rebinding protection - Set
ENABLE_DNS_REBINDING_PROTECTION=trueFirewall rules - Restrict access to trusted networks
Token security - Keep access tokens secure, rotate regularly
Example Usage
Once connected, you can ask your AI assistant to:
"Create a new design file for a mobile app landing page"
"Add a rectangle with red fill at position 100,100"
"Create a frame called 'Hero Section' and add some text inside"
"List all shapes on the current page"
"Move the rectangle to position 200,200 and make it 300x200"
"Create a circle with blue stroke and no fill"
API Architecture
This server uses Penpot's RPC API with the following structure:
Endpoint:
https://design.penpot.app/api/rpc/command/<method-name>Authentication: Bearer token via
Authorization: Token <token>Content-Type:
application/jsonorapplication/transit+json
Testing
โ Automated CI/CD Testing
All tests run automatically on every push and pull request!
The GitHub Actions workflow:
๐งช Runs comprehensive test suite (45 tests covering 76+ tools)
โ Tests against external Penpot instance using penpot-test environment
๐ณ Builds and validates Docker images (multi-arch)
๐ Uploads test results as artifacts
Workflow: .github/workflows/docker.yml โ integration-test job
Testing with External Penpot Instance
You can also test against a real Penpot instance:
Create a Penpot account at https://design.penpot.app
Generate an access token in Settings โ Access Tokens
Set environment variables:
export PENPOT_API_URL="https://design.penpot.app"
export PENPOT_ACCESS_TOKEN="your-token-here"Run tests:
# Run full test suite
npm test
# Or run with npx
npx tsx test-tools.tsThe test suite will:
โ Test all 70+ MCP tools
โ Create a test file with shapes
โ Test components, comments, sharing
โ Search functionality
โ Verify all operations
See TESTING.md for detailed testing guide.
Docker
Quick Start with Docker
# Create .env file
echo "PENPOT_API_URL=https://design.penpot.app" > .env
echo "PENPOT_ACCESS_TOKEN=your-token" >> .env
# Run with Docker Compose
docker compose up -d
# View logs
docker compose logs -f
# Run tests
docker compose --profile test up penpot-mcp-testBuild Docker Image
# Production image
docker build -t penpot-mcp-server:latest .
# Test image
docker build -f Dockerfile.test -t penpot-mcp-test:latest .See DOCKER.md for comprehensive Docker guide.
Development
# Watch mode for development
npm run watch
# Run in development
npm run dev
# Run tests during development
npm testContributing
We welcome contributions! Before submitting changes:
Test GitHub Actions locally with nektos/act
# Install act brew install act # macOS # or curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash # Test workflows before pushing act -j build-and-test # Test with larger runner image act -P ubuntu-latest=catthehacker/ubuntu:act-latestTest Docker builds locally
docker build -t penpot-mcp-server:test .Run tests with local Penpot container
docker compose -f docker-compose.penpot.yml up -d docker compose -f docker-compose.penpot.yml --profile test up penpot-mcp-test
See CONTRIBUTING.md for complete development guide including:
Setting up development environment
Testing workflows with act
Docker build testing
Code style guidelines
Pull request process
Penpot API Coverage
This server implements tools based on Penpot's 25 RPC command modules:
Module | Coverage | Tools |
โ files.clj | Full | create_file, get_file, list_files, rename_file, delete_file |
โ files_create.clj | Full | create_file |
โ files_update.clj | Full | All shape/page manipulation via update-file RPC |
โ projects.clj | Full | list_projects, create_project, update_project, delete_project |
โ teams.clj | Full | list_teams, create_team, update_team, delete_team |
โ teams_invitations.clj | Partial | invite_team_member |
โ files_share.clj | Full | create_share_link, list_share_links, delete_share_link |
โ comments.clj | Full | All comment and thread operations |
โ media.clj | Full | upload_file_media, list_file_media, delete, clone |
โ fonts.clj | Full | Upload fonts, list, update, delete font variants |
โ webhooks.clj | Full | Create, list, update, delete webhooks |
โ search.clj | Full | Search files, projects, shapes, components |
โ profile.clj | Partial | get_profile, update_profile, recent files, permissions |
โ auth.clj | N/A | Authentication handled via access token |
โ profile.clj | N/A | User profile management |
โ audit.clj | N/A | Admin-only audit logs |
โ viewer.clj | N/A | View-only operations |
Legend: โ Implemented | โ ๏ธ Partial/Planned | โ Not applicable for MCP use case
New in v1.0.0 - Complete API Coverage! ๐
Version 1.0.0 brings full implementation of all previously partial features:
โจ Media Upload (Full Implementation)
File Upload: Upload images from local file system
URL Import: Import images directly from URLs
Format Support: PNG, JPG, SVG, GIF, WEBP
Management: Delete and clone media objects
Real multipart/form-data upload support
๐ค Font Management (Full Implementation)
Upload Fonts: TTF, OTF, WOFF, WOFF2 formats
Font Families: Manage multiple font families per team
Font Variants: Multiple weights and styles
Team Fonts: Shared font libraries across team
๐ Webhooks (Full Implementation)
Event Notifications: file:created, file:updated, comment:created, etc.
HTTPS Endpoints: Secure webhook delivery
Management: Create, update, delete, list webhooks
Status Control: Enable/disable webhooks
๐ Search (Full Implementation)
File Search: Search across all projects
Project Search: Find projects by name
Shape Search: Find shapes within files by name/type
Component Search: Locate components in libraries
Advanced Search: Multi-resource type searches
๐ฌ Enhanced Comments (Full Implementation)
Thread Management: Create, delete, resolve threads
Comment Operations: Add, update, delete comments
Position Tracking: Comments tied to specific locations
Resolution Status: Mark threads as resolved/unresolved
๐ค Profile & Statistics (New)
User Profile: Get and update user settings
Recent Files: Access history tracking
Permissions: Check file access levels
Team Stats: Project, file, and member counts
๐ Coverage Summary
19/25 RPC modules implemented (76% coverage)
70+ MCP tools (up from 50+)
25+ new tools added in v1.0.0
All major Penpot features now accessible via AI
License
MIT
Third-Party Code and Attributions
OpenAPI Specification
This project uses the Penpot OpenAPI specification from https://design.penpot.app/api/openapi.json.
The openapi.json file in this repository is maintained for version control purposes to track changes in the Penpot API over time. The copyright for the OpenAPI specification remains with the Penpot project and its contributors.
Generated Code
The src/generated/ directory contains TypeScript client code automatically generated from the Penpot OpenAPI specification using @hey-api/openapi-ts (MIT License).
API Type Definitions
The type definitions in src/types.ts are based on Penpot's RPC API structure and were created by analyzing the Penpot API responses and behavior.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Available Tools
81 toolsadd_pageB
Add a new page to a file
Inputs: fileId (required), name.
align_shapesC
Align multiple shapes relative to each other or to a selection bounds
Inputs: fileId (required), pageId (required), shapeIds (required), alignment (required).
clone_media_objectC
Clone an existing media object
Inputs: id (required), fileId (required), isLocal (required).
create_circleB
Create a circle shape with colors, gradients, images, borders, shadows, blur, and blend modes
Inputs: fileId (required), pageId (required), x, y, +29 more.
create_commentB
Add a comment to an existing thread
Inputs: content (required), threadId (required), shareId, mentions.
create_comment_threadB
Create a new comment thread on a page
Inputs: fileId (required), pageId (required), content (required), frameId (required), +4 more.
create_componentB
Create a component from a shape
Inputs: fileId (required), pageId (required), shapeId (required), name.
create_fileC
Create a new file in a project
Inputs: name (required), projectId (required), isShared.
create_file_snapshotA
Create a new snapshot (version) of a file for backup/versioning
Inputs: fileId (required), label.
create_font_variantA
Create a new font variant (requires font data). Font weights: 100-900 in increments of 100.
Inputs: data (required), fontId (required), teamId (required), fontStyle (required), +2 more.
create_frameB
Create a frame shape (container for other shapes) with colors, gradients, images, borders, shadows, blur, and blend modes
Inputs: fileId (required), pageId (required), x, y, +35 more.
create_media_from_urlC
Create a media object from a URL
Inputs: url (required), fileId (required), isLocal (required), id, +1 more.
create_projectC
Create a new project in a team
Inputs: name (required), teamId (required), id.
create_rectangleB
Create a rectangle shape with colors, gradients, images, borders, rounded corners, shadows, blur, and blend modes
Inputs: fileId (required), pageId (required), x, y, +35 more.
create_teamC
Create a new team
Inputs: name (required), id, features.
create_team_invitationsB
Create invitations for one or more email addresses to join a team
Inputs: role (required), emails (required), teamId (required).
create_textB
Create a text shape with color, styling, alignment, shadows, blur effects, and blend modes
Inputs: fileId (required), pageId (required), x, y, +23 more.
create_webhookA
Create a new webhook for team event notifications
Inputs: uri (required), mtype (required), teamId (required).
delete_commentB
Delete a comment
Inputs: commentId (required), shareId.
delete_comment_threadC
Delete a comment thread
Inputs: threadId (required).
delete_fileC
Delete a file
Inputs: fileId (required).
delete_file_snapshotB
Delete a file snapshot (version)
Inputs: snapshotId (required).
delete_fontA
Delete a custom font (removes all variants)
Inputs: fontId (required), teamId (required).
delete_font_variantB
Delete a specific font variant (e.g., Bold, Italic)
Inputs: teamId (required), variantId (required).
delete_shapeB
Delete a shape from the page
Inputs: fileId (required), pageId (required), shapeId (required).
delete_teamB
Delete a team (requires owner permissions)
Inputs: teamId (required).
delete_team_invitationB
Delete a pending team invitation by email
Inputs: email (required), teamId (required).
delete_team_memberC
Remove a member from a team
Inputs: teamId (required), memberId (required).
delete_webhookB
Delete a webhook
Inputs: webhookId (required).
distribute_shapesB
Distribute multiple shapes evenly with equal spacing
Inputs: fileId (required), pageId (required), shapeIds (required), direction (required).
get_commentsA
Get all comments in a thread
Inputs: threadId (required).
get_comment_threadB
Get details of a specific comment thread
Inputs: fileId (required), threadId (required).
get_fileC
Get detailed information about a file
Inputs: fileId (required).
get_file_librariesB
Get all component libraries used by a file
Inputs: fileId (required).
get_library_file_referencesB
Get all file references that use this library
Inputs: libraryId (required).
get_library_usageA
Get the number of files that use this library
Inputs: libraryId (required).
get_page_shapesA
Get all shapes on a specific page
Inputs: fileId (required), pageId (required).
get_profileB
Get current user profile
Inputs: no named parameters.
get_shape_propertiesA
Get detailed properties of a specific shape including colors, text properties, fonts, dimensions, effects, and all other attributes
Inputs: fileId (required), pageId (required), shapeId (required).
get_teamA
Get detailed information about a specific team (provide either teamId or fileId)
Inputs: fileId, teamId.
get_team_invitationsA
Get list of pending invitations for a team
Inputs: teamId (required).
get_team_membersB
Get list of all members in a team
Inputs: teamId (required).
get_team_recent_filesB
Get recently modified files in a team
Inputs: teamId (required).
get_team_statsB
Get statistics for a team (projects, files, members count)
Inputs: teamId (required).
get_unread_comment_threadsA
Get all unread comment threads for a team
Inputs: teamId (required).
has_file_librariesA
Check if a file uses any component libraries (returns boolean)
Inputs: fileId (required).
ignore_file_library_sync_statusC
Ignore library synchronization status for a file at a specific date/time
Inputs: date (required), fileId (required).
leave_teamB
Leave a team (current user leaves the team)
Inputs: teamId (required), reassignTo.
link_file_to_libraryA
Link a file to a component library to use its components. Returns recursive list of libraries used by that library.
Inputs: fileId (required), libraryId (required).
list_comment_threadsA
List all comment threads in a file or team (provide either fileId or teamId)
Inputs: fileId, teamId, shareId.
list_componentsB
List all components in a file
Inputs: fileId (required).
list_file_mediaA
List all media objects in a file
Inputs: fileId (required).
list_filesA
List all files in a project
Inputs: projectId (required).
list_file_snapshotsB
List all snapshots (versions) of a file
Inputs: fileId (required).
list_font_variantsA
List all custom font variants for a team, file, or project
Inputs: fileId, teamId, shareId, projectId.
list_pagesB
List all pages in a file
Inputs: fileId (required).
list_projectsA
List all projects in a team
Inputs: teamId (required).
list_teamsA
List all teams the user has access to
Inputs: no named parameters.
list_webhooksA
List all webhooks for a team
Inputs: teamId (required).
lock_file_snapshotA
Lock a snapshot to prevent it from being deleted (protect important versions)
Inputs: snapshotId (required).
query_shapesA
Query and filter shapes with multiple criteria (like grep for shapes). Useful for bulk operations like changing color themes, alignment, or filtering by area/type. Returns only the requested fields.
Inputs: fileId (required), pageId (required), maxX, maxY, +9 more.
rename_fileC
Rename a file
Inputs: name (required), fileId (required).
restore_file_snapshotA
Restore a file to a previous snapshot (version). This will replace the current file content with the snapshot content.
Inputs: fileId (required), snapshotId (required).
search_filesB
Search for files by name
Inputs: query (required), projectId (required).
search_shapesB
Search for shapes in a file by name
Inputs: query (required), fileId (required).
unlink_file_from_libraryC
Unlink a file from a component library
Inputs: fileId (required), libraryId (required).
unlock_file_snapshotA
Unlock a snapshot to allow deletion
Inputs: snapshotId (required).
update_commentC
Update a comment content
Inputs: content (required), commentId (required), shareId, mentions.
update_comment_thread_positionA
Move a comment thread to a new position
Inputs: x (required), y (required), frameId (required), threadId (required), +1 more.
update_comment_thread_statusB
Mark a comment thread as resolved or unresolved
Inputs: threadId (required), isResolved (required).
update_file_library_sync_statusC
Update the synchronization status of a file->library link
Inputs: fileId (required), libraryId (required).
update_file_snapshotB
Update a snapshot's label/description
Inputs: label (required), snapshotId (required).
update_fontB
Update a font's name
Inputs: name (required), fontId (required), teamId (required).
update_shapeB
Update shape properties including position, size, colors, gradients, images, borders, shadows, blur, blend modes, text alignment, and visual effects
Inputs: fileId (required), pageId (required), shapeId (required), x, +45 more.
update_teamC
Update team information (name)
Inputs: name (required), teamId (required).
update_team_invitation_roleA
Update the role of a pending team invitation by email
Inputs: role (required), email (required), teamId (required).
update_team_member_roleB
Update a team member's role (viewer, editor, admin, owner)
Inputs: role (required), teamId (required), memberId (required).
update_webhookB
Update an existing webhook (URL, type, or active status)
Inputs: uri (required), mtype (required), isActive (required), webhookId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogโฆ
TDQS
Scored across 81 tools
Many tools have distinct purposes, but there is notable overlap among shape querying tools (get_page_shapes, query_shapes, search_shapes) and file listing tools (list_files, search_files). Descriptions help differentiate them, but the boundaries are not always crisp.
Most tools follow a consistent verb_noun pattern (list_, get_, create_, update_, delete_). Minor deviations like 'add_page' instead of 'create_page' and 'query_shapes' vs 'search_shapes' are present but not chaotic.
With 81 tools, the server is extremely overloaded. The scope spans files, shapes, teams, comments, media, fonts, snapshots, libraries, webhooks, and profile, which could be split into separate servers or consolidated. This makes the tool surface overwhelming.
The domain is broad but has significant gaps: project management lacks get/update/delete operations, and page management lacks update/delete. Shape operations are missing copy/duplicate/group. These gaps will cause agent failures when trying to perform common design workflows.
Maintenance
Related MCP Connectors
Give your AI agents a design superpower. Generate, edit, and publish publication-grade decks, reports, landing pages, resumes, and marketing visuals directly within your agent workflow. Delivering frontier-level design quality at 3ร the speed and 53ร lower cost -from conversational prompt to live link or vector PDF in minutes.
Lets AI assistants draw: logos, posters, illustrations and scenes, as editable SVG and PNG.
Generate, inspect, and manage Flowstep UI designs directly from your AI assistant.
Agent-Native design tool - create and edit visual designs with agent assistance
Related MCP Servers
- AlicenseBqualityDmaintenanceBridges AI language models with Penpot design platform, enabling AI assistants to analyze, search, and interact with design files programmatically for automated design workflows.1045 PyPI241MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to read and modify Figma designs programmatically, supporting design analysis, element creation, text replacement, annotations, auto-layout configuration, and prototype visualization through natural language commands.2,097 npmMIT
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with Figma designs programmatically, supporting comprehensive design automation including text manipulation with formatting preservation, batch operations, prototyping, auto-layout configuration, and component management.7518 npm5MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to access and retrieve Penpot boards and design tokens.318 npm2MIT