# Surehand MCP for Adobe After Effects (mcpb · Surehand-MCP.mcpb)

Your AI works in Adobe After Effects and proves what it did: change reports, pixel proofs, QC.

- Trust score: 45/100 (low)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- mcpb · `Surehand-MCP.mcpb`: 45/100 (this document), [markdown](https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp.md), [page](https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/ConformLabs/surehand-mcp/releases/download/v1.4.1/Surehand-MCP.mcpb`
- Transport: `stdio`
- SHA-256: `ee7482e810f3c8dcda25a1862315f1575d652842c9ce999618cb7bfc6153bd71`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 13 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 75/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 6103 tokens (~179/item across 34 items; 29 tools + 5 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 37/100
  - Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 92/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 77% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.
  - Supports UI / widget rendering.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Surehand MCP for Adobe After Effects server?

Surehand MCP for Adobe After Effects ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, ee7482e810f3c8dcda25a1862315f1575d652842c9ce999618cb7bfc6153bd71; the commands to do that are on this page. If it does not match, do not open it.

- Download bundle: `https://github.com/ConformLabs/surehand-mcp/releases/download/v1.4.1/Surehand-MCP.mcpb`
- SHA-256: `ee7482e810f3c8dcda25a1862315f1575d652842c9ce999618cb7bfc6153bd71`

### Verify on macOS / Linux

```bash
echo "ee7482e810f3c8dcda25a1862315f1575d652842c9ce999618cb7bfc6153bd71  Surehand-MCP.mcpb" | shasum -a 256 -c
```

### Verify on Windows (PowerShell)

```powershell
(Get-FileHash -Algorithm SHA256 .\Surehand-MCP.mcpb).Hash -eq "ee7482e810f3c8dcda25a1862315f1575d652842c9ce999618cb7bfc6153bd71"
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 45, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-02 (score 44, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 43, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 42, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 41, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 40)

First indexed and scored.

## MCP tools (29)

### `ae_run_script` (~511 tokens)

Run ExtendScript

Execute JavaScript inside After Effects (its ExtendScript scripting API) and return the result. This is the most powerful tool: anything in the After Effects scripting API is available (app, app.project, CompItem, layers, properties, render queue, File/Folder, system.callSystem...).
\- The code runs as the body of a function: use `return value` to send data back. Returned AE objects (comps, layers, properties, items) are summarized to JSON automatically.
\- `args` (the JSON you pass in `args`) and `log(...)` are available; log output is returned too.
\- Modern JavaScript is fine: let/const, arrow functions, template strings, destructuring, spread, classes, ?. and ??, for...of, plus map/filter/forEach/find/includes, Object.keys/assign and JSON (converted for AE automatically). Not available: async/await, Promise, Map/Set, generators.
\- The `aemcp` helper library is available: aemcp.findComp(idOrName), aemcp.findLayer(comp, indexOrName), aemcp.findItem(ref), aemcp.resolveProp(layer, 'Transform/Position'), aemcp.color('#ff0000'), aemcp.compInfo(comp, true), aemcp.layerInfo(layer, true), aemcp.propInfo(prop, {depth:2}), aemcp.projectInfo().
\- Collections are 1-based: app.project.item(1), comp.layer(1), prop.property(1).
\- The whole script is one undo step. Errors come back with the failing line and code around it. ae_get_scripting_guide has an API cheat sheet.

Input parameters:

- `args` (object): JSON object exposed to the script as `args`.
- `code` (string, required): JavaScript source; a function body, use `return` to return data.
- `depth` (integer): How deep to serialize the returned value (default 4).
- `report` (boolean): List what the script changed in the project (default true). Set false for read-only queries on huge projects.
- `timeoutSeconds` (number): Max seconds to wait for the result (default 120).
- `transpile` (boolean): Convert modern JS for ExtendScript (default true). Set false to send the code exactly as written.
- `undoGroup` (string): Undo step name (default "Surehand MCP Script"). Pass "" to skip the undo group.

### `ae_run_script_file` (~94 tokens)

Run JSX file

Run an existing .jsx/.jsxbin script file from disk inside After Effects (like File > Scripts > Run Script File). `args` is exposed to the script as the global AEMCP_ARGS. Returns the value of the script's last expression.

Input parameters:

- `args` (object)
- `path` (string, required): Absolute path to the .jsx / .jsxbin file.
- `timeoutSeconds` (number)

### `ae_status` (~118 tokens)

After Effects status

Check the connection to After Effects: app version, OS, open project, active item, permission mode, and whether AE is busy. Lists every running After Effects instance when several are open; pass `instance` (e.g. "2025", "2026" or a port) to choose which one this session controls. Call this first if unsure AE is reachable.

Input parameters:

- `instance` (string): Switch to another running After Effects: "2026", "26.5", or a bridge port. Omit to keep the current one.

### `ae_render_frame` (~280 tokens)

Preview frame

Render a frame of a composition and return it as an image, so you can SEE the result. Inspection options: zoom into a region, render only some layers, show transparency on a checkerboard or a color, and compare against another time or comp as a difference image (black = identical). Large frames are downscaled to maxSize.

Input parameters:

- `background` (string): "checkerboard" to show transparency, or a color like "#808080" behind the comp.
- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `compareWith` (object): Difference image against another time and/or comp (black where identical).
- `layers` (array): Render only these layers (others are hidden for the render and restored).
- `maxSize` (integer): Longest side in pixels of the returned image (default 1280).
- `outputPath` (string): Optional absolute path to also save the PNG to.
- `overwrite` (boolean): Replace an existing file at outputPath (default false: refuse).
- `region` (array): Zoom into [x, y, width, height] in comp pixels (scaled up to maxSize, at most 8x).
- `time` (number): Time in seconds (default: the comp's current time).

### `ae_render_contact_sheet` (~224 tokens)

Preview animation (contact sheet)

Render several frames of a composition into ONE image (a grid, each cell labelled with its time and frame number), so you can judge motion, timing and easing, not just a single frame. Defaults to 9 frames spread over the work area.

Input parameters:

- `columns` (integer): Grid columns (default: square-ish).
- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `end` (number): End time in seconds (default: work area end).
- `frames` (integer): Number of evenly spaced frames (default 9).
- `outputPath` (string): Optional absolute path to also save the PNG to.
- `overwrite` (boolean): Replace an existing file at outputPath (default false: refuse).
- `start` (number): Start time in seconds (default: work area start).
- `times` (array): Exact times (seconds) instead of evenly spaced frames.
- `width` (integer): Width of the returned image in pixels (default 1600).

### `ae_get_project_info` (~35 tokens)

Get project info

Summary of the open project: file path, dirty state, item counts, bit depth, render queue size, active item.

### `ae_get_comp_info` (~127 tokens)

Get composition info

Composition settings plus a summary of its layers (index, id, name, type, timing, parent, switches). Large comps are paged: use layerOffset/layerLimit (see totalLayers / nextLayerOffset in the result).

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `includeLayers` (boolean): Default true.
- `layerLimit` (integer): Max layers to return (default 150).
- `layerOffset` (integer): Skip this many layers (default 0).

### `ae_create_comp` (~142 tokens)

Create composition

Create a new composition and (by default) open it in the viewer.

Input parameters:

- `bgColor`: Color as "#rrggbb" or [r,g,b] (0-1 or 0-255).
- `duration` (number): Seconds, default 10.
- `folder`: Project item id (number) or exact name.
- `frameRate` (number): Default 30.
- `height` (integer): Default 1080.
- `name` (string, required)
- `open` (boolean): Open in viewer (default true).
- `pixelAspect` (number): Default 1.
- `width` (integer): Default 1920.

### `ae_get_layer_info` (~89 tokens)

Get layer info

Full info for one layer: switches, timing, parent, source, transform values, effects, masks count, markers, text, and every animated/expression property.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `layer` (required): Layer: 1-based index (number) or exact layer name.

### `ae_add_layer` (~424 tokens)

Add layer

Add a layer to a composition: solid, text, shape (empty, use ae_add_shape to draw), null, adjustment, camera, light, or an existing project item (footage/comp).

Input parameters:

- `allCaps` (boolean)
- `boxSize` (array): Paragraph (box) text size [w,h]; omit for point text.
- `color`: Solid/adjustment color, or light color.
- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `direction` (string): Paragraph direction (AE 24+). Default: text without Hebrew/Arabic characters is set left to right whatever the user's AE type preference is.
- `duration` (number): Layer duration in seconds (default comp duration).
- `fauxBold` (boolean)
- `fauxItalic` (boolean)
- `fillColor`: Color as "#rrggbb" or [r,g,b] (0-1 or 0-255).
- `font` (string): PostScript font name, e.g. "Arial-BoldMT", "Helvetica", "Montserrat-Bold".
- `fontSize` (number)
- `height` (integer)
- `item`: For type 'item': project item to add.
- `justification` (string)
- `leading` (number)
- `lightType` (string)
- `moveToIndex` (integer): Move the new layer to this 1-based index (new layers are added on top).
- `name` (string)
- `position` (array)
- `startTime` (number)
- `strokeColor`: Color as "#rrggbb" or [r,g,b] (0-1 or 0-255).
- `strokeWidth` (number)
- `text` (string): For text layers.
- `threeD` (boolean)
- `tracking` (number)
- `type` (string, required)
- `width` (integer): Solid size (default comp size).

### `ae_get_selection` (~33 tokens)

Get selection

What the user has selected: project items, and in the active comp the selected layers and selected properties (with paths).

### `ae_get_properties` (~148 tokens)

Get properties

Inspect the property tree of a layer (or a sub-group via path): names, match names, values, keyframe counts, expressions. Use this to discover property paths before setting values.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `depth` (integer): Group depth to expand (default 2).
- `includeHidden` (boolean): Include NO_VALUE properties.
- `keyframes` (boolean): Include keyframe details.
- `layer` (required): Layer: 1-based index (number) or exact layer name.
- `path`: Start at this group/property (default: the whole layer).

### `ae_find_properties` (~175 tokens)

Find properties

Search every layer of a comp (or one layer) for properties whose name or match name contains the query, e.g. "opacity", "blur", "Source Text", "ADBE Fill Color". Returns ready-to-use paths. Filter to animated or expression properties.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `layer`: Layer: 1-based index (number) or exact layer name.
- `limit` (integer): Default 100.
- `onlyAnimated` (boolean): Only properties with keyframes.
- `onlyExpressions` (boolean): Only properties with an expression.
- `query` (string): Case-insensitive text to match in the property name or match name. Omit to list all matches of the filters.

### `ae_set_property` (~245 tokens)

Set property value

Set the value of any property (transform, effect parameter, shape attribute, text...). If `time` is given (or the property already has keyframes) a keyframe is set at that time. Examples: path "Transform/Opacity" value 50; "Transform/Position" [960,540]; "Transform/Scale" [50,50]; "Effects/Fill/Color" "#ff0000".

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `layer` (required): Layer: 1-based index (number) or exact layer name.
- `path` (required): Property path from the layer, "/"-separated display names or match names, e.g. "Transform/Position", "Effects/Gaussian Blur/Blurriness", "ADBE Transform Group/ADBE Opacity", "Contents/Rectangle 1/Fil…
- `time` (number)
- `value` (required): Value: number, array ([x,y] / [x,y,z] / color), string for text, or object for text style / shape path.

### `ae_set_keyframes` (~236 tokens)

Set keyframes

Create keyframes on a property in one call, with optional interpolation (linear/bezier/hold) and temporal easing. Place keys by time (seconds) or frame (whole frames). Example: path "Transform/Position", keyframes [{time:0,value:[0,540]},{frame:24,value:[960,540],easeIn:80}].

Input parameters:

- `clearExisting` (boolean): Remove existing keyframes first.
- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `easyEase` (boolean): Apply easy ease (33%) to all new keyframes that don't specify easing.
- `keyframes` (array, required)
- `layer` (required): Layer: 1-based index (number) or exact layer name.
- `path` (required): Property path from the layer, "/"-separated display names or match names, e.g. "Transform/Position", "Effects/Gaussian Blur/Blurriness", "ADBE Transform Group/ADBE Opacity", "Contents/Rectangle 1/Fil…

### `ae_set_expression` (~154 tokens)

Set expression

Set (or clear with an empty string) an expression on a property. Returns any expression error AE reports.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `enabled` (boolean)
- `expression` (string, required)
- `layer` (required): Layer: 1-based index (number) or exact layer name.
- `path` (required): Property path from the layer, "/"-separated display names or match names, e.g. "Transform/Position", "Effects/Gaussian Blur/Blurriness", "ADBE Transform Group/ADBE Opacity", "Contents/Rectangle 1/Fil…

### `ae_get_effect_params` (~145 tokens)

Inspect effect parameters

List an effect's parameters (names, match names, value types, defaults, min/max) WITHOUT changing your layers, so you know the exact parameter names for ae_apply_effect / ae_set_effect_params. Pass comp+layer to inspect an effect already applied (current values).

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `effect` (required): Match name (e.g. "ADBE Glo2") or display name ("Glow"); with comp+layer, also an index in the stack.
- `layer`: Inspect the effect on this layer instead of a fresh default instance.

### `ae_apply_effect` (~171 tokens)

Apply effect

Apply an effect to a layer by match name (preferred, e.g. "ADBE Gaussian Blur 2", "ADBE Fill", "ADBE Glo2", "ADBE Drop Shadow") or display name, optionally setting parameters. Returns the effect's parameters.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `effect` (string, required)
- `layer` (required): Layer: 1-based index (number) or exact layer name.
- `name` (string): Rename the effect instance.
- `params` (object): Effect parameters by display name or match name, e.g. {"Blurriness": 20, "Repeat Edge Pixels": true} or {"Color": "#ff0000"}.

### `ae_add_shape` (~287 tokens)

Add shape

Draw a shape (rectangle, ellipse, polygon, star, or custom path) with fill and/or stroke, on a new shape layer or an existing one. Positions are relative to the layer (new layers are centered in the comp).

Input parameters:

- `closed` (boolean)
- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `fill`: Fill color; omit for no fill (unless no stroke either: defaults to white).
- `inTangents` (array)
- `innerRadius` (number)
- `layer`: Existing shape layer; omit to create a new one.
- `name` (string)
- `outTangents` (array)
- `outerRadius` (number)
- `points` (number): Polygon/star points.
- `position` (array): Shape position within the layer (default [0,0]).
- `roundness` (number): Rectangle corner roundness.
- `shape` (string, required)
- `size` (array): [w,h] for rectangle/ellipse (default 400x400).
- `stroke`: Color as "#rrggbb" or [r,g,b] (0-1 or 0-255).
- `strokeWidth` (number)
- `vertices` (array): For 'path': [[x,y],...].

### `ae_undo` (~30 tokens)

Undo

Undo the last action(s) in After Effects (Edit > Undo).

Input parameters:

- `steps` (integer)

### `ae_get_layer_bounds` (~227 tokens)

Layer bounds

Exact on-screen bounding boxes of layers in composition pixels at a time, after all transforms, parenting, 3D and the active camera (via AE's own toComp()). Also reports whether each layer is visible at that time, fully/partly/not in frame, and inside action-safe (5% margin) and title-safe (10% margin). Use it to check alignment, spacing, overlaps and safe areas with numbers.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `frame` (integer): Whole frame number from the comp's start (frame 0 = time 0), instead of time.
- `includeExtents` (boolean): Include stroke widths, effects and other extents (default false = content box).
- `layers` (array): Layers to measure (default: all layers, up to 300).
- `selectedOnly` (boolean): Measure only the layers selected in After Effects.
- `time` (number): Seconds (default: the comp's current time).

### `ae_get_comp_map` (~107 tokens)

Composition structure map

Overview of how a composition is built: the tree of nested precomps (with how many times each is used), parenting chains, track mattes, and which layers/comps each expression references. Use it to understand an unfamiliar project before editing.

Input parameters:

- `comp`: Composition: item id (number) or exact name. Omit (or "active") for the active/open composition.
- `depth` (integer): How deep to follow nested precomps (default 4).

### `ae_batch` (~204 tokens)

Batch edits

Run many steps in ONE call: each step is a tool with its arguments (any project/comp/layer/property/keyframe/effect/text/footage tool) or {tool: "ae_run_script", args: {code}}. All steps form a single undo step and return one change report. Atomic by default: if any step fails, everything is undone and you get the error of the failing step. Use it for repetitive or multi-part edits (e.g. style 30 layers, build a scene) to save round trips.

Input parameters:

- `atomic` (boolean): Undo everything if a step fails (default true). false = keep successful steps and continue.
- `checkpoint` (boolean): Save a project checkpoint before running (see ae_checkpoint).
- `name` (string): Undo step name shown in After Effects (default "Surehand MCP Batch").
- `steps` (array, required)
- `verbose` (boolean): Return each step's full result (default: short summaries).

### `ae_checkpoint` (~126 tokens)

Project checkpoints

Safety copies of the project: save (saves the open project, then keeps a timestamped copy), list the checkpoints of this project, or restore one (opens it as a NEW file next to the original; neither the original nor an earlier restore is ever overwritten). Use before large or risky changes.

Input parameters:

- `action` (string, required)
- `discardChanges` (boolean): Restore even if the open project has unsaved changes (they are discarded).
- `id` (string): Checkpoint id to restore (from list).
- `label` (string): Short label for a new checkpoint.

### `ae_list_scripts` (~70 tokens)

List scripts

List the user's own After Effects scripts: AE's Scripts folder (and ScriptUI Panels) plus folders configured as "scriptFolders" in ~/.surehand/ae/config.json, with each script's description from its header comment. Run one with ae_run_script_file.

Input parameters:

- `nameContains` (string)

### `ae_prove_identical` (~422 tokens)

Prove the render is unchanged

Prove a structural change (un-precompose, bake expressions, reorder effects, simplify a rig) left the render unchanged, or show which frames and areas differ. capture: render reference frames (default: active comp, 5 frames over the work area), returns a proof id. compare: render them again and compare pixel by pixel (verdict, per-frame max difference, changed pixels, ΔE, area, difference image). run: capture, ae_batch steps, compare, in one call. For un-precompose, prove the parent comp. Only the sampled video frames are compared (alpha included; not audio, the comp background color or times between samples; 32 bpc values above 1.0 are clamped).

Input parameters:

- `action` (string, required)
- `atomic` (boolean): run: as ae_batch (default true: a failed step undoes everything, and nothing is compared).
- `checkpoint` (boolean): run: save a project checkpoint before the edits.
- `comps` (array): capture/run: comps to prove (item id or exact name; default the active comp).
- `frames` (integer): capture/run: number of frames spread over each comp's work area (default 5).
- `id` (string): compare: the proof id from capture (default the latest proof).
- `maxSize` (integer): capture/run: longest rendered side in pixels (default 1920; larger comps are scaled down).
- `name` (string): run: undo step name.
- `steps` (array): run: the edits, as ae_batch steps.
- `times` (array): capture/run: exact times in seconds (snapped to frames) instead of evenly spaced frames.
- `tolerance` (number): compare/run: allowed difference per channel, 0-255 (default 0.5: less than one 8-bit step, so only 16/32 bpc rounding is allowed; 0 = bit-identical).
- `verbose` (boolean): run: full result of each step.

### `ae_get_scripting_guide` (~40 tokens)

ExtendScript guide

Returns the After Effects ExtendScript cheat sheet (ES3 rules, helpers, common match names). Read before writing complex ae_run_script code.

### `ae_tools` (~124 tokens)

More tools

Discover every After Effects tool, including ones not loaded in this chat: list them by category (one line each), or describe chosen tools (full parameters). Then run any of them with ae_call. Categories: status & app, scripts, project, comps, layers, properties & keyframes, effects, shapes & masks, text, 3D, audio, footage, files & export, checks, see & measure, essential graphics, render.

Input parameters:

- `category` (string): Only list this category.
- `describe` (array): Tool names to get full parameter details for.

### `ae_call` (~91 tokens)

Run any tool

Run any After Effects tool by name with its arguments, e.g. tools listed by ae_tools that aren't loaded in this chat. Same validation, permissions, change report and activity log as calling the tool directly. Get the parameters with ae_tools {describe: [name]}.

Input parameters:

- `args` (object): The tool's arguments.
- `tool` (string, required): Tool name, e.g. "ae_set_camera".

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp#diagnostics

## Score history

- 2026-11-05: 45
- 2026-11-04: 44
- 2026-11-03: 44
- 2026-11-02: 44
- 2026-11-01: 43
- 2026-10-31: 43
- 2026-10-30: 42
- 2026-10-29: 42
- 2026-10-28: 41
- 2026-10-27: 41
- 2026-10-26: 40
- 2026-10-25: 40

## Common questions

### What is the Surehand MCP for Adobe After Effects server?

Surehand MCP for Adobe After Effects is listed in the public MCP registry as io.github.ConformLabs/surehand-mcp. Your AI works in Adobe After Effects and proves what it did: change reports, pixel proofs, QC. This page covers its MCPB bundle (https://github.com/ConformLabs/surehand-mcp/releases/download/v1.4.1/Surehand-MCP.mcpb).

### Is the Surehand MCP for Adobe After Effects server safe to use?

Surehand MCP for Adobe After Effects scores 45 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Surehand MCP for Adobe After Effects server expose?

Surehand MCP for Adobe After Effects exposes 29 tools: ae_run_script, ae_run_script_file, ae_status, ae_render_frame, ae_render_contact_sheet, and 24 more. Their descriptions and schemas cost roughly 5,079 tokens of context every time the server is loaded.

### What licence is the Surehand MCP for Adobe After Effects server under?

Surehand MCP for Adobe After Effects declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

### What did VerifyMCP test on the Surehand MCP for Adobe After Effects server?

VerifyMCP ran 13 checks on Surehand MCP for Adobe After Effects, covering Source repository, Provenance, License, Maintenance and 9 more. 4 items could not be completed, a gap on our side rather than a finding about Surehand MCP for Adobe After Effects: Malware scan, Known CVEs, Install scripts and Dependency health. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to an MCPB bundle, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Repository: https://github.com/ConformLabs/surehand-mcp
- Website: https://conformlabs.co/surehand/
- Changelog RSS feed: https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp.json
- HTML version of this page: https://verifymcp.io/servers/conformlabs-surehand-mcp/surehand-mcp
