60 Commits

Author SHA1 Message Date
alonso.torres
9517f2ac94 ♻️ Type the MCP plugin with the repo plugin types
Link the MCP plugin to plugins/libs/plugin-types instead of the
published 1.5.0 package, which lacks PenpotMgmt. The repo types
declare the penpotMgmt global, so the inline import in index.d.ts
goes away and the plugin checks against the API it runs with.

Type Context.management as PenpotMgmt without on/off, so new
management methods need no extra listing.

Mark the background plugin mock in load-plugin.spec.ts as
NonNullable: createPlugin can return undefined, and the build
type-check failed on it.
2026-10-07 15:21:16 +02:00
alonso.torres
a125977fce 🐛 Keep the MCP plugin working without penpotMgmt
Penpot only exposes penpotMgmt to plugins running with global
scope. Without it, the MCP plugin failed on load when registering
its workspacechange listener.

When penpotMgmt is missing, the plugin now builds the workspace
metadata from the open file and skips the listener. execute_code
receives penpotMgmt as null and waits for layout updates as before.
The tool description and instructions tell agents that only the
open file is available when penpotMgmt is null.
2026-10-07 14:58:32 +02:00
alonso.torres
a381761aa4 ✨ Add project and file creation to penpotMgmt
Add penpotMgmt.createProject({name, teamId?}) and
penpotMgmt.createFile({projectId, name}). Both require content:write,
trim the name and require 1 to 250 characters, and return the same
metadata as listProjects and listFiles without changing the current
view. When the new project or file belongs to the current team, the
dashboard state is updated so it shows up right away.

listProjects, listFiles and the creation methods share the summary
builders, so fileCount is now 0 instead of missing for new projects.

Update the plugin types, the MCP API docs and the MCP instructions.
2026-10-07 14:58:32 +02:00
Dominik Jain
2bb6cd557e ✨ Add project and file discovery to penpotMgmt
Discovery:
- Add listProjects and project-scoped listFiles with content:read checks.
- Return metadata from existing RPCs in dashboard and workspace contexts.
- Reject invalid IDs and preserve backend access errors.

Documentation:
- Keep usage in API type comments and include regenerated MCP API docs.
- Remove README implementation details and consolidate the changelog.
- Add usage information to the MCP server's initial instructions

Validation:
- Pass 8 frontend tests, 81 runtime tests and the runtime build.
- Verify both APIs through live MCP calls in dashboard and workspace.
- Pass type, lint, formatting and diff checks.

AI-assisted-by: gpt-6
Signed-off-by: Dominik Jain <dominik.jain@oraios-ai.de>
2026-10-07 14:58:32 +02:00
Dr. Dominik Jain
4c507e56e3
📚 Update MCP API type information (#12078) 2026-10-05 11:22:32 +02:00
Dr. Dominik Jain
36cf4f39e1
✨ Apply method Penpot.waitForLayoutUpdate, removing workarounds (#11433)
* MCP server: Update instruction manual to point to method instead of sleep
* MCP plugin: Call waitForLayoutUpdate prior to every code execution
* Composable test suite: Use waitForLayoutUpdate instead of 200ms delay in tests
2026-08-31 14:10:28 +02:00
Andrey Antukh
a004f7cd84 Merge remote-tracking branch 'origin/staging' into develop 2026-07-08 15:44:37 +02:00
Dominik Jain
aee555ff6e 📚 Update API types for MCP server for new release 2026-07-08 11:27:46 +02:00
Dr. Dominik Jain
0270c2a90f
🐛 Fix description of TokenCatalog.addTheme in high-level overview (#10359)
Fixes #10074
2026-06-24 10:27:28 +02:00
alonso.torres
f81d4af05e 🐛 Changes after review 2026-06-18 16:35:07 +02:00
alonso.torres
823f2107cd 🐛 Add create variant util function 2026-06-18 16:35:07 +02:00
Andrey Antukh
2d843da2cd 📎 Update mcp server api_types.yml 2026-06-11 13:31:34 +02:00
Dominik Jain
ed935e533f ✨ Expose variants retrieval via isVariant() type guard on LibraryComponent
Change isVariant() return type from boolean to 'this is LibraryVariantComponent',
enabling TypeScript users to directly access variants, variantProps, and
variantError after a type-narrowing check. Update MCP instructions with
improved variant navigation guidance.

Closes #9185

Co-authored-by: Claude (Anthropic) <noreply@anthropic.com>
2026-05-06 11:28:15 +02:00
Andrey Antukh
7135782e7d Merge remote-tracking branch 'origin/main-staging' into staging 2026-04-24 08:19:47 +02:00
Andrey Antukh
88008ce16c 📎 Update mcp types yaml file 2026-04-22 13:11:10 +02:00
Andrey Antukh
f331325941 Merge remote-tracking branch 'origin/main-staging' into staging 2026-04-21 21:42:03 +02:00
Dr. Dominik Jain
77560b9305
✨ Encourage use of layouts and proper naming #9081 (#9084)
Improve MCP instructions on design creation:
 * Agents should make use of layouts when appropriate
 * Agents should name all elements appropriately
2026-04-21 17:23:58 +02:00
Andrey Antukh
3a39676969 ⏪ Backport MCP from staging (part 1) 2026-04-20 19:37:02 +02:00
alonso.torres
6e03a191a3 🐛 Fix return type for combineAsVariants methods 2026-03-26 09:37:31 +01:00
Dominik Jain
7b5699b59f ✨ Improve instructions on Text elements 2026-03-24 15:57:04 +01:00
Dominik Jain
1b91bbe64d ✨ Update MCP server to account for API updates
Update instructions and API documentation to account for
* updated token property names; resolves #8512
* improved variant container creation; resolves #8564
2026-03-18 15:30:04 +01:00
Dr. Dominik Jain
757fb8e21d ✨ Reduce instructions transferred at MCP connection to a minimum (#8649)
* ✨ Reduce instructions transferred at MCP connection to a minimum

Force on-demand loading of the 'Penpot High-Level Overview',
which was previously transferred in the MCP server's instructions.

This greatly reduces the number of tokens for users who will
not actually interact with Penpot, allowing the MCP server to
remain enabled for such users without wasting too many tokens.

Resolves #8647

* 📎 Update Serena project
2026-03-17 18:50:07 +01:00
Dr. Dominik Jain
5e519c6b4b ✨ Account for changed interfaces of addToken and addSet (#8614)
Resolves #8613
2026-03-16 10:39:08 +01:00
Dominik Jain
93896d2263 ✨ Remove workaround for FlexLayout.appendChild
Update instructions to no longer stress that FlexLayout.appendChild
does not work as expected (#8417 now being resolved)
2026-03-12 12:06:16 +01:00
Dominik Jain
6c7c584c9a ✨ Emphasise the importance of the 'auto' sizing option of layouts 2026-03-12 12:06:16 +01:00
Dominik Jain
ac6541d74a ✨ Add instructions to avoid unnecessary annotations 2026-03-12 12:06:16 +01:00
Dominik Jain
683468fa97 ✨ Update instructions on sizing options for FlexLayout & GridLayout
With #39 implemented, update the instructions accordingly.
2026-03-12 12:06:16 +01:00
Dominik Jain
d2c9911eb2 📎 Fix typo 2026-03-12 12:06:16 +01:00
Dominik Jain
ba138de53e ✨ Make clear that layoutChild is only available after the child was added 2026-03-12 12:06:16 +01:00
Dominik Jain
bf87af1928 ✨ Add instructions on how to reuse fills/strokes 2026-03-12 12:06:16 +01:00
Dominik Jain
0974bca2c0 ✨ Improve instructions on writable shape properties 2026-02-25 12:49:26 +01:00
Dominik Jain
4e577d37b8 ✨ Add information on the usage of component variants 2026-02-23 21:37:55 +01:00
Dominik Jain
e305ad1fa8 ✨ Update MCP instructions to mention new textBounds property
Follow-up to https://github.com/penpot/penpot-mcp/issues/30
2026-02-23 17:25:27 +01:00
Dominik Jain
d019972bca ✨ Account for Token.resolvedValue now being implemented
Update MCP instructions, removing workaround for #8341
2026-02-19 17:06:36 +01:00
Dominik Jain
7fceb92673 ✨ Apply naturalChildOrdering, removing workarounds
Set the flag to true during code execution, resetting it to the
original value afterwards.

If the flag is unavailable, issue an error message, which is passed
on to the user via the LLM.

Remove instructions that served to work around the corresponding
issues:
 * https://github.com/penpot/penpot-mcp/issues/28
 * https://github.com/penpot/penpot-mcp/issues/32
2026-02-19 17:06:36 +01:00
Dominik Jain
426053ac17 ✨ Update API type information for the MCP server
This resolves https://github.com/penpot/penpot-mcp/issues/31
2026-02-19 16:22:10 +01:00
Dominik Jain
a5da7ceb2f ✨ Update TokenProperty values in system prompt
Update based on changes to camelCase.
See https://github.com/penpot/penpot-mcp/issues/38
2026-02-19 16:21:58 +01:00
Luis de Dios
a82cf34d35
Merge pull request #8415 from oraios/mcp-prod
✨ MCP changes to improve handling of use cases 2 & 3
2026-02-19 16:01:10 +01:00
Luis de Dios
21a1320f16 Revert "✨ MCP changes to improve handling of use cases 2 & 3 (#8369)"
This reverts commit 0a54d25d5a166edf1575614a53e1bc96827e2ebd.
2026-02-19 14:46:44 +01:00
Dominik Jain
0a54d25d5a
✨ MCP changes to improve handling of use cases 2 & 3 (#8369)
* 📎 Fix spelling errors

* 🚧 Temporary workaround for sizing options not working

Add instructions explaining that FlexLayout sizing options do not work.
Relates to https://github.com/penpot/penpot-mcp/issues/39

* 🚧 Temporary workaround for Token resolvedValue not working

Instruct LLM to not use this property.
To be reverted once #8341 is fixed.

* ✨ Improve description of token values

* ✨ Make clear that ExecuteCodeTool serialises automatically

LLMs sometimes decide to apply serialisation themselves, which is unnecessary,
and which this seeks to prevent.

* 🚧 Temporary workaround for fills/strokes being read-only

Add instructions to make the limintations.
Once #8357 is resolved, this can be reverted.

* ♻️ Move high-level instructions to the end

In this way, they can reasonably reference the more low-level concepts

* 📚 Add instructions on cloning and the branch to use

* 📚 Revise instructions on prerequisites

* Do not state that pnpm must be available after Node.js installation
  (it is installed by corepack)
* Do not state that caddy is required; it is required only when
  rebuilding the API documentation for the server, which is not
  a task relevant to regular users.
* Do not strongly suggest that MCP users should be using the devenv.
* Windows: Add pointer to use Git Bash

* 📚 Remove unnecessary details on what the boostrap script does

* 📚 Update information on repository structure

* 📚 Add section on 'Development' to README
2026-02-19 14:29:07 +01:00
Andrey Antukh
5718698bff ✨ Update mcp api_types.yml file with latest plugins doc updates 2026-02-17 17:42:39 +01:00
Dominik Jain
6a49b5df8c ♻️ Move high-level instructions to the end
In this way, they can reasonably reference the more low-level concepts
2026-02-17 13:16:21 +01:00
Dominik Jain
141847585e 🚧 Temporary workaround for fills/strokes being read-only
Add instructions to make the limintations.
Once #8357 is resolved, this can be reverted.
2026-02-17 12:51:48 +01:00
Dominik Jain
08fc6fe917 ✨ Improve description of token values 2026-02-12 17:45:50 +01:00
Dominik Jain
926d573d3e 🚧 Temporary workaround for Token resolvedValue not working
Instruct LLM to not use this property.
To be reverted once #8341 is fixed.
2026-02-12 17:24:44 +01:00
Dominik Jain
bac04f8a73 🚧 Temporary workaround for sizing options not working
Add instructions explaining that FlexLayout sizing options do not work.
Relates to https://github.com/penpot/penpot-mcp/issues/39
2026-02-12 12:37:24 +01:00
Dominik Jain
b4e815e787 📎 Fix spelling errors 2026-02-12 12:36:51 +01:00
Dominik Jain
8ac17604fd ✨ Improve information on component instances
* Add information on detachment
* Add information on remove behaviour in component instances
2026-02-11 11:35:10 +01:00
Dominik Jain
b6dfdc23cd ✨ Update information on TokenProperty 2026-02-11 10:45:22 +01:00
Dominik Jain
a5a084cf0f ✨ Update API type information based on current repo state 2026-02-11 10:45:22 +01:00