{"ok":true,"site":{"host":"couch-editor.com","url":"https://www.couch-editor.com/","type":"live","desc":"CouchEditor is a browser-based visual photo editor for building reusable editing pipelines and exporting photo recipes.","tools":[{"name":"set_theme","kind":"act","impl":"imperative","description":"Set the application theme to either light mode or dark mode.","title":"Set Theme","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["light","dark"],"description":"The theme mode to apply."}},"required":["mode"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_pipeline_node","kind":"act","impl":"imperative","description":"Add a node of the given type to the current pipeline at the supplied x and y position.","title":"Add Pipeline Node","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"type":{"type":"string","description":"The pipeline node type to add."},"x":{"type":"number","description":"The x position of the node in the pipeline canvas."},"y":{"type":"number","description":"The y position of the node in the pipeline canvas."}},"required":["type","x","y"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clone_pipeline_node","kind":"act","impl":"imperative","description":"Clone a node in the current pipeline by node id.","title":"Clone Pipeline Node","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"nodeId":{"type":"string","description":"The id of the node to clone."}},"required":["nodeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"connect_pipeline_nodes","kind":"act","impl":"imperative","description":"Connect two nodes in the current pipeline with an edge. Specify handles when a node has multiple inputs or outputs.","title":"Connect Pipeline Nodes","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"sourceNodeId":{"type":"string","description":"The id of the node where the edge starts."},"targetNodeId":{"type":"string","description":"The id of the node where the edge ends."},"sourceHandle":{"type":"string","description":"Optional id of the source handle. Defaults to image when the source node has one output."},"targetHandle":{"type":"string","description":"Optional id of the target handle. Defaults to image when the target node has one input."}},"required":["sourceNodeId","targetNodeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_pipeline_edge","kind":"transact","impl":"imperative","description":"Delete the edge from one pipeline node to another by their node ids.","title":"Delete Pipeline Edge","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"sourceNodeId":{"type":"string","description":"The id of the node where the edge starts."},"targetNodeId":{"type":"string","description":"The id of the node where the edge ends."}},"required":["sourceNodeId","targetNodeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_pipeline_node","kind":"transact","impl":"imperative","description":"Delete a node from the current pipeline by node id.","title":"Delete Pipeline Node","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"nodeId":{"type":"string","description":"The id of the node to delete."}},"required":["nodeId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_current_pipeline","kind":"answer","impl":"imperative","description":"Get the current pipeline, including its name, id, dirty state, nodes, and edges.","title":"Get Current Pipeline","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_pipeline_toolbox","kind":"answer","impl":"imperative","description":"Get all pipeline node types available in the toolbox, grouped by category, including their exposed numeric properties and limits.","title":"Get Pipeline Toolbox","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_pipeline_node","kind":"act","impl":"imperative","description":"Move a node in the current pipeline from its given position to another position.","title":"Move Pipeline Node","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"nodeId":{"type":"string","description":"The id of the pipeline node to move."},"fromPosition":{"type":"object","description":"The node position before the move.","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false},"toPosition":{"type":"object","description":"The node position after the move.","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false}},"required":["nodeId","fromPosition","toPosition"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_pipeline_node_properties","kind":"act","impl":"imperative","description":"Update exposed numeric properties on a pipeline node. Values must be within the property limits and match its step when one is defined.","title":"Update Pipeline Node Properties","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"nodeId":{"type":"string","description":"The id of the pipeline node to update."},"values":{"type":"object","description":"A map of exposed property keys to numeric values. Valid keys and limits depend on the node type.","additionalProperties":{"type":"number"}}},"required":["nodeId","values"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"favicon":"/favicons/couch-editor.com.png","apiSurface":"spec","category":"Developer Tools","toolCount":10}}