Skip to main content
Glama

anim-styles-mcp

An MCP server for short animated videos. Your AI client picks a look from 29, writes the page, and this server renders it to an MP4 with sound on your own machine. There are no API keys and nothing is uploaded.

All 29 looks

You ask for something like "explain how vaccines work in the chalkboard look". The client reads that look's rules, starts from a working page, swaps in your subject, checks stills, renders, and hands you a 1080×1920 file. Text can be in any language: Latin, Bangla and Japanese fonts are bundled, and you can add others.

Install

You need Node 20 or later and ffmpeg. Rendering uses Chrome if you have it. If you don't, the setup command below downloads a browser, about 150 MB.

Claude Code

claude mcp add anim-styles -- npx -y github:alomsoltanul/anim-styles-mcp

Claude Desktop, Cursor and other clients

{
  "mcpServers": {
    "anim-styles": {
      "command": "npx",
      "args": ["-y", "github:alomsoltanul/anim-styles-mcp"]
    }
  }
}

Check the machine, and get the browser if it asks for one:

npx -y github:alomsoltanul/anim-styles-mcp doctor
npx -y github:alomsoltanul/anim-styles-mcp setup

Projects go in ~/anim-styles-projects. Set ANIM_HOME in the server's env to move them.

Tested on macOS with Apple silicon. Linux and Windows have render settings in the code but have not been run yet, so please open an issue if something breaks.

Related MCP server: Motion Text

Using it

Say "show me the styles" and you get the numbered menu and picture sheet. Then reply with a number and a topic:

1: how vaccines work

Or name a look outright: "make a pixel art video about compound interest", "same topic in three looks", "make a promo for my course". The menu is grouped by what each look is good for, so you don't need to remember names.

The looks

#

Look

Good for

Teach one idea

1

Chalkboard

One rule or formula

2

Breakdown Exploded View

Anything with parts

3

Map Route

Journeys, directions, step by step

4

X-ray Cutaway

How a machine works

Numbers and facts

5

Minimal Graphics

Small steps adding up

6

Count-up Graph

A number growing

7

Dark Gold Data Reel

One huge fact about you

8

Paper-Cut Stop-Motion

Fact reels with rolling numbers

Stories with characters

9

Comic Art

Punchlines and reactions

10

Flat Vector

Clean cartoon, safe for long text

11

Clay 3D Character

A 3D person talking; needs a voice

12

Animated Story Reel

Narrated cartoon: lessons, satire

13

Round-Head Stick Cartoon

Quick "why" jokes

Big hooks

14

Pixel Art

Levels, scores, progress

15

Retro Console 3D

Funny, nostalgic stories

16

CGI Motion

"What if" hooks

17

Brick Toy

Things being built

18

Soft 3D Object

"What happens if"

19

ASCII Terminal

Tech and AI stories

Calm and abstract

20

Glow Sketch

A calm reveal of one object

21

Sacred Line Art

Ideas and mindset

22

Black and White 3D

One bold idea

With your talking video

23

Cream Explainer

Graphics between your talking clips

24

Paper Collage B-roll

Paper B-roll with labels

Promo films

25

Glass Kinetic Promo

Frosted panels and big type, on the beat

26

One-Stroke Launch Film

One product, 4:5

27

Product Line-up Film

Several products in one film

28

Animated Story Promo

Two cartoon characters reach your product

29

Talking Hook Reel

Your face on camera, boards above

Promos

The promo looks read your brand from brand.js: name, colours, logo, products, call to action. Give these when you start, or edit the file later:

{
  "name": "Acme Courses",
  "url": "acme.example",
  "cta": "Link in bio",
  "colors": { "bg": "#101F35", "ink": "#FBF7F2", "accent": "#E63946", "paper": "#F6F1E7" },
  "products": [{ "title": "Sketching in 30 Days", "sub": "30 short lessons" }]
}

Without a logo the name is drawn as a wordmark. Without a product image a card is drawn. Add your own files with add_media. A promo should show only true facts about your product, so check any number in it.

Voice

No voice is included, because everyone wants a different one. Videos work with no voice at all. To add narration you have three choices, and you can mix them.

A file per line. Pass your own recording, or audio from any TTS tool your client can reach. This needs no setup and is the simplest way to use a voice from another MCP server.

A command. Set ANIM_TTS_CMD to anything that writes speech to a file. {text}, {text_file} and {out} are filled in. It runs without a shell.

"env": { "ANIM_TTS_CMD": "my-tts --input {text_file} --output {out}" }

An HTTP endpoint. Set ANIM_TTS_URL to anything that speaks the OpenAI /v1/audio/speech format, local or hosted.

"env": {
  "ANIM_TTS_URL": "http://localhost:8880/v1/audio/speech",
  "ANIM_TTS_MODEL": "your-model",
  "ANIM_TTS_VOICE": "your-voice",
  "ANIM_TTS_KEY": "only if it needs one"
}

Every line is levelled to the same loudness, so clips from different tools sit together. add_voice also writes vo/timing.js with line times and a mouth envelope, which is how the clay character's lips follow any voice. If you use a hosted voice, check that its licence covers what you publish.

Tools

Tool

What it does

list_styles

Numbered menu and picture sheet

get_style

A look's rules, what to keep and swap, and its target frame

new_project

Start from a look's working page

read_file, write_file

Edit project files, for clients with no file tools

add_media

Bring in your images, audio or video

add_voice

Add narration

preview

Local URL that plays the page live

stills

Render frames as one sheet

render, render_status

Video with motion blur and mixed sound

check_video

Size, length, loudness and frames from the finished file

doctor

Check ffmpeg, the browser and the voice setup

A render that takes longer than about 40 seconds carries on as a job, so slow clips don't hit a client's tool timeout.

How a page works

A project is a plain folder with a page.html. The page defines prepare(), which returns the length and sound cues, and seek(t), which draws the frame for time t and nothing else. Because every frame depends only on t, frames can be rendered in any order and blended for motion blur. The full contract is in cards/_rules.md.

Sound is a soft air bed plus effects timed by the page. Every effect is synthesized by tools/make-sfx.js, so the repo holds no third-party audio. An optional sound.json sets loudness, adds a beat score, or brings in your own tracks.

Adding a look

  1. Make styles/<id>/page.html, using an existing look as a base.

  2. Write cards/<id>.md: the rules that make it that look, and what to keep and swap.

  3. Add it to the end of catalog.json, so older menu numbers stay put.

  4. Save a frame as gallery/<id>.jpg, then run npm run sheet and npm test.

Security

Pages run in a headless browser with the network blocked. They load only local files, from a server on 127.0.0.1 that refuses paths outside the project. File tools stay inside the project folder too. A TTS command or URL can only come from your own config, never from a tool call, so a prompt can't make the server run something. add_media and add_voice read any path your client passes, so treat those like any other file access you grant.

Licence

MIT. Bundled fonts, three.js and other third-party parts keep their own licences, listed in THIRD_PARTY.md. What you make with it is yours.

Available Tools

13 tools
add_mediaA

Bring the user's own file into a project. Images and audio go to assets/. A video becomes frames in footage// plus audio.wav; draw it with shared/footage.js and add its sound through sound.json tracks.

NameRequiredDescriptionDefault
fileYesAbsolute path to the file
nameNoShort name to use in the page
projectYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only say readOnlyHint=false; the description goes well beyond that by disclosing exactly what gets written where, including that a video is decomposed into a frames directory plus a separate audio.wav. It does not cover overwrite behavior, supported formats/size limits, or failure modes, which keeps 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.

Conciseness5/5

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

Two sentences, front-loaded with the core action, followed by a compact per-type breakdown. Every clause carries information; there is no filler.

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

Completeness4/5

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

For a three-parameter mutation tool with no output schema, the description covers side effects and follow-up workflow thoroughly. What is missing is modest but real: return value/confirmation behavior and any constraints on acceptable file types.

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 67%, so the schema already documents file and name. The description adds real meaning for name by showing it becomes the footage/<name>/ directory, but the project parameter is never explained and no format or validation details are added.

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: 'Bring the user's own file into a project,' then itemizes the outcome per media type (assets/ for images and audio, footage/<name>/ plus audio.wav for video). It is clearly distinguishable from write_file/read_file siblings, though it never names those siblings to sharpen the boundary.

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 user's own file' (as opposed to generated content), and it supplies useful downstream guidance on drawing frames via shared/footage.js and wiring sound through sound.json. However, there is no explicit when-not-to-use guidance and no named alternative such as write_file for text content.

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

add_voiceA

Add narration. No voice ships with this server: each line takes a file (a recording, or audio from any TTS tool the user has). Lines with only text use the provider set in this server's env. Writes vo/timing.js with line times and a mouth envelope, and the mixer places the clips. Replaces any earlier narration. Current provider: none.

NameRequiredDescriptionDefault
gapNoSeconds between lines that have no `at`
linesYes
projectYes

TDQS

A3.7/5.0
Behavior4/5

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

With only readOnlyHint=false supplied, the description carries most of the burden and delivers: it discloses the written artifact, that the mixer consumes the timing/mouth-envelope data, and critically that it 'Replaces any earlier narration' — a destructive side effect an agent must know before calling. It omits failure behavior when no provider/file is available.

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?

Four tight sentences, all front-loaded: purpose first, then the file-vs-text rule, then the output, then the replacement warning. Some domain shorthand ('vo/timing.js', 'mouth envelope') is opaque but necessary for correctness rather than filler.

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

Completeness4/5

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

For a mutation tool with no output schema and only a single annotation, this covers the essentials: what gets written, what gets thrown away, and what inputs are required versus optional. The remaining gaps (behavior on invalid `project`, error mode when neither file nor provider is available) are real but secondary.

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 33%, so the description must compensate, and it partly does: it explains that `file` may be a recording or output from any TTS tool, and that `text`-only lines fall back to the server's env provider. It says nothing about `project` (the other undocumented required parameter) or how `gap` interacts with lines that have `at`.

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+resource ('Add narration') and immediately scopes it away from visual media by defining what a line is (a `file` or `text`). It also names the artifact produced ('vo/timing.js') and the downstream step ('the mixer places the clips'), which separates it from siblings like add_media. It stops short of explicitly naming the sibling to use for non-narration audio.

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?

Offers real precondition context: no voice ships with the server, and 'Current provider: none', which tells the agent that text-only lines cannot work here and files must be supplied. However, it never states when to choose this over a sibling or what to do when no provider is configured — the agent must infer that external TTS audio is the only viable path.

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

check_videoA
Read-only

Size, length, loudness and frames from a finished file. A render can differ from a still, since stills skip motion blur, so check the real file. For counters pass adjacent times.

NameRequiredDescriptionDefault
fileNofinal.mp4
timesNo
projectYes

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, so the safety profile is covered and the description's job is to add context — which it does by explaining why a finished-file check differs from a still. It does not disclose cost or latency (frame extraction is likely expensive), behavior when the file is absent, or the shape of the returned metrics. Adequate but with clear gaps beyond the annotation.

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, front-loaded with the return payload before the rationale and the parameter tip. Nothing is redundant. The phrase 'For counters pass adjacent times' is compressed to the point of needing domain knowledge to parse.

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's enumeration of size/length/loudness/frames is doing useful work in place of one. But for a read-only inspection tool with an undocumented required `project` parameter and four distinct returned metric families, an agent still lacks the return format and how to target the right project.

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%, so the description must carry parameter meaning: it adds genuinely useful guidance for `times` ('For counters pass adjacent times') that the schema does not convey. However, the required `project` parameter is never mentioned, the `file` default of final.mp4 is unaddressed, and the 8-item cap on `times` is left 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 the concrete outputs (size, length, loudness, frames) of inspecting a finished video file, which tells an agent exactly what the tool returns. It implicitly separates itself from the `stills` and `render` siblings by explaining that a render differs from a still. The verb itself is elided in the opening noun phrase, leaving the action slightly implicit.

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

Usage Guidelines4/5

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

It gives a real when-to-use rule: verify the actual rendered file rather than trusting a still, because stills skip motion blur, which effectively routes the agent away from `stills`/`preview`. It also supplies a conditional instruction for sampling ('For counters pass adjacent times'). It stops short of stating exclusions for `render_status` or what to do before a render completes.

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

doctorA
Read-only

Check this machine can render: ffmpeg, a browser, the voice setup.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a non-mutating check, so the description's main additional value is naming the three subsystems probed. It does not say whether the tool is fast or slow, whether it invokes the browser, or what happens when a component is missing — and with no output schema, the result shape is entirely undisclosed.

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, and the enumeration of checked components is efficient. It is arguably too terse rather than padded, and 'the voice setup' is vague compared to the concrete 'ffmpeg' and 'a browser'.

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 and no annotations beyond readOnlyHint, the description carries the burden of explaining what a caller gets back, and it does not — an agent cannot tell whether results are per-component booleans, log text, or error codes. For a simple diagnostic tool the description is minimally viable but leaves the return contract and failure behavior unspecified.

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. The empty schema is consistent with the description's framing of a parameterless environment probe.

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 ('Check') and enumerates exactly what is being probed: ffmpeg, a browser, and the voice setup. It is distinguishable from render/render_status/check_video as an environment diagnostic rather than a media operation, though the phrase 'can render' is slightly ambiguous about whether it verifies capability or performs a test render.

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 — an agent can infer this is a pre-flight check to run before rendering. There is no explicit when-to-use statement, no mention of ordering relative to setup tools like add_voice or add_media, and no disambiguation from check_video or render_status.

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

get_styleB
Read-only

One look in full: the rules that make it that look, what to keep and swap, and its target frame. Takes a name, alias or menu number. Read this before editing a page.

NameRequiredDescriptionDefault
styleYesName, alias or menu number

TDQS

B3.1/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes this is a safe, non-mutating lookup, so the description's added value is its sketch of what comes back: the rules, keep/swap guidance, and a target frame. That is genuinely beyond the annotations, but it is described obliquely and omits behavior for an unknown style name or how the frame/spec is structured.

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 tight sentences with the capability statement first and the usage cue last; nothing is redundant. It loses a point because the compressed, metaphor-heavy wording ('One look in full', 'keep and swap') costs clarity without saving many tokens.

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 one-parameter read tool with no output schema, the definition should sketch the response shape. It gestures at the content (rules, substitution guidance, target frame) but never says how that is structured, and it omits failure behavior, leaving the agent partially informed.

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 single parameter is already documented as 'Name, alias or menu number'. The description merely restates 'Takes a name, alias or menu number', adding no new semantic detail such as format expectations or case sensitivity. Baseline 3 applies when the schema carries the parameter burden.

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

Purpose3/5

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

The description conveys retrieval of a style's full definition, but does so in stylized phrasing ('One look in full', 'what to keep and swap', 'target frame') rather than a plain verb+resource statement. An agent can guess it fetches style rules and a frame spec, but the vocabulary is idiosyncratic and it never explicitly contrasts itself with the sibling list_styles.

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?

It gives one real usage condition: 'Read this before editing a page.' That is useful routing toward a pre-edit read. However, it says nothing about using list_styles to discover valid names/aliases/menu numbers, nor when this tool should be skipped in favor of another sibling.

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

list_stylesA
Read-only

Numbered menu of every look, grouped by purpose, with a picture sheet. Show this when the user has not picked a look or asks what is available.

NameRequiredDescriptionDefault
pictureNoInclude the picture sheet

TDQS

A4/5.0
Behavior4/5

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

readOnlyHint=true already establishes this is a safe read, so the description's job is to add context — and it does, disclosing the return shape (numbered, grouped by purpose, includes a picture sheet). That is genuinely useful given there is no output schema. It does not mention size limits or whether styles can be filtered, but for a simple enumerator that is a minor gap.

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

Conciseness5/5

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

Two sentences, no waste, and the behavioural intent ('show this when...') is front-loaded right after the content summary. Every clause earns its place.

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

Completeness4/5

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

For a zero-required-parameter read tool with no output schema, the description supplies the essential missing piece — what the result looks like. It could add pagination or scale hints if the style catalogue is large, but nothing needed to call it correctly is absent.

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?

With a single parameter at 100% schema description coverage, the baseline is 3. The phrase 'with a picture sheet' echoes the picture parameter's effect but does not explain that it is an optional toggle (default true) or why an agent might turn it off.

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 the resource precisely — 'every look' — and characterises the output as a 'numbered menu ... grouped by purpose, with a picture sheet'. That distinguishes it from the singular sibling get_style without needing to name it. The verb is implied by 'menu' rather than stated, so it falls just short of a perfect verb+resource framing.

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

Usage Guidelines4/5

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

It gives an explicit trigger: 'Show this when the user has not picked a look or asks what is available.' That covers the common ambiguous case well. It does not explicitly say to use get_style instead once a look is chosen, so the routing to the alternative is left to inference.

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

new_projectA

Start a project from a look's working starter page. Returns the folder; edit page.html there, swapping the subject and keeping the look.

NameRequiredDescriptionDefault
brandNoPromo looks only: your brand, written to brand.js
styleYesName, alias or menu number
projectYesFolder name, kept under /root/anim-styles-projects, or an absolute path

TDQS

A3.6/5.0
Behavior3/5

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

The readOnlyHint=false annotation already flags this as a mutating operation, and the description adds genuinely useful context beyond that: it returns the folder path and tells the agent to edit page.html while preserving the look. It does not disclose whether an existing folder is overwritten, whether the operation is reversible, or that brand data is written to brand.js (only the schema says that).

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 zero filler; the core action is front-loaded and the follow-up instruction follows immediately. Nothing could be removed without losing 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 3-parameter tool with a nested brand object and no output schema, the description covers the essentials: it creates the scaffold and it returns the folder, so return-value burden is partly carried. The remaining gap is the absence of any mention of the optional brand subtree or overwrite behavior, but the schema handles the former.

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 schema already documents `style` (name, alias or menu number) and `project` (folder name under /root/anim-styles-projects or absolute path) plus the promo-only `brand` object. The description adds no additional meaning about any parameter, 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: 'Start a project from a look's working starter page', which tells an agent this scaffolds a new project rather than listing styles or rendering. It is implicitly distinguishable from all siblings, but it never names a sibling or the style-selection tools an agent would use to supply the `style` argument.

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 'Start a project' - this is the entry point of the workflow - and the follow-up instruction ('edit page.html there') gives the next step. However, there is no explicit when-to-use, no prerequisites (e.g., resolve the look via get_style/list_styles first), and no statement about what happens if the project folder already exists.

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

previewC
Read-only

A local URL that plays the page live in a browser. It works while this server runs.

NameRequiredDescriptionDefault
projectYes

TDQS

C2.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds one genuinely useful behavioral note beyond that: the returned URL only works while the server is running, which tells an agent the result is ephemeral. It does not say whether the preview must be started, what it shows, or whether multiple previews can coexist.

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 with no filler, and the core information (local URL, browser, server lifetime) is front-loaded. It is efficient, though brevity here comes at the cost of specification rather than being purely a virtue.

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 one required undocumented parameter, no output schema, and a preview-oriented purpose, the description should say what the URL points at and how long it remains valid in concrete terms. It covers the lifetime caveat, which is the most important thing, but leaves the parameter and the invocation flow unaddressed.

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

Parameters1/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 'project' parameter, so the description carries the full burden and explains nothing about it — no format, no identifier source, no example. "The page" hints at a project but never links it to the required argument.

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

Purpose3/5

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

The description is phrased as a noun ("A local URL that plays the page live in a browser") rather than stating an action, so it describes the output more than the operation. It does convey the resource domain (a live browser preview) but gives no verb and does not distinguish it from siblings such as render, stills, or render_status.

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

Usage Guidelines1/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 this versus render, stills, or render_status, and no prerequisites or exclusions. The only conditional information is an environmental one (the URL lives as long as the server runs), not a usage rule.

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

read_fileB
Read-only

Read a text file from a project, for clients with no file tools of their own.

NameRequiredDescriptionDefault
pathNopage.html
projectYes

TDQS

B3.3/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, and the description adds that only text files are handled and that reads are scoped to a project. It says nothing about behavior on a missing path, encoding, size limits, or what the response contains, so added value is modest.

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 tight sentence with the core action front-loaded. The trailing qualifier about clients is long-winded but does earn its place as usage guidance.

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, no parameter descriptions, and only a readOnlyHint annotation, the definition should explain the return value (file contents as text) and failure behavior. Neither appears, leaving meaningful gaps for a two-parameter tool an agent will call blind.

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 the description must carry the load, and it only loosely implies that a path is relative to the given project. It never mentions the path default of "page.html", the required project parameter, or expected path format.

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 a text file") plus a scope ("from a project"), which is clearly distinct from sibling write_file. It doesn't name siblings explicitly, but the read/write split is unambiguous.

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?

"for clients with no file tools of their own" gives a real condition for when this tool applies rather than native file access. No when-not guidance or alternative named among the other siblings, but the context is clear enough to select it.

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

renderA

Render the page to video with motion blur and mix the sound. Returns when done, or a job id if it takes longer than about 40 s.

NameRequiredDescriptionDefault
fpsNo
outNoFile name inside the projectfinal.mp4
subNoSubframes for motion blur; the style sets this, leave it out
projectYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false; the description adds genuinely useful behaviour beyond that by disclosing the synchronous/async split and the ~40 s threshold, which determines the return shape. It still omits what happens on failure, whether an existing output file is overwritten, and any cost or resource expectations for a long-running encode.

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, front-loaded with the action and followed immediately by the return semantics. Every clause carries information an agent needs, and nothing is padded.

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 does cover the key return-shape ambiguity (video vs job id), which is the most important gap for this tool. However, for a mutating render job with four parameters at half coverage, it leaves out where the artifact lands, what a job id is used for, and what failure looks like.

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 50%: 'out' and 'sub' are documented, while 'project' and 'fps' are bare. The description adds nothing about any parameter, not even the default output file or the fps range, so the undocumented half stays unexplained in both places. 'Motion blur' only loosely gestures at 'sub', which the schema already handles better.

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 and resource: 'Render the page to video with motion blur and mix the sound.' That distinguishes it from preview, stills and check_video, which are read/inspect counterparts. It does not name a sibling explicitly, so it stops just short of the top mark.

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?

There is no explicit statement of when to choose render over preview or stills. The async note ('or a job id if it takes longer than about 40 s') implies that render_status should be polled afterwards, but that tool is never named. 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.

render_statusC
Read-only

Wait on a render job and report it.

NameRequiredDescriptionDefault
jobYes

TDQS

C2.4/5.0
Behavior2/5

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

The readOnlyHint=true annotation already tells the agent this is a non-mutating call, so the description would need to add blocking semantics to earn credit. "Wait on" hints at long-poll behaviour, but the description says nothing about timeouts, whether the call blocks until completion or returns progress, what happens on job failure, or whether a job id must come from a prior `render` call.

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 short sentence with the action front-loaded and no filler. Its brevity is efficient, though it edges toward under-specification rather than tight precision.

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?

There is no output schema, so the description should explain what "report" yields (status, progress, artifact paths, failure modes). For a blocking wait tool this omission leaves the agent unable to predict call duration or return shape.

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% and the single `job` parameter is documented only as `{"type": "string"}`. The description implies `job` refers to a render job, but does not state whether it is an id, a handle, a path, or where the agent obtains it, so it fails to compensate for the coverage gap.

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

Purpose3/5

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

"Wait on a render job and report it" names a verb (wait on) and a resource (render job), so the basic action is inferable. However, "report it" is vague about what is returned, and the description never distinguishes this from the sibling `render` or `check_video` tools that an agent could easily confuse it with.

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 this versus `render` (which presumably starts the job) or `check_video`. The word "wait" hints that this is the blocking/polling companion to a render call, but the agent must infer that relationship entirely on its own.

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

stillsB

Render frames and return them as one sheet. Do this after every change and compare with the target frame: does it still look like the style, can the text be read on a phone?

NameRequiredDescriptionDefault
timesNoSeconds; default is start, middle, end
projectYes

TDQS

B3.4/5.0
Behavior3/5

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

The readOnlyHint=false annotation already signals a non-read-only operation. The description adds that it renders frames into a single sheet for iterative visual QA, but it does not disclose side effects such as whether files are written, where the sheet is stored, or what project state changes occur.

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 sentences, front-loaded with the core action and followed by actionable usage guidance. The rhetorical questions are slightly informal but still purposeful and do not waste space.

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 two-parameter tool with no output schema, the description conveys the output shape ('one sheet') and iterative QA context. However, it omits parameter meaning and side-effect details that an agent would need to invoke it confidently.

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 coverage is only 50%, with the required 'project' parameter undocumented in both schema and description. The description adds no meaning about what 'project' identifies or how 'times' maps to rendered frames, leaving parameter semantics under-specified.

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 frames and return them as one sheet.' The 'one sheet' output form helps distinguish it from the generic render sibling, though it does not explicitly name alternatives such as preview or render.

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

Usage Guidelines4/5

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

It gives a clear triggering condition ('after every change') and concrete evaluation criteria ('compare with the target frame', phone readability). It stops short of explicit exclusions or naming when to use preview, render, or check_video instead.

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

write_fileB

Write a text file inside a project, for clients with no file tools of their own. Cannot write outside the project folder.

NameRequiredDescriptionDefault
pathNopage.html
contentYes
projectYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations only declare readOnlyHint=false, which is consistent with "Write." The description usefully adds the sandbox constraint that writes cannot escape the project folder, but it omits key mutation behavior: whether an existing file at the same path is overwritten, whether parent directories are created, and what encoding is used.

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 with the verb front-loaded and zero filler. The scope constraint follows immediately and nothing is repeated from the name.

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 write tool with no output schema, zero schema descriptions, and only a readOnlyHint annotation, the description leaves important gaps: overwrite semantics, return value, and path rules. The one genuinely helpful addition is the project-folder containment rule, but that alone is not enough.

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% for all three parameters, so the description must carry the load and mostly does not. It never mentions the "path" parameter (which has a default of page.html and unclear subdirectory rules), nor clarifies that "project" selects the target container and "content" is the literal text written.

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 and resource ("Write a text file") plus its container ("inside a project"), so an agent immediately knows the operation. It does not name or distinguish read_file, the obvious sibling, but the write-vs-read distinction is clear from the verb.

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?

"for clients with no file tools of their own" gives a conditional usage cue, and "Cannot write outside the project folder" bounds the operation. However, there is no explicit routing against siblings like read_file, add_media, or new_project, and no guidance on when writing is inappropriate.

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. 13 tool updatesv0.1.0
    • First observedadd_media
    • First observedadd_voice
    • First observedcheck_video
    • First observeddoctor
    • First observedget_style
    • First observedlist_styles
    • First observednew_project
    • First observedpreview
    • First observedread_file
    • First observedrender
    • First observedrender_status
    • First observedstills
    • First observedwrite_file

TDQS

B3.3/5.0

Scored across 13 tools

Disambiguation4/5

Most tools have clearly distinct workflow roles: style discovery, project setup, file/media/voice editing, previewing, rendering, and post-render checking. There is some conceptual overlap among preview, stills, render, and render_status, but the descriptions make their boundaries clear enough for selection.

Naming Consistency4/5

The set is mostly snake_case and action-oriented (list_styles, get_style, check_video, read_file, new_project, add_media, render_status). A few names deviate from the verb_noun pattern, notably doctor, preview, stills, and render, but they remain readable and predictable.

Tool Count5/5

With 13 tools, the surface matches the apparent animation/project rendering workflow without excessive fragmentation. Each tool appears to earn its place across setup, editing, preview, rendering, and verification.

Completeness4/5

The lifecycle is largely covered: discover styles, create a project, edit files, add media and voice, preview, render, check output, and diagnose the environment. Minor gaps exist around deleting/listing projects or media and cancelling jobs, but core workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers