Skip to main content
Glama

🎨 Academic Figures MCP

PyPI version VS Code Marketplace CI License Python 3.10+

A multi-step academic figure agent harness for AI agents and non-engineers.

Academic Figures MCP is a workflow harness for multi-step academic reasoning and figure production. PMID ingestion is one structured entry point, but the real product value is helping an agent move through academic planning, concept decomposition, figure-type selection, prompt orchestration, image generation, evaluation, and iteration until it reaches a publication-grade result. Preprints, repositories, and freeform briefs are also first-class planning inputs. MCP exposure and VSX packaging make that workflow usable without requiring engineering-heavy setup.

One-Click Install (VS Code)

Requires uv. The install shape uses uvx --from academic-figures-mcp afm-server, which is shell-neutral across macOS, Linux, and Windows.

Install in VS Code Install in VS Code Insiders

If you want guided setup instead of raw MCP configuration, install the VS Code extension. It supports SecretStorage, env files, and process environment configuration on macOS, Linux, and Windows.

Related MCP server: PapersFlow

Introduction Visual

Academic Figures MCP introduction hero

This hero visual is self-generated by the repository's own MCP workflow and is placed here intentionally so new visitors can see the product story immediately.

Why This Exists

Generating academic figures normally requires:

  1. Manual prompt engineering ✍️

  2. Journal standard research 📚

  3. Color code lookup 🎨

  4. Quality self-review ✅

  5. Retry loops 🔄

This harness automates those steps and exposes them through MCP so agents can work through the academic reasoning process in an orderly way. The image API is supporting infrastructure; the product value is the structured workflow that helps an agent plan and produce academic-grade figures.

It now includes a YAML-backed journal registry so the MCP layer can inject figure requirements for targets such as Nature, Science, JAMA, NEJM, and Lancet without forcing the agent to memorize house rules.

MCP Surface

This server targets the modern MCP Python SDK line and is intended to expose:

  • 14 MCP tools for planning, generation, editing, code-only publication image preparation, evaluation, review write-back, manifest inspection, replay, retargeting, verification, and multi-step refinement workflows

  • resources for discovery of presets, templates, provider capabilities, and image defaults

  • reusable prompts for figure planning and style transformation

Harness Flow

The system is designed as a multi-step academic workflow:

  1. Start from a structured source such as a PMID, an academic objective, or a figure revision request.

  2. Reason about the scientific concept, communication goal, and target figure type.

  3. Organize the request into a structured plan using academic constraints and journal conventions.

  4. Generate the figure through the provider layer.

  5. Run provider-side automated review and persist the manifest.

  6. Optionally add host-side visual review back into the same manifest.

  7. Iterate until the output is publication-grade.

MCP Tools

Tool

Input

Output

plan_figure

pmid or source_title, plus source_kind?, source_summary?, source_identifier?, output_format?, figure_type?, style_preset?

Structured plan with route, constraints, and next-step arguments

generate_figure

planned_payload or a direct source input (pmid / source_title), plus output_format?

Single high-level draw entrypoint with optional internal planning and raster format conversion

edit_figure

image_path, feedback, output_format?

Refined image via the active provider edit API with optional internal raster format conversion

prepare_publication_image

image_path, target_dpi?, width_mm?, height_mm?, output_format?, output_path?

Pure-code Pillow resize/DPI metadata pass for 600 DPI publication delivery; no generation provider is used

evaluate_figure

image_path, figure_type?

8-domain scorecard with suggestions

batch_generate

pmids: list, figure_type?

Batch generation results

composite_figure

panels, labels, title, caption?, citation?

Publication-ready multi-panel montage with labels and DPI metadata

list_manifests

limit?

Recent manifest metadata for replay or retargeting

get_manifest_detail

manifest_id, include_lineage?

Full manifest payload, lineage chain, and flattened review timeline

replay_manifest

manifest_id, output_dir?

Re-run a saved manifest using the original prompt and provider

record_host_review

manifest_id, passed, summary, critical_issues?, reviewer?

Persist a Copilot or host-side visual verdict back into the review harness

retarget_journal

manifest_id, target_journal, output_dir?

Regenerate with a new journal profile plus before/after diff

verify_figure

image_path, expected_labels?, figure_type?, language?

Standalone quality-gate verdict with domain scores and exact-label verification

multi_turn_edit

image_path, instructions[], max_turns?

Iterative edit session for progressive refinement without restarting from scratch

generate_figure is now the default high-level entrypoint. You can pass a PMID, a non-PMID source brief such as a preprint or repository summary, or a fully prepared planned_payload. When the request starts from source inputs, the server plans internally first and then renders. plan_figure remains available when a host explicitly wants to inspect or edit the plan before drawing.

If you want a specific delivered file type, pass output_format such as png, gif, jpeg, or webp. MCP now performs raster-format conversion internally after generation or editing. SVG stays pass-through only; it is not rasterized automatically.

Use prepare_publication_image when an existing raster image needs a journal-style 600 DPI delivery file without any AI generation. Pass width_mm and/or height_mm for the final print size so the tool can resample to the correct pixel dimensions; if no print size is supplied, it preserves the pixels and writes DPI metadata only.

Reproducibility & Retargeting

  • Every successful generation now writes a manifest to .academic-figures/manifests (override with AFM_MANIFEST_DIR).

  • list_manifests remains the summary surface; get_manifest_detail loads the full manifest body plus lineage-aware review history.

  • list_manifests + replay_manifest let you rerun saved prompts without rebuilding the plan.

  • retarget_journal injects a new journal profile, regenerates, and returns a before/after diff of the profile metadata.

Multi-Panel & Composite Assembly

  • planned_payload now accepts render_route=composite_figure with a panels list to assemble montage figures.

  • The built-in composite_figure tool remains available for direct multi-panel assembly with labels, caption, and DPI metadata.

CJK Text Fidelity & Self-Review

  • plan_figure now accepts expected_labels so exact text strings can be propagated into prompt construction and later verification.

  • Text-heavy CJK requests can be escalated toward higher-fidelity model selection and SVG-oriented routes automatically.

  • generate_figure, replay_manifest, and retarget_journal automatically run provider-side review when a verifier is configured, and they persist quality_gate, review_summary, and review_history into the manifest.

  • verify_figure lets you run the same provider-side quality gate independently against any generated image.

  • record_host_review is the write-back path for Copilot or another host model after it inspects the image externally.

  • The dual-route review contract accepts provider_vision and host_vision, but the persisted policy is now provider_vision_required_host_optional.

  • provider_vision is the baseline gate: it must run and pass for requirement_met=true.

  • host_vision is supplemental: it can add a second pass or extra critique, but it cannot replace a failed or missing provider baseline.

  • get_manifest_detail returns the full review history so a host can inspect the current verdict, all recorded review events, and lineage context without rereading raw JSON files.

  • multi_turn_edit keeps an edit session alive across multiple instructions, which is useful when fixing garbled labels or layout issues iteratively.

Product Positioning

The core differentiator is not simply "connected to an image model API".

  • It is a complete academic-figure agent harness.

  • It helps agents reason through academic concepts before they generate.

  • It is exposed through MCP so multiple AI hosts can drive the same workflow.

  • It is packaged as a VSX experience so non-engineers can adopt it quickly.

  • Provider integrations such as Google Gemini or OpenRouter are replaceable infrastructure behind that harness.

Competitive Landscape

The current GitHub- and web-based benchmark is documented in docs/competitive-landscape.md.

That document separates:

  • direct competitors

  • adjacent reusable wheels

  • strengths worth absorbing

  • core product differences we should not copy away

Project Documents

Key repo-level documents:

Generated Visuals & QA

The following three visuals were generated by this repository's own MCP workflow and then reviewed through the built-in evaluate_figure path.

This section is intentionally self-hosting: each image below was generated from the payload files under .academic-figures/jobs, and each QA report was produced by this same repository through scripts/start_afm_local.py run evaluate against the generated output image. These are not manually drawn marketing assets or hand-written review notes.

Introduction Visual QA

QA summary:

  • Score: 5.0/5.0

  • Strengths: clear story from academic input to MCP workflow hub to publication-grade outputs

  • Critical issues: none identified

  • Full report: repo-intro-hero-eval.json

Architecture Visual

Academic Figures MCP architecture v2

QA summary:

  • Score: 5/5

  • Strengths: explicit DDD layering, clear Presentation -> Application -> Domain <- Infrastructure direction, and repo-specific integration edges

  • Critical issues: none identified

  • Full report: repo-architecture-v2-eval.json

Workflow Visual

Academic Figures MCP workflow flowchart

QA summary:

  • Score: 4.6/5

  • Strengths: one clean main path, strong readability, high visual polish, and the duplicate PAYLOAD error is removed in v2

  • Critical issues: no formal citation or source attribution is shown inside the figure

  • Full report: repo-workflow-flowchart-eval.json

Quick Install

git clone https://github.com/u9401066/academic-figures-mcp.git
cd academic-figures-mcp
uv sync
# then copy env.example to env and fill one provider key,
# or provide GOOGLE_API_KEY / OPENROUTER_API_KEY / OPENAI_API_KEY
# through your shell or MCP host config

Local Env File

For local runs and smoke tests, copy env.example to env and fill exactly one provider section.

Supported formats:

  • KEY=value

  • export KEY=value

  • set KEY=value

Provider examples:

  • AFM_IMAGE_PROVIDER=google with GOOGLE_API_KEY

  • AFM_IMAGE_PROVIDER=openrouter with OPENROUTER_API_KEY

  • AFM_IMAGE_PROVIDER=openai with OPENAI_API_KEY for gpt-image-2

  • AFM_IMAGE_PROVIDER=ollama with OLLAMA_BASE_URL and OLLAMA_MODEL

  • AFM_MANIFEST_DIR=.academic-figures/manifests to relocate persisted generation manifests

Smoke Test

You can run a sanitized end-to-end smoke test with:

uv run python scripts/env_smoke_test.py env

The script only prints variable presence and a compact result summary. It never prints API key values.

Usage

VS Code Copilot

Recommended package-mode install for macOS, Linux, and Windows users who do not want a local checkout:

{
  "servers": {
    "academicFigures": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from",
        "academic-figures-mcp",
        "afm-server"
      ],
      "env": {
        "AFM_IMAGE_PROVIDER": "google",
        "GOOGLE_API_KEY": "${input:googleApiKey}"
      }
    }
  }
}

For local repository development, add to your Copilot MCP settings (.vscode/mcp.json):

{
  "servers": {
    "academicFigures": {
      "type": "stdio",
      "envFile": "${workspaceFolder}/env",
      "command": "uv",
      "args": [
        "run",
        "--project",
        "${workspaceFolder}",
        "python",
        "-m",
        "src.presentation.server"
      ]
    }
  }
}

This launch shape is shell-neutral and works across Windows, macOS, and Linux as long as uv is installed. It also keeps the project root explicit through --project ${workspaceFolder} while loading secrets from the repo-root env file via envFile.

Manual Local Startup

Cross-platform launcher:

uv run python scripts/start_afm_local.py server

Run the first figure directly through afm-run:

uv run python scripts/start_afm_local.py run generate --pmid 41657234 --language zh-TW --output-size 1024x1536
uv run python scripts/start_afm_local.py run generate --pmid 41657234 --output-format webp

This direct --pmid path is a compatibility bridge. It now performs the planning step internally before rendering.

Inject a journal profile explicitly when you want the planner and renderer to enforce a house style:

uv run python scripts/start_afm_local.py run plan --pmid 41657234 --target-journal Nature
uv run python scripts/start_afm_local.py run generate --pmid 41657234 --target-journal JAMA

Plan directly from a non-PMID source such as a repository or preprint brief:

uv run python scripts/start_afm_local.py run plan --source-title "HyperHierarchicalRAG repository overview" --source-kind repo --source-identifier github.com/zzstoatzz/hyperhierarchicalrag --source-summary "Explain the repository architecture, agent workflow, and retrieval hierarchy."

Run generic asset generation through the same public tool using a JSON payload file:

uv run python scripts/start_afm_local.py run generate --payload-file .academic-figures/jobs/icon-request.json --output-dir .academic-figures/outputs

The same wrapper also supports direct planning and evaluation:

uv run python scripts/start_afm_local.py run plan --pmid 41657234
uv run python scripts/start_afm_local.py run plan --pmid 41657234 --output-format jpeg
uv run python scripts/start_afm_local.py run plan --source-title "Acute stroke treatment preprint" --source-kind preprint --source-identifier arXiv:2504.01234 --source-summary "Summarize the proposed intervention workflow and outcome framing."
uv run python scripts/start_afm_local.py run evaluate --image-path .academic-figures/outputs/your-file.png

For exact-label generation and post-generation QA on text-heavy figures:

uv run python scripts/start_afm_local.py run plan --pmid 41657234 --language zh-TW --expected-label "腦中風" --expected-label "血栓移除術"
uv run python scripts/start_afm_local.py run verify --image-path .academic-figures/outputs/your-file.png --language zh-TW --expected-label "腦中風"

Windows PowerShell shortcut:

powershell -NoProfile -ExecutionPolicy Bypass -File scripts/start_afm_local.ps1 server

Then just ask:

  • "Generate a flowchart for PMID 41657234"

  • "Help me plan the right academic figure structure for PMID 41657234 before generating it"

  • "幫我做 PMID 41657234 的 consensus flowchart"

  • "What figure type should I use for PMID 34567890?"

  • "Plan a repository overview figure for https://github.com/zzstoatzz/HyperHierarchicalRAG"

  • "Turn this preprint abstract into a publication-grade mechanism figure plan"

  • "Help me turn this academic concept into a publication-grade figure plan"

The VS Code extension can now run plan, generate, transform, and evaluate commands directly through afm-run instead of copying prompts into chat.

Claude Code / Cursor / Any MCP Host

Any MCP-compatible agent can use these tools directly.

Recommended package-mode shape for Claude Desktop or any MCP host that accepts command plus args:

{
  "mcpServers": {
    "academic-figures": {
      "command": "uvx",
      "args": [
        "--from",
        "academic-figures-mcp",
        "afm-server"
      ],
      "env": {
        "AFM_IMAGE_PROVIDER": "google",
        "GOOGLE_API_KEY": "your_google_api_key"
      }
    }
  }
}

If your MCP host prefers a checked-out repository instead of uvx, keep the repo path absolute and use the existing uv run --project /absolute/path/to/academic-figures-mcp python -m src.presentation.server form.

For local development with the newer MCP SDK transport options, the server defaults to stdio, and can also be started with MCP_TRANSPORT=streamable-http for HTTP-based inspection workflows.

Cross-Platform Notes

  • Package mode is the most portable install path: uvx --from academic-figures-mcp afm-server works without shell-specific quoting on macOS, Linux, and Windows.

  • Local checkout mode is also cross-platform: use scripts/start_afm_local.py on macOS/Linux and scripts/start_afm_local.ps1 on Windows PowerShell.

  • Environment parsing already accepts KEY=value, export KEY=value, and set KEY=value, so the same env profile can be reused across Bash, Zsh, Fish-style exports, and PowerShell/CMD-oriented files.

  • The VS Code extension falls back to package mode through uvx when no local source tree is detected, which is the safest route for non-developer users on all three platforms.

Architecture

┌──────────────────────┐
│  Your AI Agent       │     VS Code Copilot, Claude Code,
│  (Copilot, Claude,   │     OpenClaw, Hermes, etc.
│   any MCP host)      │
└──────────┬───────────┘
           │  MCP stdio / streamable-http
           ▼
┌──────────────────────────┐
│  Academic Figures MCP    │
│  ┌────────────────────┐  │
│  │ plan_figure        │  │
│  │ generate_figure    │  │
│  │ edit_figure        │  │  5 Tools
│  │ evaluate_figure    │  │
│  │ batch_generate     │  │
│  └────────┬───────────┘  │
│           │               │
│  ┌────────▼─────────────┐ │
│  │ Core Orchestrator    │ │
│  │                      │ │
│  │ 1. fetch_paper()     │ │  → PubMed E-utilities
│  │ 2. classify_type()   │ │  → Keyword + structured planning heuristics
│  │ 3. build_payload()   │ │  → reusable render request / prompt pack
│  │ 4. generate_image()  │ │  → single public renderer (Google / OpenRouter / Ollama SVG)
│  │ 5. evaluate()        │ │  → 8-domain vision scoring or local critique
│  │ 6. iterate()         │ │  → harness-guided revision loop
│  └──────────────────────┘ │
└──────────────────────────┘

Figure Types & Auto-Classification

The MCP auto-classifies papers into optimal figure types:

Type

Best For

Example Papers

Flowchart

Consensus, guidelines

"SSC 2026 Sepsis Guidelines"

Mechanism

Drug mechanisms, pathways

"Sugammadex encapsulation mechanism"

Comparison

RCTs, meta-analyses

"Crystalloid vs Colloid fluid resuscitation"

Infographic

Reviews, overviews

"Perioperative fasting consensus"

Timeline

Historical, longitudinal

"Evolution of general anesthesia"

Anatomical

Surgical techniques, blocks

"Regional anesthesia approaches"

Data Visual

PK/PD, dose-response

"Propofol PK modeling"

Knowledge Base (Included)

This repo ships with 9 curated reference assets:

File

Content

prompt-templates.md

7-block prompt templates for 9 figure types

anatomy-color-standards.md

Medical illustration color coding reference

journal-figure-standards.md

Nature/Lancet formatting requirements

journal-profiles.yaml

Machine-readable journal registry for automatic prompt injection

gemini-tips.md

Gemini 3.1 Flash prompt engineering best practices

model-benchmark.md

NB2 vs GPT Image 1.5 comparison data

code-rendering.md

matplotlib/Python figure generation reference

scientific-figures-guide.md

Scientific figure design principles

ai-medical-illustration-evaluation.md

8-domain evaluation rubric

Planned Rendering Ecosystem

This project is no longer framed as a single-route Gemini prompt server. The current design direction is a multi-route figure system:

  • Matplotlib + SciencePlots for deterministic, publication-style charts

  • D2 + Mermaid for structured diagrams and editable text-first figure specs

  • FigureFirst + CairoSVG for precise multi-panel assembly and export

  • Excalidraw or tldraw as future interactive vector-editing layers inside the VS Code extension

  • Kroki as an optional self-hosted render gateway for compatibility with multiple DSL engines

Development

uv sync
uv run python -m src.presentation.server

Provider-backed image generation can run through Google Gemini, OpenRouter, OpenAI gpt-image-2, or local Ollama SVG brief rendering. The Google path follows the current Google Gen AI SDK pattern:

from google import genai
from google.genai import types

License

Apache License 2.0. See LICENSE.

Composite Engine (Multi-Panel Layout)

The composite module solves Gemini's weakness with multi-panel figures. Instead of generating a single image with all panels (which often fails on spatial layout, numbering, and mixed styles), it:

  1. Generates each panel independently with focused prompts

  2. Composites them using Pillow with precise pixel-level layout

  3. Programmatic text overlay — 100% accurate labels, no misspellings

Composite Usage

from src.infrastructure.composite import CompositeFigure, PanelSpec
from src.server import generate_figure

# Step 1: Generate panels separately
left = generate_figure(pmid="41657234", figure_type="anatomy")
right = generate_figure(pmid="41657234", figure_type="ultrasound")

# Step 2: Composite
comp = CompositeFigure()
comp.add_panel(
    PanelSpec(prompt="...", label="A", panel_type="anatomy"),
    left["image_path"]
)
comp.add_panel(
    PanelSpec(prompt="...", label="B", panel_type="ultrasound"),
    right["image_path"]
)
comp.set_title("Interscalene Brachial Plexus Block")
comp.set_citation("PMID 41657234 · Regional Anesthesia")
comp.compose("interscalene_block.pdf")

MCP Tool: composite_figure

composite_figure(
    panels=[["left.png", "anatomy"], ["right.png", "ultrasound"]],
    labels=["A", "B"],
    title="..."
)

Layout Specs

Property

Value

Canvas

2400 × 1600 px (8" × 5.33" @ 300 DPI)

Format

Double column (~183mm width, Nature standard)

Labels

A/B/C with pill-shaped background

Footer

Caption + PMIDs + citation

Divider

Vertical line between panels

Available Tools

14 tools
batch_generateA

Generate academic figures for multiple PMIDs in sequence.

Batch mode validates the full PMID list up front and propagates language, output size, and output directory into every generation request.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidsYes
languageNozh-TW
output_dirNo
figure_typeNoauto
output_sizeNo1024x1536

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses important behaviors: upfront validation of the entire PMID list and propagation of language, output size, and output directory into every request. These are meaningful operational details beyond the tool's basic purpose, though it omits potential error behavior or return specifics.

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 sentences, front-loaded with the core purpose, followed by a concise behavioral qualifier. Every word contributes value; no filler or redundancy.

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 batch tool with an output schema, the description covers the key contextual aspects: what it does, sequential processing, validation, and parameter propagation. It does not mention scalability limits or failure handling, but the presence of an output schema partially fills the return-value gap, making this adequate though not exhaustive.

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 compensate. It adds context for three parameters (language, output size, output directory) by explaining they are propagated to all generations, which helps clarify their role. However, it says nothing about the remaining parameters (pmids, figure_type), leaving some gaps in semantics.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Generate academic figures for multiple PMIDs in sequence.' It uses a specific verb ('Generate'), identifies the resource ('academic figures'), and distinguishes this batch tool from single-generation siblings by emphasizing 'multiple PMIDs' and 'batch mode.'

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?

The description implies the primary use case: when multiple PMIDs need figure generation. It says 'Batch mode validates the full PMID list up front...' which signals this is the batch counterpart to a single-PMID tool. However, it does not explicitly name alternatives or state exclusions, so it stops short of full guidelines.

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

composite_figureC

Composite multiple panel images into a publication-ready figure.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
labelsYes
panelsYes
captionNo
citationNo
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.2/5.0
Behavior1/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It does not mention whether input images are modified, what output format is produced, or any side effects, offering minimal transparency.

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

Conciseness3/5

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

The single sentence is concise and front-loaded with the core purpose, earning its place. However, it is under-specified for the tool's complexity, making the length inappropriate for the richness of available schema information.

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

Completeness1/5

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

Given six parameters, no annotations, and an output schema, the description is severely incomplete. It does not describe how panels correspond to labels, the nature of the output, or any processing details, making it inadequate for correct tool invocation.

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%, and the description adds no information about the six parameters. It fails to explain the roles of panels, labels, title, caption, citation, or output_path, leaving the agent without semantic context beyond names.

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

Purpose5/5

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

The description clearly states the tool's function: compositing multiple panel images into a publication-ready figure. The verb 'composite' and resource 'multiple panel images' specify the action and target, distinguishing it from siblings like generate_figure or edit_figure.

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 use this tool versus alternatives. It does not mention any prerequisites, typical use cases, or exclusions, leaving the agent to infer usage solely from the tool name.

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

edit_figureA

Refine an academic figure using natural language feedback.

output_format: Optional final raster delivery type such as png, gif, jpeg, or webp.

Examples: "箭頭改紅色", "標題字大一點", "Add PMID in footer"

ParametersJSON Schema
NameRequiredDescriptionDefault
feedbackYes
image_pathYes
output_pathNo
output_formatNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output 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. It discloses the output_format parameter and gives examples of feedback, which is helpful, but it does not explain whether the original image is preserved, what prerequisites exist (e.g., existing image_path accessibility), or what the return value is. The description is not misleading but omits key behavioral traits.

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 concise, with the core purpose stated in the first sentence, followed by one relevant parameter detail and practical examples. Every sentence earns its place, and the structure is front-loaded with the most important information. No fluff or repetition.

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?

The tool has moderate complexity (4 params, no annotations, and an output schema is indicated but not detailed). The description covers the basic purpose and a key parameter, but it does not explain how this tool differs from multi_turn_edit, what image types are supported, or any operational constraints. It is adequate for a simple tool but not fully complete for an agent to confidently select it.

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?

The schema has no descriptions (0% coverage), so the description must compensate. It does provide valuable detail for output_format ('Optional final raster delivery type such as png, gif, jpeg, or webp') and uses examples to illustrate the feedback format. However, the other three parameters (image_path, output_path, feedback) rely on self-explanatory names and receive no explicit clarification, leaving the compensation incomplete.

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

Purpose5/5

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

The description clearly states a specific action ('Refine an academic figure') and the method ('using natural language feedback'). This distinguishes it from sibling tools like generate_figure (creation), verify_figure (validation), and composite_figure (combination), all of which have different verbs and resources.

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

Usage Guidelines3/5

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

The description implies this tool is for refining existing figures with feedback, and the examples show the kind of natural language input expected. However, it does not explicitly state when to use this over siblings like multi_turn_edit, nor does it mention any exclusions or alternative tools. Usage context is present but not fully persuasive.

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

evaluate_figureC

Evaluate an academic figure using the 8-domain quality checklist.

Domains: text accuracy, anatomy, color, layout, scientific accuracy, legibility, visual polish, citation.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_pathYes
figure_typeNoinfographic
reference_pmidNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

With no annotations provided, the description carries full behavioral context. It lists the eight evaluation domains, which gives insight into what aspects are assessed. However, it does not disclose whether the tool is read-only, whether it writes any files, or what the output schema represents beyond what might be in the external output schema.

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 extremely concise, with one main sentence and a list of domains. It is front-loaded with the verb and resource, and every word contributes to understanding the tool's purpose. There is no fluff or repetition.

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?

Given the tool has three parameters and a nontrivial evaluation process (8 domains), the description is too thin. It does not explain how the checklist is applied, what inputs are used, or any constraints. Although an output schema exists, it is not included here, and the description alone leaves the agent under-informed for correct invocation.

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% and the description provides no explanation of the parameters (image_path, figure_type, reference_pmid). The parameter names are self-explanatory to some degree, but the description fails to add any meaning or clarify defaults or formats, making the tool ambiguous for an agent.

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 clearly states the tool evaluates an academic figure using a specific 8-domain quality checklist and lists the domains. It identifies the resource type (academic figure) and the action (evaluate), but it does not explicitly distinguish itself from the sibling tool 'verify_figure' which may also assess figures.

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 guidance is provided on when to use this tool versus alternatives. The description implies its use for figure evaluation but fails to mention prerequisites, exclusions, or comparison to the similar 'verify_figure' tool. There is no explicit 'when to use' or 'when not to use' context.

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

generate_figureA

Generate a publication-ready visual asset.

Single high-level entrypoint: callers may provide planned_payload directly, or pass a PMID / generic source brief and let the use case plan internally before rendering.

output_format: Optional final raster delivery type such as png, gif, jpeg, or webp. MCP applies the conversion internally after generation when possible.

figure_type: auto | flowchart | mechanism | comparison | infographic | anatomical | timeline | data_visualization

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidNo
languageNozh-TW
output_dirNo
figure_typeNoauto
output_sizeNo1024x1536
source_kindNopaper
source_titleNo
output_formatNo
source_summaryNo
target_journalNo
planned_payloadNo
source_identifierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description adds some behavioral context: internal planning when a source brief is provided, and internal output_format conversion 'when possible.' However, it omits side effects like file overwriting, permission needs, or failure modes, which are important for a generation 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?

The description is under 100 words and front-loaded with the core purpose. The phrase 'Single high-level entrypoint' is slightly redundant with 'let the use case plan internally,' but overall every sentence earns its place.

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?

The high-level workflow is clear, and the output schema exists so return values need not be described. However, many input parameters remain unexplained, and the relationship to sibling tools like plan_figure or edit_figure is only implicit, leaving room for more guidance.

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?

There are 12 parameters with 0% schema description coverage, so the description must compensate. It explains output_format and figure_type in some detail and mentions planned_payload/source brief, but leaves most parameters (language, output_dir, output_size, source_kind, target_journal, etc.) undocumented, providing only partial compensation.

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

Purpose5/5

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

The description clearly states the tool generates a publication-ready visual asset, with a specific verb and resource. It distinguishes itself as the 'single high-level entrypoint' among siblings, and lists supported figure types, giving clear scope.

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?

The description explains when to use the tool: as a high-level entrypoint where callers can provide a planned_payload or a source brief. It implicitly differentiates from more granular siblings like plan_figure and edit_figure, but does not explicitly state when not to use it or name alternatives.

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

get_manifest_detailA

Load one manifest with full review history and lineage context.

ParametersJSON Schema
NameRequiredDescriptionDefault
manifest_idYes
include_lineageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It states the return context (review history, lineage) but does not explicitly confirm read-only behavior or mention any side effects, permissions, or limitations. The mention of 'load' hints at a safe read operation, but it is not explicitly stated.

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 that conveys the core purpose without any fluff. Every word adds value.

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?

The tool has an output schema, so return values need not be explained. The description covers the main action and key context. It lacks mention of the include_lineage toggle and usage distinctions from siblings, but overall it is reasonably complete for a fetch-detail 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 description coverage is 0%, so the description must compensate. It adds meaning to include_lineage via 'lineage context' and implies manifest_id as the target manifest. However, it does not explain the boolean's toggle capability or provide additional syntax detail. The schema's default true and field names offer some inherent clarity.

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

Purpose5/5

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

The description clearly specifies a single manifest load with full review history and lineage context, distinguishing it from list_manifests and other sibling tools. The verb 'load' and the qualifiers make the tool's scope unambiguous.

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 explicit guidance on when to use this tool versus alternatives like list_manifests or replay_manifest is provided. The description implies use for detailed single-manifest inspection but does not state exclusions or alternative scenarios.

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

list_manifestsA

List recent manifests for replay or retargeting.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. 'List' implies a read-only operation and 'recent' suggests a time-ordered subset, but there is no explicit statement about side effects, ordering, or pagination. For a simple list tool, this is adequate but not rich.

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 wasted words. It states the action, object, and purpose efficiently.

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 low-complexity list operation with an output schema present, the description adequately conveys purpose and scope. The term 'recent' is somewhat vague, but given the optional limit parameter and domain context from siblings, no critical information is missing.

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

Parameters3/5

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

Schema coverage is 0%, but the only parameter 'limit' is self-explanatory with a default of 20. The description does not mention the parameter, but the schema's property name and default provide sufficient semantic clarity; little compensation is needed.

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

Purpose5/5

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

The description uses the specific verb 'List' with resource 'manifests' and adds purpose 'for replay or retargeting'. This clearly distinguishes it from siblings like replay_manifest, retarget_journal, and get_manifest_detail.

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 provides clear context by indicating the tool is for viewing recent manifests in preparation for replay or retargeting operations. It does not explicitly name alternatives or exclusions, but the sibling tool names make the intended use obvious.

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

multi_turn_editA

Iteratively refine a figure through a multi-turn editing session.

Sends multiple editing instructions turn-by-turn to fix CJK labels, adjust layout, or improve details. Each turn builds on the previous result for precise iterative corrections.

instructions: List of natural language editing instructions applied in order. Examples: ["修正標題為「急性冠心症處置流程」", "箭頭改紅色", "加大字體"]

ParametersJSON Schema
NameRequiredDescriptionDefault
max_turnsNo
image_pathYes
instructionsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of disclosing behavior. It mentions that each turn builds on the previous result and instructions are applied in order, which is valuable. However, it omits details like whether the original figure is modified or a new file is produced, limits on turns (max_turns), and error handling.

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 concise and front-loaded, stating the core purpose first, then adding useful details and examples. The parameter explanation is included inline, which is acceptable given the schema lacks descriptions, but it could be tightened.

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?

The description covers the core behavior and gives examples, and an output schema exists so return values need not be detailed. However, it lacks explicit guidance on max_turns semantics, path requirements, and how to compare with single-turn edit_figure, making it only partially complete for an agent.

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 explain all parameters. It only explains 'instructions' with examples, while 'image_path' and 'max_turns' are left unspecified. Although 'image_path' is self-explanatory, 'max_turns' is not described at all, leaving a significant gap.

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

Purpose5/5

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

The description clearly states the tool's purpose: iteratively refine a figure via multi-turn editing. It uses specific verbs ('refine', 'edit') and identifies the resource ('figure'), while distinguishing from siblings like edit_figure by emphasizing the multi-turn, sequential nature.

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?

The description conveys when to use the tool (for iterative corrections needing multiple dependent edits) and provides concrete examples. It doesn't explicitly name alternatives or state when not to use it, but the multi-turn framing implies a preference over single-turn alternatives.

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

plan_figureA

Plan the best figure type, route, and guardrails before generation.

This tool returns a structured plan so an MCP host can decide whether to use direct image generation, SVG-style rendering, or deterministic chart routes.

Provide either pmid or a generic source brief. Generic planning supports preprints, repositories, and freeform briefs by passing source_title plus optional source_summary and source_identifier.

output_format: Optional final raster delivery type such as png, gif, jpeg, or webp. The planner stores this preference inside planned_payload for downstream rendering.

expected_labels: Optional list of exact text labels (especially CJK) the figure must contain. Enables CJK text fidelity guardrails and model escalation.

ParametersJSON Schema
NameRequiredDescriptionDefault
pmidNo
languageNozh-TW
figure_typeNoauto
output_sizeNo1024x1536
source_kindNopaper
source_titleNo
style_presetNojournal_default
output_formatNo
source_summaryNo
target_journalNo
expected_labelsNo
source_identifierNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/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 of behavioral disclosure. It explains that the tool returns a structured plan, stores the output_format preference in planned_payload, and enables CJK text fidelity guardrails and model escalation. It does not mention any side effects or state changes, but the planning nature and the explicit 'before generation' phrasing imply a non-destructive operation.

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

Conciseness4/5

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

The description is well-structured with a clear opening purpose and separates key parameter guidance into labeled paragraphs. It is appropriately sized for a planning tool with many optional inputs, though some sentences could be tightened. Overall, it earns its place without being bloated.

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 12 parameters, an output schema, and no annotations, the description provides essential context for the tool's core decision-making but leaves several parameters unexplored. It covers the main input modes and two critical guardrail/format options, but does not fully explain how to set figure_type, output_size, style_preset, or source_kind. The existence of an output schema reduces the need to describe return values, but the input-side completeness is only partial.

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%, and 12 parameters exist, so the description must add meaning. It explains output_format and expected_labels in detail, and clarifies the interaction between pmid and the generic source fields (source_title, source_summary, source_identifier). However, it omits semantics for many other parameters (figure_type, output_size, style_preset, target_journal, etc.), leaving their meaning to rely on schema titles and defaults.

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

Purpose5/5

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

The description opens with 'Plan the best figure type, route, and guardrails before generation', which states a specific verb and resource. It clearly distinguishes the tool from siblings by emphasizing its pre-generation planning role and its output of a structured plan for choosing among direct image generation, SVG-style rendering, or chart routes.

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?

The description provides clear usage context: it is meant to be used 'before generation' and explicitly describes the two input modes ('Provide either pmid or a generic source brief'). It also explains when generic planning is appropriate. However, it does not explicitly name alternative tools or state when to prefer them, so it stops short of full exclusion guidance.

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

prepare_publication_imageA

Resize a raster image and write publication DPI metadata using code only.

This tool never calls image-generation providers. To truly meet 600 DPI for final publication size, pass width_mm and/or height_mm. Without a final print size it preserves pixel dimensions and writes target_dpi metadata only.

output_format: Optional raster delivery type: png, jpeg, or tiff.

ParametersJSON Schema
NameRequiredDescriptionDefault
width_mmNo
height_mmNo
image_pathYes
target_dpiNo
output_pathNo
allow_upscaleNo
output_formatNo
preserve_aspect_ratioNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. It discloses major behavioral traits: local code-only operation, no provider calls, and the difference between resizing vs metadata-only when print dimensions are omitted. However, it does not state whether the original file is overwritten, where the output goes, or if existing files are modified, which is important for a tool that resizes images.

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 compact and front-loaded, with a clear first sentence followed by only the most essential caveats and a terse parameter note. No sentence is wasted, and the layout makes key behavior easy to scan.

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?

Despite having an output schema, the tool has 8 parameters, no annotations, and missing descriptions for half of them. The description does not explain output_path behavior, upscaling implications, aspect ratio handling, or explicit selection criteria versus sibling tools, leaving notable gaps for an agent to operate reliably.

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?

The description adds meaning for width_mm/height_mm (final print size), target_dpi (metadata value), and output_format (raster delivery type). But schema coverage is 0%, and parameters like image_path, output_path, allow_upscale, and preserve_aspect_ratio receive no explanation beyond their titles/defaults, leaving the agent to infer their semantics.

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

Purpose5/5

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

The opening sentence uses a specific verb and object: 'Resize a raster image and write publication DPI metadata using code only.' It clearly distinguishes from sibling generation tools by stating it 'never calls image-generation providers,' so the agent knows this is a local post-processing operation.

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?

The description gives concrete usage direction: pass width_mm and/or height_mm to truly meet 600 DPI, and explains the fallback behavior without print size. It does not explicitly name alternative tools, but the 'code only' and 'never calls image-generation providers' context helps disambiguate from generation-focused siblings.

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

record_host_reviewB

Record a host-side visual review back into a persisted manifest.

Use this when Copilot or another host model inspects the generated image directly and needs to write its verdict back into the review harness.

ParametersJSON Schema
NameRequiredDescriptionDefault
passedYes
summaryYes
reviewerNocopilot_host
manifest_idYes
critical_issuesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It discloses that this is a write operation, but it doesn't explain side effects like whether it overwrites existing reviews, manifest existence requirements, idempotency, or any potential errors. The description adds minimal behavioral context beyond the operation itself.

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 sentences, front-loaded with the action, and every sentence provides useful context. It is efficiently written without unnecessary detail, making it both concise and well-structured.

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 five parameters, no annotations, and a 0% parameter coverage, the description is too sparse to be fully self-contained. It explains the high-level purpose but omits critical context like prerequisites (e.g., the manifest must exist), behavior on duplicate reviews, and the shape of the output, despite the presence of an output schema. The tool is simple enough that the description might suffice for a basic agent, but it leaves several gaps.

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?

The schema has 0% description coverage, and the description does not explain any of the five parameters (manifest_id, passed, summary, reviewer, critical_issues). It does not clarify the meaning of 'passed', the content of 'summary', or how 'critical_issues' relates to the verdict, leaving the agent to rely solely on parameter names.

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

Purpose5/5

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

The description clearly states a specific verb ('Record') and resource ('a host-side visual review' into 'a persisted manifest'), and explicitly distinguishes the use case from siblings by focusing on host-model inspection. It also mentions 'review harness' which adds context, making the purpose 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?

The description says 'Use this when Copilot or another host model inspects the generated image directly and needs to write its verdict back into the review harness,' providing explicit conditions for use. However, it doesn't name alternatives or give when-not-to-use guidance, so it stops short of fully covering the dimension.

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

replay_manifestC

Replay a previously saved manifest using the same prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNo
manifest_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It only describes the basic action, but does not mention what happens during replay (e.g., overwriting outputs, network access, required permissions) or any side effects. The phrase 'using the same prompt' adds a small detail but is insufficient.

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 unnecessary words, earning a perfect score for conciseness and structure. Every word contributes to the core message.

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?

The description is too sparse for a tool with an optional output_dir parameter and no annotation context. It does not explain the replay behavior's relationship to other tools or the effect of output_dir, making it incomplete despite the output schema covering return values.

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?

The schema has two parameters (manifest_id, output_dir) but the description mentions neither, and schema coverage is 0%. The description fails to add meaning to the parameters, leaving users to infer from names alone. No compensation for the lack of schema documentation.

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

Purpose5/5

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

The description uses a specific verb 'Replay' and identifies the resource as 'previously saved manifest' with the qualifier 'using the same prompt,' which clearly distinguishes it from listing or fetching manifest details. It names the action and the target resource effectively.

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 provides no explicit guidance on when to use this tool versus alternatives like list_manifests or get_manifest_detail. It only states the action, leaving usage entirely implied and offering no exclusion criteria or recommended contexts.

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

retarget_journalA

Apply a new journal profile to an existing manifest and regenerate the figure.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNo
manifest_idYes
target_journalYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It mentions 'regenerate the figure,' indicating a side effect, but does not disclose whether the manifest is modified in-place, if permissions are required, or if the operation is reversible. This is minimal but not entirely absent.

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 sentence that directly states the action and its effect, containing no redundant information. It is front-loaded with the key verb and resource, making it highly concise.

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?

The output schema provides return value details, so the description need not cover that. However, the tool has three parameters and no annotations; the description lacks guidance on when to use it versus siblings and does not explain potential side effects. It is adequate for a straightforward operation but not fully comprehensive.

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 compensate. It clarifies that target_journal is a 'journal profile' and manifest_id refers to an 'existing manifest,' but it does not address output_dir. The parameter names are somewhat self-explanatory, but the lack of output_dir explanation leaves a gap.

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

Purpose5/5

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

The description clearly states the tool's specific action: applying a new journal profile to an existing manifest and regenerating the figure. This distinguishes it from sibling tools like generate_figure or edit_figure, making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage when a journal profile needs to be applied to an existing manifest, but it does not explicitly state when to use this tool over alternatives. No exclusions or alternatives are mentioned, so the guidance is only implied.

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

verify_figureA

Run the automated quality gate on a generated figure.

Uses vision self-check to evaluate 8 quality domains and verify CJK text rendering accuracy. Returns pass/fail verdict, domain scores, and any missing or garbled labels.

expected_labels: Exact text strings (e.g. CJK labels) the figure should contain.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNozh-TW
image_pathYes
figure_typeNoinfographic
expected_labelsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the method (vision self-check, 8 quality domains) and the return values (pass/fail, domain scores, missing/garbled labels). It does not mention side effects, but as a verification tool, non-mutating behavior is strongly implied. This is adequate disclosure given the tool's nature.

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 compact and front-loaded: the first sentence states the purpose, the second details method and returns, and the last defines the key parameter. Every sentence earns its place with no fluff or redundancy.

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?

The description covers the tool's purpose, method, and return values, and it explains one parameter. But with four parameters and 0% schema coverage, missing details about image_path, language, and figure_type make it incomplete. The existence of an output schema covers returns, but the input side remains 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?

Schema coverage is 0%, so the description must compensate. Only 'expected_labels' is explained in prose ('Exact text strings (e.g. CJK labels) the figure should contain'). The other three parameters—image_path, language, and figure_type—are left to their names and defaults, with no additional meaning provided. This is a significant gap for a tool with four parameters.

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 uses a specific verb and resource ('Run the automated quality gate on a generated figure') and adds detail about vision self-check and CJK verification. It is clear, but it does not explicitly distinguish itself from the sibling tool 'evaluate_figure', which likely has overlapping functionality.

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 'automated quality gate' implies it is used after figure generation for validation, and the focus on CJK labels suggests a specific use case. However, there is no explicit guidance on when to use this tool versus alternatives like 'evaluate_figure', nor any stated prerequisites or exclusion criteria.

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. 14 tool updatesv0.4.6
    • First observedbatch_generate
    • First observedcomposite_figure
    • First observededit_figure
    • First observedevaluate_figure
    • First observedgenerate_figure
    • First observedget_manifest_detail
    • First observedlist_manifests
    • First observedmulti_turn_edit
    • First observedplan_figure
    • First observedprepare_publication_image
    • First observedrecord_host_review
    • First observedreplay_manifest
    • First observedretarget_journal
    • First observedverify_figure

TDQS

B3.4/5.0

Scored across 14 tools

Disambiguation3/5

Several tools have overlapping purposes—notably verify_figure vs evaluate_figure and edit_figure vs multi_turn_edit—but the descriptions provide some distinguishing criteria. Most other tools target distinct actions (plan, generate, composite, prepare) and are easy to separate.

Naming Consistency4/5

All names use lowercase snake_case and the majority follow a verb_noun pattern (list_manifests, generate_figure, edit_figure). A few names like multi_turn_edit and batch_generate deviate slightly but the style is still predictable and readable.

Tool Count5/5

14 tools is a well-scoped size for an academic figures server, covering the full pipeline without excessive redundancy or overwhelming volume. Each tool serves a clear segment of the workflow.

Completeness5/5

The surface covers the entire lifecycle from planning and generation through editing, verification, compositing, publication preparation, and batch processing. Manifest management and replay/retargeting add useful depth, with no obvious gaps that would block typical workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers