academic-figures-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@academic-figures-mcpGenerate a figure from PMID 30534567 for Nature"
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.
🎨 Academic Figures MCP
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.
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

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:
Manual prompt engineering ✍️
Journal standard research 📚
Color code lookup 🎨
Quality self-review ✅
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:
Start from a structured source such as a PMID, an academic objective, or a figure revision request.
Reason about the scientific concept, communication goal, and target figure type.
Organize the request into a structured plan using academic constraints and journal conventions.
Generate the figure through the provider layer.
Run provider-side automated review and persist the manifest.
Optionally add host-side visual review back into the same manifest.
Iterate until the output is publication-grade.
MCP Tools
Tool | Input | Output |
|
| Structured plan with route, constraints, and next-step arguments |
|
| Single high-level draw entrypoint with optional internal planning and raster format conversion |
|
| Refined image via the active provider edit API with optional internal raster format conversion |
|
| Pure-code Pillow resize/DPI metadata pass for 600 DPI publication delivery; no generation provider is used |
|
| 8-domain scorecard with suggestions |
|
| Batch generation results |
|
| Publication-ready multi-panel montage with labels and DPI metadata |
|
| Recent manifest metadata for replay or retargeting |
|
| Full manifest payload, lineage chain, and flattened review timeline |
|
| Re-run a saved manifest using the original prompt and provider |
|
| Persist a Copilot or host-side visual verdict back into the review harness |
|
| Regenerate with a new journal profile plus before/after diff |
|
| Standalone quality-gate verdict with domain scores and exact-label verification |
|
| 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 withAFM_MANIFEST_DIR).list_manifestsremains the summary surface;get_manifest_detailloads the full manifest body plus lineage-aware review history.list_manifests+replay_manifestlet you rerun saved prompts without rebuilding the plan.retarget_journalinjects a new journal profile, regenerates, and returns a before/after diff of the profile metadata.
Multi-Panel & Composite Assembly
planned_payloadnow acceptsrender_route=composite_figurewith apanelslist to assemble montage figures.The built-in
composite_figuretool remains available for direct multi-panel assembly with labels, caption, and DPI metadata.
CJK Text Fidelity & Self-Review
plan_figurenow acceptsexpected_labelsso 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, andretarget_journalautomatically run provider-side review when a verifier is configured, and they persistquality_gate,review_summary, andreview_historyinto the manifest.verify_figurelets you run the same provider-side quality gate independently against any generated image.record_host_reviewis the write-back path for Copilot or another host model after it inspects the image externally.The dual-route review contract accepts
provider_visionandhost_vision, but the persisted policy is nowprovider_vision_required_host_optional.provider_visionis the baseline gate: it must run and pass forrequirement_met=true.host_visionis supplemental: it can add a second pass or extra critique, but it cannot replace a failed or missing provider baseline.get_manifest_detailreturns 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_editkeeps 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:
ROADMAP.md for planned capabilities and sequencing
CHANGELOG.md for notable project changes
docs/competitive-landscape.md for market and positioning context
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.0Strengths: 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

QA summary:
Score:
5/5Strengths: explicit DDD layering, clear
Presentation -> Application -> Domain <- Infrastructuredirection, and repo-specific integration edgesCritical issues: none identified
Full report: repo-architecture-v2-eval.json
Workflow Visual

QA summary:
Score:
4.6/5Strengths: one clean main path, strong readability, high visual polish, and the duplicate
PAYLOADerror is removed in v2Critical 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 configLocal Env File
For local runs and smoke tests, copy env.example to env and fill exactly one provider section.
Supported formats:
KEY=valueexport KEY=valueset KEY=value
Provider examples:
AFM_IMAGE_PROVIDER=googlewithGOOGLE_API_KEYAFM_IMAGE_PROVIDER=openrouterwithOPENROUTER_API_KEYAFM_IMAGE_PROVIDER=openaiwithOPENAI_API_KEYforgpt-image-2AFM_IMAGE_PROVIDER=ollamawithOLLAMA_BASE_URLandOLLAMA_MODELAFM_MANIFEST_DIR=.academic-figures/manifeststo 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 envThe 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 serverRun 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 webpThis 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 JAMAPlan 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/outputsThe 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.pngFor 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 serverThen 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-serverworks without shell-specific quoting on macOS, Linux, and Windows.Local checkout mode is also cross-platform: use
scripts/start_afm_local.pyon macOS/Linux andscripts/start_afm_local.ps1on Windows PowerShell.Environment parsing already accepts
KEY=value,export KEY=value, andset 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
uvxwhen 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 |
| 7-block prompt templates for 9 figure types |
| Medical illustration color coding reference |
| Nature/Lancet formatting requirements |
| Machine-readable journal registry for automatic prompt injection |
| Gemini 3.1 Flash prompt engineering best practices |
| NB2 vs GPT Image 1.5 comparison data |
| matplotlib/Python figure generation reference |
| Scientific figure design principles |
| 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+SciencePlotsfor deterministic, publication-style chartsD2+Mermaidfor structured diagrams and editable text-first figure specsFigureFirst+CairoSVGfor precise multi-panel assembly and exportExcalidrawortldrawas future interactive vector-editing layers inside the VS Code extensionKrokias an optional self-hosted render gateway for compatibility with multiple DSL engines
Development
uv sync
uv run python -m src.presentation.serverProvider-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 typesLicense
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:
Generates each panel independently with focused prompts
Composites them using Pillow with precise pixel-level layout
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 toolsbatch_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.
| Name | Required | Description | Default |
|---|---|---|---|
| pmids | Yes | ||
| language | No | zh-TW | |
| output_dir | No | ||
| figure_type | No | auto | |
| output_size | No | 1024x1536 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| labels | Yes | ||
| panels | Yes | ||
| caption | No | ||
| citation | No | ||
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| feedback | Yes | ||
| image_path | Yes | ||
| output_path | No | ||
| output_format | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | ||
| figure_type | No | infographic | |
| reference_pmid | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pmid | No | ||
| language | No | zh-TW | |
| output_dir | No | ||
| figure_type | No | auto | |
| output_size | No | 1024x1536 | |
| source_kind | No | paper | |
| source_title | No | ||
| output_format | No | ||
| source_summary | No | ||
| target_journal | No | ||
| planned_payload | No | ||
| source_identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| manifest_id | Yes | ||
| include_lineage | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. '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.
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.
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.
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.
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.
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: ["修正標題為「急性冠心症處置流程」", "箭頭改紅色", "加大字體"]
| Name | Required | Description | Default |
|---|---|---|---|
| max_turns | No | ||
| image_path | Yes | ||
| instructions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pmid | No | ||
| language | No | zh-TW | |
| figure_type | No | auto | |
| output_size | No | 1024x1536 | |
| source_kind | No | paper | |
| source_title | No | ||
| style_preset | No | journal_default | |
| output_format | No | ||
| source_summary | No | ||
| target_journal | No | ||
| expected_labels | No | ||
| source_identifier | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| width_mm | No | ||
| height_mm | No | ||
| image_path | Yes | ||
| target_dpi | No | ||
| output_path | No | ||
| allow_upscale | No | ||
| output_format | No | ||
| preserve_aspect_ratio | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| passed | Yes | ||
| summary | Yes | ||
| reviewer | No | copilot_host | |
| manifest_id | Yes | ||
| critical_issues | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | ||
| manifest_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | ||
| manifest_id | Yes | ||
| target_journal | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | zh-TW | |
| image_path | Yes | ||
| figure_type | No | infographic | |
| expected_labels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v0.4.6- First observed
batch_generate - First observed
composite_figure - First observed
edit_figure - First observed
evaluate_figure - First observed
generate_figure - First observed
get_manifest_detail - First observed
list_manifests - First observed
multi_turn_edit - First observed
plan_figure - First observed
prepare_publication_image - First observed
record_host_review - First observed
replay_manifest - First observed
retarget_journal - First observed
verify_figure
TDQS
Scored across 14 tools
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.
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.
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.
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
Related MCP Connectors
AI agents collaborate on open biomedical problems, citing sources that are machine-checked.
Open scientific and engineering knowledge for AI agents: search, evidence, document publishing.
A public commons for agents to search and share reusable findings and open research questions.
AI visual generation agent: multi-pipeline rendering, prompt crafting, and image composition.
Related MCP Servers
- AlicenseBqualityDmaintenanceAn autonomous academic research and publishing platform that enables AI agents to submit papers, conduct peer reviews, and manage scholarly reputations. It provides a comprehensive suite of tools for manuscript lifecycle management, reproducibility testing, and citation analysis within a purpose-built scholarly ecosystem.25MIT
- AlicenseNot gradedqualityFmaintenanceTurn any AI agent into an academic researcher that can search, read, cite, and write full literature reviews autonomously.14MIT
- FlicenseNot gradedqualityDmaintenanceA multimodal academic research assistant for LLM Agent papers, enabling paper search, PDF/figure understanding, knowledge graph memory, learning paths, and reproducible experiments via MCP.-
- AlicenseAqualityDmaintenanceImplements Anthropic's multi-agent research architecture with subagent spawning, adaptive stopping, and citation processing for automated research.114 npmMIT