@pinepaper.studio/mcp-server 1.3.1 → 1.3.3

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 (40) hide show
  1. package/dist/taxonomy/classifier.d.ts +74 -0
  2. package/dist/taxonomy/classifier.d.ts.map +1 -0
  3. package/dist/taxonomy/classifier.js +448 -0
  4. package/dist/taxonomy/classifier.js.map +1 -0
  5. package/dist/taxonomy/error-recovery.d.ts +55 -0
  6. package/dist/taxonomy/error-recovery.d.ts.map +1 -0
  7. package/dist/taxonomy/error-recovery.js +205 -0
  8. package/dist/taxonomy/error-recovery.js.map +1 -0
  9. package/dist/taxonomy/index.d.ts +24 -0
  10. package/dist/taxonomy/index.d.ts.map +1 -0
  11. package/dist/taxonomy/index.js +25 -0
  12. package/dist/taxonomy/index.js.map +1 -0
  13. package/dist/taxonomy/matcher.d.ts +104 -0
  14. package/dist/taxonomy/matcher.d.ts.map +1 -0
  15. package/dist/taxonomy/matcher.js +473 -0
  16. package/dist/taxonomy/matcher.js.map +1 -0
  17. package/dist/taxonomy/registry.d.ts +56 -0
  18. package/dist/taxonomy/registry.d.ts.map +1 -0
  19. package/dist/taxonomy/registry.js +950 -0
  20. package/dist/taxonomy/registry.js.map +1 -0
  21. package/dist/taxonomy/types.d.ts +207 -0
  22. package/dist/taxonomy/types.d.ts.map +1 -0
  23. package/dist/taxonomy/types.js +29 -0
  24. package/dist/taxonomy/types.js.map +1 -0
  25. package/dist/tools/definitions.d.ts.map +1 -1
  26. package/dist/tools/definitions.js +409 -0
  27. package/dist/tools/definitions.js.map +1 -1
  28. package/dist/tools/handlers.d.ts.map +1 -1
  29. package/dist/tools/handlers.js +10 -1
  30. package/dist/tools/handlers.js.map +1 -1
  31. package/dist/types/code-generator.d.ts +5 -1
  32. package/dist/types/code-generator.d.ts.map +1 -1
  33. package/dist/types/code-generator.js +168 -1
  34. package/dist/types/code-generator.js.map +1 -1
  35. package/dist/types/schemas.d.ts +219 -0
  36. package/dist/types/schemas.d.ts.map +1 -1
  37. package/dist/types/schemas.js +51 -0
  38. package/dist/types/schemas.js.map +1 -1
  39. package/manifest.json +6 -1
  40. package/package.json +1 -1
@@ -149,6 +149,13 @@ export const PINEPAPER_TOOLS = [
149
149
  // ---------------------------------------------------------------------------
150
150
  {
151
151
  name: 'pinepaper_create_item',
152
+ annotations: {
153
+ title: 'Create Item',
154
+ readOnlyHint: false,
155
+ destructiveHint: false,
156
+ idempotentHint: false,
157
+ openWorldHint: false,
158
+ },
152
159
  description: `Create an item on the PinePaper canvas. Returns an itemId (e.g., "item_1") that you MUST save to reference this item later.
153
160
 
154
161
  USE WHEN:
@@ -231,6 +238,13 @@ For glossy 3D spheres, use pinepaper_create_glossy_sphere instead. For diagonal
231
238
  },
232
239
  {
233
240
  name: 'pinepaper_modify_item',
241
+ annotations: {
242
+ title: 'Modify Item',
243
+ readOnlyHint: false,
244
+ destructiveHint: false,
245
+ idempotentHint: true,
246
+ openWorldHint: false,
247
+ },
234
248
  description: `Modify an existing item's properties.
235
249
 
236
250
  USE WHEN:
@@ -274,6 +288,13 @@ GRADIENT OBJECT FORMAT:
274
288
  },
275
289
  {
276
290
  name: 'pinepaper_delete_item',
291
+ annotations: {
292
+ title: 'Delete Item',
293
+ readOnlyHint: false,
294
+ destructiveHint: true,
295
+ idempotentHint: true,
296
+ openWorldHint: false,
297
+ },
277
298
  description: `Delete a single item from the canvas by its registry ID.
278
299
 
279
300
  USE WHEN:
@@ -309,6 +330,13 @@ Use pinepaper_clear_canvas instead of deleting items one by one.`,
309
330
  // ---------------------------------------------------------------------------
310
331
  {
311
332
  name: 'pinepaper_create_glossy_sphere',
333
+ annotations: {
334
+ title: 'Create Glossy Sphere',
335
+ readOnlyHint: false,
336
+ destructiveHint: false,
337
+ idempotentHint: false,
338
+ openWorldHint: false,
339
+ },
312
340
  description: `Create a 3D-looking glossy sphere with realistic lighting effects. This is a HIGH-LEVEL tool that creates a complete glossy sphere with radial gradient, specular highlights, and optional shadow - all in one operation.
313
341
 
314
342
  USE WHEN:
@@ -375,6 +403,13 @@ EXAMPLES:
375
403
  },
376
404
  {
377
405
  name: 'pinepaper_create_diagonal_stripes',
406
+ annotations: {
407
+ title: 'Create Diagonal Stripes',
408
+ readOnlyHint: false,
409
+ destructiveHint: false,
410
+ idempotentHint: false,
411
+ openWorldHint: false,
412
+ },
378
413
  description: `Create a diagonal stripe pattern. This is a HIGH-LEVEL tool that creates multiple stripes at an angle with automatic clipping to a rectangular area.
379
414
 
380
415
  USE WHEN:
@@ -437,11 +472,175 @@ EXAMPLES:
437
472
  required: ['width', 'height', 'colors'],
438
473
  },
439
474
  },
475
+ {
476
+ name: 'pinepaper_create_scene',
477
+ annotations: {
478
+ title: 'Create Scene',
479
+ readOnlyHint: false,
480
+ destructiveHint: false,
481
+ idempotentHint: false,
482
+ openWorldHint: false,
483
+ },
484
+ description: `Create a complete scene with multiple items, relations, and animations in a single operation. This is the MOST EFFICIENT way to create complex animated scenes.
485
+
486
+ USE WHEN:
487
+ - Creating a solar system, bouncing balls, or any multi-item animated scene
488
+ - User describes a scene with multiple related elements
489
+ - Performance is important (reduces 4+ tool calls to 1)
490
+ - Setting up multiple items that will interact with each other
491
+
492
+ ADVANTAGES:
493
+ - 4-8x faster than calling individual tools
494
+ - Single undo step for entire scene
495
+ - Automatic name-to-ID mapping for relations
496
+ - Cleaner, more atomic scene creation
497
+
498
+ HOW IT WORKS:
499
+ 1. Define items with "name" references (e.g., "sun", "earth", "moon")
500
+ 2. Define relations using those names (e.g., source: "earth", target: "sun")
501
+ 3. Define animations using names (e.g., target: "sun", type: "pulse")
502
+ 4. The server creates all items, then establishes relations and animations
503
+
504
+ EXAMPLE - Solar System:
505
+ {
506
+ "backgroundColor": "#0a0a0a",
507
+ "items": [
508
+ { "name": "sun", "itemType": "circle", "position": {"x": 400, "y": 300}, "properties": {"radius": 50, "color": "#fbbf24"} },
509
+ { "name": "earth", "itemType": "circle", "position": {"x": 550, "y": 300}, "properties": {"radius": 20, "color": "#3b82f6"} },
510
+ { "name": "moon", "itemType": "circle", "position": {"x": 590, "y": 300}, "properties": {"radius": 8, "color": "#9ca3af"} }
511
+ ],
512
+ "relations": [
513
+ { "source": "earth", "target": "sun", "type": "orbits", "params": {"radius": 150, "speed": 0.5} },
514
+ { "source": "moon", "target": "earth", "type": "orbits", "params": {"radius": 40, "speed": 1.5} }
515
+ ],
516
+ "animations": [
517
+ { "target": "sun", "type": "pulse", "speed": 0.3 }
518
+ ]
519
+ }
520
+
521
+ EXAMPLE - Bouncing Balls:
522
+ {
523
+ "backgroundColor": "#1e293b",
524
+ "items": [
525
+ { "name": "ball1", "itemType": "circle", "position": {"x": 200, "y": 300}, "properties": {"radius": 30, "color": "#ef4444"} },
526
+ { "name": "ball2", "itemType": "circle", "position": {"x": 400, "y": 300}, "properties": {"radius": 30, "color": "#22c55e"} },
527
+ { "name": "ball3", "itemType": "circle", "position": {"x": 600, "y": 300}, "properties": {"radius": 30, "color": "#3b82f6"} }
528
+ ],
529
+ "animations": [
530
+ { "target": "ball1", "type": "bounce", "speed": 1.0 },
531
+ { "target": "ball2", "type": "bounce", "speed": 0.8 },
532
+ { "target": "ball3", "type": "bounce", "speed": 1.2 }
533
+ ]
534
+ }
535
+
536
+ SUPPORTED ITEM TYPES: text, circle, star, rectangle, triangle, polygon, ellipse, path, line, arc
537
+ SUPPORTED RELATIONS: orbits, follows, attached_to, maintains_distance, points_at, mirrors, parallax, bounds_to
538
+ SUPPORTED ANIMATIONS: pulse, rotate, bounce, fade, wobble, slide, typewriter`,
539
+ inputSchema: {
540
+ type: 'object',
541
+ properties: {
542
+ items: {
543
+ type: 'array',
544
+ items: {
545
+ type: 'object',
546
+ properties: {
547
+ name: {
548
+ type: 'string',
549
+ description: 'Reference name for this item (used in relations/animations)',
550
+ },
551
+ itemType: {
552
+ type: 'string',
553
+ enum: ['text', 'circle', 'star', 'rectangle', 'triangle', 'polygon', 'ellipse', 'path', 'line', 'arc'],
554
+ description: 'Type of item to create',
555
+ },
556
+ position: {
557
+ type: 'object',
558
+ properties: {
559
+ x: { type: 'number' },
560
+ y: { type: 'number' },
561
+ },
562
+ description: 'Position on canvas',
563
+ },
564
+ properties: {
565
+ type: 'object',
566
+ description: 'Item-specific properties (color, radius, content, etc.)',
567
+ additionalProperties: true,
568
+ },
569
+ },
570
+ required: ['name', 'itemType'],
571
+ },
572
+ description: 'Array of items to create with reference names',
573
+ },
574
+ relations: {
575
+ type: 'array',
576
+ items: {
577
+ type: 'object',
578
+ properties: {
579
+ source: { type: 'string', description: 'Name of source item' },
580
+ target: { type: 'string', description: 'Name of target item' },
581
+ type: {
582
+ type: 'string',
583
+ enum: ['orbits', 'follows', 'attached_to', 'maintains_distance', 'points_at', 'mirrors', 'parallax', 'bounds_to'],
584
+ },
585
+ params: {
586
+ type: 'object',
587
+ description: 'Relation parameters (radius, speed, distance, etc.)',
588
+ additionalProperties: true,
589
+ },
590
+ },
591
+ required: ['source', 'target', 'type'],
592
+ },
593
+ description: 'Relations between items',
594
+ },
595
+ animations: {
596
+ type: 'array',
597
+ items: {
598
+ type: 'object',
599
+ properties: {
600
+ target: { type: 'string', description: 'Name of item to animate' },
601
+ type: {
602
+ type: 'string',
603
+ enum: ['pulse', 'rotate', 'bounce', 'fade', 'wobble', 'slide', 'typewriter'],
604
+ },
605
+ speed: { type: 'number', description: 'Animation speed (default: 1.0)' },
606
+ params: {
607
+ type: 'object',
608
+ description: 'Animation-specific parameters',
609
+ additionalProperties: true,
610
+ },
611
+ },
612
+ required: ['target', 'type'],
613
+ },
614
+ description: 'Animations to apply to items',
615
+ },
616
+ backgroundColor: {
617
+ type: 'string',
618
+ description: 'Background color for the scene (hex, rgb, or named)',
619
+ },
620
+ backgroundGenerator: {
621
+ type: 'string',
622
+ description: 'Name of generator to use for background (e.g., "drawSunburst")',
623
+ },
624
+ clearFirst: {
625
+ type: 'boolean',
626
+ description: 'Clear canvas before creating scene (default: true)',
627
+ },
628
+ },
629
+ required: ['items'],
630
+ },
631
+ },
440
632
  // ---------------------------------------------------------------------------
441
633
  // BATCH OPERATION TOOLS
442
634
  // ---------------------------------------------------------------------------
443
635
  {
444
636
  name: 'pinepaper_batch_create',
637
+ annotations: {
638
+ title: 'Batch Create Items',
639
+ readOnlyHint: false,
640
+ destructiveHint: false,
641
+ idempotentHint: false,
642
+ openWorldHint: false,
643
+ },
445
644
  description: `Create multiple items at once with a single history save. This is more efficient than creating items one by one.
446
645
 
447
646
  USE WHEN:
@@ -489,6 +688,13 @@ items: [
489
688
  },
490
689
  {
491
690
  name: 'pinepaper_batch_modify',
691
+ annotations: {
692
+ title: 'Batch Modify Items',
693
+ readOnlyHint: false,
694
+ destructiveHint: false,
695
+ idempotentHint: true,
696
+ openWorldHint: false,
697
+ },
492
698
  description: `Modify multiple items at once with a single history save. This is more efficient than modifying items one by one.
493
699
 
494
700
  USE WHEN:
@@ -535,6 +741,13 @@ modifications: [
535
741
  },
536
742
  {
537
743
  name: 'pinepaper_create_grid',
744
+ annotations: {
745
+ title: 'Create Grid',
746
+ readOnlyHint: false,
747
+ destructiveHint: false,
748
+ idempotentHint: false,
749
+ openWorldHint: false,
750
+ },
538
751
  description: `Create a grid of lines on the canvas. This is a convenience method that handles all coordinate calculations automatically.
539
752
 
540
753
  USE WHEN:
@@ -592,6 +805,13 @@ EXAMPLE:
592
805
  // ---------------------------------------------------------------------------
593
806
  {
594
807
  name: 'pinepaper_add_relation',
808
+ annotations: {
809
+ title: 'Add Relation',
810
+ readOnlyHint: false,
811
+ destructiveHint: false,
812
+ idempotentHint: true,
813
+ openWorldHint: false,
814
+ },
595
815
  description: `Create a behavior relationship between two items. Relations are the PRIMARY way to add animation in PinePaper - they describe HOW items should behave relative to each other.
596
816
 
597
817
  USE WHEN:
@@ -649,6 +869,13 @@ Relations are COMPOSITIONAL - an item can have multiple relations that work toge
649
869
  },
650
870
  {
651
871
  name: 'pinepaper_remove_relation',
872
+ annotations: {
873
+ title: 'Remove Relation',
874
+ readOnlyHint: false,
875
+ destructiveHint: true,
876
+ idempotentHint: true,
877
+ openWorldHint: false,
878
+ },
652
879
  description: `Remove a relationship between items.
653
880
 
654
881
  USE WHEN:
@@ -671,6 +898,13 @@ USE WHEN:
671
898
  },
672
899
  {
673
900
  name: 'pinepaper_query_relations',
901
+ annotations: {
902
+ title: 'Query Relations',
903
+ readOnlyHint: true,
904
+ destructiveHint: false,
905
+ idempotentHint: true,
906
+ openWorldHint: false,
907
+ },
674
908
  description: `Query relationships for an item.
675
909
 
676
910
  USE WHEN:
@@ -700,6 +934,13 @@ USE WHEN:
700
934
  // ---------------------------------------------------------------------------
701
935
  {
702
936
  name: 'pinepaper_animate',
937
+ annotations: {
938
+ title: 'Animate Item',
939
+ readOnlyHint: false,
940
+ destructiveHint: false,
941
+ idempotentHint: true,
942
+ openWorldHint: false,
943
+ },
703
944
  description: `Apply a simple LOOP animation to an item. These are continuous animations that repeat infinitely.
704
945
 
705
946
  USE WHEN:
@@ -743,6 +984,13 @@ ANIMATION TYPES:
743
984
  },
744
985
  {
745
986
  name: 'pinepaper_keyframe_animate',
987
+ annotations: {
988
+ title: 'Keyframe Animation',
989
+ readOnlyHint: false,
990
+ destructiveHint: false,
991
+ idempotentHint: true,
992
+ openWorldHint: false,
993
+ },
746
994
  description: `Apply keyframe-based animation with precise timing and property control.
747
995
 
748
996
  USE WHEN:
@@ -808,6 +1056,13 @@ EASING OPTIONS:
808
1056
  },
809
1057
  {
810
1058
  name: 'pinepaper_play_timeline',
1059
+ annotations: {
1060
+ title: 'Play Timeline',
1061
+ readOnlyHint: false,
1062
+ destructiveHint: false,
1063
+ idempotentHint: false,
1064
+ openWorldHint: false,
1065
+ },
811
1066
  description: `Control keyframe animation playback.
812
1067
 
813
1068
  USE WHEN:
@@ -843,6 +1098,13 @@ USE WHEN:
843
1098
  // ---------------------------------------------------------------------------
844
1099
  {
845
1100
  name: 'pinepaper_execute_generator',
1101
+ annotations: {
1102
+ title: 'Execute Generator',
1103
+ readOnlyHint: false,
1104
+ destructiveHint: false,
1105
+ idempotentHint: false,
1106
+ openWorldHint: false,
1107
+ },
846
1108
  description: `Execute a background generator to create procedural patterns.
847
1109
 
848
1110
  USE WHEN:
@@ -879,6 +1141,13 @@ GENERATORS:
879
1141
  },
880
1142
  {
881
1143
  name: 'pinepaper_list_generators',
1144
+ annotations: {
1145
+ title: 'List Generators',
1146
+ readOnlyHint: true,
1147
+ destructiveHint: false,
1148
+ idempotentHint: true,
1149
+ openWorldHint: false,
1150
+ },
882
1151
  description: `Get a list of all available background generators with their parameters.
883
1152
 
884
1153
  USE WHEN:
@@ -895,6 +1164,13 @@ USE WHEN:
895
1164
  // ---------------------------------------------------------------------------
896
1165
  {
897
1166
  name: 'pinepaper_apply_effect',
1167
+ annotations: {
1168
+ title: 'Apply Effect',
1169
+ readOnlyHint: false,
1170
+ destructiveHint: false,
1171
+ idempotentHint: false,
1172
+ openWorldHint: false,
1173
+ },
898
1174
  description: `Apply a visual effect to an item.
899
1175
 
900
1176
  USE WHEN:
@@ -928,6 +1204,13 @@ EFFECTS:
928
1204
  // ---------------------------------------------------------------------------
929
1205
  {
930
1206
  name: 'pinepaper_get_items',
1207
+ annotations: {
1208
+ title: 'Get Items',
1209
+ readOnlyHint: true,
1210
+ destructiveHint: false,
1211
+ idempotentHint: true,
1212
+ openWorldHint: false,
1213
+ },
931
1214
  description: `Get all or filtered items from the canvas.
932
1215
 
933
1216
  USE WHEN:
@@ -966,6 +1249,13 @@ USE WHEN:
966
1249
  },
967
1250
  {
968
1251
  name: 'pinepaper_get_relation_stats',
1252
+ annotations: {
1253
+ title: 'Get Relation Stats',
1254
+ readOnlyHint: true,
1255
+ destructiveHint: false,
1256
+ idempotentHint: true,
1257
+ openWorldHint: false,
1258
+ },
969
1259
  description: `Get statistics about active relations in the scene.
970
1260
 
971
1261
  USE WHEN:
@@ -982,6 +1272,13 @@ USE WHEN:
982
1272
  // ---------------------------------------------------------------------------
983
1273
  {
984
1274
  name: 'pinepaper_set_background_color',
1275
+ annotations: {
1276
+ title: 'Set Background Color',
1277
+ readOnlyHint: false,
1278
+ destructiveHint: false,
1279
+ idempotentHint: true,
1280
+ openWorldHint: false,
1281
+ },
985
1282
  description: `Set the canvas background color.
986
1283
 
987
1284
  USE WHEN:
@@ -1000,6 +1297,13 @@ USE WHEN:
1000
1297
  },
1001
1298
  {
1002
1299
  name: 'pinepaper_set_canvas_size',
1300
+ annotations: {
1301
+ title: 'Set Canvas Size',
1302
+ readOnlyHint: false,
1303
+ destructiveHint: false,
1304
+ idempotentHint: true,
1305
+ openWorldHint: false,
1306
+ },
1003
1307
  description: `Change the canvas dimensions.
1004
1308
 
1005
1309
  IMPORTANT: Call this BEFORE creating items if you need a specific canvas size. The default canvas is 800x600 which may be too small for complex designs.
@@ -1034,6 +1338,13 @@ For wedding invitations, event cards, or detailed designs, use at least 1080x108
1034
1338
  },
1035
1339
  {
1036
1340
  name: 'pinepaper_get_canvas_size',
1341
+ annotations: {
1342
+ title: 'Get Canvas Size',
1343
+ readOnlyHint: true,
1344
+ destructiveHint: false,
1345
+ idempotentHint: true,
1346
+ openWorldHint: false,
1347
+ },
1037
1348
  description: `Get the current canvas dimensions.
1038
1349
 
1039
1350
  USE WHEN:
@@ -1047,6 +1358,13 @@ USE WHEN:
1047
1358
  },
1048
1359
  {
1049
1360
  name: 'pinepaper_clear_canvas',
1361
+ annotations: {
1362
+ title: 'Clear Canvas',
1363
+ readOnlyHint: false,
1364
+ destructiveHint: true,
1365
+ idempotentHint: true,
1366
+ openWorldHint: false,
1367
+ },
1050
1368
  description: `Clear all items from the canvas, removing everything including any welcome template items.
1051
1369
 
1052
1370
  USE WHEN:
@@ -1067,6 +1385,13 @@ IMPORTANT NOTES:
1067
1385
  },
1068
1386
  {
1069
1387
  name: 'pinepaper_refresh_page',
1388
+ annotations: {
1389
+ title: 'Refresh Page',
1390
+ readOnlyHint: false,
1391
+ destructiveHint: true,
1392
+ idempotentHint: true,
1393
+ openWorldHint: true,
1394
+ },
1070
1395
  description: `Refresh the PinePaper Studio page in the browser. This is the most reliable way to get a completely clean canvas.
1071
1396
 
1072
1397
  USE WHEN:
@@ -1092,6 +1417,13 @@ IMPORTANT NOTES:
1092
1417
  // ---------------------------------------------------------------------------
1093
1418
  {
1094
1419
  name: 'pinepaper_import_svg',
1420
+ annotations: {
1421
+ title: 'Import SVG',
1422
+ readOnlyHint: false,
1423
+ destructiveHint: false,
1424
+ idempotentHint: false,
1425
+ openWorldHint: true,
1426
+ },
1095
1427
  description: `Import an SVG string or SVG from URL onto the canvas. Returns an itemId for the imported graphic.
1096
1428
 
1097
1429
  USE WHEN:
@@ -1145,6 +1477,13 @@ Returns the itemId of the imported SVG group, which can be used with pinepaper_a
1145
1477
  // ---------------------------------------------------------------------------
1146
1478
  {
1147
1479
  name: 'pinepaper_add_filter',
1480
+ annotations: {
1481
+ title: 'Add Filter',
1482
+ readOnlyHint: false,
1483
+ destructiveHint: false,
1484
+ idempotentHint: false,
1485
+ openWorldHint: false,
1486
+ },
1148
1487
  description: `Add a visual filter effect to the canvas. Filters are scene-wide effects that can be stacked.
1149
1488
 
1150
1489
  USE WHEN:
@@ -1197,6 +1536,13 @@ Filters can be stacked - call multiple times to combine effects.`,
1197
1536
  // ---------------------------------------------------------------------------
1198
1537
  {
1199
1538
  name: 'pinepaper_export_svg',
1539
+ annotations: {
1540
+ title: 'Export SVG',
1541
+ readOnlyHint: true,
1542
+ destructiveHint: false,
1543
+ idempotentHint: true,
1544
+ openWorldHint: false,
1545
+ },
1200
1546
  description: `Export the scene as animated SVG.
1201
1547
 
1202
1548
  USE WHEN:
@@ -1215,6 +1561,13 @@ USE WHEN:
1215
1561
  },
1216
1562
  {
1217
1563
  name: 'pinepaper_export_training_data',
1564
+ annotations: {
1565
+ title: 'Export Training Data',
1566
+ readOnlyHint: true,
1567
+ destructiveHint: false,
1568
+ idempotentHint: true,
1569
+ openWorldHint: false,
1570
+ },
1218
1571
  description: `Export relation data as training pairs for LLM fine-tuning. This generates instruction/code pairs from the current scene's relations.
1219
1572
 
1220
1573
  USE WHEN:
@@ -1245,6 +1598,13 @@ OUTPUT FORMAT:
1245
1598
  // ---------------------------------------------------------------------------
1246
1599
  {
1247
1600
  name: 'pinepaper_browser_connect',
1601
+ annotations: {
1602
+ title: 'Connect to Browser',
1603
+ readOnlyHint: false,
1604
+ destructiveHint: false,
1605
+ idempotentHint: true,
1606
+ openWorldHint: true,
1607
+ },
1248
1608
  description: `Connect to PinePaper Studio Editor in a browser. This launches a browser window and navigates to the PinePaper Editor.
1249
1609
 
1250
1610
  USE WHEN:
@@ -1271,6 +1631,13 @@ The browser will open and navigate to https://pinepaper.studio/editor where the
1271
1631
  },
1272
1632
  {
1273
1633
  name: 'pinepaper_browser_disconnect',
1634
+ annotations: {
1635
+ title: 'Disconnect from Browser',
1636
+ readOnlyHint: false,
1637
+ destructiveHint: true,
1638
+ idempotentHint: true,
1639
+ openWorldHint: true,
1640
+ },
1274
1641
  description: `Disconnect from the browser and close PinePaper Studio.
1275
1642
 
1276
1643
  USE WHEN:
@@ -1284,6 +1651,13 @@ USE WHEN:
1284
1651
  },
1285
1652
  {
1286
1653
  name: 'pinepaper_browser_screenshot',
1654
+ annotations: {
1655
+ title: 'Take Screenshot',
1656
+ readOnlyHint: true,
1657
+ destructiveHint: false,
1658
+ idempotentHint: true,
1659
+ openWorldHint: true,
1660
+ },
1287
1661
  description: `Take a screenshot of the current PinePaper canvas.
1288
1662
 
1289
1663
  USE WHEN:
@@ -1308,6 +1682,13 @@ Returns a base64-encoded PNG image of the canvas.`,
1308
1682
  },
1309
1683
  {
1310
1684
  name: 'pinepaper_browser_status',
1685
+ annotations: {
1686
+ title: 'Browser Status',
1687
+ readOnlyHint: true,
1688
+ destructiveHint: false,
1689
+ idempotentHint: true,
1690
+ openWorldHint: true,
1691
+ },
1311
1692
  description: `Check the current browser connection status.
1312
1693
 
1313
1694
  USE WHEN:
@@ -1324,6 +1705,13 @@ USE WHEN:
1324
1705
  // ---------------------------------------------------------------------------
1325
1706
  {
1326
1707
  name: 'pinepaper_get_performance_metrics',
1708
+ annotations: {
1709
+ title: 'Get Performance Metrics',
1710
+ readOnlyHint: true,
1711
+ destructiveHint: false,
1712
+ idempotentHint: true,
1713
+ openWorldHint: false,
1714
+ },
1327
1715
  description: `Get execution performance metrics to identify bottlenecks and optimize workflows.
1328
1716
 
1329
1717
  USE WHEN:
@@ -1415,6 +1803,13 @@ If you see significantly higher numbers, investigate:
1415
1803
  // ---------------------------------------------------------------------------
1416
1804
  {
1417
1805
  name: 'pinepaper_search_assets',
1806
+ annotations: {
1807
+ title: 'Search Assets',
1808
+ readOnlyHint: true,
1809
+ destructiveHint: false,
1810
+ idempotentHint: true,
1811
+ openWorldHint: true,
1812
+ },
1418
1813
  description: `Search for free SVG assets from open repositories (SVGRepo, OpenClipart, Iconify, FontAwesome).
1419
1814
 
1420
1815
  USE WHEN:
@@ -1475,6 +1870,13 @@ PERFORMANCE:
1475
1870
  },
1476
1871
  {
1477
1872
  name: 'pinepaper_import_asset',
1873
+ annotations: {
1874
+ title: 'Import Asset',
1875
+ readOnlyHint: false,
1876
+ destructiveHint: false,
1877
+ idempotentHint: false,
1878
+ openWorldHint: true,
1879
+ },
1478
1880
  description: `Import an SVG asset from search results or direct URL onto the canvas.
1479
1881
 
1480
1882
  USE WHEN:
@@ -1551,6 +1953,13 @@ RETURNS:
1551
1953
  // ---------------------------------------------------------------------------
1552
1954
  {
1553
1955
  name: 'pinepaper_p5_draw',
1956
+ annotations: {
1957
+ title: 'p5.js Draw',
1958
+ readOnlyHint: false,
1959
+ destructiveHint: false,
1960
+ idempotentHint: false,
1961
+ openWorldHint: false,
1962
+ },
1554
1963
  description: `Execute p5.js-style drawing code on the PinePaper canvas.
1555
1964
 
1556
1965
  Claude can use familiar p5.js syntax - the code is translated to Paper.js automatically.