# Penpot — how to use (mcp.ai)

Connect your Penpot account and use 90 tools for images and design straight from your AI agent. Connect with your own API key. Open-source design and prototyping platform for collaborative design workflows.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_penpot?ms=1787295840000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `penpot_create_access_token`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/penpot`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/penpot/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/penpot/create/access/token` — Tool to create a personal access token for API authentication in Penpot. Use when you need to generate a new token for authenticating API requests. The token will only be shown once during creation, s
  - body: { name: string, expiration?: string }
- `POST https://api.mcp.ai/api/penpot/create/comment/thread` — Tool to create a new comment thread on a Penpot file at a specific position. Use when you need to add collaborative feedback or discussion points on design elements within a Penpot project.
  - body: { fileId: string, pageId: string, content: string, frameId: string, shareId?: string, mentions?: string[], position: string }
- `POST https://api.mcp.ai/api/penpot/create/file` — Tool to create a new design file in a Penpot project. Use when you need to create a new file for design work within a specific project.
  - body: { id?: string, name: string, features?: string[], is_shared?: boolean, project_id: string }
- `POST https://api.mcp.ai/api/penpot/create/project` — Tool to create a new project within a team in Penpot. Use when you need to organize design files into a new project space.
  - body: { id?: string, name: string, team_id: string }
- `POST https://api.mcp.ai/api/penpot/create/team` — Tool to create a new team in Penpot. Use when you need to set up a new team for organizing projects and collaborating with team members.
  - body: { id?: string, name: string, features?: string[] }
- `POST https://api.mcp.ai/api/penpot/create/team/access/request` — Tool to request an invitation to join a Penpot team. Use when a user needs to request access to a team for collaboration.
  - body: { file_id?: string, team_id: string, is_viewer?: boolean }
- `POST https://api.mcp.ai/api/penpot/create/webhook` — Create a webhook for a team to receive event notifications. Use when you need to register a new webhook endpoint that will be notified of events happening in a Penpot team.
  - body: { uri: string, mtype: string, team_id: string }
- `POST https://api.mcp.ai/api/penpot/delete/access/token` — Tool to delete a personal access token from Penpot. Use when you need to revoke or remove an existing access token by its UUID.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/delete/comment` — Tool to delete a comment from a Penpot design file. Use when you need to permanently remove a specific comment from a design discussion.
  - body: { id: string, shareId?: string }
- `POST https://api.mcp.ai/api/penpot/delete/file/snapshot` — Tool to delete a file snapshot in Penpot. Use when you need to remove a previously created snapshot from a file.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/delete/project` — Tool to delete a project from Penpot. Use when you need to permanently remove a project and all its contents.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/delete/team` — Tool to delete a team from Penpot. Use when you need to permanently remove a team. This operation is irreversible.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/delete/team/files/permanently` — Tool to permanently delete specified files from a Penpot team. Use when you need to immediately and irreversibly remove files from a team. The team ID is used to filter files and verify write permissi
  - body: { ids: string[], team_id: string }
- `POST https://api.mcp.ai/api/penpot/delete/team/invitation` — Tool to delete a pending team invitation in Penpot. Use when you need to cancel an invitation that hasn't been accepted yet.
  - body: { email: string, team_id: string }
- `POST https://api.mcp.ai/api/penpot/delete/team/member` — Tool to remove a member from a team in Penpot. Use when you need to revoke a user's access to a team.
  - body: { team_id: string, member_id: string }
- `POST https://api.mcp.ai/api/penpot/delete/webhook` — Tool to delete a webhook by its UUID. Use when you need to remove a webhook from Penpot.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/duplicate/file` — Tool to duplicate a single file within the same team in Penpot. Use when you need to create a copy of an existing design file.
  - body: { name?: string, fileId: string }
- `POST https://api.mcp.ai/api/penpot/duplicate/project` — Tool to duplicate an entire Penpot project with all its files. Use when you need to create a copy of an existing project.
  - body: { name?: string, projectId: string }
- `POST https://api.mcp.ai/api/penpot/get/access/tokens` — Tool to list all personal access tokens for the authenticated user. Use when you need to view, audit, or manage existing access tokens.
- `POST https://api.mcp.ai/api/penpot/get/all/projects` — Tool to retrieve all projects across all teams in Penpot. Use when you need a complete list of projects regardless of team membership.
- `POST https://api.mcp.ai/api/penpot/get/builtin/templates` — Tool to get the list of builtin templates available in Penpot. Use when you need to see which templates are available for creating new projects.
- `POST https://api.mcp.ai/api/penpot/get/comment/thread` — Tool to retrieve a specific comment thread from a Penpot file. Use when you need to fetch details about a comment thread including its comments, participants, and metadata.
  - body: { id: string, file_id: string, share_id?: string }
- `POST https://api.mcp.ai/api/penpot/get/comment/threads` — Tool to retrieve all comment threads for a Penpot file. Use when you need to fetch comments and discussions associated with a specific file.
  - body: { file_id: string }
- `POST https://api.mcp.ai/api/penpot/get/comments` — Tool to retrieve all comments in a comment thread. Use when you need to fetch all comments from a specific thread.
  - body: { thread_id: string }
- `POST https://api.mcp.ai/api/penpot/get/file` — Tool to retrieve a Penpot file by its ID. Returns file details including metadata, structure, and permissions. Use when you need to access file information or check file properties.
  - body: { id: string, features?: string[] }
- `POST https://api.mcp.ai/api/penpot/get/file/info` — Tool to retrieve basic information about a Penpot file by its ID. Use when you need to get file metadata such as name, project, creation date, modification date, version, and sharing status.
  - body: { id: string, features?: string[] }
- `POST https://api.mcp.ai/api/penpot/get/file/libraries` — Tool to retrieve libraries linked to a Penpot file. Use when you need to get all library references associated with a specific file by its UUID.
  - body: { fileId: string }
- `POST https://api.mcp.ai/api/penpot/get/file/object/thumbnails` — Tool to retrieve thumbnails for objects in a Penpot file. Use when you need to get thumbnail URLs for file objects.
  - body: { tag?: string, file_id: string }
- `POST https://api.mcp.ai/api/penpot/get/file/snapshots` — Retrieves all snapshots for a specific Penpot file. Use this action to list all saved versions (snapshots) of a file, which allows viewing version history and understanding how the file has evolved ov
  - body: { fileId: string }
- `POST https://api.mcp.ai/api/penpot/get/file/summary` — Tool to retrieve a summary of file contents and statistics from Penpot. Use when you need high-level information about a file including page count, components, graphics, and other metadata without fet
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/get/font/variants` — Tool to retrieve font variants for a team, file, project, or share in Penpot. Use when you need to get a list of available font variants. Provide at least one of team_id, file_id, project_id, or share
  - body: { file_id?: string, team_id?: string, share_id?: string, project_id?: string }
- `POST https://api.mcp.ai/api/penpot/get/library/file/references` — Tool to get files that reference a shared library. Use when you need to find which files are using a specific library file in Penpot.
  - body: { fileId: string }
- `POST https://api.mcp.ai/api/penpot/get/library/usage` — Tool to get usage statistics for a library. Returns the number of files that use the specified library. Use when you need to understand how widely a library is being used across projects.
  - body: { fileId: string }
- `POST https://api.mcp.ai/api/penpot/get/owned/teams` — Tool to list teams owned by the current user. Use when you need to retrieve teams that the authenticated user owns in Penpot.
- `POST https://api.mcp.ai/api/penpot/get/page` — Tool to retrieve page data from a Penpot file. Use when you need to get page content including objects and metadata for rendering or export purposes. If no page ID is specified, returns the first page
  - body: { fileId: string, pageId?: string, objectId?: string }
- `POST https://api.mcp.ai/api/penpot/get/profiles/for/file/comments` — Tool to retrieve profiles of users who have commented on a Penpot file. Use when you need to get information about comment participants for collaboration or user management purposes.
  - body: { fileId: string, shareId?: string }
- `POST https://api.mcp.ai/api/penpot/get/project` — Tool to retrieve detailed information about a specific Penpot project by its ID. Use when you need to get project details such as name, team ownership, and timestamps.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/get/project/files` — Tool to retrieve all files in a Penpot project. Use when you need to list all files for a specific project by its UUID.
  - body: { projectId: string }
- `POST https://api.mcp.ai/api/penpot/get/sso/provider` — Tool to retrieve SSO provider information for an email address. Use when you need to determine which SSO provider is configured for a specific email domain.
  - body: { email: string }
- `POST https://api.mcp.ai/api/penpot/get/subscription/usage` — Tool to get subscription usage information for the current user. Returns details about seats and storage usage. Use when you need to check subscription limits or current usage statistics.
- `POST https://api.mcp.ai/api/penpot/get/team` — Tool to retrieve team details by ID. Use when you need to fetch information about a specific team in Penpot.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/get/team/deleted/files` — Tool to retrieve deleted files from a team's trash in Penpot. Use when you need to view files that have been deleted from a specific team and are in the trash.
  - body: { teamId: string }
- `POST https://api.mcp.ai/api/penpot/get/team/info` — Tool to retrieve detailed information about a specific Penpot team by its ID. Use when you need to get team details such as name, creation date, and permissions.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/get/team/invitations` — Tool to list pending invitations for a team in Penpot. Use when you need to retrieve all pending team invitations that haven't been accepted yet.
  - body: { team_id: string }
- `POST https://api.mcp.ai/api/penpot/get/team/members` — Tool to list all members of a team in Penpot. Use when you need to retrieve team membership information and member details.
  - body: { team_id: string }
- `POST https://api.mcp.ai/api/penpot/get/team/shared/files` — Tool to retrieve shared library files for a Penpot team. Use when you need to list all shared library files for a specific team by its UUID.
  - body: { teamId: string }
- `POST https://api.mcp.ai/api/penpot/get/team/stats` — Tool to retrieve statistics for a specific Penpot team by its ID. Use when you need to get team metrics such as project count, file count, and member count.
  - body: { team-id: string }
- `POST https://api.mcp.ai/api/penpot/get/team/users` — Tool to retrieve users in a team by team ID or file ID. Use when you need to list team members associated with a specific team or file.
  - body: { fileId?: string, teamId?: string }
- `POST https://api.mcp.ai/api/penpot/get/teams` — Tool to list all teams the authenticated user is a member of. Use when you need to retrieve teams where the user has membership in Penpot.
- `POST https://api.mcp.ai/api/penpot/get/unread/comment/threads` — Tool to retrieve comment threads with unread comments for a specific team. Use when you need to check for new comments or discussions requiring attention.
  - body: { team_id: string }
- `POST https://api.mcp.ai/api/penpot/get/view/only/bundle` — Tool to retrieve data bundle for view-only file access in Penpot. Use when you need to access read-only file data through a share link or for preview purposes.
  - body: { file_id: string, features?: string[], share_id?: string }
- `POST https://api.mcp.ai/api/penpot/get/webhooks` — Tool to retrieve all webhooks configured for a team. Use when you need to list existing webhook endpoints registered for a Penpot team.
  - body: { team_id: string }
- `POST https://api.mcp.ai/api/penpot/has/file/libraries` — Tool to check if a Penpot file has linked libraries. Use when you need to determine whether a specific file references any external libraries.
  - body: { fileId: string }
- `POST https://api.mcp.ai/api/penpot/ignore/file/library/sync/status` — Tool to ignore library sync status updates for a file. Use when you need to mark library updates as ignored for a specific file, preventing sync notifications from appearing.
  - body: { date: string, fileId: string }
- `POST https://api.mcp.ai/api/penpot/link/file/to/library` — Tool to link a file to a library in Penpot. Returns the recursive list of libraries used by that library. Use when you need to establish a library reference relationship between a file and a library.
  - body: { fileId: string, libraryId: string }
- `POST https://api.mcp.ai/api/penpot/lock/file/snapshot` — Tool to lock a file snapshot in Penpot to prevent deletion. Use when you need to protect a snapshot from being removed.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/logout` — Tool to clear the authentication cookie and logout the current session. Use when the authenticated user wants to end their Penpot session and invalidate their authentication.
  - body: { profile_id?: string }
- `POST https://api.mcp.ai/api/penpot/mark/all/threads/as/read` — Tool to mark all comment threads as read in Penpot. Use when you need to clear unread status for comment threads.
  - body: { threads: string[] }
- `POST https://api.mcp.ai/api/penpot/move/files` — Tool to move files from one project to another in Penpot. Use when you need to reorganize files by transferring them between projects.
  - body: { ids: string[], project_id: string }
- `POST https://api.mcp.ai/api/penpot/move/project` — Tool to move a project to a different team in Penpot. Use when you need to transfer a project from one team to another.
  - body: { team_id: string, project_id: string }
- `POST https://api.mcp.ai/api/penpot/prepare/register/profile` — Tool to prepare user registration by validating email and sending verification in Penpot. Use when you need to initiate the registration process for a new user. This endpoint validates the provided in
  - body: { email: string, fullname: string, password: string, invitation_token?: string, create_welcome_file?: boolean }
- `POST https://api.mcp.ai/api/penpot/push/audit/events` — Tool to push audit events to Penpot for tracking system behavior and user actions. Use when you need to log important events like user actions, file changes, or team modifications for auditing purpose
  - body: { events: object[] }
- `POST https://api.mcp.ai/api/penpot/register/profile` — Tool to complete user registration with profile details using a verification token. Use when you have a registration token from the prepare-register-profile endpoint and need to finalize the user acco
  - body: { token: string }
- `POST https://api.mcp.ai/api/penpot/rename/file` — Tool to rename a design file in Penpot. Use when you need to change the name of an existing file.
  - body: { id: string, name: string }
- `POST https://api.mcp.ai/api/penpot/rename/project` — Tool to rename an existing project in Penpot. Use when you need to update a project's name.
  - body: { id: string, name: string }
- `POST https://api.mcp.ai/api/penpot/request/profile/recovery` — Tool to request a password/profile recovery email. Use when a user has forgotten their password and needs to initiate the account recovery process. An email with a recovery token will be sent to the s
  - body: { email: string }
- `POST https://api.mcp.ai/api/penpot/restore/deleted/team/files` — Tool to restore deleted files in a Penpot team. Use when you need to remove the deletion mark from files and projects that are in the team's trash.
  - body: { ids: string[], team_id: string }
- `POST https://api.mcp.ai/api/penpot/restore/file/snapshot` — Tool to restore a Penpot file to a previous snapshot. Use when you need to revert a file to a previously saved version from its history.
  - body: { id: string, fileId: string }
- `POST https://api.mcp.ai/api/penpot/search/files` — Tool to search for files by name or content in a Penpot team. Use when you need to find specific files within a team using a search term.
  - body: { teamId: string, searchTerm?: string }
- `POST https://api.mcp.ai/api/penpot/send/user/feedback` — Tool to send user feedback to Penpot. Use when you need to submit feedback, bug reports, feature requests, or error reports to the Penpot team.
  - body: { type?: string, content: string, subject: string, errorHref?: string, errorReport?: string }
- `POST https://api.mcp.ai/api/penpot/set/file/shared` — Tool to set file sharing status in Penpot (enable/disable shared library). Use when you need to make a file available as a shared library or revoke its shared status.
  - body: { id: string, is_shared: boolean }
- `POST https://api.mcp.ai/api/penpot/unlink/file/from/library` — Tool to unlink a file from a shared library in Penpot. Use when you need to remove the library reference relationship between a file and a library.
  - body: { fileId: string, libraryId: string }
- `POST https://api.mcp.ai/api/penpot/unlock/file/snapshot` — Tool to unlock a locked file snapshot in Penpot. Use when you need to unlock a previously locked snapshot.
  - body: { id: string }
- `POST https://api.mcp.ai/api/penpot/update/comment` — Tool to update the content of an existing comment in a Penpot design file. Use when you need to modify comment text or update mentioned users in a design discussion.
  - body: { id: string, content: string, shareId?: string, mentions?: string[] }
- `POST https://api.mcp.ai/api/penpot/update/comment/thread` — Tool to update the resolution status of a comment thread in Penpot. Use when you need to mark a comment thread as resolved or unresolved to track discussion progress.
  - body: { id: string, shareId?: string, isResolved: boolean }
- `POST https://api.mcp.ai/api/penpot/update/comment/thread/frame` — Tool to update the frame associated with a comment thread in Penpot. Use when you need to move a comment thread to a different frame or reposition it within the design hierarchy.
  - body: { id: string, frameId: string, shareId?: string }
- `POST https://api.mcp.ai/api/penpot/update/comment/thread/position` — Tool to update the position of a comment thread in Penpot. Use when you need to move or reposition an existing comment thread to a different location on the design canvas.
  - body: { id: string, frameId: string, shareId?: string, position: string }
- `POST https://api.mcp.ai/api/penpot/update/comment/thread/status` — Tool to update the status of a comment thread in Penpot (e.g., toggle resolved/unresolved). Use when you need to mark a comment thread as resolved or reopen a resolved thread.
  - body: { id: string, shareId?: string }
- `POST https://api.mcp.ai/api/penpot/update/file` — Tool to update a Penpot file with changes. Use when you need to apply modifications to a file such as adding/modifying/deleting objects, pages, colors, components, or other design elements. Requires f
  - body: { id: string, revn: integer, vern: integer, changes?: object[], features?: string[], sessionId: string, skipValidate?: boolean, changesWithMetadata?: object[] }
- `POST https://api.mcp.ai/api/penpot/update/file/library/sync/status` — Tool to update the synchronization status of a file->library link. Use when you need to refresh or update the sync status between a file and its linked library.
  - body: { fileId: string, libraryId: string }
- `POST https://api.mcp.ai/api/penpot/update/file/snapshot` — Tool to update a file snapshot metadata in Penpot. Use when you need to modify the label of an existing snapshot.
  - body: { id: string, label: string }
- `POST https://api.mcp.ai/api/penpot/update/font` — Tool to update a font's metadata in Penpot. Use when you need to modify the name or other properties of an existing font in a team.
  - body: { id: string, name: string, team_id: string }
- `POST https://api.mcp.ai/api/penpot/update/profile` — Tool to update the current authenticated user's profile information. Use when you need to change the user's full name, language preference, or theme settings.
  - body: { lang?: string, theme?: string, fullname: string }
- `POST https://api.mcp.ai/api/penpot/update/profile/notifications` — Tool to update notification settings for the authenticated user's profile. Use when you need to configure how the user receives notifications about comments and invitations.
  - body: { email_invites: string, email_comments: string, dashboard_comments: string }
- `POST https://api.mcp.ai/api/penpot/update/profile/props` — Tool to update custom properties for the authenticated user's profile. Use when you need to modify user preferences such as onboarding status, notification settings, newsletter subscriptions, or plugi
  - body: { props: object }
- `POST https://api.mcp.ai/api/penpot/update/project/pin` — Tool to update the pin status of a project in Penpot. Use when you need to pin or unpin a project for quick access.
  - body: { id: string, team_id: string, is_pinned: boolean }
- `POST https://api.mcp.ai/api/penpot/update/team` — Tool to update team settings in Penpot. Use when you need to modify team name or other team properties.
  - body: { id: string, name: string }
- `POST https://api.mcp.ai/api/penpot/update/team/invitation/role` — Tool to update the role of a pending team invitation in Penpot. Use when you need to change the role of an invitation that hasn't been accepted yet.
  - body: { role: string, email: string, team_id: string }
- `POST https://api.mcp.ai/api/penpot/update/webhook` — Tool to update an existing webhook configuration. Use when you need to modify the URI, MIME type, or active status of a webhook.
  - body: { id: string, uri: string, mtype: string, is_active: boolean }
- `POST https://api.mcp.ai/api/penpot/verify/token` — Tool to verify an authentication or registration token in Penpot. Use when you need to validate a token received from registration, email verification, or other authentication flows.
  - body: { token: string }

## Example prompts
- "What can I do in Penpot?"
- "Show me a summary of my Penpot account"

## More
- Page: https://mcp.ai/penpot
- Agent spec (llms.txt): https://mcp.ai/penpot/llms.txt
- Postman collection: https://mcp.ai/penpot/postman.json
