Skip to main content
Glama
en.tsβ€’12.5 kB
/** * English Translations (Default) */ import { TranslationKeys } from '../types.js'; export const en: TranslationKeys = { tools: { pinepaper_create_item: { name: 'Create Item', description: `Create an item on the PinePaper canvas. USE WHEN: - User wants to add text, shapes, or graphics to the canvas - Creating new visual elements (circles, stars, rectangles, etc.) - Starting a new scene or composition ITEM TYPES: - text: Text content with font styling - circle: Circular shape with radius - star: Star shape with inner/outer radius - rectangle: Rectangle with width/height - triangle: Triangular shape - polygon: Regular polygon with N sides - ellipse: Oval shape - path: Custom path with segments or SVG data - line: Line between two points - arc: Curved arc through three points EXAMPLES: - "Create red text saying HELLO" β†’ type: text, content: "HELLO", color: "#ef4444" - "Add a blue circle" β†’ type: circle, radius: 50, color: "#3b82f6" - "Create a 5-pointed gold star" β†’ type: star, radius1: 60, radius2: 30, color: "#fbbf24"`, params: { itemType: 'Type of item to create', position: 'Position on canvas', properties: 'Type-specific properties (content, radius, color, fontSize, etc.)', }, }, pinepaper_modify_item: { name: 'Modify Item', description: `Modify an existing item's properties. USE WHEN: - Changing color, size, position of an existing item - Updating text content - Adjusting styling properties MODIFIABLE PROPERTIES: - position: {x, y} or separate x, y - color/fillColor: Fill color - strokeColor: Outline color - strokeWidth: Outline thickness - fontSize: Text size - content: Text content - opacity: Transparency (0-1) - rotation: Rotation in degrees - scale: Size multiplier`, params: { itemId: 'Registry ID of the item (e.g., "item_1")', properties: 'Properties to update', }, }, pinepaper_delete_item: { name: 'Delete Item', description: `Delete an item from the canvas. USE WHEN: - Removing unwanted items - Clearing specific elements - Cleaning up the scene`, params: { itemId: 'Registry ID of the item to delete', }, }, pinepaper_add_relation: { name: 'Add Relation', 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. USE WHEN: - "moon orbits earth" β†’ relationType: orbits - "label follows player" β†’ relationType: follows - "hat attached to character" β†’ relationType: attached_to - "keep satellite 200px from station" β†’ relationType: maintains_distance - "arrow points at target" β†’ relationType: points_at - "reflection mirrors original" β†’ relationType: mirrors - "background moves with parallax" β†’ relationType: parallax - "player stays in arena" β†’ relationType: bounds_to RELATION TYPES: - orbits: Circular motion around target (params: radius, speed, direction) - follows: Move toward target with smoothing (params: offset, smoothing, delay) - attached_to: Fixed offset from target (params: offset, inherit_rotation) - maintains_distance: Stay fixed distance from target (params: distance, strength) - points_at: Rotate to face target (params: offset_angle, smoothing) - mirrors: Mirror position across axis (params: axis, center) - parallax: Move relative by depth (params: depth, origin) - bounds_to: Stay within bounds (params: padding, bounce) Relations are COMPOSITIONAL - an item can have multiple relations that work together!`, params: { sourceId: 'Registry ID of the source item (the item that will be affected)', targetId: 'Registry ID of the target item (the item being related to)', relationType: 'Type of relationship', params: 'Relation-specific parameters', }, }, pinepaper_remove_relation: { name: 'Remove Relation', description: `Remove a relationship between items. USE WHEN: - Stopping an orbital animation - Detaching items from each other - Removing behavioral connections`, params: { sourceId: 'Source item ID', targetId: 'Target item ID', relationType: 'Specific relation type to remove (optional - removes all if not specified)', }, }, pinepaper_query_relations: { name: 'Query Relations', description: `Query relationships for an item. USE WHEN: - Finding what items orbit a central object - Checking existing relations before adding new ones - Debugging animation behaviors`, params: { itemId: 'Item to query relations for', relationType: 'Filter by relation type (optional)', direction: 'outgoing = relations FROM item, incoming = relations TO item', }, }, pinepaper_animate: { name: 'Animate', description: `Apply a simple LOOP animation to an item. These are continuous animations that repeat infinitely. USE WHEN: - "make it pulse" β†’ animationType: pulse - "rotating logo" β†’ animationType: rotate - "bouncing text" β†’ animationType: bounce - "fading effect" β†’ animationType: fade - "wobbling button" β†’ animationType: wobble - "sliding header" β†’ animationType: slide - "typewriter effect" β†’ animationType: typewriter (text only) DO NOT USE WHEN: - User specifies exact timing ("fade in over 3 seconds") β†’ Use keyframe animation - User wants sequential animations ("first fade, then rotate") β†’ Use keyframe animation - User describes relationships ("orbit around") β†’ Use relations`, params: { itemId: 'Registry ID of the item', animationType: 'Type of animation', speed: 'Animation speed multiplier (default: 1.0)', }, }, pinepaper_keyframe_animate: { name: 'Keyframe Animation', description: `Apply keyframe-based animation with precise timing and property control. USE WHEN: - "fade in over 3 seconds" - "move from left to right in 2 seconds" - "change color from red to blue" - "first fade in, then rotate, then fade out" - Any animation with specific timing or sequential stages`, params: { itemId: 'Registry ID of the item', keyframes: 'Array of keyframes with time, properties, and easing', duration: 'Total animation duration in seconds', loop: 'Whether to loop the animation', }, }, pinepaper_play_timeline: { name: 'Play Timeline', description: `Control keyframe animation playback. USE WHEN: - Starting/stopping timeline playback - Seeking to specific time - Controlling animation state`, params: { action: 'Playback action (play, stop, seek)', duration: 'Duration for play action', loop: 'Whether to loop', time: 'Time to seek to (for seek action)', }, }, pinepaper_execute_generator: { name: 'Execute Generator', description: `Execute a background generator to create procedural patterns. USE WHEN: - "add a sunburst background" - "create wave pattern" - "grid background" - "circuit board pattern" - Creating dynamic procedural backgrounds`, params: { generatorName: 'Generator name', params: 'Generator-specific parameters', }, }, pinepaper_list_generators: { name: 'List Generators', description: `Get a list of all available background generators with their parameters. USE WHEN: - User asks "what backgrounds are available?" - Need to show generator options - Discovering generator capabilities`, }, pinepaper_apply_effect: { name: 'Apply Effect', description: `Apply a visual effect to an item. USE WHEN: - Adding sparkle/glitter effects - Creating burst/explosion effects - Enhancing visual impact`, params: { itemId: 'Registry ID of the item', effectType: 'Type of effect (sparkle, blast)', params: 'Effect parameters', }, }, pinepaper_get_items: { name: 'Get Items', description: `Get all or filtered items from the canvas. USE WHEN: - Listing what's on the canvas - Finding items by type - Checking animated items - Scene inspection`, params: { filter: 'Optional filter criteria', }, }, pinepaper_get_relation_stats: { name: 'Get Relation Stats', description: `Get statistics about active relations in the scene. USE WHEN: - Debugging relation system - Understanding scene complexity - Analytics and reporting`, }, pinepaper_set_background_color: { name: 'Set Background Color', description: `Set the canvas background color. USE WHEN: - Changing scene background - Setting up canvas before adding items`, params: { color: 'Background color (hex, rgb, or named)', }, }, pinepaper_set_canvas_size: { name: 'Set Canvas Size', description: `Change the canvas dimensions. USE WHEN: - Setting up for specific format (Instagram, YouTube, etc.) - Custom canvas size requirements COMMON PRESETS: - instagram-square: 1080x1080 - instagram-story: 1080x1920 - youtube-thumbnail: 1280x720 - twitter-post: 1200x675`, params: { width: 'Canvas width', height: 'Canvas height', preset: 'Optional preset name', }, }, pinepaper_export_svg: { name: 'Export SVG', description: `Export the scene as animated SVG. USE WHEN: - Saving work as SVG file - Generating shareable graphics - Final export`, params: { animated: 'Include CSS animations (default: true)', }, }, pinepaper_export_training_data: { name: 'Export Training Data', description: `Export relation data as training pairs for LLM fine-tuning. USE WHEN: - Generating training data for fine-tuning - Creating examples from current scene - Building custom animation model training sets`, params: { format: 'Output format (json or jsonl)', includeMetadata: 'Include relation metadata', }, }, }, errors: { itemNotFound: 'Item not found: {{itemId}}', invalidRelation: 'Invalid relation: {{relationType}}', invalidParams: 'Invalid parameters: {{details}}', generatorNotFound: 'Generator not found: {{generatorName}}', exportFailed: 'Export failed: {{reason}}', executionError: 'Execution error: {{message}}', validationError: 'Validation error: {{message}}', unknownTool: 'Unknown tool: {{toolName}}', apiKeyRequired: 'API key required', apiKeyInvalid: 'Invalid API key', apiKeyExpired: 'API key expired', rateLimitExceeded: 'Rate limit exceeded. Try again in {{seconds}} seconds.', }, success: { itemCreated: 'Created {{itemType}} at position ({{x}}, {{y}})', itemModified: 'Modified item {{itemId}}', itemDeleted: 'Deleted item {{itemId}}', relationAdded: 'Added {{relationType}} relation: {{sourceId}} β†’ {{targetId}}', relationRemoved: 'Removed relation between {{sourceId}} and {{targetId}}', animationApplied: 'Applied {{animationType}} animation to {{itemId}}', generatorExecuted: 'Executed {{generatorName}} generator', effectApplied: 'Applied {{effectType}} effect to {{itemId}}', backgroundSet: 'Set background color to {{color}}', canvasSizeSet: 'Set canvas size to {{width}}Γ—{{height}}', exported: 'Exported {{format}} successfully', }, itemTypes: { text: 'Text', circle: 'Circle', star: 'Star', rectangle: 'Rectangle', triangle: 'Triangle', polygon: 'Polygon', ellipse: 'Ellipse', path: 'Path', line: 'Line', arc: 'Arc', }, relationTypes: { orbits: 'Orbits', follows: 'Follows', attached_to: 'Attached to', maintains_distance: 'Maintains distance', points_at: 'Points at', mirrors: 'Mirrors', parallax: 'Parallax', bounds_to: 'Bounds to', }, animationTypes: { pulse: 'Pulse', rotate: 'Rotate', bounce: 'Bounce', fade: 'Fade', wobble: 'Wobble', slide: 'Slide', typewriter: 'Typewriter', }, generators: { drawSunburst: 'Sunburst', drawSunsetScene: 'Sunset Scene', drawGrid: 'Grid', drawStackedCircles: 'Stacked Circles', drawCircuit: 'Circuit Board', drawWaves: 'Waves', drawPattern: 'Pattern', }, common: { at: 'at', with: 'with', to: 'to', from: 'from', position: 'position', radius: 'radius', color: 'color', speed: 'speed', duration: 'duration', }, };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pinepaper/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server