effect-house-mcp
Connects MCP clients to TikTok Effect House to build and edit effects conversationally. Exposes the Effect House eh kernel for running JavaScript cells against the open editor, inspecting project/scene status, launching Effect House, reading kernel workspace references, searching official Effect House docs, and optionally calling automation tools such as scene inspection, DSL edits, preview captures, and image generation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@effect-house-mcpopen a new project and build a freckles face effect, then preview it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
ehkernel (Contents/MacOS/eh_front): a stdio MCP server whoseruntool executes JavaScript cells with anehAPI 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 |
| The official |
| App install and version, running editors (port, heartbeat, health), the open project, kernel state and workspace folder. |
| Opens Effect House (optionally with a project) and waits until it answers. Never starts a second editor. |
| Search and read the official docs at effecthouse.tiktok.com/learn (every page in the sitemap), converted to Markdown and cached. |
| Reads the kernel references (skills, APJS declarations, planning flows) for clients that cannot read local files. |
Automation tools | Optional ( |
The bridge also:
reads the official workspace guide (
AGENTS.md) of the installed version and serves it as the MCP serverinstructions;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
sessionvalues were lost;refuses
runwith 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 doctordoctor 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 = 660Other 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_readonly fetches pages undereffecthouse.tiktok.com/learn/; the bridge only talks to the editor on127.0.0.1.
Environment variables
Variable | Use |
| App path (default: |
| Individual paths, for non-standard installs or other systems. |
| Pins the kernel to the editor that has this project open (useful with several editors). |
| Also exposes the editor's automation tools. |
| Where the workspace copy and the docs cache live. |
|
|
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 editorFile | Responsibility |
| Entry point and CLI ( |
| MCP server: lists and routes tools, the bridge's own tools. |
|
|
| Client of the editor's HTTP server; retries a call only when the connection was refused. |
| Instance registry, heartbeat and health check. |
| Workspace copy, server instructions and |
| Sitemap, search, cache and HTML → Markdown conversion of the docs. |
| 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 searchUnit 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 withinstances.The kernel does not start:
npm run doctorshould showehFrontExists: true. Versions before 5.16 have no kernel.Several editors open: set
EH_PROJECTto 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 toolsdocs_readARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Page URL or path under https://effecthouse.tiktok.com/learn/. | |
| offset | No | Character offset to continue a long page. | |
| refresh | No | Fetch again instead of using the cached copy. | |
| maxChars | No | Characters to return (default 20000). |
TDQS
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.
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.
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.
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.
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.
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.
docs_searchARead-only
Search the official Effect House documentation at effecthouse.tiktok.com/learn (getting started, workspace objects and components, editor panels, Visual Scripting nodes, APJS API reference, tutorials, publishing). Matches page paths and, for pages already read or indexed, titles and text. Returns URLs to pass to docs_read.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 10). | |
| query | Yes | Keywords, in English, e.g. "face mesh", "tween animation". | |
| section | No | Restrict to a section path such as `api-reference`, `workspace/components` or `editor-panels/visual-scripting`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnlyHint) and reach (openWorldHint), and the description adds substantive behavior beyond them: matching is done on page paths, with titles/text only for pages already read or indexed, and the return value is URLs rather than content. That indexing caveat is exactly the kind of non-obvious trait that prevents a wrong invocation. It doesn't mention ranking or empty-result behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first establishes the corpus and coverage, the second establishes matching behavior and the handoff to `docs_read`. No filler, and the most decision-relevant information (where it searches and that it returns URLs) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so (URLs). Combined with full schema coverage and annotations covering safety and open-world scope, an agent has everything needed to call this correctly and chain it into `docs_read`.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning about what `query` is matched against (paths plus, conditionally, titles and text), which is not in the schema. The `section` restriction is only indirectly hinted at via the enumerated content areas, and `limit` is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search the official Effect House documentation at effecthouse.tiktok.com/learn") and enumerates the covered content areas, so an agent knows exactly what corpus is being searched. It also differentiates itself from the sibling `docs_read` by explaining that results are URLs to be passed onward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the search→read workflow explicit ("Returns URLs to pass to `docs_read`"), which tells an agent exactly how this tool fits with its nearest sibling. It stops short of stating exclusions, e.g. that it cannot fetch page bodies or that offline/non-doc queries won't work, so it is not a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instancesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| includeProject | No | Ask each live editor which project is open (default true). |
TDQS
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.
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.
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.
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.
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.
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.
launchAIdempotent
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')).
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Absolute path of a project folder (the one holding effect.ehproj) or of its .ehproj file. | |
| waitSeconds | No | How long to wait for the editor to answer (default 90). |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.)
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Cell source. Exactly one of `code` or `path`. | |
| name | No | Optional save name for the cell. | |
| path | No | Path of an existing .mjs cell to run. | |
| timeoutMs | No | Per-cell timeout in milliseconds. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_readARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File or folder, e.g. `skills/vfx/SKILL.md` (default: the root). | |
| offset | No | Character offset to continue a long file. | |
| maxChars | No | Characters to return (default 40000). |
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.0- First observed
docs_read - First observed
docs_search - First observed
instances - First observed
launch - First observed
reset - First observed
run - First observed
status - First observed
workspace_read
TDQS
Scored across 8 tools
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.
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.
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`.
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
Related MCP Connectors
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Connect any AI agent to 1,000+ apps and 27,000+ actions through one remote MCP server (OAuth).
AI video editor for agents and humans: timeline, captions, color, audio and generation as MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to operate Douyin Xiangsu AR effects through MCP, including scene editing, asset binding, TypeScript scripting, compilation, preview screenshots, and interactive playtesting.20MIT
- FlicenseNot gradedqualityAmaintenanceEnables 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.-
- FlicenseNot gradedqualityAmaintenanceLets 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.-