Skip to main content
Glama

OpenToonz MCP

opentoonz-mcp is a local, safety-first Model Context Protocol server for OpenToonz workspaces. It gives an MCP client useful, structured access to project and scene metadata, resource validation, level discovery, rendering, and level conversion without exposing a general-purpose shell.

The server is intentionally a sidecar. It does not patch or embed OpenToonz. Instead, it reads OpenToonz's XML-like project and scene files directly for fast inspection and invokes the existing tcomposer and tconverter command-line programs for operations that require OpenToonz's native runtime.

Status

This repository contains the first usable read-mostly release:

  • Read-only project, scene, level, and artifact discovery.

  • Scene header inspection and serialized level/scanned-path extraction.

  • Alias-aware resource validation for +drawings, +scenes, $scenefolder, $scenepath, and $scenename paths.

  • Preview rendering and scene rendering through tcomposer.

  • Level conversion through tconverter.

  • Stdio transport for local MCP clients.

  • One static resource, one scene resource template, and a reusable scene-health prompt.

  • Tests for path sandboxing, symlink escape rejection, project discovery, and scene resource validation.

The server does not expose arbitrary command execution, arbitrary .toonzscript execution, tcleanup, render-farm administration, or direct scene mutation.

Related MCP server: workspace-mcp

Requirements

  • Node.js 20 or newer.

  • A built OpenToonz checkout if rendering or conversion is needed.

  • An MCP client that supports stdio servers.

The OpenToonz source checkout used while designing this server is expected to have a layout similar to:

workspace/
├── toonz/                 # OpenToonz source checkout
│   └── build/bin/
│       ├── tcomposer
│       └── tconverter
└── opentoonz_mcp/         # this repository

The MCP server can inspect an unbuilt workspace. Only the rendering and conversion tools require the corresponding binaries.

Install and build

cd opentoonz_mcp
npm install
npm run typecheck
npm test
npm run build

The executable is written to dist/index.js and is also exposed as the opentoonz-mcp npm bin entry.

Configure an MCP client

Build the server first, then add a stdio server entry to the client. The exact settings file varies by client; the following is the portable shape:

{
  "mcpServers": {
    "opentoonz": {
      "command": "node",
      "args": ["/absolute/path/to/opentoonz_mcp/dist/index.js"],
      "env": {
        "OPENTOONZ_WORKSPACE": "/absolute/path/to/opentoonz_project_and_mcp/opentoonz",
        "OPENTOONZ_BUILD_DIR": "/absolute/path/to/opentoonz_project_and_mcp/opentoonz/toonz/build",
        "OPENTOONZ_ROOT": "/absolute/path/to/opentoonz_project_and_mcp/opentoonz"
      }
    }
  }
}

OPENTOONZ_WORKSPACE is the important setting. If it is omitted, the current working directory is used. When the server is started from a directory named opentoonz_mcp with a sibling opentoonz directory, the sibling is selected as a convenience fallback.

Configuration variables

Variable

Default

Purpose

OPENTOONZ_WORKSPACE

current directory, or sibling ../opentoonz

Root directory that all paths must remain inside

OPENTOONZ_ROOT

workspace root

OpenToonz runtime root; the server seeds isolated SystemVar.ini and passes it as TOONZROOT

OPENTOONZ_BUILD_DIR

$WORKSPACE/toonz/build

Directory containing bin/tcomposer and bin/tconverter

OPENTOONZ_TCOMPOSER

discovered build binary

Explicit tcomposer path

OPENTOONZ_TCONVERTER

discovered build binary

Explicit tconverter path

OPENTOONZ_ARTIFACT_DIR

.mcp-artifacts inside workspace

Default output directory for generated artifacts

OPENTOONZ_RUNTIME_HOME

.mcp-artifacts/.runtime inside workspace

Isolated HOME, XDG config, and cache root for native subprocesses

OPENTOONZ_LIBRARY_PATH

$BUILD_DIR/lib/opentoonz when present

Optional native library path for build-tree binaries

OPENTOONZ_MCP_TIMEOUT_MS

120000

Default subprocess timeout

OPENTOONZ_MCP_MAX_OUTPUT_BYTES

2000000

Captured stdout/stderr limit per subprocess

OPENTOONZ_MCP_MAX_SCAN_ENTRIES

10000

Filesystem discovery limit

OPENTOONZ_MCP_MAX_METADATA_BYTES

32000000

Maximum project, scene, and scenes.xml metadata file size

OPENTOONZ_MCP_MAX_INSPECT_CONCURRENCY

4

Maximum concurrent metadata inspections

Capabilities

Tools

Tool

Writes files?

Description

workspace_manifest

No

Workspace roots, discovered counts, and available binaries

list_projects

No

Finds project descriptors and parses folder aliases

inspect_project

No

Inspects one project descriptor

list_scenes

No

Finds .tnz and .tab scenes

inspect_scene

No

Reads scene header and serialized resource references

validate_scene_resources

No

Resolves aliases and reports missing/external resources

list_level_files

No

Lists recognized level and image files

list_artifacts

No

Lists files produced by this server

render_preview

Yes, artifact only

Renders one frame with tcomposer

render_scene

Yes, artifact/output

Renders a frame or frame range with tcomposer

convert_level

Yes, new output only

Converts a level with tconverter

All generated outputs must be new paths inside the configured workspace. Existing files are rejected before OpenToonz starts, which prevents tconverter from blocking on its interactive overwrite prompt.

Rendering is stricter than inspection: render_preview and render_scene first validate that all discovered scene resources are present and resolve inside the configured workspace. Scenes that intentionally depend on external media must be copied into the workspace or handled outside this MCP server.

Resources and prompt

  • opentoonz://workspace/manifest — live JSON workspace manifest.

  • opentoonz://scene/{+path} — read-only scene summary resource template. The reserved URI expansion allows nested workspace-relative paths.

  • review-scene-health — prompt that directs an MCP client to inspect a scene and validate its resources before discussing changes.

Safety model

  1. Workspace sandbox: relative and absolute inputs are canonicalized and checked against OPENTOONZ_WORKSPACE.

  2. Symlink escape protection: existing paths are resolved through the filesystem before the containment check.

  3. No shell: subprocesses use spawn() with an argument array and shell: false.

  4. Bounded execution: render and conversion calls have a timeout and bounded captured output.

  5. No accidental overwrite: generated outputs must not exist before an operation starts.

  6. No arbitrary scripts: .toonzscript execution is intentionally not exposed.

  7. Read-only first: the initial API focuses on inspection and artifact-producing operations; it does not save scenes or levels in place.

See docs/architecture.md for the rationale and extension rules.

Development

Useful commands:

npm run dev          # start the stdio server with tsx
npm run typecheck    # TypeScript validation, including tests
npm test             # node:test suite through tsx
npm run build        # production JavaScript in dist/

Do not print diagnostics to stdout while the server is running: stdout is the MCP JSON-RPC channel. Operational diagnostics belong on stderr.

OpenToonz integration notes

OpenToonz scene files are not a stable public JSON format. The server therefore limits direct parsing to stable, low-risk metadata patterns: the scene header and <path> / <scannedPath> values used by serialized level records. Rendering and conversion are delegated to OpenToonz's own binaries so codec and scene behavior remain native to the installed build.

The source repository contains upstream and origin remotes for OpenToonz. This MCP implementation remains in its own repository so it can evolve independently and avoid mixing MCP changes with the OpenToonz application history.

License

This MCP server is released under the MIT License. OpenToonz itself remains under its own license; see the OpenToonz checkout for its licensing terms and third-party notices.

Available Tools

11 tools
convert_levelConvert an OpenToonz levelC

Convert a level with tconverter into a new destination. Existing files are refused to avoid interactive overwrite prompts and accidental data loss.

NameRequiredDescriptionDefault
widthNo
frameEndNo
scenePathNo
timeoutMsNo
frameStartNo
sourcePathYes
destinationPathYes

TDQS

C2.9/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 full behavioral burden. It usefully discloses that existing files are refused to avoid overwrite prompts and accidental data loss, which is important safety context for a mutation tool, but it omits dependencies such as tconverter availability, permission requirements, side effects, and failure behavior.

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 description is two tight sentences with the action front-loaded and no wasted wording. Its brevity is appropriate structurally, though it leaves important details unstated.

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?

With seven parameters, no annotations, no output schema, and 0% schema description coverage, the description is not complete enough for an agent to invoke the tool confidently. It covers the overwrite-refusal behavior but not parameter meanings, prerequisites, or expected results.

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

Parameters2/5

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

Schema description coverage is 0% across seven parameters, so the description must compensate and does not. 'Level' and 'destination' only loosely imply sourcePath and destinationPath, while width, frameStart, frameEnd, scenePath, and timeoutMs receive no explanation at all.

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 states a specific verb and resource: 'Convert a level ... into a new destination.' It is clear what the tool does, but it does not differentiate the tool from any sibling, such as render_scene or render_preview, which could be confused with conversion-adjacent operations.

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?

The only usage-relevant statement is 'Existing files are refused,' which is a constraint rather than guidance on when to use this tool versus alternatives. There is no mention of prerequisites, when conversion is appropriate instead of other level/scene operations, or how it relates to siblings.

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

inspect_projectInspect an OpenToonz projectA

Parse one OpenToonz project descriptor and report its version, logical folder aliases, resolved in-workspace paths, and warnings.

NameRequiredDescriptionDefault
projectPathYesWorkspace-relative or absolute project descriptor path

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the burden. 'Parse ... and report' implies a read-only, non-mutating inspection and the mention of 'warnings' hints at tolerant parsing, but it says nothing about invalid-path behavior, error surfacing, or whether partial data is returned.

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?

One well-formed sentence with no filler, and the verb and scope lead. It stops short of 5 only because the enumerated return fields could be structured more crisply.

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 usefully enumerates what comes back (version, aliases, resolved paths, warnings), which is the key missing structured information. Minor gap: no guidance on failure or path-resolution rules for a single-param tool.

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 param already documents 'workspace-relative or absolute project descriptor path.' The description adds nothing about path resolution semantics beyond the word 'resolved,' so 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?

Specific verb + resource: 'Parse one OpenToonz project descriptor and report its version, folder aliases, resolved paths, and warnings.' It clearly covers one project, which distinguishes it from list_projects and inspect_scene, though it never explicitly names those siblings.

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?

Usage is implied only: an agent infers this is the per-project inspection step after list_projects. There is no explicit when-to-use, when-not-to-use, or named alternative such as inspect_scene for scene-level details.

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

inspect_sceneInspect an OpenToonz sceneA

Read scene header metadata and extract serialized level/scanned-path references without loading or mutating scene resources.

NameRequiredDescriptionDefault
scenePathYesWorkspace-relative or absolute .tnz/.tab path

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description does useful work by disclosing that the tool reads metadata and extracts references without loading or mutating scene resources. That clarifies the safety profile and lightweight nature of the operation, though it does not describe error behavior or output format.

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 definition is a single front-loaded sentence with no wasted words. It places the key read-only, non-loading constraint immediately after the core purpose.

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 one-parameter inspection tool with no output schema, the description communicates the core return content (header metadata and serialized references) and the non-mutating behavior. It could be more complete by sketching the return shape, but it is adequate for correct invocation.

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 single scenePath parameter is already fully documented with its accepted .tnz/.tab forms. The description adds no additional parameter semantics, which is acceptable given the schema coverage.

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 states a specific verb (read/extract) and specific resources (scene header metadata, serialized level/scanned-path references). It distinguishes the operation from heavier actions by saying it works without loading or mutating scene resources, though it does not explicitly name sibling tools.

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 phrase 'without loading or mutating scene resources' implies a lightweight inspection use case, but there is no explicit guidance on when to choose this over validate_scene_resources, list_scenes, or inspect_project. Usage is inferable rather than stated.

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

list_artifactsList MCP artifactsA

List files produced by MCP render and conversion operations in the configured artifact directory.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 full burden. 'List' implies a read-only operation and the configured directory is identified, but the description does not disclose return structure, ordering, recursion behavior, or what happens if the directory is empty or missing.

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 efficient sentence that front-loads the action and resource with 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 zero-parameter listing tool, the description covers what is listed and where, which is enough to select and invoke it. Because no output schema exists, a brief note about return contents would improve completeness, but the core need is met.

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 is empty, so there is nothing for the description to clarify. Baseline 4 applies for a parameterless tool.

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 ('List') and resource ('files produced by MCP render and conversion operations'), plus the location ('configured artifact directory'). This distinguishes artifacts from sibling tools like list_scenes or list_level_files, though it does not explicitly name an alternative.

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?

Usage is implied by the scope: use this to see outputs of render/conversion operations. However, there is no explicit when-to-use guidance, no when-not-to-use exclusions, and no mention of sibling alternatives such as render_preview or workspace_manifest.

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

list_level_filesList OpenToonz level filesB

List recognized OpenToonz drawing, vector, raster, palette-adjacent, and image level files under an optional workspace-relative directory.

NameRequiredDescriptionDefault
limitNo
directoryNo

TDQS

B3/5.0
Behavior3/5

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

With no annotations at all, the description carries the full burden. It does disclose two real behaviors beyond the schema: results are limited to 'recognized' level file types (filtering semantics) and the directory is workspace-relative (path resolution rule). It says nothing about recursion, ordering, whether the limit truncates silently, or permission requirements.

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 front-loaded sentence with no filler; the scoping information (optional directory) arrives before the file-type enumeration. Nothing in it could be cut without losing content.

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?

No output schema and no annotations, yet the description does not say what a result entry looks like, whether paths returned are absolute or workspace-relative, how ordering works, or how limit interacts with the listing. For a listing tool with two undocumented parameters, these gaps matter to correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so both parameters are undocumented in structured fields. The description explains only that directory is optional and workspace-relative; the limit parameter (max 10000, exclusiveMinimum 0, default behavior) is never mentioned, leaving half the surface unexplained.

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 (List) and resource (OpenToonz level files) and even enumerates the level categories covered (drawing, vector, raster, palette-adjacent, image). It does not differentiate itself from nearby siblings such as list_artifacts or list_scenes, so an agent must infer whether 'level files' is a subset of artifacts.

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?

No statement of when to use this versus list_artifacts, list_scenes, or workspace_manifest, and no prerequisites or exclusions. The only usage hint is the implicit 'optional workspace-relative directory' scoping.

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

list_projectsList OpenToonz projectsB

Discover OpenToonz project descriptors inside the workspace. Results are read-only and include project folders and parser warnings.

NameRequiredDescriptionDefault
limitNo

TDQS

B3.1/5.0
Behavior3/5

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

There are no annotations, so the description carries the behavioral burden. It usefully says results are read-only and mentions that results include project folders and parser warnings, but it does not explain ordering, pagination, limit behavior, or error cases.

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 compact sentences with no wasted language, and the core purpose is front-loaded before the result-content note.

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 a simple listing tool with no annotations and no output schema, the description covers purpose, read-only behavior, and partial return contents. However, it leaves the limit parameter and the exact result shape under-specified.

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

Parameters2/5

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

The single parameter 'limit' has 0% schema description coverage and is not mentioned in the description at all. The schema provides type and bounds, but the description adds no meaning about how the limit affects listing behavior.

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 states a specific verb and resource: discovering OpenToonz project descriptors inside the workspace. It is clear what the tool does and implicitly contrasts with sibling inspection tools, though it does not explicitly name alternatives such as inspect_project.

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?

The description gives no explicit when-to-use guidance, no exclusions, and no routing to sibling tools like inspect_project or list_scenes. Workspace scoping is stated, but that is context rather than usage guidance.

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

list_scenesList OpenToonz scenesC

Discover .tnz and legacy .tab scenes. Optionally scope results to a project directory or descriptor.

NameRequiredDescriptionDefault
limitNo
projectPathNoOptional project descriptor or project directory

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only discovery operation but says nothing about the default scan scope when no projectPath is given, whether scanning is recursive, what the cap on 'limit' means in practice, or how results are ordered — all essential for a filesystem-scanning 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?

Two short sentences, front-loaded with the resource being listed and followed by the scoping option. Nothing is wasted, though 'Discover' is slightly opaque about whether it returns paths, names, or metadata.

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?

With no output schema and no annotations, the definition should explain what a result entry looks like and what happens when no scope is supplied. Neither is covered, and the undocumented limit parameter compounds the gap for a tool that may scan an entire workspace.

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

Parameters2/5

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

Only projectPath is documented in the schema, and the description merely restates it as 'project directory or descriptor' while adding the useful hint that it is optional. The limit parameter (with a 5000 maximum) is undocumented in both schema and description, leaving half the parameters unexplained.

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 names a specific verb-plus-resource: discovering .tnz and legacy .tab scenes, including the file formats, which makes it concrete. It does not explicitly distinguish itself from siblings like list_projects, list_artifacts, or inspect_scene, so the agent must infer the boundary itself.

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?

'Optionally scope results to a project directory or descriptor' implies the two usage modes (workspace-wide versus project-scoped), but never states when to prefer this over inspect_scene or list_projects. The trade-off between a broad scan and a scoped one is left to the agent to work out.

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

render_previewRender a preview frameB

Render one scene frame with tcomposer into a new .mcp-artifacts file. Existing files are never overwritten. Requires a built tcomposer executable.

NameRequiredDescriptionDefault
frameNo
shrinkNo
threadsNo
scenePathYes
timeoutMsNo
outputPathNo

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 does useful work by disclosing that output goes to a new .mcp-artifacts file, that existing files are never overwritten, and that a built tcomposer binary is required. It does not say what happens if outputPath already exists, what is returned, or how timeoutMs/shrink/threads affect behavior, so the burden is only partly met.

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 with zero filler; the action, the safety guarantee, and the prerequisite all appear up front. Nothing in the text is redundant with the title or with itself.

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 six-parameter tool with no annotations and no output schema, the description covers purpose and safety but leaves parameter meaning and return values entirely unaddressed. An agent could call it, but not confidently configure frame, shrink, threads, or timeout.

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

Parameters2/5

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

Schema description coverage is 0% across six parameters, and the description explains none of them — frame, shrink, threads, timeoutMs, and outputPath are all left for the agent to guess. The only hint is that output lands in a 'new' file, which loosely implies outputPath is never overwritten.

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: render a single scene frame with tcomposer, writing to a new .mcp-artifacts file. The 'one scene frame' scope distinguishes it in spirit from render_scene, but it never names that sibling, so an agent must infer the split.

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?

Usage is only implied by 'Render one scene frame' and the stated prerequisite of a built tcomposer executable. There is no explicit when-to-use/when-not, and the obvious alternative render_scene is never mentioned or contrasted.

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

render_sceneRender an OpenToonz sceneB

Render an image sequence or output file with tcomposer. The destination must be new and inside the configured workspace; no arbitrary shell commands are exposed.

NameRequiredDescriptionDefault
stepNo
frameNo
shrinkNo
threadsNo
frameEndNo
scenePathYes
timeoutMsNo
frameStartNo
outputPathYes

TDQS

B3/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 of behavioral disclosure. It usefully states that the destination must be new and inside the configured workspace, and that no arbitrary shell commands are exposed, which adds security-related context. However, it omits important behavior such as overwrite handling beyond 'new', permission requirements, failure modes, and what the render produces.

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 tight sentences with no wasted words. The core action is front-loaded, and the safety constraint follows immediately.

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 9-parameter rendering tool with no annotations and no output schema, the description is too thin. It should explain frame-range controls, timeout behavior, and output expectations, none of which are covered.

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

Parameters2/5

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

Schema description coverage is 0% across 9 parameters, so the description must compensate. It only clarifies that outputPath must be new and inside the workspace; it says nothing about scenePath, frame, frameStart, frameEnd, step, shrink, threads, or timeoutMs, leaving most parameters semantically undocumented.

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 states a specific verb and resource: render an OpenToonz scene to an image sequence or output file using tcomposer. It is clear what the tool does, but it does not explicitly differentiate its purpose from the sibling render_preview tool.

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 guidance on when to use this tool versus render_preview or the other sibling tools. The distinction between a full render and a preview is implied by the tool name only, leaving the agent to infer the appropriate context.

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

validate_scene_resourcesValidate scene resourcesA

Resolve scene path aliases and report missing or workspace-external level and scanned-image references. This is read-only.

NameRequiredDescriptionDefault
scenePathYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description must carry the behavioral burden, and it does disclose the read-only nature plus the non-obvious behavior that it resolves aliases before reporting. It does not say whether missing references cause an error or a report, nor anything about response shape or performance on large scenes.

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 short sentences, front-loaded with the operation and followed by the read-only guarantee. No filler and nothing redundant.

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 a simple one-parameter read-only check with no output schema, the description covers what it does and its safety profile adequately. It stops short of describing what the report looks like or how an agent should interpret 'workspace-external', which matters for acting on the result.

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 0% for the single required scenePath, so the description has to compensate. It references 'scene path aliases', which hints that scenePath may be an aliased identifier, but it never states what form the path takes (absolute, project-relative, alias) or whether aliases are resolved from a workspace manifest.

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 ('resolve') with a concrete resource ('scene path aliases') and states the report content (missing or workspace-external level and scanned-image references). It clearly distinguishes a validation task from rendering or listing siblings, though it never names an alternative tool explicitly.

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?

Usage is implied rather than stated: an agent can infer this is a pre-flight check for broken/external references, and 'This is read-only' signals a safe inspection step. There is no explicit when-to-use versus siblings like inspect_scene or render_scene, nor any stated precondition or exclusion.

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

workspace_manifestInspect OpenToonz workspaceB

Return a live manifest of the configured workspace, discovered projects/scenes/levels, runtime paths, and available OpenToonz command-line capabilities.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/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 behavioral burden. 'Return' and 'live manifest' imply a read-only, current-state discovery operation and disclose the categories returned, but the description does not explicitly confirm non-mutation, permission requirements, or scan cost.

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 with no filler. Every listed clause contributes to the scope of the returned manifest.

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, the description must carry the return-value explanation. It names the high-level categories in the manifest but does not describe their shape or level of detail. Combined with missing usage guidance against the many sibling tools, it is adequate but incomplete.

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 description correctly describes a parameterless workspace inspection operation. Per the zero-parameter baseline, a 4 is appropriate.

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 gives a specific verb-resource pair: return a live manifest of the configured workspace. It also names the contents: projects, scenes, levels, runtime paths, and CLI capabilities. It is clear as an aggregate workspace-discovery tool, but it does not explicitly distinguish itself from sibling tools such as list_projects, list_scenes, or inspect_project.

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?

No sentence states when to use this tool rather than list_projects, inspect_project, list_scenes, or the other siblings. The aggregate-manifest phrasing implies broad workspace orientation, but that is left to inference and no exclusions or alternatives are given.

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. 11 tool updatesv0.1.0
    • First observedconvert_level
    • First observedinspect_project
    • First observedinspect_scene
    • First observedlist_artifacts
    • First observedlist_level_files
    • First observedlist_projects
    • First observedlist_scenes
    • First observedrender_preview
    • First observedrender_scene
    • First observedvalidate_scene_resources
    • First observedworkspace_manifest

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target clearly distinct resources or actions: listing projects, scenes, levels, and artifacts is separate from inspecting and validating them. The main potential confusion is between render_preview and render_scene, and somewhat between workspace_manifest and the various list/inspect tools, though the descriptions clarify the intended boundaries.

Naming Consistency4/5

The set is mostly consistent snake_case with verb_noun patterns such as list_projects, inspect_scene, render_scene, and convert_level. The notable deviation is workspace_manifest, which is noun-based rather than following the verb_noun convention.

Tool Count5/5

Eleven tools is well within a reasonable range and each tool appears to earn its place by covering discovery, inspection, validation, rendering, conversion, or artifact listing. The surface is broad enough for the OpenToonz workflow without feeling excessive.

Completeness4/5

The server covers the core inspection and production lifecycle: discovering projects/scenes/levels, inspecting metadata, validating resources, rendering previews and sequences, converting levels, and listing artifacts. Minor gaps remain, such as direct inspection of individual level files or artifact management beyond listing, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    B
    maintenance
    Enables safe, observable Blender research by exposing structured tools for viewport capture, object and material edits, semantic scene creation, and managed .blend project lifecycles with transactional rollback and validation.
    42
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables MCP clients to safely read, write, edit, search, and optionally run commands within one or more named project workspaces, while maintaining a work journal and tracking changes.
    19
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables clients to create, query and edit QGIS projects and vector data in an isolated, new headless PyQGIS process, exporting GeoJSON/GeoPackage, saving and reopening editable QGZ bundles, and rendering PNG maps through typed MCP tools. All operations are workspace-relative with strict path and geometry validation, and never attach to or modify a running QGIS desktop session.
    MIT