Skip to main content
Glama

effect-house-mcp

English · Português

An unofficial MCP (Model Context Protocol) server that connects Claude Code, Codex and any other MCP client to TikTok Effect House, so you can build and edit effects by conversation from your own AI sessions.

Not affiliated with or endorsed by TikTok. It relies on internal, undocumented interfaces of Effect House 5.16 that may change with any app update. Effect House and TikTok are trademarks of their respective owners.

Why it exists

Since version 5.16, Effect House includes an AI assistant (the Effect House AI panel) that launches Claude Code, Codex or Cursor inside the app. Under the hood it relies on two local components, which this project reuses:

  • The eh kernel (Contents/MacOS/eh_front): a stdio MCP server whose run tool executes JavaScript cells with an eh API already connected to the editor (scene, APJS scripts, assets, preview, screenshots, planning). It finds the editor on its own before every cell, so it survives app restarts.

  • The automation server (HTTP on 127.0.0.1, port announced in ~/Library/Application Support/EffectHouse/Instances/*/MCP/mcp_port.json): 33 high-level tools (get_scene, edit_by_dsl, capture_preview, generate_image…).

The official docs only cover the in-app panel, which runs one agent at a time inside Effect House. This bridge lets you use the same capabilities from outside: from your own sessions, with your skills, memory and other MCP servers (Blender, image generation and so on).

Related MCP server: Xiangsu MCP

What the bridge adds

Tool

What it does

run, reset, status

The official eh kernel, forwarded unchanged (text, images and errors).

instances

App install and version, running editors (port, heartbeat, health), the open project, kernel state and workspace folder.

launch

Opens Effect House (optionally with a project) and waits until it answers. Never starts a second editor.

docs_search, docs_read

Search and read the official docs at effecthouse.tiktok.com/learn (every page in the sitemap), converted to Markdown and cached.

workspace_read

Reads the kernel references (skills, APJS declarations, planning flows) for clients that cannot read local files.

Automation tools

Optional (EH_MCP_AUTOMATION_TOOLS=1): the 33 HTTP tools exposed directly. Off by default: they add ~70 KB of tool definitions and the kernel already reaches them.

The bridge also:

  • reads the official workspace guide (AGENTS.md) of the installed version and serves it as the MCP server instructions;

  • keeps its own copy of the kernel workspace in ~/Library/Application Support/effect-house-mcp/workspace, without the app's agent-host config files, and refreshes it when Effect House is updated;

  • restarts the kernel if it exits and says that session values were lost;

  • refuses run with a clear message when Effect House is not open.

Requirements

  • macOS (tested on Apple Silicon). Other systems need the environment variables below and are untested.

  • Effect House 5.16 or later, installed and signed in.

  • Node.js 20 or later.

Install

git clone https://github.com/jepharaujo/effect-house-mcp.git
cd effect-house-mcp
npm ci
npm run build
npm run doctor

doctor prints what the bridge found: the app, its version, running instances and the workspace. It exits with code 1 when something essential is missing.

Claude Code

Run this from the project folder (the absolute paths of Node and the server are stored in the registration):

claude mcp add effect-house -s user -- "$(which node)" "$(pwd)/dist/src/index.js"

A cell may take up to 10 minutes (building a scene, a script and a playtest in one call). If Claude Code stops long calls earlier, raise the limit with MCP_TOOL_TIMEOUT=660000.

Codex

In ~/.codex/config.toml, with the paths of your machine (which node and the project folder):

[mcp_servers.effect-house]
command = "/opt/homebrew/bin/node"
args = ["/path/to/effect-house-mcp/dist/src/index.js"]
startup_timeout_sec = 30
# A cell may run up to the kernel's 10-minute limit.
tool_timeout_sec = 660

Other clients

Any stdio MCP client: command node, argument dist/src/index.js. Desktop apps usually need the absolute path of Node.

Usage

With Effect House open, ask your agent something like “open a new project and make a freckles face effect”. The agent follows the official guide: it checks the project with eh.project.status(), fills and validates a plan (eh.plan.fromTemplate / eh.plan.validate), builds the scene and verifies it with preview captures.

A cell for run:

const status = await eh.project.status();
const scene = await eh.scene.getScene();
return { status, scene };

help() inside a cell lists the whole API (help('scene'), help('EHObject'), help('preview.screenshot')).

Things to keep in mind

  • The agent edits the open project, live, with no sandbox. Save before large changes.

  • Use one agent at a time: do not run the Effect House AI panel and this bridge on the same project at once.

  • Preview captures go to your client's AI provider, like any image the agent reads.

  • Effect House requires a validated plan before building a scene; that rule comes from the official kernel and the bridge keeps it.

  • docs_read only fetches pages under effecthouse.tiktok.com/learn/; the bridge only talks to the editor on 127.0.0.1.

Environment variables

Variable

Use

EH_APP_PATH

App path (default: /Applications/Effect House.app, or what the app recorded in its app.json).

EH_EXECUTABLE_DIR, EH_FRONT_PATH, EH_WORKSPACE_TEMPLATE, EH_SUPPORT_DIR

Individual paths, for non-standard installs or other systems.

EH_PROJECT

Pins the kernel to the editor that has this project open (useful with several editors).

EH_MCP_AUTOMATION_TOOLS=1

Also exposes the editor's automation tools.

EH_MCP_STATE_DIR, EH_MCP_CACHE_DIR

Where the workspace copy and the docs cache live.

EH_MCP_LOG_LEVEL

debug, info (default), warn or error; logs go to stderr.

Architecture

MCP client (Claude Code, Codex…)
        │ stdio
        ▼
effect-house-mcp ──────────────► docs: effecthouse.tiktok.com/learn (sitemap + cache)
   │        │
   │ stdio  │ HTTP (127.0.0.1, port from the instance registry)
   ▼        ▼
eh_front ─► eh kernel ─────────► Effect House automation server ─► open editor

File

Responsibility

src/index.ts

Entry point and CLI (serve, doctor, index-docs).

src/server.ts

MCP server: lists and routes tools, the bridge's own tools.

src/kernel.ts

eh_front client: lazy start, restart, stderr kept for diagnostics.

src/automation.ts

Client of the editor's HTTP server; retries a call only when the connection was refused.

src/registry.ts

Instance registry, heartbeat and health check.

src/workspace.ts

Workspace copy, server instructions and workspace_read (never outside the folder).

src/docs.ts, src/html.ts

Sitemap, search, cache and HTML → Markdown conversion of the docs.

src/toolcache.ts

Remembers the kernel tool list per version, so listing tools does not start the kernel.

Development

npm run check        # lint (Biome), types and unit tests
npm run smoke        # live, read-only check with Effect House open (run npm run build first)
npm run docs:index   # cache every docs page for full-text search

Unit tests do not need Effect House. smoke starts the bridge the way an MCP client would and calls each tool family.

Tested with Effect House 5.16.0 on macOS (Apple Silicon), Node.js 25 and Claude Code. Issues and pull requests are welcome, especially reports from other Effect House versions.

Troubleshooting

  • "Effect House is not open": open the app or call launch; check with instances.

  • The kernel does not start: npm run doctor should show ehFrontExists: true. Versions before 5.16 have no kernel.

  • Several editors open: set EH_PROJECT to the folder of the project the agent should use.

  • Docs search matches only URLs: full text joins the index as pages are read, or all at once with npm run docs:index.

License

MIT.

Available Tools

8 tools
docs_readA
Read-only

Read one official Effect House documentation page as Markdown. Accepts a full URL or a path under /learn/, for example guides/api-reference/scene/transform. Long pages are paged with offset.

NameRequiredDescriptionDefault
urlYesPage URL or path under https://effecthouse.tiktok.com/learn/.
offsetNoCharacter offset to continue a long page.
refreshNoFetch again instead of using the cached copy.
maxCharsNoCharacters to return (default 20000).

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint; the description adds that output is Markdown and that long pages require offset-based paging to continue. That paging behavior is the kind of operational detail annotations cannot carry, though caching behavior and page-size limits are left to the schema.

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?

Three short sentences with the core action front-loaded and the input format plus paging caveat following. No filler, though the example path could have been trimmed given the schema already describes the format.

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?

No output schema exists, so the description's note that content returns as Markdown and may need paging is the right coverage to provide. Size limits, defaults and refresh are handled in the schema, leaving little an agent needs that 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 coverage is 100%, so all four parameters are already documented in the schema. The description's mention of path format and offset paging duplicates rather than extends that, and it says nothing about `refresh` caching semantics beyond what the schema states. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Read one official Effect House documentation page as Markdown') and the singular 'one page' implicitly separates it from the docs_search sibling. It stops short of naming docs_search, so the distinction must be inferred from 'one page' rather than stated.

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?

The description gives the accepted input forms (full URL or /learn/ path) with a concrete example, which implies usage, but never says when to choose this over docs_search or workspace_read. No exclusions or prerequisites are offered.

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

instancesA
Read-only

Find Effect House: the installation and version, every running editor instance (port, heartbeat, health), the project each one has open, the eh kernel state and the workspace folder. Call it first when a cell cannot reach the editor.

NameRequiredDescriptionDefault
includeProjectNoAsk each live editor which project is open (default true).

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioural context that this tool actively probes live editors to gather heartbeat/health and that it reports kernel state and workspace folder. It does not disclose cost, latency, or what happens when no editor is running, which matters for a live-probing tool.

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 purpose, then lists returned data, then closes with the decisive usage guidance. Dense but every clause carries information; the long enumerative sentence is slightly heavy but earns its length given there is no output schema.

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 correctly compensates by listing the fields an agent will receive. It covers the core discovery use case well; only edge behaviour (no editors found, partial failures) is unaddressed.

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 single includeProject parameter is fully documented in the schema, so baseline 3 applies. The description's mention of 'the project each one has open' hints at the same concept but adds no semantics about the boolean's default or cost of enabling it.

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

Purpose4/5

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

States a specific verb (find) and enumerates the exact resource set it resolves: installation/version, running editor instances with port, heartbeat and health, the open project, kernel state and workspace folder. That enumeration is unusually concrete, but it never distinguishes itself from the sibling 'status' tool, which appears to overlap.

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?

'Call it first when a cell cannot reach the editor' gives an explicit, actionable trigger condition, effectively declaring this the entry-point diagnostic. What's missing is any exclusion or hand-off to the sibling 'status' tool, which an agent could easily confuse with this one.

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

launchA
Idempotent

Open Effect House and wait until its automation server answers. With project (a project folder or its .ehproj file) the editor opens that project. When Effect House is already running nothing is launched; open projects from a run cell with eh.project.open(path) instead (see help('project')).

NameRequiredDescriptionDefault
projectNoAbsolute path of a project folder (the one holding effect.ehproj) or of its .ehproj file.
waitSecondsNoHow long to wait for the editor to answer (default 90).

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare non-destructive, idempotent, closed-world, and the description reinforces idempotency by spelling out the no-op path when the editor is running. It also discloses blocking behavior ('wait until its automation server answers'), which annotations do not cover. It stops short of saying what happens on timeout even though `waitSeconds` bounds it.

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?

Three short sentences, front-loaded with the primary action and followed by the conditional behavior and the exclusion. No filler; every sentence carries decision-relevant information.

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 two-parameter, no-output-schema launcher, the description covers what happens, when it is a no-op, and the alternative. The only gap is failure/timeout behavior, which is minor given `waitSeconds` is fully documented in the schema.

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, but the description adds real conditional meaning: supplying `project` opens that project, omitting it only launches the editor. `waitSeconds` is left entirely to 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?

States a concrete verb and resource: 'Open Effect House and wait until its automation server answers.' It also distinguishes the optional-project variant, so an agent can tell this apart from `run` and `status` without opening the schema.

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?

Explicitly covers the exclusion case ('When Effect House is already running nothing is launched') and names the correct alternative for that case ('open projects from a `run` cell with `eh.project.open(path)`'), plus a pointer to `help('project')`.

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

resetB

Discard eh kernel state (session values and connection).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose exactly what is lost (session values and connection), which is the key behavioral fact for a reset. However, it omits whether the reset is irreversible, what happens to in-flight operations, and what state the kernel is left in, all of which matter for a destructive operation.

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?

A single front-loaded sentence with no filler. It is arguably under-specified rather than over-long, and the "eh" typo is a minor quality blemish.

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?

For a zero-parameter, annotation-free, output-schema-free tool, the agent still needs to know what to do after a reset (e.g., relaunch via the launch sibling) and whether subsequent calls will fail. None of that lifecycle context is provided.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; no parameter detail is needed or missing.

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

Purpose4/5

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

The description pairs a specific verb ("Discard") with a specific resource ("kernel state") and clarifies scope with parenthetical detail ("session values and connection"). This is clear enough to distinguish it from siblings like launch/run/status, though it never explicitly names an alternative and the typo ("eh") slightly mars readability.

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

Usage Guidelines2/5

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

There is no guidance on when to call reset versus launch or status, nor any preconditions (e.g., whether a kernel must be running first). The agent must infer usage entirely from the tool name and the parenthetical.

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

runA

Run a JavaScript cell in the Effect House eh kernel, which drives the open editor through a pre-connected eh API. The kernel is not available right now; call instances to see why.

(Bridge note: Effect House must be open. instances shows the editor the next cell uses; launch opens it.)

NameRequiredDescriptionDefault
codeNoCell source. Exactly one of `code` or `path`.
nameNoOptional save name for the cell.
pathNoPath of an existing .mjs cell to run.
timeoutMsNoPer-cell timeout in milliseconds.

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does real work: it discloses that cells execute against a live editor via a privileged `eh` API (i.e. side effects are possible), states the out-of-band prerequisite, reports current unavailability, and points at remediation tools. Still missing: failure behavior, whether/timeout effects, and what a run yields (logs, return value).

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-loaded with the core action in the first clause, and the parenthetical groups the prerequisite and sibling routing efficiently. Minor waste: the 'kernel is not available right now' status claim duplicates runtime information that belongs in a status check and may be stale inside a static description.

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

Completeness3/5

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

For an execute-arbitrary-code tool with no output schema and no annotations, the definition covers prerequisites and alternatives but never explains what a successful run produces (return value, output channel, how cell results surface). That gap matters for an agent deciding between `code` and `path` and interpreting results.

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 the schema already states the mutually exclusive `code`/`path` rule, timeout semantics, and optional save name. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: runs a JavaScript cell in the Effect House `eh` kernel driving the open editor. The generic name `run` is disambiguated by the body, and it names sibling tools (`instances`, `launch`) that cover adjacent concerns, though it does not contrast against `reset` or `status`.

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 routing: if the kernel is unavailable, call `instances`; to open the editor, call `launch`. Prerequisite (Effect House must be open) is stated explicitly. It lacks an explicit 'prefer X over run when...' rule or guidance on choosing `code` vs `path` beyond the schema.

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

statusB

Report eh kernel status: cells run, instance, project and connection.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden alone. It implies a read-only diagnostic call and enumerates the returned facts, but says nothing about cost, latency, whether it starts or contacts a kernel, or what happens if no kernel is running — meaningful gaps for a status tool with zero annotation coverage.

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?

A single front-loaded sentence that maps directly onto the tool's purpose with no padding. It loses a point for the typo ('eh') and slightly clipped phrasing that reads as rough rather than precise.

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

Completeness3/5

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

With no output schema, annotations, or parameters, the description is the only source of truth about results, and its field list ('cells run', 'instance', 'project', 'connection') is only indicative — types, units, and format are undefined. Adequate for a zero-arg status call, but it leaves the return shape underspecified.

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 takes zero parameters, so the baseline is 4. The description correctly implies a no-argument invocation and adds nothing misleading about inputs.

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

Purpose4/5

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

States a specific verb (Report) and resource (kernel status) and enumerates the fields returned: cells run, instance, project, connection. The agent can distinguish it from siblings like reset, launch, or run without opening the schema, though the description never explicitly names those alternatives.

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

Usage Guidelines2/5

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

There is no explicit statement of when to call this versus alternatives such as `instances` (which plausibly also reports instance information) or `reset`. The intent to check current kernel state is only inferable from the verb 'Report', and no preconditions or exclusions are given.

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

workspace_readA
Read-only

Read a file or list a folder of the eh kernel workspace: AGENTS.md, flow/, skills/, APJS/ declarations, reference/, Planning/. Paths are relative to the workspace root, or absolute inside it. Use it when your client cannot read local files.

NameRequiredDescriptionDefault
pathNoFile or folder, e.g. `skills/vfx/SKILL.md` (default: the root).
offsetNoCharacter offset to continue a long file.
maxCharsNoCharacters to return (default 40000).

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds genuinely useful operational context: the workspace is read-only-ish local content and paths must resolve inside the workspace root. It does not mention how long files are truncated or that paging exists, though the schema's offset/maxChars cover that mechanically.

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?

Three sentences, front-loaded with the capability, then path rules, then the selection condition. The workspace enumeration is dense but load-bearing, since it tells the agent what is actually reachable.

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?

A simple read-only tool with all three parameters documented and safety covered by annotations; the description supplies the path-resolution rule and the eligibility condition. The only gap is the shape of a folder listing (names vs. entries), which no output schema documents.

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 baseline is 3; the description earns the bump by stating the path resolution rule (relative to workspace root, or absolute but inside it), which the schema's example does not convey. offset/maxChars semantics are left entirely to the schema, which documents them adequately.

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

Purpose4/5

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

States a concrete verb pair (read file / list folder) against a named resource (the eh kernel workspace) and enumerates the workspace sections it covers (AGENTS.md, flow/, skills/, APJS/, reference/, Planning/). The boundary with docs_read/docs_search is only implied by the word 'workspace' rather than stated, keeping it just short of a 5.

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 an explicit triggering condition: 'Use it when your client cannot read local files.' That is a real selection rule rather than vague context. It does not name the alternative (docs_read) for packaged documentation, so the exclusion side is incomplete.

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. 8 tool updatesv0.1.0
    • First observeddocs_read
    • First observeddocs_search
    • First observedinstances
    • First observedlaunch
    • First observedreset
    • First observedrun
    • First observedstatus
    • First observedworkspace_read

TDQS

A3.7/5.0

Scored across 8 tools

Disambiguation4/5

Most tools are clearly distinct: docs_search/docs_read, workspace_read, launch, run, and reset each target a different action. The main overlap is between `instances` and `status`, which both report instance, project, connection, and kernel state, so an agent may hesitate between them. Descriptions provide enough guidance to recover, but the boundary is not perfectly sharp.

Naming Consistency3/5

The set mixes bare verbs (`reset`, `launch`, `run`), bare nouns (`instances`, `status`), and prefixed action names (`docs_search`, `docs_read`, `workspace_read`). The prefixed group is consistent, but the overall convention varies across the surface. It remains readable, just not predictable.

Tool Count5/5

Eight tools is well within the ideal 3-15 range for a focused editor-bridge server. Each operation maps to a meaningful lifecycle step: discover, launch, run, inspect, reset, and documentation/workspace access. No tool feels gratuitous, though `status` is somewhat redundant with `instances`.

Completeness4/5

The surface covers the core workflow for driving Effect House: locating/launching the editor, running kernel cells, checking status, resetting state, reading docs, and reading workspace files. Minor gaps exist around writing workspace files or managing projects directly, but most agents can work around those via `run` cells.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI coding agents to work inside a live Unreal Editor for Fortnite session: write and compile Verse, place and wire Creative devices, edit Scene Graph entities, manipulate actors and assets, take screenshots, run playtests, and read editor logs via MCP.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to operate Douyin Xiangsu AR effects through MCP, including scene editing, asset binding, TypeScript scripting, compilation, preview screenshots, and interactive playtesting.
    20
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to automate the PlayCanvas Editor through a built-in MCP client, with no browser extension needed. Provides tools for entities, scripts, assets, scenes, templates, animation, builds, store imports, viewport and editor control, plus runtime launching with screenshots, logs and input to verify that projects actually run.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Lets AI agents drive the PlayCanvas Editor directly—creating and editing entities, scripts, assets, templates, animations, scenes, builds, and version control—and then launch the project to verify it actually runs. It also covers project management, viewport control, runtime input, logs, and screenshots, with the MCP client built into the Editor so no browser extension is needed.
    -