@pinepaper.studio/mcp-server 1.6.13 → 1.6.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.de.md +6 -1
  2. package/README.es.md +6 -1
  3. package/README.fr.md +6 -1
  4. package/README.hi.md +6 -1
  5. package/README.ja.md +6 -1
  6. package/README.ko.md +6 -1
  7. package/README.md +245 -6
  8. package/README.pt-BR.md +6 -1
  9. package/README.zh-CN.md +6 -1
  10. package/assets/brand/pinepaper-lockup-horizontal-white.svg +1 -0
  11. package/assets/brand/pinepaper-lockup-horizontal.svg +1 -0
  12. package/assets/edit-whenever.svg +1 -1
  13. package/dist/browser/puppeteer-controller.js +2 -2
  14. package/dist/browser/puppeteer-controller.js.map +1 -1
  15. package/dist/build-info.json +5 -0
  16. package/dist/design/design-systems.js +1 -1
  17. package/dist/design/design-systems.js.map +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/ontology/upstream-vocabulary.d.ts +23 -0
  22. package/dist/ontology/upstream-vocabulary.d.ts.map +1 -0
  23. package/dist/ontology/upstream-vocabulary.js +1172 -0
  24. package/dist/ontology/upstream-vocabulary.js.map +1 -0
  25. package/dist/ontology/vocabulary.d.ts.map +1 -1
  26. package/dist/ontology/vocabulary.js +19 -0
  27. package/dist/ontology/vocabulary.js.map +1 -1
  28. package/dist/tools/definitions.d.ts.map +1 -1
  29. package/dist/tools/definitions.js +264 -70
  30. package/dist/tools/definitions.js.map +1 -1
  31. package/dist/tools/engine-methods.d.ts.map +1 -1
  32. package/dist/tools/engine-methods.js +24 -2
  33. package/dist/tools/engine-methods.js.map +1 -1
  34. package/dist/tools/engine-surface.d.ts +1 -1
  35. package/dist/tools/engine-surface.d.ts.map +1 -1
  36. package/dist/tools/engine-surface.js +37 -10
  37. package/dist/tools/engine-surface.js.map +1 -1
  38. package/dist/tools/handlers/camera.d.ts.map +1 -1
  39. package/dist/tools/handlers/camera.js +17 -2
  40. package/dist/tools/handlers/camera.js.map +1 -1
  41. package/dist/tools/handlers/font.d.ts.map +1 -1
  42. package/dist/tools/handlers/font.js +48 -3
  43. package/dist/tools/handlers/font.js.map +1 -1
  44. package/dist/tools/handlers/maps.d.ts.map +1 -1
  45. package/dist/tools/handlers/maps.js +16 -0
  46. package/dist/tools/handlers/maps.js.map +1 -1
  47. package/dist/tools/handlers.d.ts +11 -1
  48. package/dist/tools/handlers.d.ts.map +1 -1
  49. package/dist/tools/handlers.js +426 -14
  50. package/dist/tools/handlers.js.map +1 -1
  51. package/dist/tools/minimal-descriptions.d.ts.map +1 -1
  52. package/dist/tools/minimal-descriptions.js +2 -0
  53. package/dist/tools/minimal-descriptions.js.map +1 -1
  54. package/dist/tools/shape-params.d.ts +13 -2
  55. package/dist/tools/shape-params.d.ts.map +1 -1
  56. package/dist/tools/shape-params.js +98 -3
  57. package/dist/tools/shape-params.js.map +1 -1
  58. package/dist/tools/stick-vocabulary.d.ts +1 -1
  59. package/dist/tools/stick-vocabulary.js +1 -1
  60. package/dist/tools/toolkits.d.ts.map +1 -1
  61. package/dist/tools/toolkits.js +2 -0
  62. package/dist/tools/toolkits.js.map +1 -1
  63. package/dist/types/code-generator.d.ts +27 -1
  64. package/dist/types/code-generator.d.ts.map +1 -1
  65. package/dist/types/code-generator.js +2506 -273
  66. package/dist/types/code-generator.js.map +1 -1
  67. package/dist/types/schemas.d.ts +1483 -239
  68. package/dist/types/schemas.d.ts.map +1 -1
  69. package/dist/types/schemas.js +259 -26
  70. package/dist/types/schemas.js.map +1 -1
  71. package/dist/utils/a11y.d.ts +67 -0
  72. package/dist/utils/a11y.d.ts.map +1 -0
  73. package/dist/utils/a11y.js +117 -0
  74. package/dist/utils/a11y.js.map +1 -0
  75. package/dist/utils/ad-package.d.ts +44 -0
  76. package/dist/utils/ad-package.d.ts.map +1 -0
  77. package/dist/utils/ad-package.js +121 -0
  78. package/dist/utils/ad-package.js.map +1 -0
  79. package/dist/utils/scc.d.ts +41 -0
  80. package/dist/utils/scc.d.ts.map +1 -0
  81. package/dist/utils/scc.js +185 -0
  82. package/dist/utils/scc.js.map +1 -0
  83. package/dist/utils/zip.d.ts +7 -0
  84. package/dist/utils/zip.d.ts.map +1 -0
  85. package/dist/utils/zip.js +82 -0
  86. package/dist/utils/zip.js.map +1 -0
  87. package/dist/version.d.ts +3 -0
  88. package/dist/version.d.ts.map +1 -1
  89. package/dist/version.js +31 -1
  90. package/dist/version.js.map +1 -1
  91. package/icon.png +0 -0
  92. package/icon.svg +1 -0
  93. package/manifest.json +11 -2
  94. package/package.json +8 -4
package/README.de.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · **Deutsch** · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — animierte Grafiken aus Tool-Aufrufen" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  Der PinePaper MCP-Server lässt KI-Assistenten über das Model Context Protocol Grafiken in [PinePaper Studio](https://pinepaper.studio) erstellen und animieren. Funktioniert mit jeder KI, die MCP-Tool-Aufrufe unterstützt (Claude, GPT, Gemini, lokale Modelle usw.).
16
21
 
17
- Der Server bietet **152 Tools**: Zeichnen, Animation, Diagramme, Karten, Typografie, Physik, Bildbearbeitung, Datenvisualisierung und Export:
22
+ Der Server bietet **154 Tools**: Zeichnen, Animation, Diagramme, Karten, Typografie, Physik, Bildbearbeitung, Datenvisualisierung und Export:
18
23
 
19
24
  - Text, Formen, Geometrie und komplexe Grafiken erstellen
20
25
  - Mit deklarativen **Relationen** animieren statt mit Keyframes
package/README.es.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · **Español** · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — gráficos animados hechos con llamadas a herramientas" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  El servidor MCP de PinePaper permite a los asistentes de IA crear y animar gráficos en [PinePaper Studio](https://pinepaper.studio) a través del Model Context Protocol. Funciona con cualquier IA que soporte llamadas a herramientas MCP (Claude, GPT, Gemini, modelos locales, etc.).
16
21
 
17
- Expone **152 herramientas**: dibujo, animación, diagramas, mapas, tipografía, física, edición de imágenes, visualización de datos y exportación:
22
+ Expone **154 herramientas**: dibujo, animación, diagramas, mapas, tipografía, física, edición de imágenes, visualización de datos y exportación:
18
23
 
19
24
  - Crear texto, formas, geometría y gráficos complejos
20
25
  - Animar con **relaciones** declarativas en lugar de fotogramas clave
package/README.fr.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · **Français** · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — graphiques animés créés par appels d'outils" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  Le serveur MCP PinePaper permet aux assistants IA de créer et d'animer des graphiques dans [PinePaper Studio](https://pinepaper.studio) via le Model Context Protocol. Compatible avec toute IA gérant les appels d'outils MCP (Claude, GPT, Gemini, modèles locaux, etc.).
16
21
 
17
- Il expose **152 outils** : dessin, animation, diagrammes, cartes, typographie, physique, retouche d'image, visualisation de données et export :
22
+ Il expose **154 outils** : dessin, animation, diagrammes, cartes, typographie, physique, retouche d'image, visualisation de données et export :
18
23
 
19
24
  - Créer du texte, des formes, de la géométrie et des graphiques complexes
20
25
  - Animer avec des **relations** déclaratives plutôt que des images clés
package/README.hi.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · **हिन्दी**
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — टूल कॉल से बने एनिमेटेड ग्राफ़िक्स" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  PinePaper MCP सर्वर AI असिस्टेंट्स को Model Context Protocol के ज़रिए [PinePaper Studio](https://pinepaper.studio) में ग्राफ़िक्स बनाने और एनिमेट करने देता है। MCP टूल कॉलिंग वाले किसी भी AI (Claude, GPT, Gemini, लोकल मॉडल आदि) के साथ काम करता है।
16
21
 
17
- सर्वर **152 टूल** देता है — ड्रॉइंग, एनिमेशन, डायग्राम, नक्शे, टाइपोग्राफ़ी, फिज़िक्स, इमेज एडिटिंग, डेटा विज़ुअलाइज़ेशन और एक्सपोर्ट:
22
+ सर्वर **154 टूल** देता है — ड्रॉइंग, एनिमेशन, डायग्राम, नक्शे, टाइपोग्राफ़ी, फिज़िक्स, इमेज एडिटिंग, डेटा विज़ुअलाइज़ेशन और एक्सपोर्ट:
18
23
 
19
24
  - टेक्स्ट, आकृतियाँ, ज्यामिति और जटिल ग्राफ़िक्स बनाना
20
25
  - कीफ़्रेम की जगह व्यवहार बताने वाले **रिलेशन** से एनिमेशन
package/README.ja.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · **日本語** · [한국어](README.ko.md) · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — ツールコールから生まれるアニメーション" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  PinePaper MCP サーバーは、MCP 経由で AI アシスタントが [PinePaper Studio](https://pinepaper.studio) 上にグラフィックを作成・アニメーションさせるためのサーバーです。MCP ツールコールに対応した AI(Claude、GPT、Gemini、ローカルモデルなど)で動作します。
16
21
 
17
- **152 個のツール**を提供 — 描画・アニメーション・図・地図・タイポグラフィ・物理・画像編集・データ可視化・エクスポート:
22
+ **154 個のツール**を提供 — 描画・アニメーション・図・地図・タイポグラフィ・物理・画像編集・データ可視化・エクスポート:
18
23
 
19
24
  - テキスト、図形、ジオメトリ、複雑なグラフィックの作成
20
25
  - キーフレームではなく、ふるまいを宣言する**リレーション**でアニメーション
package/README.ko.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · **한국어** · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — 툴 콜로 만든 애니메이션" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  PinePaper MCP 서버는 AI 어시스턴트가 MCP를 통해 [PinePaper Studio](https://pinepaper.studio)에서 그래픽을 만들고 애니메이션하게 해줍니다. MCP 툴 콜을 지원하는 모든 AI(Claude, GPT, Gemini, 로컬 모델 등)와 호환됩니다.
16
21
 
17
- **152개의 툴** 제공 — 드로잉, 애니메이션, 다이어그램, 지도, 타이포그래피, 물리, 이미지 편집, 데이터 시각화, 내보내기:
22
+ **154개의 툴** 제공 — 드로잉, 애니메이션, 다이어그램, 지도, 타이포그래피, 물리, 이미지 편집, 데이터 시각화, 내보내기:
18
23
 
19
24
  - 텍스트·도형·기하·복잡한 그래픽 생성
20
25
  - 키프레임 대신 행동을 선언하는 **릴레이션**으로 애니메이션
package/README.md CHANGED
@@ -8,6 +8,11 @@
8
8
  **English** · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
9
9
 
10
10
  <p align="center">
11
+ <picture>
12
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
13
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
14
+ </picture>
15
+ <br>
11
16
  <img src="assets/edit-whenever.svg" alt="Generate once. Edit whenever. — animated PinePaper poster: the headline assembles from scatter, a color wave runs through every letter, and 'generate twice / thrice' get struck out before 'once' is highlighted" width="720">
12
17
  </p>
13
18
 
@@ -25,7 +30,7 @@
25
30
 
26
31
  PinePaper MCP Server enables AI assistants to create and animate graphics in [PinePaper Studio](https://pinepaper.studio) via the Model Context Protocol (MCP). Works with any AI that supports MCP tool calling (Claude, GPT, Gemini, local models, etc.).
27
32
 
28
- The server exposes **152 tools** across drawing, animation, diagrams, maps, typography, physics, image editing, data visualization, and export. Using natural language, you can:
33
+ The server exposes **154 tools** across drawing, animation, diagrams, maps, typography, physics, image editing, data visualization, and export. Using natural language, you can:
29
34
 
30
35
  - Create geometric shapes, text collages, diagrams, and data charts
31
36
  - Apply 37+ character-level text effects and 28+ vertex deformation presets
@@ -36,7 +41,7 @@ The server exposes **152 tools** across drawing, animation, diagrams, maps, typo
36
41
 
37
42
  ## Running it: local or hosted
38
43
 
39
- **Local is free and complete.** Every one of the 152 tools works when you run
44
+ **Local is free and complete.** Every one of the 154 tools works when you run
40
45
  this server yourself. There is no reduced tier and nothing held back.
41
46
 
42
47
  What it needs:
@@ -44,7 +49,7 @@ What it needs:
44
49
  | | |
45
50
  |---|---|
46
51
  | Node | 18 or newer |
47
- | Disk | Puppeteer downloads Chrome on install — roughly **320 MB** per version |
52
+ | Disk | With Puppeteer (below), Chrome is downloaded on install — roughly **320 MB** per version |
48
53
  | Memory | a Chrome process plus the Studio canvas, so budget ~1 GB while a job runs |
49
54
 
50
55
  That is fine on a laptop and awkward on a small VPS, a locked-down work machine,
@@ -73,6 +78,30 @@ question you can answer yourself rather than take on trust: a benchmark runs one
73
78
  prompt across several models and puts the results side by side, any run
74
79
  shareable. It is in invite-only beta.
75
80
 
81
+ ### Quick start
82
+
83
+ Puppeteer is an **optional** install, so a plain `npx @pinepaper.studio/mcp-server`
84
+ has no browser: every tool then returns the code it would run instead of running
85
+ it (the result says so). To execute in a real browser, install Puppeteer **in the
86
+ same `npx` call** — a separate `npm i puppeteer` in your project is not visible to
87
+ `npx`'s copy of the server:
88
+
89
+ ```json
90
+ {
91
+ "mcpServers": {
92
+ "pinepaper": {
93
+ "command": "npx",
94
+ "args": ["-y", "-p", "puppeteer", "-p", "@pinepaper.studio/mcp-server", "pinepaper-mcp"]
95
+ }
96
+ }
97
+ }
98
+ ```
99
+
100
+ For code-only use (no Chrome, no 320 MB download), use
101
+ `"args": ["-y", "@pinepaper.studio/mcp-server"]` and set
102
+ `"env": { "PINEPAPER_EXECUTION_MODE": "code" }`. A global install works too:
103
+ `npm i -g @pinepaper.studio/mcp-server puppeteer`, then `"command": "pinepaper-mcp"`.
104
+
76
105
  ## Made with tool calls
77
106
 
78
107
  <p align="center"><img src="assets/hero.svg" width="720" alt="Animated vector graphics, made by tool calls — a tool call on the left runs and becomes a curve drawing itself on the right, composed with PinePaper Studio"></p>
@@ -153,7 +182,7 @@ The same graph drives visuals, keyboard access, and screen-reader roles (WCAG 2.
153
182
 
154
183
  The snippets above are MCP tool-call arguments — they execute when an AI agent invokes the tool. Three ways to make that happen:
155
184
 
156
- **1 · Ask your agent (any MCP client).** With this server [configured](#2-configure-your-ai-client), paste a prompt like:
185
+ **1 · Ask your agent (any MCP client).** With this server [configured](#quick-start), paste a prompt like:
157
186
 
158
187
  > Create a blue circle and make it ride a diamond-shaped path with easeInOut, looping. Add an orange rotating square beside it. Then export the scene as animated SVG.
159
188
 
@@ -217,6 +246,214 @@ If you do not want an agent executing anything, `code` mode is a first-class pat
217
246
  - Puppeteer mode launches Chrome with `--no-sandbox` and `--disable-setuid-sandbox`. That is routine for headless automation and it does weaken Chrome's own process sandbox. If that matters where you are running it, use `code` mode or put the server in a container.
218
247
  - Puppeteer itself is an **optional** peer dependency, kept out of the default tree precisely because a headless browser plus an install script is what scanners flag hardest. Install it only if you want the executing mode.
219
248
 
249
+ ## What's new in 1.6.15
250
+
251
+ ### New: the PinePaper mark
252
+
253
+ The "origami pine" is the new PinePaper mark. The package now ships it as its
254
+ icon (`icon.svg`, `icon.png`), and MCP bundle hosts that read `manifest.json`
255
+ show it.
256
+
257
+ ### New: transparent WebM
258
+
259
+ `pinepaper_agent_export` with `format: "webm"` takes `transparent: true` (and
260
+ `alphaQuantizer`, 0–63) for a video with a real alpha channel, where the studio
261
+ supports it. The result confirms the alpha stream; if none was written, the
262
+ result says so instead of handing back an opaque file.
263
+
264
+ ### New: fonts in multi-page PDFs
265
+
266
+ A PDF deck (`pdf.pages`) embeds the scene's fonts for its searchable text layer
267
+ and reports them in `result.pdf.fonts`. On studios that support it, each page
268
+ gets its own scene's fonts. Text hidden at the moment of rendering (outside its
269
+ `bornAt` / `ttl` window, or invisible) is named in the result, since it is in
270
+ neither the picture nor the text layer.
271
+
272
+ ### Fixed: `npx` setups could never execute in a browser
273
+
274
+ Puppeteer is an optional install, and under `npx` a separate `npm i puppeteer`
275
+ is not visible to the server. The README's new **Quick start** gives the `npx`
276
+ configuration that includes it; the error message leads with the same
277
+ advice.
278
+
279
+ ### Fixed: text-only properties on shapes
280
+
281
+ `fontWeight`, `strokePosition` and other text-only properties passed to a
282
+ non-text item are reported as not applied again.
283
+
284
+ ## What's new in 1.6.14
285
+
286
+ Many of the features below rely on newer studio capabilities. Where a studio
287
+ lacks one, the result says so — the call never quietly claims what it could
288
+ not do.
289
+
290
+ ### New: ads, variants and broadcast deliverables
291
+
292
+ - **`html5-ad`** export: a display-network zip (`index.html` with the
293
+ `ad.size` meta and a `clickTag` click target — the whole ad or a CTA's box)
294
+ plus a backup PNG beside it. The result checks the zip against a size budget
295
+ (`ad.maxBytes`, default 150 KB) and lists any external requests.
296
+ - **`playable`** export: a single-file MRAID playable whose CTA
297
+ (`ad.ctaItemId`) opens the store link through `mraid.open`, leaving the rest
298
+ of the ad interactive.
299
+ - **`pinepaper_render_batch`**: one creative per row of data — each row's item
300
+ changes or template params, then an export — with per-row files, warnings and
301
+ failures.
302
+ - **`scc`** captions: CEA-608 (broadcast) from the same timed text as SRT / VTT,
303
+ with notes on anything cut, dropped or timed late.
304
+ - **`pinepaper_accessibility_check`**: text contrast (WCAG AA) and flashing
305
+ (more than three flashes a second) as a quick screen before delivery.
306
+
307
+ ### New: text that fits its box
308
+
309
+ - **`fit`** on text (`create_item`, `modify_item`, batch):
310
+ `{maxWidth, maxHeight?, minFontSize?, maxFontSize?, wrap?, hold?}` sizes the
311
+ text to the box, and later content changes refit it — the variant /
312
+ translation workflow. It holds the anchored edge (`top-*` holds the top);
313
+ `fit: null` stops fitting. The result's `textFit` gives the size, line count
314
+ and whether it fits.
315
+ - **Overflow in every export.** `fidelity` lists `text_overflow` for text past
316
+ its box or off the frame — the check to run before rendering a batch.
317
+ - **`direction`** (`auto` | `ltr` | `rtl`) for Arabic, Hebrew and other RTL
318
+ paragraphs; `auto` is reported with the way it resolved.
319
+ - **`tabularFigures`** for counters and prices that should not jitter, and
320
+ **`strokePosition: 'outside'`** for thick caption outlines that keep the
321
+ letterform.
322
+ - Weight, italic, line spacing, and fonts from the catalogue or Google Fonts
323
+ (`pinepaper_font` gained a `load` action) now reach the text, loaded before
324
+ it is drawn.
325
+
326
+ ### New: export formats and controls
327
+
328
+ - **`apng`** — animation with full transparency, for overlays and stickers.
329
+ - **`jpg` / `webp`** stills for byte-budgeted ad specs; **`srt` / `vtt`**
330
+ captions from the scene's timed text; **multi-page PDF**, one page per saved
331
+ scene, with a searchable text layer and print options (paper
332
+ size, orientation, bleed, trim marks, dpi).
333
+ - **`region`** exports a part of the canvas — carousel slices, sheets of cards.
334
+ A cell leaves out a neighbour's overflowing items and names the items that
335
+ cross its edge.
336
+ - **`time`** renders a still at a chosen moment rather than wherever the
337
+ playhead is.
338
+ - **GIF** `loop` play count and a `maxBytes` budget (re-encoded smaller, with
339
+ each attempt reported).
340
+ - **Broadcast MP4** — `broadcast: true` (BT.709, limited range, constant
341
+ bitrate), `bitrate` / `minBitrate`, and `broadcastHeadroom`. The result
342
+ reports the achieved bitrate and the measured luma; when the file would fail
343
+ broadcast QC, `fidelity` says so and gives the command that fixes it.
344
+ - **NTSC rates** (29.97, 59.94, …) with a note when a duration overruns at
345
+ them, and a warning when H.264 rounds an odd side up by a pixel.
346
+ - New platform presets `print-a4-landscape` and `print-letter-landscape`.
347
+
348
+ ### New: tools and parameters
349
+
350
+ - **`pinepaper_lasso`** gained `cut`: cut a subject out along a polygon, no custom code.
351
+ - **Generator regions** can be shaped (rounded rect, ellipse, circle, polygon,
352
+ star, or an existing path) and named with `region.id`; the same generator in
353
+ several boxes gives several instances.
354
+ - **`modify_item`** takes `skewX` / `skewY` and an affine `matrix` (mockups).
355
+ - **Pixel-art rasters** (`smoothing: 'off'`), a **globe `disable`** action,
356
+ **keyed audio gain**, and **widget HTML** `lang`, `dir` and `alt`.
357
+ - `bornAt` / `ttl` now work as a visibility window in local renders, so shots
358
+ hand over cleanly on the boundary.
359
+ - `serverInfo.version` names the exact build (`1.6.14+<sha>`).
360
+
361
+ ### Fixed: properties that were silently ignored
362
+
363
+ `create_item` and `modify_item` now name any property they could not act on,
364
+ with a suggestion for common misspellings. Beyond that, these used to be
365
+ dropped and now work: no-fill (`null` / `'transparent'` / `'none'`), dashes,
366
+ caps and joins on every shape, `color` on closed paths, a top-level `anchor`,
367
+ path coordinates kept when no position is given, mesh colour on 3D shapes,
368
+ `template_params` naming undeclared params, chart data in the documented
369
+ shape, and gradients that cannot be read (now refused, not drawn as nothing).
370
+
371
+ ### Fixed: tools that reported success for the wrong thing
372
+
373
+ - Batch create / modify / execute now behave exactly like their single-item
374
+ tools, with one undo step per batch.
375
+ - `moves_along_path` follows the path you name (or refuses); relations to an
376
+ id not on the canvas are refused.
377
+ - Uploaded media: the id you are given is the one other tools accept, audio
378
+ levels reach the mix, `data:` and server-side URLs upload in production,
379
+ and clearing the canvas removes uploaded media too.
380
+ - A platform preset no longer stretches a canvas of another aspect ratio.
381
+ - `camera_animate` no longer claims pitch / yaw as 3D perspective, and its
382
+ `duration` is optional.
383
+ - Nine tools' published schemas disagreed with what they accepted; a guard
384
+ now keeps them in step.
385
+
386
+ ### New: a whole music bed in one call
387
+
388
+ `pinepaper_sound` gained a `sequence` action taking `[{t, spec|preset, note?,
389
+ duration?}]`. Every cue used to be its own call — a 112-cue bed cost 112 round
390
+ trips — and nothing about the work needed one each. Failures come back by
391
+ index, because a bed where three of a hundred cues didn't sound is neither a
392
+ success nor a failure.
393
+
394
+ ### Fixed: create_scene drew the wrong shape for six of its ten types
395
+
396
+ It built shapes itself instead of asking the engine — a hand-written branch per
397
+ type covering circle, rectangle, star and text, and **a 30px circle for
398
+ everything else**. So `ellipse`, `triangle`, `polygon`, `path`, `line` and
399
+ `arc` silently came out as a small blue circle, and any property that branch
400
+ didn't name was dropped (which is why an ellipse ignored `width`/`height` while
401
+ the same values worked through `agent_batch_execute`).
402
+
403
+ It now creates items the same way every other tool does, so all 28 item types
404
+ work, along with every property they accept. Two related corrections: scene
405
+ relations accepted 8 types while the catalogue documented ~90 — following the
406
+ documentation failed validation — and scene animations gained `startTime`, so a
407
+ scene can be staggered instead of everything moving from frame zero.
408
+
409
+ ### Fixed: layered-character import described the wrong manifest
410
+
411
+ The docs implied a `layers[]` array; the engine reads `info.parts` keyed by tag.
412
+ An array imports nothing. The description also implied `pinepaper_animate`
413
+ could blink — only an `expresses` relation drives blink/smile/talk, and asking
414
+ `animate` for it is a silent no-op.
415
+
416
+ ### Fixed: PDF export failed on every scene
417
+
418
+ `pinepaper_agent_export` with `format: "pdf"` died with "parameter 1 is not of
419
+ type 'Blob'" — an error naming `FileReader` and nothing about PDFs. The engine
420
+ resolves a record `{blob, width, height, format}` and this passed the whole
421
+ record where a `Blob` was expected. It now accepts either shape, reports the
422
+ page geometry the record carries, and when something really is not a file it
423
+ says so about the PDF rather than about `FileReader`.
424
+
425
+ ### Fixed: the validator's own findings were being swallowed
426
+
427
+ `pinepaper_validate` answers `{success: true, ok: false, diagnostics: [...]}` —
428
+ the call worked and the *scene* has problems, which is the whole point of the
429
+ tool. An internal guard treated `ok: false` as a tool failure, so the result
430
+ became "the studio reported failure without naming a reason" and the
431
+ diagnostics were discarded. A refusal that carries diagnostics now names them.
432
+
433
+ ### Changed: export fidelity is always reported
434
+
435
+ It used to appear only when there was something to lose, so that an empty list
436
+ could not be misread as "this format is lossless". That traded one misreading
437
+ for a worse one — you could not tell "checked, nothing lost" from "never
438
+ checked". All three states are explicit now, and the caveat lives in a note
439
+ rather than in the absence.
440
+
441
+ `pinepaper_agent_export` also points at `pinepaper_capture_frames` as the cheap
442
+ way to confirm a scene is actually moving **before** committing to a render.
443
+
444
+ ### Fixed: documentation that described the wrong contract
445
+
446
+ - **`solveOde` state variables are positional** — `t`, `y0`, `y1`, `y2` …
447
+ matching `initialState`. There is no `x` or `y`, so the natural way to write
448
+ a Lorenz system failed with "Undefined symbol y". The working form is now in
449
+ the description.
450
+ - **`moves_along_path` with `params.equation`** only works on the relation's
451
+ signal path. Easing `bounce` is piecewise and leaves that path, which
452
+ silently discards the equation and leaves the item where it started.
453
+ - **`grid.blocked` in `pathfind`** is a **mask**, one entry per cell, not a
454
+ list of blocked indices. Both are arrays of numbers, so the wrong one used to
455
+ produce a plausible "no path" instead of an error; the length is now checked.
456
+
220
457
  ## What's new in 1.6.13
221
458
 
222
459
  ### Fixed: WebGL was switched off, so every shader feature silently did nothing
@@ -934,7 +1171,7 @@ Fourteen new tools (121 → 135) and new actions across the surface — the rele
934
1171
 
935
1172
  ## Toolkits & Token Budget
936
1173
 
937
- 152 tools is a lot of context. The server ships a **toolkit** system that serves only the tools a given client needs, plus a **verbosity** system that controls how long each tool description is.
1174
+ 154 tools is a lot of context. The server ships a **toolkit** system that serves only the tools a given client needs, plus a **verbosity** system that controls how long each tool description is.
938
1175
 
939
1176
  **Toolkit profiles** (`PINEPAPER_TOOLKIT`):
940
1177
 
@@ -1139,7 +1376,7 @@ Generate instruction/code pairs for LLM fine-tuning:
1139
1376
 
1140
1377
  ## Tools Reference
1141
1378
 
1142
- All 152 tools, grouped by the tag used for toolkit filtering.
1379
+ All 154 tools, grouped by the tag used for toolkit filtering.
1143
1380
 
1144
1381
  ### Canvas (`canvas`)
1145
1382
  | Tool | Description |
@@ -1260,6 +1497,7 @@ All 152 tools, grouped by the tag used for toolkit filtering.
1260
1497
  | `pinepaper_scene_diff` | What changed between two scene states |
1261
1498
  | `pinepaper_audio_beats` | Detect beats; bake an item's animation onto them |
1262
1499
  | `pinepaper_template_params` | Templates with typed, coerced inputs |
1500
+ | `pinepaper_render_batch` | One creative per data row: apply the row, export it |
1263
1501
 
1264
1502
  ### Image Processing (`image_processing`)
1265
1503
  | Tool | Description |
@@ -1357,6 +1595,7 @@ All 152 tools, grouped by the tag used for toolkit filtering.
1357
1595
  | `pinepaper_analyze_design` | Analyze design quality |
1358
1596
  | `pinepaper_validate_design` | Validate against design rules |
1359
1597
  | `pinepaper_validate` | General validation |
1598
+ | `pinepaper_accessibility_check` | Text contrast and flashing (WCAG), as a heuristic screen |
1360
1599
  | `pinepaper_validate_scene` | Validate scene integrity |
1361
1600
  | `pinepaper_instantiate_ontology` | Compile a pp: design graph into a scene |
1362
1601
  | `pinepaper_lint_scene` | Relational-density audit + structural-relation suggestions |
package/README.pt-BR.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · **Português (BR)** · [Français](README.fr.md) · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — gráficos animados feitos por chamadas de ferramenta" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  O servidor MCP do PinePaper permite que assistentes de IA criem e animem gráficos no [PinePaper Studio](https://pinepaper.studio) via Model Context Protocol. Funciona com qualquer IA que suporte chamadas de ferramenta MCP (Claude, GPT, Gemini, modelos locais etc.).
16
21
 
17
- São **152 ferramentas**: desenho, animação, diagramas, mapas, tipografia, física, edição de imagens, visualização de dados e exportação:
22
+ São **154 ferramentas**: desenho, animação, diagramas, mapas, tipografia, física, edição de imagens, visualização de dados e exportação:
18
23
 
19
24
  - Criar texto, formas, geometria e gráficos complexos
20
25
  - Animar com **relações** declarativas em vez de keyframes
package/README.zh-CN.md CHANGED
@@ -5,6 +5,11 @@
5
5
  [English](README.md) · **简体中文** · [日本語](README.ja.md) · [한국어](README.ko.md) · [Español](README.es.md) · [Português (BR)](README.pt-BR.md) · [Français](README.fr.md) · [Deutsch](README.de.md) · [हिन्दी](README.hi.md)
6
6
 
7
7
  <p align="center">
8
+ <picture>
9
+ <source media="(prefers-color-scheme: dark)" srcset="assets/brand/pinepaper-lockup-horizontal-white.svg">
10
+ <img src="assets/brand/pinepaper-lockup-horizontal.svg" alt="PinePaper" width="360">
11
+ </picture>
12
+ <br>
8
13
  <img src="assets/hero.svg" alt="PinePaper MCP — 由工具调用生成的矢量动画" width="840">
9
14
  </p>
10
15
 
@@ -14,7 +19,7 @@
14
19
 
15
20
  PinePaper MCP 服务器让 AI 助手通过 MCP 协议在 [PinePaper Studio](https://pinepaper.studio) 中创建和驱动图形动画。兼容任何支持 MCP 工具调用的 AI(Claude、GPT、Gemini、本地模型等)。
16
21
 
17
- 服务器提供 **152 个工具**,覆盖绘图、动画、图表、地图、排版、物理、图像编辑、数据可视化与导出:
22
+ 服务器提供 **154 个工具**,覆盖绘图、动画、图表、地图、排版、物理、图像编辑、数据可视化与导出:
18
23
 
19
24
  - 创建文本、形状、几何图形与复杂图稿
20
25
  - 用行为驱动的**关系(relations)**做动画,而不是逐帧关键帧
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2156.7 512" width="2156.7" height="512" role="img" aria-label="PinePaper"><title>PinePaper</title><defs><linearGradient id="pplh-bg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#6366f1"/><stop offset="1" stop-color="#8b5cf6"/></linearGradient><linearGradient id="pplh-tr" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#f97316"/><stop offset="1" stop-color="#fbbf24"/></linearGradient></defs><rect x="0" y="0" width="512" height="512" rx="112" fill="url(#pplh-bg)"/><rect x="232" y="378" width="48" height="56" rx="6" fill="url(#pplh-tr)"/><path fill="#ffffff" d="M257 78 L172.8 182 L224 182 L147.2 278 L211.2 278 L121.6 390 L257 390 Z"/><path fill="#dfe3ff" d="M256 78 L339.2 182 L288 182 L364.8 278 L300.8 278 L390.4 390 L256 390 Z"/><path fill="#ffffff" d="M709.8 280.75H674.7V361.15H632.7V151.75H709.8Q734.1 151.75 751.2 160.15Q768.3 168.55 776.85 183.25Q785.4 197.95 785.4 216.55Q785.4 233.35 777.45 248.05Q769.5 262.75 752.55 271.75Q735.6 280.75 709.8 280.75ZM742.2 216.55Q742.2 185.95 708 185.95H674.7V246.85H708Q725.4 246.85 733.8 238.9Q742.2 230.95 742.2 216.55ZM810.6 150.55Q810.6 140.05 817.95 133Q825.3 125.95 836.4 125.95Q847.5 125.95 854.85 133Q862.2 140.05 862.2 150.55Q862.2 161.05 854.85 168.1Q847.5 175.15 836.4 175.15Q825.3 175.15 817.95 168.1Q810.6 161.05 810.6 150.55ZM857.1 194.95V361.15H815.1V194.95ZM1056.9 263.65V361.15H1014.9V269.35Q1014.9 249.55 1005 238.9Q995.1 228.25 978 228.25Q960.6 228.25 950.55 238.9Q940.5 249.55 940.5 269.35V361.15H898.5V194.95H940.5V215.65Q948.9 204.85 961.95 198.7Q975 192.55 990.6 192.55Q1020.3 192.55 1038.6 211.3Q1056.9 230.05 1056.9 263.65ZM1250.1 290.65H1128.6Q1130.1 308.65 1141.2 318.85Q1152.3 329.05 1168.5 329.05Q1191.9 329.05 1201.8 308.95H1247.1Q1239.9 332.95 1219.5 348.4Q1199.1 363.85 1169.4 363.85Q1145.4 363.85 1126.35 353.2Q1107.3 342.55 1096.65 323.05Q1086 303.55 1086 278.05Q1086 252.25 1096.5 232.75Q1107 213.25 1125.9 202.75Q1144.8 192.25 1169.4 192.25Q1193.1 192.25 1211.85 202.45Q1230.6 212.65 1240.95 231.4Q1251.3 250.15 1251.3 274.45Q1251.3 283.45 1250.1 290.65ZM1207.8 262.45Q1207.5 246.25 1196.1 236.5Q1184.7 226.75 1168.2 226.75Q1152.6 226.75 1141.95 236.2Q1131.3 245.65 1128.9 262.45ZM1359 280.75H1323.9V361.15H1281.9V151.75H1359Q1383.3 151.75 1400.4 160.15Q1417.5 168.55 1426.05 183.25Q1434.6 197.95 1434.6 216.55Q1434.6 233.35 1426.65 248.05Q1418.7 262.75 1401.75 271.75Q1384.8 280.75 1359 280.75ZM1391.4 216.55Q1391.4 185.95 1357.2 185.95H1323.9V246.85H1357.2Q1374.6 246.85 1383 238.9Q1391.4 230.95 1391.4 216.55ZM1529.4 192.25Q1548 192.25 1561.95 199.75Q1575.9 207.25 1584.3 218.65V194.95H1626.6V361.15H1584.3V336.85Q1576.2 348.55 1561.95 356.2Q1547.7 363.85 1529.1 363.85Q1508.1 363.85 1490.85 353.05Q1473.6 342.25 1463.55 322.6Q1453.5 302.95 1453.5 277.45Q1453.5 252.25 1463.55 232.75Q1473.6 213.25 1490.85 202.75Q1508.1 192.25 1529.4 192.25ZM1540.2 229.15Q1528.5 229.15 1518.6 234.85Q1508.7 240.55 1502.55 251.5Q1496.4 262.45 1496.4 277.45Q1496.4 292.45 1502.55 303.7Q1508.7 314.95 1518.75 320.95Q1528.8 326.95 1540.2 326.95Q1551.9 326.95 1562.1 321.1Q1572.3 315.25 1578.3 304.3Q1584.3 293.35 1584.3 278.05Q1584.3 262.75 1578.3 251.8Q1572.3 240.85 1562.1 235Q1551.9 229.15 1540.2 229.15ZM1764.6 192.25Q1785.9 192.25 1803.15 202.75Q1820.4 213.25 1830.45 232.6Q1840.5 251.95 1840.5 277.45Q1840.5 302.95 1830.45 322.6Q1820.4 342.25 1803.15 353.05Q1785.9 363.85 1764.6 363.85Q1746.3 363.85 1732.35 356.35Q1718.4 348.85 1709.7 337.45V440.35H1667.7V194.95H1709.7V218.95Q1717.8 207.55 1732.05 199.9Q1746.3 192.25 1764.6 192.25ZM1753.5 229.15Q1742.1 229.15 1732.05 235Q1722 240.85 1715.85 251.95Q1709.7 263.05 1709.7 278.05Q1709.7 293.05 1715.85 304.15Q1722 315.25 1732.05 321.1Q1742.1 326.95 1753.5 326.95Q1765.2 326.95 1775.25 320.95Q1785.3 314.95 1791.45 303.85Q1797.6 292.75 1797.6 277.45Q1797.6 262.45 1791.45 251.5Q1785.3 240.55 1775.25 234.85Q1765.2 229.15 1753.5 229.15ZM2024.4 290.65H1902.9Q1904.4 308.65 1915.5 318.85Q1926.6 329.05 1942.8 329.05Q1966.2 329.05 1976.1 308.95H2021.4Q2014.2 332.95 1993.8 348.4Q1973.4 363.85 1943.7 363.85Q1919.7 363.85 1900.65 353.2Q1881.6 342.55 1870.95 323.05Q1860.3 303.55 1860.3 278.05Q1860.3 252.25 1870.8 232.75Q1881.3 213.25 1900.2 202.75Q1919.1 192.25 1943.7 192.25Q1967.4 192.25 1986.15 202.45Q2004.9 212.65 2015.25 231.4Q2025.6 250.15 2025.6 274.45Q2025.6 283.45 2024.4 290.65ZM1982.1 262.45Q1981.8 246.25 1970.4 236.5Q1959 226.75 1942.5 226.75Q1926.9 226.75 1916.25 236.2Q1905.6 245.65 1903.2 262.45ZM2149.2 192.55V236.65H2138.1Q2118.3 236.65 2108.25 245.95Q2098.2 255.25 2098.2 278.35V361.15H2056.2V194.95H2098.2V220.75Q2106.3 207.55 2119.35 200.05Q2132.4 192.55 2149.2 192.55Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2156.7 512" width="2156.7" height="512" role="img" aria-label="PinePaper"><title>PinePaper</title><defs><linearGradient id="pplh-bg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#6366f1"/><stop offset="1" stop-color="#8b5cf6"/></linearGradient><linearGradient id="pplh-tr" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#f97316"/><stop offset="1" stop-color="#fbbf24"/></linearGradient></defs><rect x="0" y="0" width="512" height="512" rx="112" fill="url(#pplh-bg)"/><rect x="232" y="378" width="48" height="56" rx="6" fill="url(#pplh-tr)"/><path fill="#ffffff" d="M257 78 L172.8 182 L224 182 L147.2 278 L211.2 278 L121.6 390 L257 390 Z"/><path fill="#dfe3ff" d="M256 78 L339.2 182 L288 182 L364.8 278 L300.8 278 L390.4 390 L256 390 Z"/><path fill="#1f2937" d="M709.8 280.75H674.7V361.15H632.7V151.75H709.8Q734.1 151.75 751.2 160.15Q768.3 168.55 776.85 183.25Q785.4 197.95 785.4 216.55Q785.4 233.35 777.45 248.05Q769.5 262.75 752.55 271.75Q735.6 280.75 709.8 280.75ZM742.2 216.55Q742.2 185.95 708 185.95H674.7V246.85H708Q725.4 246.85 733.8 238.9Q742.2 230.95 742.2 216.55ZM810.6 150.55Q810.6 140.05 817.95 133Q825.3 125.95 836.4 125.95Q847.5 125.95 854.85 133Q862.2 140.05 862.2 150.55Q862.2 161.05 854.85 168.1Q847.5 175.15 836.4 175.15Q825.3 175.15 817.95 168.1Q810.6 161.05 810.6 150.55ZM857.1 194.95V361.15H815.1V194.95ZM1056.9 263.65V361.15H1014.9V269.35Q1014.9 249.55 1005 238.9Q995.1 228.25 978 228.25Q960.6 228.25 950.55 238.9Q940.5 249.55 940.5 269.35V361.15H898.5V194.95H940.5V215.65Q948.9 204.85 961.95 198.7Q975 192.55 990.6 192.55Q1020.3 192.55 1038.6 211.3Q1056.9 230.05 1056.9 263.65ZM1250.1 290.65H1128.6Q1130.1 308.65 1141.2 318.85Q1152.3 329.05 1168.5 329.05Q1191.9 329.05 1201.8 308.95H1247.1Q1239.9 332.95 1219.5 348.4Q1199.1 363.85 1169.4 363.85Q1145.4 363.85 1126.35 353.2Q1107.3 342.55 1096.65 323.05Q1086 303.55 1086 278.05Q1086 252.25 1096.5 232.75Q1107 213.25 1125.9 202.75Q1144.8 192.25 1169.4 192.25Q1193.1 192.25 1211.85 202.45Q1230.6 212.65 1240.95 231.4Q1251.3 250.15 1251.3 274.45Q1251.3 283.45 1250.1 290.65ZM1207.8 262.45Q1207.5 246.25 1196.1 236.5Q1184.7 226.75 1168.2 226.75Q1152.6 226.75 1141.95 236.2Q1131.3 245.65 1128.9 262.45ZM1359 280.75H1323.9V361.15H1281.9V151.75H1359Q1383.3 151.75 1400.4 160.15Q1417.5 168.55 1426.05 183.25Q1434.6 197.95 1434.6 216.55Q1434.6 233.35 1426.65 248.05Q1418.7 262.75 1401.75 271.75Q1384.8 280.75 1359 280.75ZM1391.4 216.55Q1391.4 185.95 1357.2 185.95H1323.9V246.85H1357.2Q1374.6 246.85 1383 238.9Q1391.4 230.95 1391.4 216.55ZM1529.4 192.25Q1548 192.25 1561.95 199.75Q1575.9 207.25 1584.3 218.65V194.95H1626.6V361.15H1584.3V336.85Q1576.2 348.55 1561.95 356.2Q1547.7 363.85 1529.1 363.85Q1508.1 363.85 1490.85 353.05Q1473.6 342.25 1463.55 322.6Q1453.5 302.95 1453.5 277.45Q1453.5 252.25 1463.55 232.75Q1473.6 213.25 1490.85 202.75Q1508.1 192.25 1529.4 192.25ZM1540.2 229.15Q1528.5 229.15 1518.6 234.85Q1508.7 240.55 1502.55 251.5Q1496.4 262.45 1496.4 277.45Q1496.4 292.45 1502.55 303.7Q1508.7 314.95 1518.75 320.95Q1528.8 326.95 1540.2 326.95Q1551.9 326.95 1562.1 321.1Q1572.3 315.25 1578.3 304.3Q1584.3 293.35 1584.3 278.05Q1584.3 262.75 1578.3 251.8Q1572.3 240.85 1562.1 235Q1551.9 229.15 1540.2 229.15ZM1764.6 192.25Q1785.9 192.25 1803.15 202.75Q1820.4 213.25 1830.45 232.6Q1840.5 251.95 1840.5 277.45Q1840.5 302.95 1830.45 322.6Q1820.4 342.25 1803.15 353.05Q1785.9 363.85 1764.6 363.85Q1746.3 363.85 1732.35 356.35Q1718.4 348.85 1709.7 337.45V440.35H1667.7V194.95H1709.7V218.95Q1717.8 207.55 1732.05 199.9Q1746.3 192.25 1764.6 192.25ZM1753.5 229.15Q1742.1 229.15 1732.05 235Q1722 240.85 1715.85 251.95Q1709.7 263.05 1709.7 278.05Q1709.7 293.05 1715.85 304.15Q1722 315.25 1732.05 321.1Q1742.1 326.95 1753.5 326.95Q1765.2 326.95 1775.25 320.95Q1785.3 314.95 1791.45 303.85Q1797.6 292.75 1797.6 277.45Q1797.6 262.45 1791.45 251.5Q1785.3 240.55 1775.25 234.85Q1765.2 229.15 1753.5 229.15ZM2024.4 290.65H1902.9Q1904.4 308.65 1915.5 318.85Q1926.6 329.05 1942.8 329.05Q1966.2 329.05 1976.1 308.95H2021.4Q2014.2 332.95 1993.8 348.4Q1973.4 363.85 1943.7 363.85Q1919.7 363.85 1900.65 353.2Q1881.6 342.55 1870.95 323.05Q1860.3 303.55 1860.3 278.05Q1860.3 252.25 1870.8 232.75Q1881.3 213.25 1900.2 202.75Q1919.1 192.25 1943.7 192.25Q1967.4 192.25 1986.15 202.45Q2004.9 212.65 2015.25 231.4Q2025.6 250.15 2025.6 274.45Q2025.6 283.45 2024.4 290.65ZM1982.1 262.45Q1981.8 246.25 1970.4 236.5Q1959 226.75 1942.5 226.75Q1926.9 226.75 1916.25 236.2Q1905.6 245.65 1903.2 262.45ZM2149.2 192.55V236.65H2138.1Q2118.3 236.65 2108.25 245.95Q2098.2 255.25 2098.2 278.35V361.15H2056.2V194.95H2098.2V220.75Q2106.3 207.55 2119.35 200.05Q2132.4 192.55 2149.2 192.55Z"/></svg>
@@ -3,7 +3,7 @@
3
3
  Effects showcased: print (kicker), scattered (headline assembly), colorwave (per-letter
4
4
  fill), wipe (underline bar), orbit (dot around period), pulse (period), fireworks,
5
5
  rings, swarm. Pure SMIL, no scripts. -->
6
- <rect width="800" height="600" fill="#0d1117"/>
6
+ <rect width="800" height="600" fill="#0f172a"/>
7
7
  <!-- rings -->
8
8
  <g stroke="#22c55e" fill="none" stroke-width="2">
9
9
  <circle cx="132" cy="140" r="4"><animate attributeName="r" values="4;48" dur="3s" begin="0s" repeatCount="indefinite"/><animate attributeName="opacity" values=".7;0" dur="3s" begin="0s" repeatCount="indefinite"/></circle>
@@ -241,7 +241,7 @@ export class PinePaperBrowserController {
241
241
  puppeteer = await import('puppeteer');
242
242
  }
243
243
  catch {
244
- throw new Error('The browser tools need puppeteer, which is an optional install: run `npm i puppeteer` (or `npm i -g puppeteer` for a global CLI) and retry. It is kept out of the default dependency tree for supply-chain hygiene.');
244
+ throw new Error('The browser tools need puppeteer, which is an optional install. Under npx, add it to the same call — args ["-y", "-p", "puppeteer", "-p", "@pinepaper.studio/mcp-server", "pinepaper-mcp"] — since a separate `npm i puppeteer` is not visible to npx\'s copy. Installed globally: `npm i -g puppeteer`; in a project: `npm i puppeteer`. Then retry. It is kept out of the default dependency tree for supply-chain hygiene.');
245
245
  }
246
246
  console.error('[PinePaper] Launching browser...');
247
247
  this.browser = await puppeteer.default.launch(this.launchOptions(this.config.headless, this.launchArgs(this.config.viewportWidth, this.config.viewportHeight)));
@@ -722,7 +722,7 @@ export class PinePaperBrowserController {
722
722
  puppeteer = await import('puppeteer');
723
723
  }
724
724
  catch {
725
- throw new Error('The browser tools need puppeteer, which is an optional install: run `npm i puppeteer` (or `npm i -g puppeteer` for a global CLI) and retry. It is kept out of the default dependency tree for supply-chain hygiene.');
725
+ throw new Error('The browser tools need puppeteer, which is an optional install. Under npx, add it to the same call — args ["-y", "-p", "puppeteer", "-p", "@pinepaper.studio/mcp-server", "pinepaper-mcp"] — since a separate `npm i puppeteer` is not visible to npx\'s copy. Installed globally: `npm i -g puppeteer`; in a project: `npm i puppeteer`. Then retry. It is kept out of the default dependency tree for supply-chain hygiene.');
726
726
  }
727
727
  // Agent mode defaults to visible browser so user can see PinePaper Studio
728
728
  const useHeadless = options.headless ?? this.config.headless;