Integration

Penpot integration

Penpot is a self-hosted design and prototyping platform. Its API is RPC over POST: every method takes a JSON body and returns JSON. Create, read, rename, duplicate, move, search and delete design files and projects, read a file's pages, summary and statistics, take, list, lock and restore file snapshots, export and import a file as a Penpot binary, upload media objects into a file, publish a file as a shared library and link or unlink it from other files, manage share links, read and write comment threads and their comments and mark them read, manage teams with their members, invitations, roles and photo, manage installed fonts and their variants, manage access tokens and webhooks, and read or update the signed-in profile. The host is part of the credential because every install is its own deployment. Authentication is an access token sent in the Authorization header with the Token prefix.

Ask it in chat

Say what should happen.
The workflow builds itself.

When this happens, do that in Penpot.Built from the 101 Penpot tools below, on the connection you add once.

What you can do with Penpot

Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.

Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.

Get comment thread, 2 operations

  • get_comment_threadGet comment threadPOSTcreate get_comment_thread.
  • list_comment_threadsList comment threadsPOSTcreate get_comment_thread.

Get file snapshot, 2 operations

  • get_file_snapshotGet file snapshotPOSTRetrieve a file bundle with data from a specific snapshot for read-only preview. Does not modify any database state.
  • list_file_snapshotsList file snapshotsPOSTcreate get_file_snapshot.

Get project, 2 operations

  • get_projectGet projectPOSTcreate get_project.
  • list_team_projectsList team projectsPOSTcreate get_project.

Clone file media object, 1 operation

  • clone_file_media_objectClone file media objectPOSTcreate clone_file_media_object.

Clone template, 1 operation

  • clone_templateClone templatePOSTClone into the specified project the template by its id.

Create access token, 1 operation

  • create_access_tokenCreate access tokenPOSTcreate create_access_token.

Create comment, 1 operation

  • create_commentCreate commentPOSTcreate create_comment.

Create comment thread, 1 operation

  • create_comment_threadCreate comment threadPOSTcreate create_comment_thread.

Create file, 1 operation

  • create_fileCreate filePOSTcreate create_file.

Create file media object from url, 1 operation

  • create_file_media_object_from_urlCreate file media object from urlPOSTcreate create_file_media_object_from_url.

Create file snapshot, 1 operation

  • create_file_snapshotCreate file snapshotPOSTcreate create_file_snapshot.

Create font variant, 1 operation

  • create_font_variantCreate font variantPOSTUpload a font variant. Font data may be provided either as a Transit-encoded `:data` map (keyed by mime-type) for small fonts, or as an `:uploads` map (keyed by mime-type, values.

Create project, 1 operation

  • create_projectCreate projectPOSTcreate create_project.

Create share link, 1 operation

  • create_share_linkCreate share linkPOSTCreates a share-link object. Share links are resources that allows external users access to specific pages of a file with specific permissions (who-comment and who-inspect).

Create team, 1 operation

  • create_teamCreate teamPOSTcreate create_team.

Create team access request, 1 operation

  • create_team_access_requestCreate team access requestPOSTA rpc call that allow to request for an invitations to join the team.

Create team invitation, 1 operation

  • create_team_invitationsCreate team invitationsPOSTA rpc call that allows to send single or multiple invitations to join the team. Supports two parameter formats: 1. emails (set) + role (single role for all emails) 2. invitations.

Create team with invitation, 1 operation

  • create_team_with_invitationsCreate team with invitationsPOSTcreate create_team_with_invitation.

Create webhook, 1 operation

  • create_webhookCreate webhookPOSTcreate create_webhook.

Delete access token, 1 operation

  • delete_access_tokenDelete access tokenPOSTcreate delete_access_token.

Delete comment, 1 operation

  • delete_commentDelete commentPOSTcreate delete_comment.

Delete comment thread, 1 operation

  • delete_comment_threadDelete comment threadPOSTcreate delete_comment_thread.

Delete file, 1 operation

  • delete_fileDelete filePOSTcreate delete_file.

Delete file snapshot, 1 operation

  • delete_file_snapshotDelete file snapshotPOSTcreate delete_file_snapshot.

Delete font, 1 operation

  • delete_fontDelete fontPOSTcreate delete_font.

Delete font variant, 1 operation

  • delete_font_variantDelete font variantPOSTcreate delete_font_variant.

Delete project, 1 operation

  • delete_projectDelete projectPOSTcreate delete_project.

Delete share link, 1 operation

  • delete_share_linkDelete share linkPOSTcreate delete_share_link.

Delete team, 1 operation

  • delete_teamDelete teamPOSTcreate delete_team.

Delete team invitation, 1 operation

  • delete_team_invitationDelete team invitationPOSTcreate delete_team_invitation.

Delete team member, 1 operation

  • delete_team_memberDelete team memberPOSTcreate delete_team_member.

Delete webhook, 1 operation

  • delete_webhookDelete webhookPOSTcreate delete_webhook.

Download font, 1 operation

  • download_fontDownload fontPOSTDownload the font file. Returns a http redirect to the asset resource uri.

Download font family, 1 operation

  • download_font_familyDownload font familyPOSTDownload the entire font family as a zip file. Returns the zip bytes on the body, without encoding it on transit or json.

Duplicate file, 1 operation

  • duplicate_fileDuplicate filePOSTDuplicate a single file in the same team.

Duplicate project, 1 operation

  • duplicate_projectDuplicate projectPOSTDuplicate an entire project with all the files.

Export binfile, 1 operation

  • export_file_binaryExport file binaryPOSTExport a penpot file in a binary format.

Get comment, 1 operation

  • list_thread_commentsList thread commentsPOSTcreate get_comment.

Get file, 1 operation

  • get_fileGet filePOSTRetrieve a file by its ID. Only authenticated users.

Get file info, 1 operation

  • get_file_infoGet file infoPOSTRetrieve minimal file info by its ID.

Get file librarie, 1 operation

  • list_file_librariesList file librariesPOSTGet libraries used by the specified file.

Get file stat, 1 operation

  • get_file_statsGet file statsPOSTReturn aggregate statistics for a single file: page count, shape counts by type, component/color/typography counts, and inbound and outbound library reference counts. Cheap.

Get file summary, 1 operation

  • get_file_summaryGet file summaryPOSTRetrieve a file summary by its ID. Only authenticated users.

Get font variant, 1 operation

  • list_font_variantsList font variantsPOSTcreate get_font_variant.

Get library file reference, 1 operation

  • list_library_file_referencesList library file referencesPOSTReturns all the file references that use specified file (library) id.

Get library usage, 1 operation

  • get_library_usageGet library usagePOSTGets the number of files that use the specified library.

Get page, 1 operation

  • get_file_pageGet file pagePOSTRetrieves the page data from file and returns it. If no page-id is specified, the first page will be returned. If object-id is specified, only that object and its children will be.

Get profiles for file comment, 1 operation

  • list_file_comment_authorsList file comment authorsPOSTRetrieves a list of profiles with limited set of properties of all participants on comment threads of the file.

Get project file, 1 operation

  • list_project_filesList project filesPOSTGet all files for the specified project.

Get team, 1 operation

  • get_teamGet teamPOSTcreate get_team.

Get team deleted file, 1 operation

  • list_team_deleted_filesList team deleted filesPOSTcreate get_team_deleted_file.

Get team info, 1 operation

  • get_team_infoGet team infoPOSTRetrieve minimal team info by its ID.

Get team invitation, 1 operation

  • list_team_invitationsList team invitationsPOSTcreate get_team_invitation.

Get team invitation token, 1 operation

  • get_team_invitation_tokenGet team invitation tokenPOSTcreate get_team_invitation_token.

Get team member, 1 operation

  • list_team_membersList team membersPOSTcreate get_team_member.

Get team recent file, 1 operation

  • list_team_recent_filesList team recent filesPOSTcreate get_team_recent_file.

Get team shared file, 1 operation

  • list_team_shared_filesList team shared filesPOSTGet all file (libraries) for the specified team.

Get team stat, 1 operation

  • get_team_statsGet team statsPOSTcreate get_team_stat.

Get team user, 1 operation

  • list_team_usersList team usersPOSTGet team users by team-id or by file-id.

Get unread comment thread, 1 operation

  • list_unread_comment_threadsList unread comment threadsPOSTcreate get_unread_comment_thread.

Get webhook, 1 operation

  • list_webhooksList webhooksPOSTcreate get_webhook.

Has file librarie, 1 operation

  • check_file_has_librariesCheck file has librariesPOSTChecks if the file has libraries. Returns a boolean.

Ignore file library sync statu, 1 operation

  • ignore_file_library_sync_statusIgnore file library sync statusPOSTIgnore updates in linked files.

Import binfile, 1 operation

  • import_file_binaryImport file binaryPOSTImport a penpot file in a binary format. If `file-id` is provided, an in-place import will be performed instead of creating a new file. The in-place imports are only supported for.

Leave team, 1 operation

  • leave_teamLeave teamPOSTcreate leave_team.

Link file to library, 1 operation

  • link_file_to_libraryLink file to libraryPOSTLink a file to a library. Returns the recursive list of libraries used by that library.

Lock file snapshot, 1 operation

  • lock_file_snapshotLock file snapshotPOSTcreate lock_file_snapshot.

Mark all threads as read, 1 operation

  • mark_all_comment_threads_readMark all comment threads readPOSTcreate mark_all_threads_as_read.

Move file, 1 operation

  • move_filesMove filesPOSTMove a set of files from one project to other.

Move project, 1 operation

  • move_projectMove projectPOSTMove projects between teams.

Permanently delete team file, 1 operation

  • permanently_delete_team_filesPermanently delete team filesPOSTMark the specified files to be deleted immediatelly on the specified team. The team-id on params will be used to filter and check writable permissons on team.

Rename file, 1 operation

  • rename_fileRename filePOSTcreate rename_file.

Rename project, 1 operation

  • rename_projectRename projectPOSTcreate rename_project.

Restore deleted team file, 1 operation

  • restore_deleted_team_filesRestore deleted team filesPOSTRemoves the deletion mark from the specified files (and respective projects) on the specified team.

Restore file snapshot, 1 operation

  • restore_file_snapshotRestore file snapshotPOSTcreate restore_file_snapshot.

Search file, 1 operation

  • search_filesSearch filesPOSTcreate search_file.

Set file shared, 1 operation

  • set_file_sharedSet file sharedPOSTcreate set_file_shared.

Unlink file from library, 1 operation

  • unlink_file_from_libraryUnlink file from libraryPOSTcreate unlink_file_from_library.

Unlock file snapshot, 1 operation

  • unlock_file_snapshotUnlock file snapshotPOSTcreate unlock_file_snapshot.

Update comment, 1 operation

  • update_commentUpdate commentPOSTcreate update_comment.

Update comment thread, 1 operation

  • update_comment_threadUpdate comment threadPOSTcreate update_comment_thread.

Update comment thread frame, 1 operation

  • update_comment_thread_frameUpdate comment thread framePOSTcreate update_comment_thread_frame.

Update comment thread position, 1 operation

  • update_comment_thread_positionUpdate comment thread positionPOSTcreate update_comment_thread_position.

Update comment thread statu, 1 operation

  • update_comment_thread_statusUpdate comment thread statusPOSTcreate update_comment_thread_statu.

Update file, 1 operation

  • update_fileUpdate filePOSTcreate update_file.

Update file library sync statu, 1 operation

  • update_file_library_sync_statusUpdate file library sync statusPOSTUpdate the synchronization status of a file->library link.

Update file snapshot, 1 operation

  • update_file_snapshotUpdate file snapshotPOSTcreate update_file_snapshot.

Update font, 1 operation

  • update_fontUpdate fontPOSTcreate update_font.

Update profile, 1 operation

  • update_profileUpdate profilePOSTcreate update_profile.

Update profile notification, 1 operation

  • update_profile_notificationsUpdate profile notificationsPOSTcreate update_profile_notification.

Update profile prop, 1 operation

  • update_profile_propsUpdate profile propsPOSTcreate update_profile_prop.

Update project pin, 1 operation

  • update_project_pinUpdate project pinPOSTcreate update_project_pin.

Update team, 1 operation

  • update_teamUpdate teamPOSTcreate update_team.

Update team invitation role, 1 operation

  • update_team_invitation_roleUpdate team invitation rolePOSTcreate update_team_invitation_role.

Update team member role, 1 operation

  • update_team_member_roleUpdate team member rolePOSTcreate update_team_member_role.

Update team photo, 1 operation

  • update_team_photoUpdate team photoPOSTcreate update_team_photo.

Update webhook, 1 operation

  • update_webhookUpdate webhookPOSTcreate update_webhook.

Upload file media object, 1 operation

  • upload_file_media_objectUpload file media objectPOSTcreate upload_file_media_object.

Use Penpot from Claude Code, Cursor or Codex

Connect Penpot in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Penpot operations become tools the client can call, next to every other integration you connected.

Claude Code
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"
Codex (~/.codex/config.toml)
[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"

[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"
Cursor, Claude Desktop and other JSON configs
{
  "mcpServers": {
    "livecontext": {
      "type": "http",
      "url": "https://livecontext.ai/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Set up the MCP server step by step

How to connect Penpot

  1. Create your workspace

    Sign up free. Nothing to install.

  2. Connect Penpot once

    Add your Penpot connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.

  3. Describe the job in chat

    The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.

Penpot integration FAQ

What can you do with the Penpot integration?

LiveContext exposes 101 operations on Penpot, covering get comment thread, get file snapshot, get project and clone file media object.

Popular integrations

Browse the whole catalog