Penpot MCP: gotchas, template script, workflow documenté

This commit is contained in:
Nox
2026-02-28 14:13:10 +00:00
parent e4128f9788
commit e38b484496
14 changed files with 1974 additions and 0 deletions
+50
View File
@@ -105,6 +105,56 @@
- Pas d'authentification requise
- Dossier `/anytype/` créé pour les fichiers liés à Anytype
- Utilisable pour héberger images, schémas, etc. avec lien direct
- **Utile pour Penpot** : uploader une image sur CopyParty → l'injecter dans Penpot via `upload_file_media_from_url`
## Penpot MCP — Workflow & Gotchas
### Stack
- Penpot UI : http://192.168.1.150:9001
- MCP HTTP endpoint : http://192.168.1.150:9002/mcp (health: /health)
- MCP = zcube/penpot-mcp-server, image node:22-alpine + npm @zcubekr/penpot-mcp-server
- Token Penpot déjà configuré dans la stack Portainer (stack id=90)
### ⚠️ Règles critiques MCP zcube
**1. Tous les paramètres sont en camelCase** (PAS snake_case) :
- `projectId`, `fileId`, `pageId`, `parentId`
- `fillColor`, `fontSize`, `fontWeight`
- `isShared`, `gradientType`, `borderRadius`, `cornerRadius``r1/r2/r3/r4`
**2. Session unique — toujours redémarrer le container avant** :
- Le serveur n'autorise QU'UNE session à la fois
- `initialize` échoue avec "already initialized" si session existante
- Solution : inclure le restart Portainer dans le script (container `penpot-penpot-mcp-1`)
**3. Récupérer IDs depuis `get_profile`** (plus fiable que `list_teams`) :
- `profile.defaultProjectId` → projet par défaut (Drafts)
- `profile.defaultTeamId` → team
**4. `export_shape` NON IMPLÉMENTÉ** dans zcube — ne pas l'appeler
**5. `list_teams` retourne du texte** ("Found 1 teams"), pas du JSON
**6. Workflow création fichier** :
```
get_profile → defaultProjectId
create_file { projectId, name } → fileId
list_pages { fileId } → pageId (array[0].id)
create_frame { fileId, pageId, name, x, y, width, height, fillColor } → frameId
create_rectangle/text { fileId, pageId, parentId: frameId, ... }
```
**7. Coordonnées shapes dans un frame** : absolues (pas relatives au frame)
### Pour générer une image finale
- `export_shape` non dispo → utiliser **HTML/CSS → Playwright screenshot**
- Script template : `/home/node/.openclaw/workspace/screenshot-poster.mjs`
- Playwright : `node_modules/playwright`, chrome : `/home/node/.cache/ms-playwright/chromium-1208/chrome-linux64/chrome`
- Sauvegarder dans workspace (pas /tmp) pour envoi Telegram
### Pour injecter une image dans Penpot
- Uploader sur CopyParty : `curl -X PUT http://192.168.1.150:3923/anytype/image.png --data-binary @image.png`
- Puis : `upload_file_media_from_url { fileId, url: "http://192.168.1.150:3923/anytype/image.png" }`
## Podcasts & Vidéos — Transcription
- Je peux **récupérer et transcrire** des podcasts/vidéos en ligne