Skip to main content
Glama

AE-MCP-IMT + SKILLS — After Effects for AI agents, built to be safe to hand over

Let an AI assistant (Claude Desktop, Cursor, ChatGPT, Google Antigravity or any MCP client) work inside your running Adobe After Effects: read the project, build and edit comps, layers, effects, keyframes, text, masks and expressions, render check frames — from plain language.

Two parts, made to work together:

  • The MCP server — ~270 small, safe operations behind two tools, with a dry run, one undo group per call, checkpoints, a project lock and honest errors.

  • The skill (skills/ae) — what the agent should know: the order of work, what a script cannot do in After Effects and how to get around it safely, step-by-step recipes (camera tracking, 3D content on footage, plug-in tests, render, motion graphics, masks), and plug-in knowledge files.

By Immersive Media Technologies — the After Effects layer of our Deep Artisan agent system, released for other agent builders.

macOS and Windows · After Effects 2024–2026 (26.5 verified on both, English and Russian UI) · Node.js 22+ (none needed with the Claude Desktop extension — verified on macOS and on the Windows Store build of Claude Desktop).

CAUTION

This edits real After Effects projects and sends project contents (names, expressions, footage paths, rendered previews) to the AI service you use. Work on a copy, check your provider's data policy for NDA work, and keepAE_MCP_ENABLE_EVAL off unless you need raw scripting.

What you can ask for

  • "Point out anything broken in this project — missing footage, fonts, expression errors."

  • "Add a glow to every text layer in Intro, 30 % lighter than now, and show me frame 2.0."

  • "Import this Illustrator file and animate the title with the text-pop preset."

  • "Track the camera on this clip, put a 3D null on the floor and parent the logo to it." (skill)

  • "Here is a reference frame: build this lower third natively, with a Speed slider and the texts in Essential Graphics." (skill)

  • "Test this plug-in on a solid, dump its parameters, render a frame and tell me if it works." (skill)

The agent combines the operations itself and checks the project between steps; the skill keeps it on the rails.

Related MCP server: aftr

Install

You need After Effects running on this computer and two permissions:

  • macOS — Automation: the first call asks whether your AI client may control After Effects (a refusal shows up later as error −1743: System Settings → Privacy & Security → Automation).

  • Scripting file access: After Effects → Settings → Scripting & Expressions → Allow Scripts to Write Files and Access Network.

Client

How

Claude Desktop

download aftereffects-mcp-imt.mcpb, double-click, Install (Windows: drag it onto Settings → Extensions). No Node needed.

Cursor

Google Antigravity

Settings → Customizations → Installed MCP Servers → View raw config → add the snippet below.

ChatGPT (remote servers only)

on the After Effects machine: npx -p @immersive-media-technologies/aftereffects-mcp-imt aftereffects-mcp-imt-chatgpt — it starts the server behind a tunnel and prints the URL to paste into ChatGPT.

Any MCP client

the snippet below in its mcpServers.

{
  "mcpServers": {
    "aftereffects": {
      "command": "npx",
      "args": ["-y", "@immersive-media-technologies/aftereffects-mcp-imt"],
      "env": { "MCP_TIMEOUT": "120000" }
    }
  }
}

From source, with a live self-test (the route we use):

git clone https://github.com/Immersive-Media-Technologies/aftereffects-mcp-imt.git
cd aftereffects-mcp-imt && ./install.sh        # Windows: .\install.ps1

The installer checks After Effects and Node, builds, pings the running AE, names what is wrong (−1743, scripting access, Node path) and — after asking — writes the entry into Claude Desktop's, Cursor's and Antigravity's configs, backing them up.

  • spawn npx ENOENT on macOS: GUI apps do not see your shell PATH — put the absolute path of a Node from Homebrew or nodejs.org in place of npx (nvm's Node is invisible to them).

  • Set MCP_TIMEOUT to 120000: a cold After Effects start does not fit the default 30 s.

  • A timeout with a DIALOG_OPEN message: After Effects is showing a dialog (save prompt, missing footage, a plug-in warning) — the error quotes it; the agent can close it with ae_dialogs or you click it away. On macOS reading and closing dialogs needs Accessibility permission for the client app.

  • Windows: AE_MCP_EXE must point to AfterFX.exe when After Effects is not under C:\Program Files\Adobe. No supported GPU (a VM): dismiss the «System Compatibility Report» first. The .mcpb needs no Node.js on the machine — Claude Desktop runs it on its built-in Node (verified with the Microsoft Store build on Windows 11 ARM). Server log: %LOCALAPPDATA%\Claude\logs\mcp-server-<name>.log; mailbox: %TEMP%\mcp-aftereffects.

  • If your client caps tool output, raise it to 50 000 — ae_project_info on a real project is bigger than the usual 25 000.

How it stays safe

Dry run

ae_do {dryRun: true} shows the ExtendScript that would run and never touches After Effects.

One undo group per call

every ae_do — even a 30-step batch.run — is one Cmd+Z. batch.run {atomic: true} undoes itself when a step fails and says so (rollback.verified).

Checkpoints

project.checkpoint keeps a copy of the .aep next to the project; project.revert brings it back after a crash, a relaunch or a bad idea — things undo cannot do.

Project lock

AE_MCP_PROJECT_LOCK=/path/to/one.aep — the agent may change only that project; your other open work is untouchable.

Read-only mode

AE_MCP_READONLY=1 for a first session: inspection and check frames only.

Honest errors

every failure has a code (DIALOG_OPEN, TIMEOUT, INVALID_ARGS, OPERATION_FAILED …) and a hint; a batch reports which step failed.

Nothing installed inside AE

the server talks to After Effects from outside (osascript / AfterFX.exe -r); uninstall = delete the folder.

What to forbid on the client side, if you gate at all: what Cmd+Z cannot revert — eval.run, project.new / open / revert, the purge/consolidate operations, pref.*, render.start. The list and a reference implementation are in docs/AGENT-POLICY.md.

How the agent sees the project

  • ae_project_info / ae_comp_info / ae_layer_info — the full picture when needed.

  • comp.snapshot → edit → comp.diff — a cheap fingerprint before and after: which layers were added, removed or changed, and in what. Verification in a few dozen tokens.

  • ae_render_frame — a PNG the agent can look at; compareWith an earlier frame answers "did the picture change, and where" without opening the image.

  • property.sample — a camera's position / orientation / zoom at start, middle and end in one call; expression.validate and project.audit — errors before the user hits play.

The skill

skills/ae/SKILL.md is a short router the agent reads first; it points to the one file the task needs:

SKILL.md

the call budget (what made a live plug-in test cost 76 calls an hour — and how not to), the order of work (know the state → checkpoint → operate → verify by values, then by frame), and a table of what a script cannot do in After Effects with the safe workaround for each.

recipes/camera-track.md

3D Camera Tracker end to end: start the analysis from the menu, wait in one call, press «Create Camera» with a real click (a synthetic click crashed AE 26.5), set the ground plane, read the camera back as numbers.

recipes/attach-3d.md

put a splat, a model or a solid on tracked footage: null at the origin, parent or expressions, scale, and a script that measures slide in pixels instead of eyeballing it.

recipes/plugin-test.md

test a third-party plug-in: inspect the files before installing, apply on a solid, dump parameters by matchName, feed it a model layer, render, time it, write the verdict.

recipes/render.md

frames, segment renders, templates on a localized AE, where files go.

recipes/motion-graphics.md

titles, lower thirds, logo stings, infographics as an editable AE comp: breakdown table, CONTROLS rig, real easing, Essential Graphics, a frame per phase.

recipes/masks-roto.md, recipes/tracking-mocha.md

masks and track mattes, Object Matte / Roto Brush, the Tracker panel and Mocha — what to script, what the user clicks.

plugins/<name>.md

one knowledge file per plug-in (matchNames, how it takes input, what is UI-only, quirks, timing). First: irrealix Gaussian Splatting. Template in plugins/README.md.

scripts/

only the UI steps no script can do: hardware-level mouse events, window and display geometry, menu clicks by localized name, dialogs, a one-call wait for an analysis, screenshots, a frame strip, the slide measurement. No script duplicates a server operation.

Use it as a skill in clients that support them (copy skills/ae into ~/.claude/skills/, or point your system prompt at SKILL.md). The motion-graphics recipe routes to topic references from five open MIT skill sets; they are fetched, not bundled — run skills/ae/fetch-vendor.sh once.

Tools

Tool

Purpose

ae_catalog / ae_do

discover the operations (24 categories) and run one — or several in one batch.run

ae_project_info / ae_comp_info / ae_layer_info / ae_version_info / ae_context

read

ae_render_frame

one frame as PNG (viewer-accurate colour; compareWith for metrics)

ae_save_project, ae_project_export_json / ae_project_import_json

save; whole-project JSON round trip

ae_dialogs

see and dismiss the modal dialogs that block scripting

Full list with parameters: docs/TOOLS.md; the operations are listed by ae_catalog at runtime.

Variable

Default

Meaning

AE_MCP_EXE

auto-detect

the After Effects .app bundle (macOS) or AfterFX.exe (Windows)

AE_MCP_READONLY

off

1 → nothing may modify the project

AE_MCP_PROJECT_LOCK

off

path of the one .aep the agent may change

AE_MCP_CHECKPOINT_DIR

next to the project

where project.checkpoint keeps its copies

AE_MCP_ENABLE_EVAL

off

1 → eval.run (arbitrary ExtendScript) becomes available

AE_MCP_ALLOW_CATEGORIES

all

comma-separated allow-list of operation categories

AE_MCP_RUNTIME_DIR

OS temp

where the IPC mailbox lives

MCP_TIMEOUT

client

set 120000 in the client config

Why this one

There are several After Effects MCP servers; most stop at "the AI can run ExtendScript". This one is built around what an autonomous agent needs — and what the person handing over a project needs: a small stable tool surface (two tools instead of 270), a real dry run, undo-safe operations, checkpoints and a project lock, honest errors, an installer that says what is wrong, and a skill that teaches the agent the parts of After Effects no API covers. Verified on AE 2026, macOS and Windows, English and Russian UI.

Releases

Each version is described on the Releases page; every change is in CHANGELOG.md. Upstream fixes are merged from kumoproductions/mcp-aftereffects by topic.

  • v0.5.5 · 2026-10-11 — the After Effects skill (skills/ae), checkpoints + revert, atomic batches, comp snapshot/diff, expression validation, project audit, dialog detection, project lock, frame compare.

  • v0.4.4 · 2026-10-04 — Windows: Claude Desktop from the Microsoft Store.

  • v0.4.3 · 2026-10-04 — Windows verified (AfterFX.exe -r launch path).

  • v0.4.2 · 2026-10-01 — ChatGPT gateway fix; v0.4.1 — ChatGPT in one command; v0.4.0 — one-click installs (.mcpb, Cursor, npm, installers).

  • v0.3.5 · 2026-09-30 — the AE Motion skill; v0.3.0 — first public release of the IMT fork.

A note for contributors: the offline transport tests (npm test) expect After Effects to be closed on macOS — with it open the live AE answers the stand-in requests and a few of them fail.

License

IMT Non-Commercial License — © Immersive Media Technologies.

  • Non-commercial use only. Selling this software, offering it as or inside a paid product or service, or using it in commercial client work requires a separate written license.

  • Attribution is mandatory. Every use, copy, fork or derived product must credit the creator, visibly to its users: AE-MCP-IMT by Immersive Media Technologies — https://github.com/Immersive-Media-Technologies.

  • No warranty.

Full terms: LICENSE. Third-party notices (upstream MIT code, vendored skill sets): THIRD-PARTY-NOTICES.md.

Available Tools

12 tools
ae_catalogOperation catalogA
Read-only

Discover available atomic operations for ae_do. Without args: all categories with their operation names. With a category: detailed params per operation. Only operations this server will actually execute are listed.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category. Omit to list all categories with operation counts, then drill into a specific category.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the tool's behavior beyond the read-only annotation: it lists categories vs. detailed params, and highlights that only executable operations are listed, setting accurate expectations. The readOnlyHint=true annotation aligns with the description's non-mutating purpose; no contradiction exists, and the description adds useful context about the two output modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long and front-loaded with the primary purpose. Both sentences earn their place: the first states what the tool does, and the second details the two invocation modes and the guarantee about listed operations. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple catalog tool with one optional parameter, read-only annotation, and no output schema, the description provides sufficient context: it explains the return content (categories or params) and the filtering guarantee. Minor omission is that it doesn't explicitly mention operation counts, but the schema's parameter description covers that, making it complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a 100%-coverage description for the single parameter, including behavior when omitted. The tool description reinforces and expands on this by clarifying the exact difference between no-args and with-category outputs, adding value beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a discovery mechanism for atomic operations available to ae_do, with a specific verb ('Discover') and a defined resource (available atomic operations). It distinguishes itself from sibling tools like ae_do (which executes operations) and other project/layer tools that serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains usage without args (list all categories) and with a category (detailed params per operation), giving clear context for both modes. It also states that only operations the server will execute are listed, which is a key guideline for filtering. It does not name specific alternatives, but the distinction from ae_do is implicit in the wording.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_comp_infoComp infoA
Read-only

Detailed comp info: size, fps, duration, work area, motion blur, layer summaries. Pass a comp name or item id — or an ARRAY of them to fetch several comps in one call.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameOrIdYesComposition name (exact match) or numeric item id — or an array of either to batch several comps into one round trip. If you don't know any, call ae_project_info first.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so no contradiction. The description adds behavioral context by stating the tool returns detailed fields and supports batching multiple comps in one call, which is useful beyond the annotation's safety signal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-structured sentence that front-loads the key information (what it returns) and then explains the input options. Zero fluff, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only info tool with one parameter and no output schema, the description covers all essential details: return content, input flexibility, and batching. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and fully explains the nameOrId parameter (string/number/array, exact match, fallback to ae_project_info). The description's mention of arrays reinforces but does not add new semantic meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('fetch' implied) and resource ('comp info'), lists concrete fields (size, fps, duration, work area, motion blur, layer summaries), and clearly distinguishes from siblings like ae_layer_info (layers) and ae_project_info (project-level) by focusing on compositions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when you have a comp name or id) and the schema explicitly advises calling ae_project_info if you lack one. This gives clear context and a specific alternative, though the main description doesn't contrast with other sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_contextSession contextA
Read-only

Ambient context: project state, active comp, selected layers, item list, AE.* helpers, ES3 rules, and the undo contract (every call = one auto undo group). Call at session start; then rely on ae_do response context.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses the undo contract ('every call = one auto undo group'), which is a notable behavioral trait. It also mentions ES3 rules and AE.* helpers, adding context beyond the annotation. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with high density: the first lists the tool's contents, the second gives the usage instruction. Every word earns its place, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema context tool, the description covers what it provides, when to call it, and how to proceed with ae_do responses. The undo contract mention prevents surprises, making it sufficiently complete for its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description correctly does not need to explain parameter details. Baseline 4 applies, and the description adds value by clarifying what contextual information the tool returns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as providing ambient session context, listing specific content like project state, active comp, selected layers, and AE.* helpers. This distinguishes it from sibling tools like ae_comp_info or ae_layer_info, which are focused queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs 'Call at session start' and suggests relying on ae_do response context afterward, giving clear timing and handoff. It does not mention when-not-to-use or list alternatives, but the session-start directive is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_dialogsAfter Effects dialogsA
Read-only

List the modal dialogs After Effects is showing, or dismiss one by its cancel action (what Escape does: a warning is acknowledged, a 'save changes?' question is cancelled — never answered for the user). Use after a DIALOG_OPEN / TIMEOUT error, or before a step known to pop a dialog. Windows + macOS; on macOS reading the text and dismissing need Accessibility permission for the app that runs this server.

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoDialog id from a previous list / DIALOG_OPEN error (required for dismiss).
actionNolist — report open dialogs; dismiss — close the one named by `id`.list

TDQS

A4.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description itself is unusually forthcoming about side effects (a 'save changes?' question is cancelled, never answered for the user) and about platform/auth requirements (Accessibility permission on macOS for reading text and dismissing). However, that disclosure directly conflicts with the readOnlyHint=true annotation for the dismiss mode: closing a modal dialog changes application state, so an agent trusting the annotation may assume no side effects. Credit for the auth/permission detail is offset by this inconsistency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Information is front-loaded: verb+resource first, then dismiss semantics, then when-to-use, then platform caveat. Every clause earns its place, though the heavy parenthetical nesting makes it denser than ideal for scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still conveys that listing reports open dialogs and that dismiss requires an id sourced from a prior list or error. It stops short of describing the returned dialog fields (text, id shape) or what happens if the id is stale/an unknown dialog, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3 — both `id` and `action` are already documented in the schema, including the list/dismiss enum. The description adds genuine meaning beyond the schema by spelling out what `dismiss` does behaviourally (cancel-equivalent, Escape semantics) and where `id` comes from (a previous list or a DIALOG_OPEN error).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names both concrete operations — listing currently-shown modal dialogs and dismissing one via its cancel action — with a specific resource (After Effects modal dialogs) that no sibling tool touches. An agent can distinguish this from ae_do, ae_save_project, or any info tool at a glance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit triggering conditions: use after a DIALOG_OPEN / TIMEOUT error, or proactively before a step known to pop a dialog. It also states what the dismiss mode semantically means (Escape behaviour) so the agent knows which of the two modes maps to its situation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_doExecute operationA
Destructive

Execute an atomic operation by name (from ae_catalog). Arguments are validated against the operation's declared parameters before anything reaches AE. Have more than one operation to run? Wrap them in ONE batch.run instead of several ae_do calls — read/verify steps (comp.info, layer.info, render.frame) can ride in the same batch. Every call is automatically wrapped in ONE undo group: a single Ctrl+Z (or project.undo) reverts the entire call, and a batch.run counts as one call. Never call app.beginUndoGroup/endUndoGroup in eval.run code — the wrapper already did. The exception is undo/redo itself (project.undo, command.execute id 16/2035): those run outside the group and cannot ride inside a batch.run. Response includes ambient context (active comp, selected layers, project state) at zero extra round trips. Example: ae_do({ operation: 'keyframe.add', args: { comp: 'Main', layer: 1, property: ['Transform','Position'], time: 2, value: [960,540] } })

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for the operation. Validated against ae_catalog's declared params: missing required args, wrong types, and unknown keys are rejected before AE is contacted. Omit for zero-param operations.
dryRunNoValidate the operation and return the ExtendScript that WOULD run, without contacting After Effects. Nothing is executed and the project is not touched. Use it to preview a destructive call before committing to it.
operationYesOperation name from ae_catalog (e.g. 'layer.create_solid', 'keyframe.add').
timeoutMsNoPer-call timeout in milliseconds (default 60000). Raise for long operations like render.start or big batch.run calls.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=true; the description goes far beyond by disclosing auto-validation against declared params before AE is contacted, automatic single-undo-group wrapping (one Ctrl+Z reverts the whole call, batch.run counts as one call), the undo/redo exception, and that ambient context (active comp, selected layers, project state) is returned at zero extra round trips.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core rules (name source, batching, undo grouping, undo/redo exception) are front-loaded and every sentence carries a distinct constraint. It is dense rather than bloated, though the trailing ambient-context and example clauses pile on after the essential guidance is already delivered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a dispatch tool with nested args, a required operation name, and no output schema, the description covers the naming source, validation behavior, batching model, undo semantics, the undo/redo carve-out, and a full call example. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each param (args, dryRun, operation, timeoutMs) is already documented in the schema, so the baseline is 3. The description adds a concrete worked example showing the operation/args shape, which is a modest but real value-add over the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ('execute an atomic operation by name') and immediately anchors it to the sibling that supplies valid names ('from ae_catalog'), so an agent can tell it apart from the purpose-built siblings like ae_comp_info or ae_render_frame.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing rules: multiple operations belong in ONE batch.run, read/verify steps (comp.info, layer.info, render.frame) can ride in the same batch, and undo/redo (project.undo, command.execute 16/2035) must run outside the group and cannot ride in a batch. It also issues a clear prohibition ('Never call app.beginUndoGroup/endUndoGroup in eval.run code').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_layer_infoLayer infoA
Read-only

Full layer info: transform, effects, masks, text, shape contents, keyframes. layerIndex accepts one index, an ARRAY of indices, or 'all' — auditing a whole comp is one call. Set includeProperties=false to skip the property tree walk.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIndexYes1-based layer index — or an array of indices, or 'all' for every layer in the comp, returned together in one round trip.
compNameOrIdYesComposition name (exact match) or numeric item id.
includePropertiesNoInclude the full property tree (Transform/Effects/Masks/Text). Default true.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, and the description adds behavioral nuance beyond that: the batch round-trip efficiency ('auditing a whole comp is one call') and the optional 'property tree walk' that can be skipped via includeProperties=false. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences. The primary purpose and content list are front-loaded, followed by the most impactful usage note (batch indices) and the optional flag. Zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only layer inspection tool with no output schema, the description adequately lists the return content categories and explains the includeProperties control. It does not describe the exact return structure, but given the schema's clarity and the read-only annotation, this is sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description echoes the layerIndex array/'all' behavior already in the schema and adds the property tree walk context, but this is more behavioral than parameter-specific. It does not add meaning beyond what the schema already documents for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Full layer info') with a clear resource (layer) and enumerates the content areas (transform, effects, masks, text, shape contents, keyframes). It naturally differentiates from sibling tools like ae_comp_info and ae_project_info, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context: layerIndex accepts a single index, an array, or 'all', enabling whole-comp auditing in one call. It also explains the includeProperties toggle. However, it does not explicitly name alternatives or state when not to use it; the sibling distinction is implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_project_export_jsonExport project JSONA

Serialize the entire project to JSON (folders, comps, layers, keyframes, effects, shapes, markers, time remap, solids, file refs). Write to outPath or return inline.

ParametersJSON Schema
NameRequiredDescriptionDefault
prettyNoPretty-print the JSON (2-space indent). Default: true when writing to disk, false otherwise.
outPathNoIf set, write the exported JSON to this absolute path on disk. If omitted, the JSON is returned inline in the tool response (can get large).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide destructiveHint=false. The description adds valuable behavioral context: it writes to outPath or returns inline, and warns that inline JSON can get large. This goes beyond the minimal annotation and helps the agent anticipate size-related performance implications, though it does not disclose every edge case (e.g., overwrite behavior or exact JSON structure).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and scope, followed by the output-mode detail. Every phrase earns its place; the list of serialized components is concise but informative, and there is no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description does the work of explaining what the tool returns by listing serialized components and stating that JSON is returned inline when outPath is omitted. It also flags the potential for large outputs. It could specify the root JSON structure or error behavior, but for a complex export tool, this is a reasonably complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for both `pretty` and `outPath`. The tool description simply restates the outPath behavior ('Write to outPath or return inline') without adding new parameter semantics. Since the schema already explains defaults and behavior, the description adds no extra value, meeting the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool serializes the entire project to JSON with a specific list of included elements (folders, comps, layers, keyframes, effects, shapes, markers, time remap, solids, file refs). This is a specific verb+resource that distinguishes it from siblings like ae_project_info or ae_project_import_json.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use this tool (for full project export) and explains the two output modes (write to path or inline). It does not explicitly name alternatives or state when not to use it, but the 'entire project' scope and inline warning provide sufficient contextual guidance relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_project_import_jsonImport project JSONA
Destructive

Rebuild the project from JSON (produced by ae_project_export_json). Supports clearFirst, dryRun (validate-only), skipValidation.

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonNoInline JSON document (object, not string). Mutually exclusive with `inPath`.
dryRunNoIf true, validate the document and return a plan without touching AE. Useful for debugging malformed exports.
inPathNoAbsolute path to a JSON document produced by ae_project_export_json. Mutually exclusive with `json`.
clearFirstNoRemove all existing items from the current project before importing. Default: false (appends).
skipValidationNoSkip Node-side schema validation. Only use if you trust the input and want to hand broken data to AE for diagnosis.

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide destructiveHint: true, lowering the burden. The description adds the configurable flags (clearFirst, dryRun, skipValidation) but uses the word 'Rebuild' without clarifying that the default behavior is to append rather than replace. This is misleading and violates the expectation of transparency about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It front-loads the primary action and then lists the key optional switches, making it easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the schema and annotations fill in many details, the description's ambiguous use of 'Rebuild' conflicts with the schema's note that clearFirst defaults to false (appends). This mismatch leaves a critical gap for a mutation tool, as an agent might assume it replaces the project when it actually appends unless told otherwise.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with each parameter already fully explained. The tool description only names three flags without adding any new semantic information beyond what the schema provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Rebuild the project from JSON') and ties it to a sibling tool (ae_project_export_json), making it unmistakable as the import counterpart. This distinguishes it from the other sibling tools and provides a specific verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: it is the inverse of ae_project_export_json and should be used when reconstructing a project from an exported JSON file. However, it does not explicitly state when not to use it or mention alternatives beyond the export tool, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_project_infoProject infoA
Read-only

Project-level info: file path, dirty flag, all items with type/summary, active item. Start here.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates a safe read operation. The description adds what data is returned but doesn't disclose potential behavior such as response size, performance implications, or whether all items are loaded at once, which is minimal for a simple read tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that directly states what the tool provides and includes a useful 'Start here' guidance. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description fully covers its return values (file path, dirty flag, items, active item) and positions it within the tool family. The 'Start here' hint provides sufficient context for an initial exploration tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, there is no schema detail to clarify. The description effectively lists the output contents, compensating for the absence of parameters and adding semantic meaning to the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides project-level info including specific data fields (file path, dirty flag, all items, active item), distinguishing it from sibling tools like ae_comp_info and ae_layer_info which focus on compositions and layers. The phrase 'Start here' reinforces its role as an entry point.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Start here' implies this should be the first tool used when exploring a project, but it doesn't explicitly state when to use this vs alternatives like ae_comp_info or ae_catalog. No exclusions or alternative recommendations are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_render_frameRender frameA

Render a single frame to PNG. Use to visually verify edits. The agent's 'eyes' — pair with mutations for a visual feedback loop. Headless and deterministic. In color-managed projects (workingSpace != None) the capture applies AE's own display transform via a transient OCIO Display Transform adjustment layer, and the PNG comes back viewer-accurate and sRGB-tagged. Where that layer cannot be used — read-only mode, an AE without the OCIO effect, or a failed capture calibration — the result falls back to a pure-math ACES conversion or to raw values with an explicit colorWarning; check colorPipeline / colorWarning on the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesTime in seconds to render.
outPathYesAbsolute path to write the PNG. Parent directory is created if missing.
compareWithNoAbsolute path of an earlier PNG (same comp size) to compare the new frame against. Adds `compare`: changedRatio (0..1 of pixels that differ), meanAbsDiff (0..1), bbox of the change — 'did my edit change the picture, and where' without reading the image.
colorManagedNo'auto' (default): detect the working space and return a viewer-accurate, 8-bit sRGB-tagged PNG. 'off': raw legacy output (16-bit, untagged, working-space values — dark/wrong-looking in color-managed projects).
compNameOrIdYesComposition name or numeric item id.
useDisplayStartTimeNoIf true, `time` is interpreted relative to comp.displayStartTime. Default false.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare destructiveHint=false, so the description carries the behavioral load and does so richly: headless, deterministic, and a detailed account of the color-management path (OCIO display transform, ACES fallback, raw-values fallback with explicit colorWarning). It even tells the agent to inspect colorPipeline/colorWarning on the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose in the first sentence, then layers the color-management caveats. It is longer than a typical description but most sentences earn their place given the non-obvious color fallback semantics; the dense final sentence is justified by real behavior variance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param tool with no output schema and only a single annotation, the description covers the important hidden behavior (headless determinism, color fallback, response fields to inspect). The absence of an output schema is offset by naming colorPipeline/colorWarning, though exact return shape is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter already documents its own meaning (time, outPath, compareWith, colorManaged, compNameOrId, useDisplayStartTime). The description explains the color pipeline behavior behind colorManaged='auto' vs 'off' but adds no syntax or format detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (render a single frame to PNG) and immediately scopes intent: 'Use to visually verify edits. The agent's eyes.' This clearly differentiates it from the many info/do/catalog siblings in the toolset.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear when-to-use context (pair with mutations for a visual feedback loop, verify edits) but does not name explicit alternatives or when-not-to-use conditions. The context is strong for a specialized tool whose siblings are largely non-overlapping, but it stops short of an explicit routing rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_save_projectSave projectA
Destructive

Save the project. Pass path for Save As.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional absolute path to save the project to (Save As). If omitted, save to the existing path — errors if the project has never been saved.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the destructiveHint annotation, such as the error condition for unsaved projects and the Save As path behavior. It does not contradict the annotation and clarifies the tool's side effects adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core action and a precise pointer to the path parameter. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple save operation with one optional parameter, full schema coverage, and a destructive annotation, the description plus schema provide complete guidance. No output schema is needed for a save action, and the behavior is fully documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema description fully explains the path parameter, including Save As semantics and error behavior. The description adds no new meaning beyond a concise restatement, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool saves the project, with a specific verb and resource. It distinguishes itself from siblings like export/import JSON by focusing on native project save, including the Save As nuance via path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The schema description provides clear guidance on when to omit path (existing save) versus provide path (Save As), including the error condition if never saved. However, it does not explicitly mention alternatives or when not to use this tool, keeping it just shy of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ae_version_infoVersion infoA
Read-only

AE version, build, capabilities (saveFrameToPng, app.effects, Socket). Call at session start to know what APIs are available.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already indicates safety, and the description adds that it reports capabilities like saveFrameToPng, app.effects, and Socket. This is useful but minimal; it doesn't detail the response format or potential variations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence packs the core purpose and a usage directive, with no filler. The description is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool, the description sufficiently covers what the tool returns (version, build, capabilities) and when to use it. No output schema exists, but the description provides enough context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema covers 100% trivially. The description doesn't need to elaborate, so the baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves AE version, build, and capabilities, which distinguishes it from sibling info tools that target specific project/comp/layer resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs calling at session start to discover available APIs, providing clear timing guidance. It doesn't name alternatives, but no sibling serves this exact purpose, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.5.5
    • Addedae_dialogs
    • Changedae_render_frame1 field changed
      • addedInput schema / properties / compareWith
        Added value: +{
        +  "description": "Absolute path of an earlier PNG (same comp size) to compare the new frame against. Adds `compare`: changedRatio (0..1 of pixels that differ), meanAbsDiff (0..1), bbox of the change — 'did my edit change the picture, and where' without reading the image.",
        +  "type": "string"
        +}
  2. 11 tool updatesv0.4.2
    • First observedae_catalog
    • First observedae_comp_info
    • First observedae_context
    • First observedae_do
    • First observedae_layer_info
    • First observedae_project_export_json
    • First observedae_project_import_json
    • First observedae_project_info
    • First observedae_render_frame
    • First observedae_save_project
    • First observedae_version_info

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target clearly distinct actions (render, dialogs, save, import/export, version), but ae_project_info, ae_context, ae_comp_info, and ae_layer_info all return overlapping state, so an agent must read descriptions to choose between the dedicated info tools and the ambient-context tool.

Naming Consistency5/5

All tools use the same ae_ prefix with snake_case and a predictable resource/action pattern (ae_project_info, ae_save_project, ae_render_frame, ae_do), so the naming is highly consistent.

Tool Count5/5

Twelve tools is well-scoped for a broad After Effects automation server: the dedicated info/render/dialog/save tools cover common workflows, while ae_catalog and ae_do handle the long tail without bloating the surface.

Completeness5/5

The surface covers the full lifecycle: discover capabilities (ae_version_info, ae_catalog, ae_context), inspect (project/comp/layer info), mutate (ae_do), verify visually (ae_render_frame), handle interruptions (ae_dialogs), and persist (ae_save_project, export/import JSON).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers