Penpot MCP: gotchas, template script, workflow documenté
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user