@pinepaper.studio/mcp-server 1.6.20 → 1.6.22

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 (105) hide show
  1. package/README.de.md +1 -1
  2. package/README.es.md +1 -1
  3. package/README.fr.md +1 -1
  4. package/README.hi.md +1 -1
  5. package/README.ja.md +1 -1
  6. package/README.ko.md +1 -1
  7. package/README.md +96 -5
  8. package/README.pt-BR.md +1 -1
  9. package/README.zh-CN.md +1 -1
  10. package/dist/build-info.json +3 -3
  11. package/dist/ontology/upstream-vocabulary.d.ts +2 -2
  12. package/dist/ontology/upstream-vocabulary.js +3 -3
  13. package/dist/ontology/upstream-vocabulary.js.map +1 -1
  14. package/dist/ontology/vocabulary.js +1 -1
  15. package/dist/ontology/vocabulary.js.map +1 -1
  16. package/dist/tools/choreograph.d.ts.map +1 -1
  17. package/dist/tools/choreograph.js +10 -0
  18. package/dist/tools/choreograph.js.map +1 -1
  19. package/dist/tools/craft-tools.d.ts +55 -0
  20. package/dist/tools/craft-tools.d.ts.map +1 -0
  21. package/dist/tools/craft-tools.js +139 -0
  22. package/dist/tools/craft-tools.js.map +1 -0
  23. package/dist/tools/definitions.d.ts.map +1 -1
  24. package/dist/tools/definitions.js +117 -7
  25. package/dist/tools/definitions.js.map +1 -1
  26. package/dist/tools/effect-class.d.ts.map +1 -1
  27. package/dist/tools/effect-class.js +6 -0
  28. package/dist/tools/effect-class.js.map +1 -1
  29. package/dist/tools/engine-lists.d.ts +2 -2
  30. package/dist/tools/engine-lists.js +2 -2
  31. package/dist/tools/engine-methods.d.ts.map +1 -1
  32. package/dist/tools/engine-methods.js +4 -0
  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 +55 -7
  37. package/dist/tools/engine-surface.js.map +1 -1
  38. package/dist/tools/handlers/brand-intake.d.ts.map +1 -1
  39. package/dist/tools/handlers/brand-intake.js +42 -1
  40. package/dist/tools/handlers/brand-intake.js.map +1 -1
  41. package/dist/tools/handlers/generate.d.ts +28 -28
  42. package/dist/tools/handlers.d.ts.map +1 -1
  43. package/dist/tools/handlers.js +161 -10
  44. package/dist/tools/handlers.js.map +1 -1
  45. package/dist/tools/minimal-descriptions.d.ts.map +1 -1
  46. package/dist/tools/minimal-descriptions.js +7 -0
  47. package/dist/tools/minimal-descriptions.js.map +1 -1
  48. package/dist/tools/shape-params.d.ts +2 -2
  49. package/dist/tools/shape-params.d.ts.map +1 -1
  50. package/dist/tools/shape-params.js +9 -2
  51. package/dist/tools/shape-params.js.map +1 -1
  52. package/dist/tools/stick-vocabulary.d.ts +1 -1
  53. package/dist/tools/stick-vocabulary.js +1 -1
  54. package/dist/tools/toolkits.d.ts.map +1 -1
  55. package/dist/tools/toolkits.js +9 -0
  56. package/dist/tools/toolkits.js.map +1 -1
  57. package/dist/types/code-generator.d.ts +10 -1
  58. package/dist/types/code-generator.d.ts.map +1 -1
  59. package/dist/types/code-generator.js +605 -107
  60. package/dist/types/code-generator.js.map +1 -1
  61. package/dist/types/schemas.d.ts +1745 -582
  62. package/dist/types/schemas.d.ts.map +1 -1
  63. package/dist/types/schemas.js +144 -4
  64. package/dist/types/schemas.js.map +1 -1
  65. package/dist/utils/asset-paths.d.ts +11 -0
  66. package/dist/utils/asset-paths.d.ts.map +1 -0
  67. package/dist/utils/asset-paths.js +67 -0
  68. package/dist/utils/asset-paths.js.map +1 -0
  69. package/dist/utils/safe-fetch.d.ts +28 -0
  70. package/dist/utils/safe-fetch.d.ts.map +1 -0
  71. package/dist/utils/safe-fetch.js +221 -0
  72. package/dist/utils/safe-fetch.js.map +1 -0
  73. package/dist/vendor/design/bauhaus-generator.d.ts.map +1 -1
  74. package/dist/vendor/design/bauhaus-generator.js +20 -5
  75. package/dist/vendor/design/bauhaus-generator.js.map +1 -1
  76. package/dist/vendor/design/design-style.d.ts +2 -2
  77. package/dist/vendor/design/design-style.d.ts.map +1 -1
  78. package/dist/vendor/design/design-style.js +7 -2
  79. package/dist/vendor/design/design-style.js.map +1 -1
  80. package/dist/vendor/design/subdivision-tool-schema.d.ts +16 -0
  81. package/dist/vendor/design/subdivision-tool-schema.d.ts.map +1 -0
  82. package/dist/vendor/design/subdivision-tool-schema.js +104 -0
  83. package/dist/vendor/design/subdivision-tool-schema.js.map +1 -0
  84. package/dist/vendor/design/textile-tool-schema.d.ts +14 -0
  85. package/dist/vendor/design/textile-tool-schema.d.ts.map +1 -0
  86. package/dist/vendor/design/textile-tool-schema.js +195 -0
  87. package/dist/vendor/design/textile-tool-schema.js.map +1 -0
  88. package/dist/vendor/design/ui-kit-runtime.d.ts +49 -0
  89. package/dist/vendor/design/ui-kit-runtime.d.ts.map +1 -0
  90. package/dist/vendor/design/ui-kit-runtime.js +761 -0
  91. package/dist/vendor/design/ui-kit-runtime.js.map +1 -0
  92. package/dist/vendor/design/ui-kit-tool-schema.d.ts +280 -0
  93. package/dist/vendor/design/ui-kit-tool-schema.d.ts.map +1 -0
  94. package/dist/vendor/design/ui-kit-tool-schema.js +209 -0
  95. package/dist/vendor/design/ui-kit-tool-schema.js.map +1 -0
  96. package/manifest.json +29 -1
  97. package/package.json +7 -4
  98. package/dist/assets/repositories/openclipart.d.ts +0 -41
  99. package/dist/assets/repositories/openclipart.d.ts.map +0 -1
  100. package/dist/assets/repositories/openclipart.js +0 -139
  101. package/dist/assets/repositories/openclipart.js.map +0 -1
  102. package/dist/assets/repositories/svgrepo.d.ts +0 -61
  103. package/dist/assets/repositories/svgrepo.d.ts.map +0 -1
  104. package/dist/assets/repositories/svgrepo.js +0 -276
  105. package/dist/assets/repositories/svgrepo.js.map +0 -1
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import { COMPACT_DESCRIPTIONS } from './compact-descriptions.js';
11
11
  import { MINIMAL_DESCRIPTIONS } from './minimal-descriptions.js';
12
+ import { craftToolDefinitions } from './craft-tools.js';
12
13
  import { STICK_GAITS, STICK_POSES, STICK_SEQUENCES, STICK_EXPRESSIONS, STICK_PROPS } from './stick-vocabulary.js';
13
14
  import { AgentBatchOperationTypeSchema, GeneratorNameSchema, ItemTypeSchema } from '../types/schemas.js';
14
15
  import { DESIGN_MEDIA, DESIGN_MEDIA_APPLY, FILTER_TYPES, FILTER_DOCS, LINEAGE_KINDS, STYLED_SCENE_STYLES, STYLED_SCENE_STYLE_INFO } from './engine-lists.js';
@@ -143,7 +144,7 @@ Shapes: circle, rectangle, star, ellipse, triangle, polygon, line, arc, path, pe
143
144
  Surfaces (render-time, evaluated per pixel — not shapes): shader, field
144
145
  shader: a lit surface — water, liquid_metal, heatmap, gem_smoke. Set behind:true to put it UNDER the art, which is what scenery wants.
145
146
  field: one expression, many marks — xExpr/yExpr/count, re-evaluated every frame against t.
146
- Both draw fully in a cloud render; locally they stand in as a flat plate.
147
+ Both draw in the studio (live, stills, every export) and in a cloud render.
147
148
  Text: text (content, fontSize, fontFamily, color, fontWeight)
148
149
  Dynamic text: set contentType on text items → clock (live time), timer (elapsed), countdown (from N seconds), stopwatch (pauseable)
149
150
  All items: opacity, shadowColor, shadowBlur, blendMode, strokeColor, strokeWidth
@@ -600,7 +601,7 @@ For glossy 3D spheres, use pinepaper_create_glossy_sphere instead. For diagonal
600
601
  itemType: {
601
602
  type: 'string',
602
603
  enum: ['text', 'circle', 'star', 'rectangle', 'triangle', 'polygon', 'ellipse', 'path', 'line', 'arc', 'pentagon', 'hexagon', 'diamond', 'arrow', 'heart', 'disk', 'circle-outline', 'arrow-right', 'speech-bubble', 'speech-bubble-square', 'speech-bubble-pointed', 'thought-bubble', 'double-bubble', 'quote-bubble', 'comment-box', 'callout-box', 'shader', 'field'],
603
- description: "Type of item to create. 'shader' and 'field' are RENDER-TIME SURFACES drawn per pixel by the cloud renderer — locally they stand in as a flat plate. See the shader/field properties below.",
604
+ description: "Type of item to create. 'shader' and 'field' are RENDER-TIME SURFACES drawn per pixel, in the studio and in a cloud render. See the shader/field properties below.",
604
605
  },
605
606
  position: {
606
607
  oneOf: [
@@ -627,14 +628,15 @@ For glossy 3D spheres, use pinepaper_create_glossy_sphere instead. For diagonal
627
628
 
628
629
  LIFETIME — on ANY item, and the only way to build a piece that CUTS between shots:
629
630
  - bornAt: seconds. The item does not exist before this instant.
630
- - ttl: seconds it lives for. Omit for "until the end".
631
+ - ttl: seconds it lives for. Omit for "until the end". A numeric lifetime is
632
+ read as ttl, except on an emitter, where lifetime is each particle's life.
631
633
  Without these every item is on screen for the whole render, which is what makes
632
634
  a long piece read as one crowded frame instead of a sequence of shots.
633
635
  They set the item's VISIBILITY for [bornAt, bornAt + ttl) — not its opacity —
634
636
  so they compose with any keyframes, opacity fades included. Re-timing with
635
637
  pinepaper_modify_item {bornAt, ttl} replaces the previous lifetime — pass both.
636
- The result's lifetime field says whether it was applied; it is runtime-only
637
- until the studio reads bornAt / ttl itself, so re-time a reopened scene.
638
+ The result's lifetime field says whether it was applied, and persists: true
639
+ when it is saved with the scene; without that, re-time a reopened scene.
638
640
 
639
641
  SHADER (itemType 'shader') — a lit surface, drawn per pixel:
640
642
  - shader: 'water' (open sea, lit swell) | 'liquid_metal' (chrome) | 'heatmap' (thermal halo) | 'gem_smoke' (smoke) | 'electric_arc' (branching discharge, stepped flicker) | 'vortex' (hollow bright RING, sheared by differential rotation) | 'rain_veil' | 'caustics' | 'ink_bleed'
@@ -5927,6 +5929,109 @@ PHASES: sin, blink, linear, pingpong, once, elastic, heartbeat, stepped`,
5927
5929
  required: ['action'],
5928
5930
  },
5929
5931
  },
5932
+ {
5933
+ name: 'pinepaper_hand_drawn',
5934
+ annotations: {
5935
+ title: 'Hand-Drawn Line',
5936
+ readOnlyHint: false,
5937
+ destructiveHint: false,
5938
+ idempotentHint: false,
5939
+ openWorldHint: false,
5940
+ },
5941
+ description: `Give a path a hand-drawn look: a rough, bowed outline (sketchy), or a stroke that draws itself on (reveal).
5942
+
5943
+ USE WHEN:
5944
+ - "give it a hand-drawn / sketchy / rough outline"
5945
+ - "draw the line on like ink" (reveal)
5946
+
5947
+ STYLES:
5948
+ - 'sketchy' (default): one-time seeded jitter of the path's points and curve handles. Saved with the scene; exports as drawn.
5949
+ - 'reveal' (alias 'ink_reveal'): keyframes the item's stroke trimEnd 0 -> 1 over duration seconds, merged with any keyframes it already has. Needs itemId.
5950
+ - 'wobble', 'stop_motion': refused, nothing changed. A line that boils frame to frame in exports is pinepaper_design_medium medium 'ink'; the refusal returns that call, with fps as the boil rate.
5951
+
5952
+ PARAMETERS:
5953
+ - itemId: target item registry id (sketchy falls back to the selection)
5954
+ - style / mode: 'sketchy' | 'reveal' | 'ink_reveal' | 'wobble' | 'stop_motion'
5955
+ - roughness: point jitter in px (default 2)
5956
+ - bowing: curve handle jitter factor (default 1)
5957
+ - seed: same seed, same jitter (default 1)
5958
+ - duration: reveal seconds (default 2)
5959
+ - fps / posterizeFps: boil rate passed on in the wobble/stop_motion refusal (default 12)`,
5960
+ inputSchema: {
5961
+ type: 'object',
5962
+ properties: {
5963
+ itemId: { type: 'string', description: 'Target item registry ID (or current selection if omitted)' },
5964
+ style: {
5965
+ type: 'string',
5966
+ enum: ['sketchy', 'reveal', 'ink_reveal', 'wobble', 'stop_motion'],
5967
+ description: "Hand-drawn style (default: sketchy). wobble and stop_motion are refused with the pinepaper_design_medium call that does it",
5968
+ },
5969
+ mode: {
5970
+ type: 'string',
5971
+ enum: ['sketchy', 'reveal', 'ink_reveal', 'wobble', 'stop_motion'],
5972
+ description: 'Alias for style',
5973
+ },
5974
+ roughness: { type: 'number', description: 'Noise magnitude in pixels (default: 2)' },
5975
+ bowing: { type: 'number', description: 'Line bowing curve handle factor (default: 1)' },
5976
+ fps: { type: 'number', description: 'wobble/stop_motion: the boil rate handed to pinepaper_design_medium (default: 12)' },
5977
+ posterizeFps: { type: 'number', description: 'Alias for fps' },
5978
+ seed: { type: 'number', description: 'Random seed for deterministic vertex displacement (default: 1)' },
5979
+ duration: { type: 'number', description: 'reveal: seconds to draw the stroke on (default: 2)' },
5980
+ },
5981
+ },
5982
+ },
5983
+ {
5984
+ name: 'pinepaper_pen_figure',
5985
+ annotations: {
5986
+ title: 'Pen Figure',
5987
+ readOnlyHint: false,
5988
+ destructiveHint: false,
5989
+ idempotentHint: false,
5990
+ openWorldHint: false,
5991
+ },
5992
+ description: `Draw a mathematical figure with a pen: the tip travels the figure and the ink appears behind it, in the editor and in every export.
5993
+
5994
+ USE WHEN:
5995
+ - "draw a Lorenz attractor / Lissajous / Hilbert curve being drawn"
5996
+ - "a pen plotting a curve", "a harmonograph drawing itself"
5997
+
5998
+ The figures are the studio's catalogue of declarative maths (parametric and polar curves, ODE attractors, iterated maps, L-systems). action 'list' returns it: id, title, kind. A figure is fitted into its box by one uniform scale, so it is the same figure on any canvas size.
5999
+
6000
+ ACTIONS:
6001
+ - create (default): { figure, box?, margin?, duration?, delay?, loop?, pen?, strokeColor?, penColor?, strokeWidth? } → { inkId, penId, title, strokes }. The ink is a group, one child per pen stroke; the pen is a circle joined to it by the draws_figure relation. pen: false draws the ink complete, with no pen and no animation. An unknown figure is refused with the catalogue's ids.
6002
+ - list: the catalogue.
6003
+
6004
+ To draw a static curve from your own equation, use pinepaper_equation_path.
6005
+
6006
+ EXAMPLES:
6007
+ - { figure: 'lorenz', duration: 8 }
6008
+ - { figure: 'hilbert', box: { x: 100, y: 100, width: 600, height: 600 }, strokeColor: '#0f766e' }
6009
+ - { figure: 'harmonograph', pen: false }`,
6010
+ inputSchema: {
6011
+ type: 'object',
6012
+ properties: {
6013
+ action: { type: 'string', enum: ['create', 'list'], description: "'create' (default) draws a figure; 'list' returns the catalogue." },
6014
+ figure: {
6015
+ anyOf: [{ type: 'string' }, { type: 'object' }],
6016
+ description: "create: a catalogue id from action 'list' (e.g. 'lorenz', 'lissajous', 'hilbert', 'harmonograph'), or an inline figure spec object.",
6017
+ },
6018
+ box: {
6019
+ type: 'object',
6020
+ properties: { x: { type: 'number' }, y: { type: 'number' }, width: { type: 'number' }, height: { type: 'number' } },
6021
+ required: ['x', 'y', 'width', 'height'],
6022
+ description: 'Where to draw, in canvas px (default: the whole canvas).',
6023
+ },
6024
+ margin: { type: 'number', description: 'Fraction of the box left clear (default 0.06).' },
6025
+ duration: { type: 'number', description: 'Seconds the pen takes for the whole figure, pen-up travel included (default 6).' },
6026
+ delay: { type: 'number', description: 'Seconds before the pen starts (default 0).' },
6027
+ loop: { type: 'boolean', description: 'Draw the figure again after it finishes (default false: it stays drawn).' },
6028
+ pen: { type: 'boolean', description: 'false: the ink only, fully drawn, no animation (default true).' },
6029
+ strokeColor: { type: 'string', description: "Ink colour (default '#1e293b')." },
6030
+ penColor: { type: 'string', description: "Pen tip colour (default '#e11d48')." },
6031
+ strokeWidth: { type: 'number', description: 'Ink width in px (default 2).' },
6032
+ },
6033
+ },
6034
+ },
5930
6035
  {
5931
6036
  name: 'pinepaper_sprite_sheet',
5932
6037
  annotations: {
@@ -8557,7 +8662,7 @@ ITEMS:
8557
8662
  ANIMATION:
8558
8663
  animate — Loop animation: {itemId, animationType, animationOptions}
8559
8664
  animationType: ${SIMPLE_ANIMATION_TYPES_LIST}
8560
- keyframe_animate — Timed animation: {itemId, keyframes: [{time, properties, easing}], duration, loop}
8665
+ keyframe_animate — Timed animation: {itemId, keyframes: [{time, properties, easing}], duration, loop, append}. Replaces the item's track unless append: true; two ops on one item in a batch are merged into one.
8561
8666
  Animatable properties: opacity, scale, scaleX, scaleY, x, y, rotation, fillColor, strokeColor, strokeWidth, width, height, radius, fontSize, trimStart/trimEnd/trimOffset (path draw-on)
8562
8667
  Easing (on the keyframe being moved TO): ${KEYFRAME_EASINGS_LIST}
8563
8668
  relation — Behavioral link: {sourceId, targetId, relationType, relationOptions}
@@ -8613,6 +8718,7 @@ EXAMPLE — Animated sky scene with timed reveals:
8613
8718
  height: { type: 'number', description: 'Canvas height for set_canvas_size (100-16384)' },
8614
8719
  preset: { type: 'string', description: 'Canvas preset for set_canvas_size' },
8615
8720
  backgroundColor: { type: 'string', description: 'For set_background: hex color' },
8721
+ color: { type: 'string', description: 'For set_background: same as backgroundColor. For create: same as fillColor.' },
8616
8722
  generatorName: {
8617
8723
  type: 'string',
8618
8724
  enum: [...GeneratorNameSchema.options],
@@ -8659,6 +8765,7 @@ EXAMPLE — Animated sky scene with timed reveals:
8659
8765
  },
8660
8766
  duration: { type: 'number', description: 'Duration in seconds for keyframe_animate or play_timeline' },
8661
8767
  loop: { type: 'boolean', description: 'Loop for keyframe_animate or play_timeline' },
8768
+ append: { type: 'boolean', description: "For keyframe_animate: add these keys to the item's existing track instead of replacing it (a key at the same time merges, the new values win). Without it the op replaces the track; the op's result says which happened." },
8662
8769
  // Relations
8663
8770
  sourceId: { type: 'string', description: 'For relation: source item ID or $N' },
8664
8771
  targetId: { type: 'string', description: 'For relation: target item ID or $N' },
@@ -9662,8 +9769,11 @@ ACTIONS:
9662
9769
  },
9663
9770
  },
9664
9771
  // ---------------------------------------------------------------------------
9665
- // STITCHCRAFT PROCEDURAL EMBROIDERY & THREAD
9772
+ // STITCHCRAFT PROCEDURAL EMBROIDERY & THREAD, SUBDIVISION, UI KIT
9773
+ // The cloud's craft tools, shared: schemas vendored from mcp-cloud, local
9774
+ // words and behaviour in craft-tools.ts.
9666
9775
  // ---------------------------------------------------------------------------
9776
+ ...craftToolDefinitions(),
9667
9777
  ];
9668
9778
  /**
9669
9779
  * Get a tool definition by name