← WebMCP Directory

estro-webmcp.vercel.app

estro-webmcp.vercel.app

live Unverified (seed import) AI & Agents 56 tools imperative implementation

A photo editor that does not assume you know what saturation means. Describe what you want and an agent moves the real controls, then tells you which ones and what they do. Everything stays in your…

First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com

Answer 22 · Act 34 · Transact 0 · Score: Not yet scored

Tool inspector

apply_layer_operation

act imperative

Every edit to a photo layer, chosen with the operation field. Structure: add, remove, duplicate, reorder, group, ungroup, move between groups, rename, show, hide, lock. Placement: transform, crop, crop ratio, reset, quarter-turn, fit, fill, straighten, flip, align, distribute, free transform, perspective, warp, lens correction. Appearance: opacity, blend mode, clip to the layer below, masks, and an effect container holding exposure, levels, curves, vibrance, colour balance, selective colour, black and white, gradient map, photo filter, 3D LUT, shadows and highlights, replace colour, posterize, threshold, invert, equalize. Content: text, shapes, fills, adjustment layers, layer styles, brush and retouch strokes, keyframes. Everything is stored as settings and re-run at export size, so any of it can be changed or removed later. Each operation reads only the fields it needs; the rest are ignored. Alignment and grouping act only on the layers named.

Page: /

Input schema

PropertyTypeRequiredDescription
projectId string yes —
expectedRevisionId string no —
operation — yes —
content string no Text content for add_text or a whole-block replacement.
range object no Character range: start and end.
insert string no —
font object no Family, weight, italic.
sizePx number no —
colour string no —
trackingMille number no —
paragraph object no Alignment, leading, indents, spacing, list.
paragraphIndex integer no —
layout object no Point text, or a paragraph box with a width and height.
shape object no Rectangle, ellipse, polygon, or path commands.
fill object no —
stroke object,null no —
paint object no Fill paint for a fill layer: solid, gradient, or a swatch.
style object no A layer style: kind is one of stroke, drop_shadow, inner_shadow, glow, overlay, plus that kind's own settings.
styleId string no —
corners object,null no Four corners in reading order — topLeft, topRight, bottomRight, bottomLeft — each {x,y} in document pixels. Null clears the correction.
sliders object no Perspective as angles instead of corners: verticalDeg, horizontalDeg, rotationDeg, scale.
columns integer no Warp grid width.
rows integer no Warp grid height.
point object no Moves one warp control point: column, row, and an offset {x,y} in fractions of the layer's size.
clear boolean no Removes the warp.
correction object no Lens correction: distortion, distortionFine, chromaticAberration, vignette, each -1 to 1.
brush object no Brush settings: kind (brush, pencil, eraser, clone, dodge, burn, sponge, blur, sharpen, smudge, red_eye), sizePx, hardness, flow, opacity, spacing, roundness, angleDeg, scatter. Only what is given changes.
cloneOffset object,null no For a clone stamp: {x,y}, the distance from where it paints to where it reads. Required for clone.
strength number no How strongly a retouching brush works. Not opacity: these change what is already there. Defaults to 0.5.
dynamics object no What the pen drives: pressureToSize, pressureToOpacity, pressureToFlow, tiltToRoundness, rotationToAngle, velocityToSize, each 0 to 1.
points array no Pointer samples: x, y, and optionally pressure, tiltDeg, rotationDeg, velocity. Pressure defaults to full, so a mouse draws at the brush's stated size.
strokeId string no —
selectionId string no A saved selection the stroke or fill is confined to.
simplifyPx number no Thins the points to the ones that describe the shape. 0 keeps every sample.
propertyPath string no An animatable property, such as transform.x or opacity.
time object no A rational time: numerator and denominator.
value number no —
interpolation — no —
handles object no Bezier control handles, for custom easing.
keyframeId string no —
blendMode — no —
clipToBelow boolean no —
mask object no Mask source, feather, density, inverted, and enabled.
maskId string no —
effectId string no —
enabled boolean no —
parameters object no Adjustment values for an effect or an adjustment layer.
profile object no A camera profile or a creative look: id, name, kind ('camera' or 'creative'), and an ordered list of colour operations. Applied before everything else, so later edits are edits away from it. Its operations are copied onto the layer, so editing the profile later does not change photographs already developed with it.
remove — no For apply_profile: removes the profile of that kind.
colourOperation object no One tone or colour operator for an effect. `kind` is one of exposure, levels, curves, vibrance, colour_balance, selective_colour, black_and_white, channel_mixer, gradient_map, photo_filter, lut, shadows_highlights, replace_colour, posterize, threshold, invert, equalize, plus that kind's own settings. Replaces the operator whole on an update, because a curve and a lookup table share no fields.
assetId string no —
layerId string no —
groupId string,null no —
layerIds array no —
name string no —
fit — no —
mode — no —
toIndex integer no —
visible boolean no —
locked boolean no —
opacity number no —
rotationDeg number no —
turns integer no —
ratio number,null no —
axis — no —
edge — no —
reference — no —
keyLayerId string,null no —
transform object no —
crop object no —
Raw JSON schema
{
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "projectId": {
      "type": "string",
      "minLength": 1
    },
    "expectedRevisionId": {
      "type": "string"
    },
    "operation": {
      "enum": [
        "add_image",
        "remove",
        "duplicate",
        "reorder",
        "group",
        "ungroup",
        "move_into_group",
        "rename",
        "set_visibility",
        "set_lock",
        "set_opacity",
        "transform",
        "crop",
        "set_crop_ratio",
        "reset_transform",
        "rotate_quarter",
        "fit",
        "straighten",
        "flip",
        "align",
        "distribute",
        "set_blend_mode",
        "set_clipping",
        "add_mask",
        "update_mask",
        "remove_mask",
        "add_effect",
        "update_effect",
        "remove_effect",
        "reorder_effect",
        "set_keyframe",
        "remove_keyframe",
        "set_track_enabled",
        "clear_animation",
        "add_text",
        "edit_text",
        "add_shape",
        "set_paint",
        "add_adjustment_layer",
        "add_fill_layer",
        "add_style",
        "update_style",
        "remove_style",
        "free_transform",
        "set_perspective",
        "warp",
        "correct_lens",
        "apply_profile",
        "paint_stroke",
        "undo_stroke",
        "restyle_stroke",
        "fill_region"
      ]
    },
    "content": {
      "type": "string",
      "maxLength": 20000,
      "description": "Text content for add_text or a whole-block replacement."
    },
    "range": {
      "type": "object",
      "description": "Character range: start and end."
    },
    "insert": {
      "type": "string",
      "maxLength": 20000
    },
    "font": {
      "type": "object",
      "description": "Family, weight, italic."
    },
    "sizePx": {
      "type": "number",
      "minimum": 1,
      "maximum": 2000
    },
    "colour": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "trackingMille": {
      "type": "number",
      "minimum": -500,
      "maximum": 2000
    },
    "paragraph": {
      "type": "object",
      "description": "Alignment, leading, indents, spacing, list."
    },
    "paragraphIndex": {
      "type": "integer",
      "minimum": 0
    },
    "layout": {
      "type": "object",
      "description": "Point text, or a paragraph box with a width and height."
    },
    "shape": {
      "type": "object",
      "description": "Rectangle, ellipse, polygon, or path commands."
    },
    "fill": {
      "type": "object"
    },
    "stroke": {
      "type": [
        "object",
        "null"
      ]
    },
    "paint": {
      "type": "object",
      "description": "Fill paint for a fill layer: solid, gradient, or a swatch."
    },
    "style": {
      "type": "object",
      "description": "A layer style: kind is one of stroke, drop_shadow, inner_shadow, glow, overlay, plus that kind's own settings."
    },
    "styleId": {
      "type": "string"
    },
    "corners": {
      "type": [
        "object",
        "null"
      ],
      "description": "Four corners in reading order — topLeft, topRight, bottomRight, bottomLeft — each {x,y} in document pixels. Null clears the correction."
    },
    "sliders": {
      "type": "object",
      "description": "Perspective as angles instead of corners: verticalDeg, horizontalDeg, rotationDeg, scale."
    },
    "columns": {
      "type": "integer",
      "minimum": 2,
      "maximum": 16,
      "description": "Warp grid width."
    },
    "rows": {
      "type": "integer",
      "minimum": 2,
      "maximum": 16,
      "description": "Warp grid height."
    },
    "point": {
      "type": "object",
      "description": "Moves one warp control point: column, row, and an offset {x,y} in fractions of the layer's size."
    },
    "clear": {
      "type": "boolean",
      "description": "Removes the warp."
    },
    "correction": {
      "type": "object",
      "description": "Lens correction: distortion, distortionFine, chromaticAberration, vignette, each -1 to 1."
    },
    "brush": {
      "type": "object",
      "description": "Brush settings: kind (brush, pencil, eraser, clone, dodge, burn, sponge, blur, sharpen, smudge, red_eye), sizePx, hardness, flow, opacity, spacing, roundness, angleDeg, scatter. Only what is given changes."
    },
    "cloneOffset": {
      "type": [
        "object",
        "null"
      ],
      "description": "For a clone stamp: {x,y}, the distance from where it paints to where it reads. Required for clone."
    },
    "strength": {
      "type": "number",
      "minimum": 0,
      "maximum": 1,
      "description": "How strongly a retouching brush works. Not opacity: these change what is already there. Defaults to 0.5."
    },
    "dynamics": {
      "type": "object",
      "description": "What the pen drives: pressureToSize, pressureToOpacity, pressureToFlow, tiltToRoundness, rotationToAngle, velocityToSize, each 0 to 1."
    },
    "points": {
      "type": "array",
      "maxItems": 4000,
      "items": {
        "type": "object"
      },
      "description": "Pointer samples: x, y, and optionally pressure, tiltDeg, rotationDeg, velocity. Pressure defaults to full, so a mouse draws at the brush's stated size."
    },
    "strokeId": {
      "type": "string"
    },
    "selectionId": {
      "type": "string",
      "description": "A saved selection the stroke or fill is confined to."
    },
    "simplifyPx": {
      "type": "number",
      "minimum": 0,
      "maximum": 20,
      "description": "Thins the points to the ones that describe the shape. 0 keeps every sample."
    },
    "propertyPath": {
      "type": "string",
      "description": "An animatable property, such as transform.x or opacity."
    },
    "time": {
      "type": "object",
      "description": "A rational time: numerator and denominator."
    },
    "value": {
      "type": "number"
    },
    "interpolation": {
      "enum": [
        "linear",
        "hold",
        "ease_in",
        "ease_out",
        "ease_in_out",
        "bezier"
      ]
    },
    "handles": {
      "type": "object",
      "description": "Bezier control handles, for custom easing."
    },
    "keyframeId": {
      "type": "string"
    },
    "blendMode": {
      "enum": [
        "normal",
        "multiply",
        "screen",
        "overlay",
        "darken",
        "lighten",
        "color-dodge",
        "color-burn",
        "hard-light",
        "soft-light",
        "difference",
        "exclusion",
        "hue",
        "saturation",
        "color",
        "luminosity"
      ]
    },
    "clipToBelow": {
      "type": "boolean"
    },
    "mask": {
      "type": "object",
      "description": "Mask source, feather, density, inverted, and enabled."
    },
    "maskId": {
      "type": "string"
    },
    "effectId": {
      "type": "string"
    },
    "enabled": {
      "type": "boolean"
    },
    "parameters": {
      "type": "object",
      "description": "Adjustment values for an effect or an adjustment layer."
    },
    "profile": {
      "type": "object",
      "description": "A camera profile or a creative look: id, name, kind ('camera' or 'creative'), and an ordered list of colour operations. Applied before everything else, so later edits are edits away from it. Its operations are copied onto the layer, so editing the profile later does not change photographs already developed with it."
    },
    "remove": {
      "enum": [
        "camera",
        "creative"
      ],
      "description": "For apply_profile: removes the profile of that kind."
    },
    "colourOperation": {
      "type": "object",
      "description": "One tone or colour operator for an effect. `kind` is one of exposure, levels, curves, vibrance, colour_balance, selective_colour, black_and_white, channel_mixer, gradient_map, photo_filter, lut, shadows_highlights, replace_colour, posterize, threshold, invert, equalize, plus that kind's own settings. Replaces the operator whole on an update, because a curve and a lookup table share no fields."
    },
    "assetId": {
      "type": "string"
    },
    "layerId": {
      "type": "string"
    },
    "groupId": {
      "type": [
        "string",
        "null"
      ]
    },
    "layerIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 500
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "fit": {
      "enum": [
        "fit",
        "fill",
        "actual"
      ]
    },
    "mode": {
      "enum": [
        "fit",
        "fill",
        "actual"
      ]
    },
    "toIndex": {
      "type": "integer",
      "minimum": 0
    },
    "visible": {
      "type": "boolean"
    },
    "locked": {
      "type": "boolean"
    },
    "opacity": {
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "rotationDeg": {
      "type": "number",
      "minimum": -360,
      "maximum": 360
    },
    "turns": {
      "type": "integer",
      "minimum": -3,
      "maximum": 3
    },
    "ratio": {
      "type": [
        "number",
        "null"
      ]
    },
    "axis": {
      "enum": [
        "horizontal",
        "vertical"
      ]
    },
    "edge": {
      "enum": [
        "left",
        "horizontal-center",
        "right",
        "top",
        "vertical-center",
        "bottom"
      ]
    },
    "reference": {
      "enum": [
        "canvas",
        "selection",
        "key-layer"
      ]
    },
    "keyLayerId": {
      "type": [
        "string",
        "null"
      ]
    },
    "transform": {
      "type": "object"
    },
    "crop": {
      "type": "object"
    }
  },
  "required": [
    "projectId",
    "operation"
  ]
}

Similar websites

reloadium.com

reloadium.com

Paste a topic, URL, or PDF/TXT/MD — get a multi-episode AI podcast with audio, transcripts, timelines and quizzes. 60+ languages.

live Unverified AI & Agents Transact tools
204 tools A67 / Act127 / T10 Not yet scored Seen 2026-11-05
getAppInfo readCredits signOut navigateToLogin navigateToPricing
Inspect tools
api.lmm.best

api.lmm.best

Connect AI models, tools and applications with LMM Forge. Explore model access, developer guides and open-source collaboration.

live Unverified AI & Agents Transact tools
93 tools A43 / Act47 / T3 Not yet scored Seen 2026-11-05
lmm_signal_state lmm_signal_start lmm_signal_rotate lmm_signal_hint lmm_signal_records
Inspect tools
deskintab.dgkhan08.workers.dev

deskintab.dgkhan08.workers.dev

An operating system in your browser, where you and your AI agent share apps, files, and projects through WebMCP.

live Unverified AI & Agents Transact tools
89 tools A18 / Act70 / T1 Not yet scored Seen 2026-11-05
desktop_get_context desktop_reveal home_navigate projects_navigate tasks_navigate
Inspect tools
webmcp.agentsdesk.dev

webmcp.agentsdesk.dev

Meridian Ops

live Unverified AI & Agents Transact tools
83 tools A43 / Act24 / T16 Not yet scored Seen 2026-11-05
find_capabilities invoke_capability get_context get_action_status search_customers
Inspect tools

Related on Influzer