doodleworks-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@doodleworks-mcpturn this article on climate change into Tinku illustrations"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Doodleworks MCP
Turn any idea (a blog post, an article, an X post) into hand-drawn "Tinku" illustrations that explain the key concepts, right inside your AI host.
Bring your own image-API key (OpenAI or Gemini) · local stdio server · flip through, regenerate, and download, all in your host's chat.
Quick start · Add to your host · Using it · Parameters · The viewer · Examples · Configuration · Build from source · How it works
Doodleworks turns a single idea (or a whole blog post, article, or X post) into clean line illustrations that explain its key concepts, one idea per picture. It never draws the topic literally. Instead, it pulls out each concept and reinvents it as a low-tech contraption that Tinku, the app's own character, is physically operating: confident black lines on a pure-white background, with a few neat red/orange/blue handwritten labels.
Ask your AI host for a set of illustrations, and Doodleworks renders them and opens an interactive viewer right in the chat: flip through, regenerate any image you don't like, and download the PNGs.
✨ Highlights
🖐️ Hand-drawn, one idea per picture: clean black line art on white with a few red/orange/blue labels; never a literal chart or diagram.
🧩 Concepts, not clip art: each key idea becomes a low-tech contraption that Tinku, the app's recurring character, physically operates.
🖼️ Interactive viewer in your chat: browse, zoom, regenerate any single image, and download PNGs, inline in supported hosts.
🔑 Bring your own key: OpenAI or Gemini. The key stays server-side and is never sent to the viewer or the iframe.
⚡ Zero infrastructure: a local stdio server you launch with one
npxline. No clone, no build, no database.
Related MCP server: HoloViz MCP Server
🚀 Quick start
No clone and no build required: npx fetches the published doodleworks-mcp package from npm and runs it. You'll need an image-API key to render (none is needed just to install).
1. Get an image key. Use one of:
OPENAI_API_KEY: OpenAI GPT Image (the default provider)GEMINI_API_KEY(orGOOGLE_API_KEY): Gemini 3 Pro Image ("Nano Banana Pro")
New here? Start with OPENAI_API_KEY: it's the default, and every example below was generated with it. Set just one; you don't need both.
2. Add it to your AI host. Drop this into your host's MCP config (Claude Desktop's claude_desktop_config.json shown; see Add it to your AI host for every other host):
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}3. Ask in plain language. Restart the host, then say:
Use doodleworks to create a set of 6 illustrations explaining how a heat pump heats your home, for homeowners, one idea per image.
The model writes each illustration's prompt for you. You just describe the topic. In a graphical host theviewer opens with the gallery; in a terminal host you'll get tool output only (a text summary, not the rendered images).
🔌 Add it to your AI host
Doodleworks is an MCP App: it exposes tools and an interactive UI. Every host below can run the tools, but the inline viewer (the whole point) only renders in hosts that support MCP Apps UI.
Want the inline viewer? Use Cursor, VS Code, Claude Desktop, or Goose. Claude Code and Windsurf run the tools but can't show the viewer (you'll get tool output instead).
Host | Runs the tools | Shows the viewer | Notes |
Cursor (2.6+) | ✅ | ✅ | Cleanest experience |
VS Code (1.109+) | ✅ | ✅ | Copilot agent mode |
Goose Desktop (1.19.1+) | ✅ | ✅ | Viewer is experimental |
Claude Desktop | ✅ | ✅ | Fully quit + relaunch after editing config |
Claude Code | ✅ | ❌ | Terminal has no webview |
Windsurf | ✅ | ❌ | Tools only |
MCPJam / basic-host (dev) | ✅ | ✅ | Most reliable way to see the viewer |
Every config below uses thepublished package (npx -y doodleworks-mcp), so there's no clone and no build. Hacking on your own checkout instead? Swap the command for npx -y tsx /ABSOLUTE/PATH/doodleworks-mcp/main.ts --stdio (see Build from source). Use whichever image key you exported.
Create .cursor/mcp.json in your project (or ~/.cursor/mcp.json for all projects):
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "${env:OPENAI_API_KEY}" }
}
}
}Then open Cursor Settings → Tools & Integrations, confirm doodleworks is enabled, and invoke it from Agent chat. Using ${env:OPENAI_API_KEY} keeps the key out of the file (set it in your shell); or paste sk-... directly. The inline viewer requires Cursor 2.6+; older versions run the tools but won't render it.
VS Code uses a servers key (not mcpServers) and can prompt for the key securely. Create .vscode/mcp.json:
{
"inputs": [
{ "type": "promptString", "id": "openai-api-key", "description": "OpenAI API key", "password": true }
],
"servers": {
"doodleworks-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "${input:openai-api-key}" }
}
}
}Click Start above the server entry (or run MCP: List Servers), enter the key when prompted, then open Copilot Chat → Agent mode and invoke the tool. The viewer renders inline. Requires VS Code 1.109+ (MCP Apps is in preview).
Goose uses YAML. Edit ~/.config/goose/config.yaml (Windows: %APPDATA%\Block\goose\config\config.yaml):
extensions:
doodleworks-mcp:
type: stdio
name: doodleworks-mcp
enabled: true
cmd: npx
args: ["-y", "doodleworks-mcp"]
envs:
OPENAI_API_KEY: "sk-..."
timeout: 300Or use the UI: Sidebar → Extensions → Add custom extension (Type: Standard IO; paste npx -y doodleworks-mcp; add the key). Restart Goose after adding. The viewer is Desktop-only and MCP Apps support is experimental.
Open Settings → Developer → Edit Config (or edit ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}Save, then fully quit and relaunch Claude Desktop (Cmd+Q, not just closing the window), and the viewer renders inline in the chat. (If an older build shows only a text fallback instead of the gallery, update Claude Desktop.)
claude mcp add --scope project --transport stdio --env OPENAI_API_KEY=sk-... \
doodleworks -- npx -y doodleworks-mcp(or commit a project .mcp.json with a top-level mcpServers block). A terminal has no webview, so the interactive viewer does not render here: you'll get tool output, not the gallery. Use a graphical host for the viewer.
Edit ~/.codeium/windsurf/mcp_config.json (Windows: %USERPROFILE%\.codeium\windsurf\mcp_config.json; create it if missing):
{
"mcpServers": {
"doodleworks-mcp": {
"command": "npx",
"args": ["-y", "doodleworks-mcp"],
"env": { "OPENAI_API_KEY": "sk-..." }
}
}
}Hit Refresh in the Cascade MCP panel (or restart Windsurf). Windsurf runs the tools but does not render MCP Apps UI, so the viewer won't appear inline.
The most dependable way to see the viewer is over Streamable HTTP with a dev host (from a cloned repo):
pnpm start # watch-build the viewer + serve on http://localhost:3001/mcpPoint the MCP Apps basic-host or the MCPJam inspector at http://localhost:3001/mcp. Both render the viewer correctly and are the recommended way to develop and to verify the gallery.
💬 Using Doodleworks
With the server connected, just ask your host in plain language: the model calls the tools for you and writes each illustration's prompt; you don't have to.
Example prompt (paste into any connected host):
Use doodleworks to create a set of 6 illustrations explaining how a heat pump heats your home, for homeowners, one idea per image.
Prefer to plan first? Invoke the bundled prompt (it surfaces in hosts that show MCP prompts as /mcp__doodleworks-mcp__plan_illustrations):
Run the doodleworks plan_illustrations prompt for topic "how a heat pump heats your home" (audience: homeowners, count: 6), then call create_illustrations with the plan.
In a graphical host (Cursor, VS Code, Claude Desktop, Goose) the viewer opens with the gallery; in Claude Code (terminal) there's no viewer, so you'll get tool output only (a text summary, not the rendered images).
plan_illustrations(a prompt) turns a topic into a ready-to-render set. Args:topic(required),audience?,count?,spine?(teaching | persuasion | report | product | knowledge-card).create_illustrationsrenders the set (1–10 illustrations, each one paid render) and opens the viewer. Eachpromptis a contraption + Tinku's action + aRequired text only:block; the server adds the character, the concept engine, and the house style automatically.regenerate_illustrationre-renders one image (the viewer's Regenerate button).get_illustrationstreams each rendered image into the viewer (app-only; the model never sees it).
See examples/ for ready-to-run payloads (net-ai-stack.json, keep-cool-in-hot-weather.json, tinku-contraptions.json). The planning docs ship as doc://doodleworks/* resources, so any host has them without a separate skill.
🎛️ Parameters
In normal use the model fills these in from your request. You don't write JSON by hand. But you can steer any of them in plain language ("make it a 21:9 hero", "use high quality", "use the glp-00 style", "render at 2k"). Per-call values override the environment defaults.
create_illustrations (set-wide)
Parameter | Default | What it does |
| (required) | The set, in order: 1–10 entries (each is a per-illustration object, below). |
| none | A title for the set; shown in the viewer and can be burned onto downloaded PNGs. |
|
| Size tier: |
|
| OpenAI image quality: |
|
| Drawing-style reference for the whole set: a library id, a data-URI, or a file inside |
Per illustration (each entry inside illustrations[])
Parameter | Default | What it does |
| (required) | The contraption + Tinku's action + a |
| (required) | Short title for this illustration. |
|
|
|
| none | Optional layout aid: |
| the set-wide value | Overrides the set-wide reference for just this illustration (same accepted values and sandbox). |
plan_illustrations (the planning prompt)
Parameter | Default | What it does |
| (required) | The topic or source to illustrate. |
| inferred from the topic | Who it's for and what they already know. |
| model proposes 4–8 | How many illustrations, as an integer (passed as a string in the schema). |
| inferred from the topic | Narrative spine: |
styleReference resolves in order: per-illustration → set-wide → DOODLEWORKS_STYLE_REF env → none. quality resolves set-wide → DOODLEWORKS_QUALITY env → low. With no style reference anywhere, Doodleworks draws from its built-in text-only style guidance. A tool-supplied styleReference is sandboxed: it must be a library id, a data-URI, or a file inside assets/style-references/; only the operator-set DOODLEWORKS_STYLE_REF env may point elsewhere on disk. The viewer's Regenerate button re-renders one illustration and reuses the set's resolution, quality, and style unless you change the prompt.
🖼️ The viewer
Once a set renders, the viewer opens in the chat. It's fully interactive:
Browse: step through with prev/next or the thumbnail strip; the optional 21:9 hero leads, the 16:9 tips follow.
Streams as it renders: each illustration appears the moment it finishes, so you're never blocked waiting on the whole set.
Zoom: click any illustration to enlarge it.
Regenerate: image models are non-deterministic, so one click re-rolls a single illustration in place (no need to redo the whole set).
Download: save one PNG or the whole set; tick Title on PNG to burn the title into a clean caption band below the artwork.
Matches your host: it adopts the host's light/dark theme and fonts.
🎨 Examples
Each set below was generated by Doodleworks from a single topic: one idea per panel, each reinvented as a contraption Tinku operates. (Full sets live in assets/style-references/.)
How tirzepatide (a GLP‑1/GIP medication) works, from the first injection through dosing and side effects, turning a dense medication leaflet into nine plain-English pictures. Illustrative examples of the drawing style, not medical advice.
Why nicotine isn't the harmful part, the forms NRT comes in, and how it keeps cravings steady.
Messy sources milled into a linked wiki the model curates: question-and-answer without heavy RAG.
The .NET AI libraries explained: the painful early days, one foundation behind many interfaces, and agents that call tools.
⚙️ Configuration
All configuration is via environment variables (set them in your host's env block). Only an image key is required.
Variable | Required | Default | What it does |
| one key | none | OpenAI GPT Image (default provider) |
| one key | none | Gemini 3 Pro Image ("Nano Banana Pro") |
| no | none | Default style-reference id/path (library) |
| no |
|
|
| no |
| Illustrations rendered in parallel (safe for OpenAI tier‑1) |
| no |
| Per-image request timeout (ms); a stalled render fails fast instead of pinning a slot |
| no |
| Port for the dev Streamable HTTP server |
Your image key is read from theserver's environment and used server-side only: never placed in a tool result, sent to the viewer, or exposed to the iframe. Keep it in your host's env block or your shell, not in a committed file. (.env is gitignored and is not auto-loaded; the server reads process.env directly.)
🛠️ Build from source
For contributing, hacking on Tinku, or running the dev viewer inspectors. You need Node.js 22+ and pnpm. No API key is needed to build or test, only to render.
git clone https://github.com/SalZaki/doodleworks-mcp.git
cd doodleworks-mcp
pnpm install
pnpm build # type-checks + bundles the viewer into dist/mcp-app.html
pnpm test # offline test suite (~1s, no API calls)To point a host at your checkout instead of the published package, replace the host config's command with:
"command": "npx",
"args": ["-y", "tsx", "/ABSOLUTE/PATH/doodleworks-mcp/main.ts", "--stdio"]Replace /ABSOLUTE/PATH/doodleworks-mcp with your clone's real path (pwd in the repo; on Windows use C:\\path\\to\\doodleworks-mcp with doubled backslashes).
Always runpnpm build before pointing a host at a local checkout. The host serves the prebuilt viewer (dist/mcp-app.html); a missing or stale bundle is the #1 cause of the viewer not showing up. For live iteration use pnpm start (watch-build + restart on edits).
See CONTRIBUTING.md for the test-first workflow, the Tinku sync gate, and branch/commit conventions.
🧩 How it works
An MCP App is a tool plus a UI resource. create_illustrations renders the illustrations and is registered with _meta.ui.resourceUri, so the host fetches the ui://doodleworks-mcp/viewer.html resource and renders it in a sandboxed iframe.
To keep your context clean and stay under the MCP per-result size cap, no image bytes go in the tool result: it carries only a setId plus illustration metadata. The server keeps freshly-rendered images in a small in-process LRU (last 8 sets), and the viewer pulls each image via a separate get_illustration call (one image per result). Renders happen in the background, so the call returns immediately and images stream into the viewer as they finish.
host LLM ── create_illustrations(illustrations[]) ─▶ server: render × N (OpenAI / Gemini, your key)
model sees: 1-line summary ◀── content (no bytes) cache.set(setId, …)
viewer sees: { setId, metadata } ◀── _meta["doodleworks/set"]
viewer ── get_illustration({ setId, index }) ─▶ one image per result ─▶ iframe galleryBecause images live only in the in-process cache, they survive only as long as the server process (and the last 8 sets). That's the deliberate trade-off of this personal tier: zero infrastructure, no key-handling liability. To persist images or share them across users, that's the signal to move to a hosted tier.
assets/style-references/ is an extensible library: drop in a .png/.jpg/.webp/.gif and it's available immediately as a style reference (it calibrates drawing style only, never the character or text). Set one per-illustration, set-wide, or via DOODLEWORKS_STYLE_REF. See the library README for the full gallery and how it works.
Tinku is the app's own character, defined once in engine.ts as TINKU_CHARACTER: a small solid-black egg-blob worker with two big eyes and mitten-hands, always operating the contraption. Edit that constant to restyle him (and keep references/visual-dna.md in sync via pnpm run check:tinku, enforced by the build).
✅ Status & validation
Personal-tier and experimental, but it works: pnpm install && pnpm build && pnpm test runs green (offline test suite, no API calls), and CI re-runs build + test on Node 22 and 24 with pnpm 10.34.3. The live openai / @google/genai image calls aren't covered by tests; do a live render once after any SDK upgrade.
🤝 Contributing & security
CONTRIBUTING.md: dev setup, the test-first workflow, and the Tinku sync gate.
SECURITY.md: report a vulnerability privately.
CHANGELOG.md: notable changes.
☕ Support this project
Doodleworks is free and maintained in my spare time. If it's useful to you, a coffee helps cover image-API and hosting costs and keeps the updates coming. Thank you.
📄 License
MIT © Salahuddin Zaki. The bundled style-reference images are the project's own artwork; an MIT code license doesn't cover artwork. See the library README.
Available Tools
3 toolscreate_illustrationsCreate Tinku illustrationsA
Render a set of single-idea, hand-drawn Tinku illustrations (each 16:9; an optional 21:9 hero) and open an interactive viewer. Supply one entry per illustration; each prompt is a contraption composition + Tinku's action + its exact English annotations — the server applies the Tinku character, the conceptual engine, and the house style. Use this when the user wants hand-drawn illustrations for an article, post, or explainer.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | A title for the set. | |
| quality | No | Image quality (OpenAI). Lower is faster & cheaper. Defaults to DOODLEWORKS_QUALITY env or 'low'. | |
| resolution | No | Size tier (default 1k; 2k is heavier for inline display). | |
| illustrations | Yes | Illustrations in order (1-10); each is 16:9 by default. An optional 21:9 hero may go first. | |
| styleReference | No | Optional drawing-style reference for the whole set (style calibration only — the clean even line weight, the pure-white background, whitespace, restraint; NEVER the reference's character, layout, or text). Accepts a library id, a data-URI, or a local path. Per-illustration styleReference wins; with none set (and no DOODLEWORKS_STYLE_REF env), output is the engine's text-only style guidance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the server applies the Tinku character, conceptual engine, and house style automatically, and that an interactive viewer opens. However, it does not mention potential side effects (e.g., file creation, cost, wait time) or any rate limits, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, followed by prompt composition guidance and usage context. Every sentence adds value with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple illustrations, prompt rules, style references), the description covers the essential aspects: output format (16:9, optional 21:9), viewer behavior, and server-side defaults. It does not describe return values, but the viewer aspect covers the output experience, and no output schema exists. Sibling tools are not explicitly differentiated, but the description is reasonably complete for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so a baseline of 3 applies. The description adds meaningful context for the prompt parameter, explaining what it should contain and that the server handles character/style automatically. This goes beyond the schema's field descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renders a set of hand-drawn Tinku illustrations and opens an interactive viewer. It specifies the resource and action (render + open viewer), and distinguishes from siblings by focusing on creation of a set, though it does not explicitly name alternative tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'Use this when the user wants hand-drawn illustrations for an article, post, or explainer.' It also provides guidance on supplying prompts. It lacks explicit exclusions or when to prefer get_illustration/regenerate_illustration, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_illustrationFetch one illustrationA
Return the rendered image for one illustration of a previously created set. The viewer calls this for each illustration after create_illustrations so a single tool result never carries the whole set.
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes | Zero-based illustration index. | |
| setId | Yes | The setId returned by create_illustrations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool returns one image at a time and requires a previously created set, which is useful behavioral context. However, it does not mention potential errors, image format, or side effects (which are likely none), so it is not fully comprehensive but adequate for a simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and every word earns its place. It conveys purpose, usage context, and a key behavioral trait without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return value ('rendered image') and the intended workflow ('after create_illustrations', 'one at a time'). It is complete for a straightforward fetch tool, but could add details like image format or error handling for exceptional cases. Overall, it provides sufficient context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (setId and index) clearly described in the schema. The tool description adds minimal new meaning beyond reinforcing that the set was created by create_illustrations and that index refers to an illustration within that set. Baseline 3 applies because the schema already documents the parameters sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a rendered image for one illustration from a previously created set. It uses a specific verb ('Return') and resource ('rendered image for one illustration'), and distinguishes itself from siblings create_illustrations and regenerate_illustration by focusing on fetching a single item rather than creating or regenerating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: the viewer calls this after create_illustrations, and it is used per illustration so that a single tool result never carries the whole set. This implies the correct workflow and differentiates from batch operations, though it does not explicitly mention when not to use it or compare to regenerate_illustration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
regenerate_illustrationRegenerate one illustrationB
Re-render a single illustration with the same (or a tweaked) prompt and aspect. Image models are non-deterministic, so this yields a fresh take. Returns the new image in _meta for the viewer.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Required with setId — zero-based illustration index to replace. | |
| setId | No | If present, also replace the cached image so a viewer reopen sees the regenerated illustration. | |
| title | No | ||
| aspect | No | ||
| prompt | Yes | The illustration composition + 'Required text only:' block (style is re-applied server-side). | |
| quality | No | Image quality (OpenAI). Lower is faster & cheaper. Defaults to DOODLEWORKS_QUALITY env or 'low'. | |
| archetype | No | ||
| resolution | No | ||
| styleReference | No | Optional drawing-style reference for the whole set (style calibration only — the clean even line weight, the pure-white background, whitespace, restraint; NEVER the reference's character, layout, or text). Accepts a library id, a data-URI, or a local path. Per-illustration styleReference wins; with none set (and no DOODLEWORKS_STYLE_REF env), output is the engine's text-only style guidance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It mentions non-determinism and returning the new image in `_meta`, but fails to disclose side effects like replacing the cached image (when setId is used), permission needs, or rate limits. This is a significant gap for a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, immediately states the primary action, and includes a concise rationale for regenerating. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, no output schema, no annotations), the description is incomplete. It leaves critical operational details unaddressed—how to select the illustration, whether the original is replaced, and the relationship between index and setId—making it insufficient for correct agent invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 56%, and the description only adds meaning for 'prompt' and 'aspect' by naming them as tweakable. It does not explain how to target a specific illustration via index/setId, nor clarify parameters like title, archetype, resolution. Description fails to compensate for the schema's gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Re-render a single illustration with the same (or a tweaked) prompt and aspect.' This specific verb and resource distinguish it from siblings like create_illustrations (creating new) and get_illustration (retrieving).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for obtaining a fresh take ('Image models are non-deterministic, so this yields a fresh take') but does not explicitly contrast with create_illustrations or get_illustration, nor provides when-not-to-use conditions. The guidance is implied, not explicit.
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.
3 tool updates
v1.1.1- First observed
create_illustrations - First observed
get_illustration - First observed
regenerate_illustration
TDQS
Scored across 3 tools
Each tool has a distinct purpose: create generates a set, get retrieves a single rendered image, and regenerate re-renders with modifications. There is no overlap in their actions.
All tool names follow a consistent verb_noun pattern (create_illustrations, get_illustration, regenerate_illustration), with clear and uniform structure.
Three tools is well-scoped for a focused illustration generation server, covering creation, retrieval, and regeneration without unnecessary bloat.
The core workflow (create, get, regenerate) is fully covered. A delete or list-all tool is missing, but for the intended use case of generating and viewing a set, the surface is complete enough.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- CanvoraOAuthai.canvora
Turn any idea, URL, doc, or PDF into on-brand visuals: 100+ formats, native in 150+ languages
- MindlifyOAuthco.mindlify
Turn AI conversations into visual knowledge maps. Create, connect, search, and organize thoughts.
Create diagrams in chat, rendered as live interactive draw.io diagrams. 10,000+ searchable shapes.
Turn a topic, URL, or document into a narrated, animated explainer video.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables users to create and interact with hand-drawn sketches and architecture diagrams directly within chat interfaces using Excalidraw. It leverages the Model Context Protocol to provide interactive HTML visualizations with smooth viewport control and fullscreen editing capabilities.-
- AlicenseNot gradedqualityBmaintenanceLet AI agents create interactive visualizations that render live inside your chat — no code required.1BSD 3-Clause
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate interactive Excalidraw diagrams with viewport camera control and fullscreen editing directly in the chat.5,262-
- FlicenseNot gradedqualityDmaintenanceStreams hand-drawn Excalidraw diagrams with smooth viewport camera control and interactive fullscreen editing, enabling diagram creation via natural language.-