Skip to main content
Glama
Eclipse-Cj

Paper Distill MCP Server

by Eclipse-Cj

๐Ÿ“š Paper Distill MCP Server

License: AGPL-3.0 Python 3.10+ PyPI version CI

Academic paper search, intelligent curation, and multi-platform delivery โ€” built on the Model Context Protocol.

Compatible with all MCP clients: Claude Desktop, Claude Code, Cursor, Trae, Codex CLI, Gemini CLI, OpenClaw, VS Code, Zed, and more.

โš ๏ธ Early development stage. Many features are still being validated and may contain bugs or instabilities. Feedback and bug reports are warmly welcome!


โœจ Features

  • ๐Ÿ” 11-source parallel search โ€” OpenAlex, Semantic Scholar, PubMed, arXiv, Papers with Code, CrossRef, Europe PMC, bioRxiv, DBLP, CORE, Unpaywall

  • ๐Ÿค– Adaptive AI delivery โ€” the agent tracks your evolving research interests and automatically refines search keywords and recommendations over time

  • ๐Ÿ“Š 4-dimensional weighted ranking โ€” relevance ร— recency ร— impact ร— novelty, fully customizable weights

  • ๐Ÿ‘ฅ Dual-AI blind review โ€” two AI reviewers independently shortlist papers; a chief reviewer synthesizes a final push/overflow/discard decision (optional)

  • ๐Ÿงน Scraper delegation โ€” offload abstract extraction to a low-cost agent or API to cut token spend significantly

  • ๐ŸŒ Personal paper library site โ€” Astro + Vercel auto-deploy; site updates within 30 seconds of each push

  • ๐Ÿ“ฌ Multi-platform delivery โ€” Telegram / Discord / Feishu / WeCom

  • ๐Ÿ“ฆ Zotero integration โ€” save papers to Zotero with one command

  • ๐Ÿ“ Obsidian integration โ€” auto-generate paper note cards with Zotero backlinks; supports summary and template modes


Related MCP server: Literature Review MCP Server

๐Ÿš€ Quick Install

uvx paper-distill-mcp

That's it. Your AI client will discover all tools automatically. No API keys required for basic paper search.

No uv? โ†’ curl -LsSf https://astral.sh/uv/install.sh | sh or brew install uv

pip:

pip install paper-distill-mcp

Homebrew:

brew tap Eclipse-Cj/tap
brew install paper-distill-mcp

Docker:

docker run -i --rm ghcr.io/eclipse-cj/paper-distill-mcp

From source (developers):

git clone https://github.com/Eclipse-Cj/paper-distill-mcp.git
cd paper-distill-mcp
python3 -m venv .venv && .venv/bin/pip install --upgrade pip && .venv/bin/pip install -e .

๐Ÿ”— Connecting to AI Clients

Claude Desktop

Add to claude_desktop_config.json (Settings โ†’ Developer โ†’ Edit Config):

{
  "mcpServers": {
    "paper-distill": {
      "command": "uvx",
      "args": ["paper-distill-mcp"]
    }
  }
}

Claude Code

claude mcp add paper-distill -- uvx paper-distill-mcp

Or add to .mcp.json:

{
  "mcpServers": {
    "paper-distill": {
      "command": "uvx",
      "args": ["paper-distill-mcp"]
    }
  }
}

Codex CLI (OpenAI)

Add to ~/.codex/config.toml:

[mcp_servers.paper-distill]
command = "uvx"
args = ["paper-distill-mcp"]

Gemini CLI (Google)

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "paper-distill": {
      "command": "uvx",
      "args": ["paper-distill-mcp"]
    }
  }
}

OpenClaw

mcporter config add paper-distill --command uvx --scope home -- paper-distill-mcp
mcporter list  # verify

To remove: mcporter config remove paper-distill

git clone https://github.com/Eclipse-Cj/paper-distill-mcp.git ~/.openclaw/tools/paper-distill-mcp
cd ~/.openclaw/tools/paper-distill-mcp
uv venv .venv && uv pip install .
mcporter config add paper-distill \
  --command ~/.openclaw/tools/paper-distill-mcp/.venv/bin/python3 \
  --scope home \
  -- -m mcp_server.server
mcporter list

To remove: rm -rf ~/.openclaw/tools/paper-distill-mcp && mcporter config remove paper-distill

Other clients (Cursor, VS Code, Windsurf, Zed, Trae)

Same JSON config, different config file paths:

Client

Config path

Claude Desktop

claude_desktop_config.json

Trae

Settings โ†’ MCP โ†’ Add

Cursor

~/.cursor/mcp.json

VS Code

.vscode/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

Zed

settings.json

HTTP transport (remote / hosted)

paper-distill-mcp --transport http --port 8765

๐ŸŽฏ Getting Started

After connecting your client, tell the agent "initialize paper-distill". It will call setup() and walk you through:

  1. Research topics โ€” describe your interests in plain language; the AI extracts keywords

  2. Delivery platform โ€” set up Telegram / Discord / Feishu / WeCom (optional)

  3. Paper library site โ€” build a personal paper library that updates automatically (optional)

  4. Scraper delegate โ€” point to a low-cost agent or API for abstract extraction (recommended)

  5. Preferences โ€” paper count, ranking weights, review mode, etc.

  6. First search โ€” pool_refresh() populates the paper pool

All settings can be updated at any time through conversation:

  • "Push 8 papers next time"

  • "Add a new topic: RAG retrieval"

  • "Enable dual-AI blind review"

  • "Increase recency weight"


โš™๏ธ Configuration Reference

All parameters are set via configure() or add_topic() โ€” no manual file editing needed.

Research Topics (add_topic / manage_topics)

Parameter

Description

Default

key

Topic identifier (e.g. "llm-reasoning")

โ€”

label

Display name (e.g. "LLM Reasoning")

โ€”

keywords

Search keywords, 3โ€“5 recommended

โ€”

weight

Topic priority 0.0โ€“1.0 (higher = more papers)

1.0

blocked

Temporarily disable without deleting

false

Paper Count & Review (configure)

Parameter

Options

Default

Description

paper_count_value

any integer

6

Papers per push

paper_count_mode

"at_most" / "at_least" / "exactly"

"at_most"

Count mode

picks_per_reviewer

any integer

5

Shortlist size per reviewer

review_mode

"single" / "dual"

"single"

Single AI or dual blind review

custom_focus

free text

""

Custom selection criteria

๐Ÿ’ก Dual blind review: two independent AI reviewers each shortlist papers; a chief reviewer makes the final push/overflow/discard call. Papers that don't make the cut are held for the next cycle rather than discarded. Enable with configure(review_mode="dual").

Ranking Weights (configure)

Controls paper scoring. The four weights should sum to approximately 1.0.

Parameter

Measures

Default

w_relevance

Keyword and topic match

0.55

w_recency

How recently the paper was published

0.20

w_impact

Citation count (log-normalized)

0.15

w_novelty

Whether this is the first appearance

0.10

Example: "Prioritize recent papers" โ†’ configure(w_recency=0.35, w_relevance=0.40)

Scraper / Abstract Extraction Delegate (configure)

Abstract extraction is the most token-intensive step. It runs on the main agent by default, but can be delegated to a cheaper model to cut costs significantly.

Parameter

Value

Description

summarizer

"self"

Main agent handles extraction (most expensive)

agent name (e.g. "scraper")

Delegate to a low-cost sub-agent

API URL

Call an external LLM API (DeepSeek, Ollama, etc.)

๐Ÿ”ง Strongly recommended: for 30+ papers, frontier model costs add up fast. A $0.14/M-token model handles extraction just as well. Set this with configure(summarizer="scraper").

Paper Pool & Scan Batches (configure)

Parameter

Description

Default

scan_batches

Split the paper pool into N batches, reviewed over N+1 days

2 (3 days)

pool_refresh() searches all 11 APIs and fills the pool. The pool is then split into batches for daily AI review โ€” avoiding a single 60+ paper dump.

  • scan_batches=2 (default): review first half on day 1, second half on day 2, finalize on day 3

  • scan_batches=3: review one-third per day, finalize on day 4

When all batches are reviewed, the pool is exhausted and the next run triggers a fresh API search automatically.

Delivery Platforms (Environment Variables)

Platform

Environment variables

platform value

Telegram

TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID

"telegram"

Discord

DISCORD_WEBHOOK_URL

"discord"

Feishu

FEISHU_WEBHOOK_URL

"feishu"

WeCom

WECOM_WEBHOOK_URL

"wecom"

โš ๏ธ Important: set environment variables in the MCP client config env field, not as system environment variables. Otherwise send_push() cannot access the webhook URL and the AI may generate scripts that call webhooks directly, causing encoding issues.

Config example (WeCom + Claude Desktop):

{
  "mcpServers": {
    "paper-distill": {
      "command": "uvx",
      "args": ["paper-distill-mcp"],
      "env": {
        "WECOM_WEBHOOK_URL": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY"
      }
    }
  }
}

Restart the MCP client after editing the config.

Push message format (fixed):

1. Paper Title (Year)
   Journal Name
   - One-sentence summary
   - Why it was selected
   https://doi.org/...

Paper Library Site (configure)

Personal paper library website, auto-updated on every push. Built on Astro + Vercel (free tier).

Parameter

Description

site_deploy_hook

Vercel deploy hook URL (triggers site rebuild)

site_repo_path

Local path to the paper-library repository

Setup steps (the AI agent will guide you):

  1. Create a repo from the paper-library-template

  2. Connect to Vercel and deploy

  3. Create a deploy hook in Vercel (Settings > Git > Deploy Hooks)

  4. Tell the agent the hook URL โ†’ saved via configure(site_deploy_hook=...)

After setup, every finalize_review() call pushes the digest JSON to the site repo and triggers a Vercel rebuild. The site updates in ~30 seconds.

Zotero Integration

Save papers to Zotero with one command. Requires a Zotero account and API key.

Getting credentials:

  1. API Key: go to zotero.org/settings/keys/new โ†’ check "Allow library access" + "Allow write access" โ†’ Save Key

  2. Library ID: go to zotero.org/settings/keys โ†’ your userID is shown at the top

Add to MCP client config:

{
  "mcpServers": {
    "paper-distill": {
      "command": "uvx",
      "args": ["paper-distill-mcp"],
      "env": {
        "ZOTERO_LIBRARY_ID": "your userID",
        "ZOTERO_API_KEY": "your API key"
      }
    }
  }
}

After setup, reply collect 1 3 after a push to save papers 1 and 3 to Zotero, automatically sorted into per-topic folders.

All Environment Variables

Variable

Description

Required

OPENALEX_EMAIL

Increases OpenAlex API rate limit; also used for Unpaywall

optional

CORE_API_KEY

CORE API key (free registration)

optional

DEEPSEEK_API_KEY

Enhanced search via DeepSeek

optional

ZOTERO_LIBRARY_ID + ZOTERO_API_KEY

Save papers to Zotero

optional

SITE_URL

Paper library website URL

optional

PAPER_DISTILL_DATA_DIR

Data directory

default: ~/.paper-distill/


๐Ÿ› ๏ธ Tools (19 total)

Setup & Configuration

Tool

Description

setup()

First call โ€” detects fresh install and returns guided initialization instructions

add_topic(key, label, keywords)

Add a research topic with search keywords

configure(...)

Update any setting: paper count, ranking weights, review mode, etc.

Search & Curation

Tool

Description

search_papers(query)

Parallel search across 11 sources

rank_papers(papers)

4-dimensional weighted scoring

filter_duplicates(papers)

Deduplicate against previously pushed papers

Daily Pipeline (paper pool mode)

Tool

Description

pool_refresh(topic?)

Search all 11 APIs and build the paper pool

prepare_summarize(custom_focus?)

Generate AI abstract extraction prompt

prepare_review(dual?)

Generate review prompt โ€” AI makes push/overflow/discard decisions

finalize_review(selections)

Process AI decisions, update pool, output push message

pool_status()

Pool status: count, scan day, exhausted or not

collect(paper_indices)

Save papers to Zotero + generate Obsidian notes

Session & Output

Tool

Description

init_session

Detect delivery platform and load research context

load_session_context

Load historical research context

generate_digest(papers, date)

Generate output files (JSONL, site, Obsidian)

send_push(date, papers, platform)

Deliver to Telegram / Discord / Feishu / WeCom

collect_to_zotero(paper_ids)

Save to Zotero via DOI

manage_topics(action, topic)

List / disable / enable / reweight topics

ingest_research_context(text)

Inherit research context across sessions


๐Ÿ—๏ธ Architecture

AI client (Claude Code / Codex CLI / Gemini CLI / Cursor / ...)
    โ†“ MCP (stdio or HTTP)
paper-distill-mcp
    โ”œโ”€โ”€ search/         โ€” 11-source academic search (with OA full-text enrichment)
    โ”œโ”€โ”€ curate/         โ€” scoring + deduplication
    โ”œโ”€โ”€ generate/       โ€” output (JSONL, Obsidian, site)
    โ”œโ”€โ”€ bot/            โ€” push formatting (4 platforms)
    โ””โ”€โ”€ integrations/   โ€” Zotero API

The server does not call any LLM internally. Search, ranking, and deduplication are pure data operations. Intelligence comes from your AI client.


๐Ÿ“– Paywalled Papers & Open Access

The system searches all papers by default (including subscription journals) and maximizes free full-text access through:

  1. CORE โ€” world's largest OA aggregator (200M+ papers), covering author self-archived versions from institutional repositories

  2. Unpaywall โ€” after merging results, automatically looks up legal free PDFs via DOI (preprints, green OA, author versions)

For papers with no free version, the system returns a DOI link. If you have institutional VPN access, clicking the DOI link while connected is usually enough โ€” publishers identify your institution by IP.

open_access_url priority: arXiv > CORE > Unpaywall > OpenAlex > Semantic Scholar > Papers with Code


โ“ FAQ

Review stage hangs / no response for 30+ minutes

Symptom: the review prompt generated by prepare_review() causes the AI client to hang or time out.

Cause: too many candidate papers in the pool (e.g. 80โ€“100), making the prompt exceed the client's context window or output token limit. VS Code Copilot and some IDE plugins have limited context capacity.

Solutions (pick one):

  1. Increase scan_batches (recommended) โ€” split the pool into more batches:

    configure(scan_batches=5)
  2. Reduce topics or keywords โ€” fewer topics โ†’ fewer search results โ†’ smaller pool.

  3. Switch to a higher-context client โ€” Claude Code (200k), Claude Desktop (200k), or Cursor handle long prompts better.

Install error: Requires-Python >=3.10

Python 3.10+ is required. macOS ships with Python 3.9 by default โ€” install a newer version with brew install python@3.13 or use uv.

Docker image fails to pull (mainland China)

ghcr.io is blocked in mainland China. Use pip with a Chinese mirror:

pip install paper-distill-mcp -i https://pypi.tuna.tsinghua.edu.cn/simple

๐Ÿง‘โ€๐Ÿ’ป Development

git clone https://github.com/Eclipse-Cj/paper-distill-mcp.git
cd paper-distill-mcp
python3 -m venv .venv && .venv/bin/pip install --upgrade pip && .venv/bin/pip install -e .
python tests/test_mcp_smoke.py   # 9 tests, no network required

๐Ÿ“„ License

This project is licensed under AGPL-3.0. See LICENSE for details.

Unauthorized commercial use is prohibited. For commercial licensing inquiries, contact the author.


๐Ÿ“ฌ Contact

Bug reports and feature requests are welcome. The project is in active early development โ€” thank you for your patience and support ๐Ÿ™

Available Tools

19 tools
add_topicB

Add a research topic for paper search.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesShort identifier (e.g. "llm-reasoning", "rag-retrieval"), lowercase with hyphens
labelYesHuman-readable name (e.g. "LLM Reasoning")
weightNoPriority weight 0.0-1.0 (default 1.0 = highest priority)
keywordsYesSearch keywords for this topic (3-5 recommended)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

Without annotations, the description bears full responsibility for disclosing behavioral traits. It only states 'Add a research topic' without explaining side effects (e.g., persistence, overwrite behavior, idempotency) or whether the operation requires prior initialization.

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 a single, succinct sentence that immediately conveys the tool's purpose. It is front-loaded and efficient, though it could benefit from additional details without becoming verbose.

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 (not provided in this view), the description does not mention return values or behavior. For a tool with 4 parameters (3 required), the description is too sparse to be considered complete, especially given the lack of annotations.

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 input schema has 100% parameter description coverage, so the description adds no additional semantic value. The baseline of 3 is appropriate as the schema already documents each parameter adequately.

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 'Add a research topic for paper search' clearly states the action (add) and the resource (research topic), along with context (for paper search). This effectively distinguishes it from sibling tools like 'manage_topics' which likely handles broader topic management.

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 guidance on when to use this tool versus alternatives such as 'manage_topics' or 'init_session'. It does not mention any prerequisites, limitations, or scenarios where this tool is appropriate or inappropriate.

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

collectA

Collect pushed papers to Zotero and optionally create Obsidian notes.

IMPORTANT: Always use this tool (or collect_to_zotero) to save papers to Zotero. NEVER call the Zotero API directly or generate scripts to do so.

Use after finalize_review. Paper indices refer to the latest push (1-based, e.g. "1,3" to collect papers 1 and 3).

ParametersJSON Schema
NameRequiredDescriptionDefault
obsidian_modeNo"none" (Zotero only), "summary" (with AI summary note), or "template" (empty template for user notes)none
paper_indicesYesComma-separated 1-based indices (e.g. "1,3")

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 must disclose behavioral traits. It states the tool collects papers and optionally creates notes, but does not mention side effects (e.g., duplicate handling), error handling, or whether it modifies existing data. This is adequate but lacks detail.

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: two short paragraphs with front-loaded purpose and important notes. Every sentence adds value, with no redundancy or fluff.

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 description covers purpose, usage context, and parameter semantics adequately given the tool's simplicity (2 params, output schema exists). It could improve by differentiating from the sibling tool and discussing edge cases, but is largely complete.

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 descriptions cover 100% of parameters, explaining obsidian_mode options and paper_indices format. The description reinforces this but adds no new meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

The description states the tool collects pushed papers to Zotero and optionally creates Obsidian notes, providing a clear verb and resource. However, it does not differentiate from the sibling tool 'collect_to_zotero', leaving ambiguity about when to use each.

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 explicitly says to use after finalize_review and warns against calling the Zotero API directly. It explains the index format (1-based, from latest push). However, it does not specify when to prefer this tool over the sibling 'collect_to_zotero'.

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

collect_to_zoteroA

Add papers to Zotero library by their IDs/DOIs.

IMPORTANT: Always use this tool to add papers to Zotero. NEVER call the Zotero Web API directly or generate scripts (PowerShell, curl, etc.) to do so โ€” that will result in incomplete metadata (missing titles, authors). This tool handles full metadata enrichment automatically.

Looks up papers in papers.jsonl, creates Zotero journal article items and maps them to collections based on topic tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
paper_idsYesList of paper DOIs or IDs to add to Zotero

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. Discloses automatic metadata enrichment and mapping to topic-based collections, but does not mention duplicate handling or error behavior.

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?

Front-loaded with purpose, includes an important usage warning, and details additional behaviorโ€”all in a few efficient sentences with no fluff.

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

Completeness4/5

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

With a simple parameter set and an output schema, the description covers purpose, usage, metadata enrichment, and collection mapping. Lacks details on limits or authentication, but sufficient for the tool's complexity.

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

Parameters4/5

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

Schema coverage is 100%, providing a baseline of 3. The description adds context that paper_ids are DOIs or IDs, and that the tool enriches metadata and maps to collections, exceeding the schema.

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?

Clearly states the tool adds papers to Zotero library by IDs/DOIs, distinguishes from siblings like search_papers, and specifies metadata enrichment.

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

Usage Guidelines5/5

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

Explicitly instructs to always use this tool instead of direct API or scripts, with a clear reason (incomplete metadata), and notes lookup in papers.jsonl and collection mapping.

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

configureA

Update pipeline configuration.

All parameters are optional โ€” only provided values are changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
w_impactNoRanking weight for citation impact (default 0.15)
w_noveltyNoRanking weight for novelty/unseen (default 0.10)
w_recencyNoRanking weight for publication recency (default 0.20)
summarizerNoWho handles paper summarization to save tokens. Options: - "self" (default): main agent summarizes (most expensive) - agent name (e.g. "scraper"): delegate to a cheaper agent - API URL: call an external summarization endpoint
review_modeNo"single" (one AI reviews) or "dual" (two AIs review independently)
w_relevanceNoRanking weight for topic relevance (default 0.55)
custom_focusNoCustom screening criteria (e.g. "prefer clinical trials over reviews")
scan_batchesNoNumber of scan batches per pool cycle (default 2, pool is reviewed over batches+1 days)
site_repo_pathNoLocal path to the paper library site repo (for pushing digest JSON)
paper_count_modeNo"at_most", "at_least", or "exactly"
site_deploy_hookNoVercel deploy hook URL for auto-deploying paper library website
paper_count_valueNoNumber of papers per push (e.g. 6)
picks_per_reviewerNoPapers each reviewer selects per scan (default 5)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 disclose behavioral traits. It only states 'update pipeline configuration' but fails to mention persistence, side effects, or scope of changes (e.g., session vs global). The schema provides defaults, but the description does not clarify whether omitted parameters revert to defaults or remain unchanged.

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

Conciseness5/5

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

Two concise sentences, front-loaded with the purpose, and zero unnecessary words. Every sentence earns its place.

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 a complex tool with 13 parameters and an output schema, the description is too brief. It lacks context about the effect of changes (e.g., whether they persist, affect running pipelines, or require session restart). The output schema may cover returns, but the description should explain when to use this tool vs 'setup' or other sibling tools.

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

Parameters4/5

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

The input schema has 100% coverage with detailed descriptions for each parameter. The description adds valuable information: 'All parameters are optional โ€” only provided values are changed,' which clarifies the update semantics beyond the schema's per-parameter 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 clearly states the tool's purpose: 'Update pipeline configuration.' This is a specific verb+resource combination that is distinct from all sibling tools, which are focused on data operations, not configuration changes.

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 that all parameters are optional and only provided values are changed, which is key usage guidance. However, it does not explicitly differentiate from the sibling 'setup' tool or provide exclusions, though the context implies this is for updates rather than initial setup.

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

filter_duplicatesA

Remove papers already pushed (by DOI match against papers.jsonl).

ParametersJSON Schema
NameRequiredDescriptionDefault
papersYesList of paper dicts to filter

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Discloses the filtering mechanism (DOI match against a file), but no annotations provided, and the description lacks details on side effects (e.g., file modification, network access). Minimal but not misleading.

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?

Single sentence, no fluff, efficiently conveys purpose and mechanism.

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?

Tool is simple with one parameter and an output schema. Description explains what and how, but could mention prerequisite that 'papers.jsonl' must exist. Overall adequate.

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

Parameters4/5

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

Schema describes 'papers' as 'List of paper dicts to filter'. Description adds the crucial context that filtering is by DOI match against papers.jsonl, going beyond the schema.

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?

Description clearly states the verb 'Remove' and resource 'papers', with specific method 'by DOI match against papers.jsonl'. This distinguishes it from sibling tools like 'collect' and 'collect_to_zotero'.

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?

Implies usage after collecting papers to avoid re-pushing duplicates, but no explicit guidance on when to use vs alternatives or when not to use.

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

finalize_reviewA

Process AI review decisions, update pool, and generate push output.

Takes the AI's review response (JSON with push/overflow/discard decisions), updates paper statuses in the pool, appends pushed papers to papers.jsonl, and returns formatted push message.

ParametersJSON Schema
NameRequiredDescriptionDefault
is_finalNoTrue for final review (no discard allowed, only push/overflow)
selectionsYesJSON string with review decisions, e.g. '[{"index": 1, "action": "push", "tldr": "..."}, ...]'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description bears full responsibility. It discloses that the tool updates paper statuses, appends to papers.jsonl, and returns a formatted push message. These are clear behavioral traits, though it doesn't detail permanence or rollback possibilities.

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 concise sentences and a short paragraph. It front-loads the main purpose, then details the workflow. Every sentence adds value with no 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?

Given the simplicity (2 params, no enums, no nested objects) and the presence of an output schema, the description covers input, behavior, and output. It lacks usage guidelines, but otherwise is sufficiently complete for an agent to invoke the tool correctly.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds context about the parameters (e.g., 'is_final' limits actions) but largely restates the schema. It does not provide new formatting or usage details beyond what is in the schema.

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's function: processing AI review decisions, updating pool, and generating push output. It uses specific verbs like 'process', 'update', and 'generate'. While it doesn't explicitly differentiate from siblings like 'prepare_review' or 'send_push', the purpose is distinct and well-defined.

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. The description does not provide conditions, prerequisites, or scenarios where other tools might be more appropriate. Usage is implied by the tool name and description, but not advised.

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

generate_digestB

Generate all daily output files (pushes.jsonl, papers.jsonl, Astro site JSON, Obsidian notes).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate string in YYYY-MM-DD format
papersYesFinal selected papers with annotations
topicsNoOptional topics data for research note generation

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 disclose side effects and behavioral traits. It does not mention whether files are overwritten, state is modified, or what happens with empty inputs. The description is insufficient for safe usage.

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 with no extraneous words. It efficiently communicates the tool's purpose and output artifacts.

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?

Although an output schema exists, the description lacks information about prerequisites, return format, or order of operations. For a tool generating multiple files, more context is needed for complete understanding.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents parameters adequately. The description adds no significant value beyond listing outputs; it does not explain how parameters relate to generation. Baseline 3 is appropriate.

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 verb 'generate' and specifies the exact output files: pushes.jsonl, papers.jsonl, Astro site JSON, Obsidian notes. It distinguishes from sibling tools like add_topic or rank_papers which have different functions.

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 guidance on when to use this tool versus alternatives, no prerequisites or post-conditions, and no mention of workflow dependencies. It lacks context for correct invocation.

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

ingest_research_contextA

Ingest research context from other AI conversations for cross-AI context inheritance.

Extracts keywords from the markdown text and appends to interests.jsonl. Use session_id to isolate different chat sessions (prevents context pollution when multiple OpenClaw/AI sessions run concurrently).

ParametersJSON Schema
NameRequiredDescriptionDefault
search_nowNoIf True, also run a paper search using extracted keywords
session_idNoOptional session identifier to isolate contexts (e.g. "openclaw-abc123"). If provided, only this session's interests are used for search_now.
markdown_textYesMarkdown text containing research context (e.g. from another AI's summary)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations provided; the description reveals it appends to interests.jsonl and uses session isolation, but does not detail side effects, permission requirements, or error conditions.

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

Conciseness5/5

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

Two concise paragraphs, front-loaded with purpose, every sentence adds value without waste.

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

Completeness5/5

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

Given output schema exists and parameters are well-documented, the description provides sufficient context for the tool's function and usage scenario.

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

Parameters4/5

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

Schema covers 100% of parameters; description adds context like 'markdown_text as another AI's summary' and session isolation purpose, enhancing beyond schema.

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 it ingests research context from other AI conversations for cross-AI context inheritance, extracting keywords and appending to interests.jsonl. It distinguishes from sibling tools by focusing on cross-AI context ingestion rather than search or collection.

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 for transferring context between sessions, but lacks explicit when-to-use vs. alternatives or when-not-to-use guidance.

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

init_sessionA

Initialize a research session. Call this first to set up push channels and load context.

Detects configured platforms, manages channels, and optionally loads previous research context. Returns session info for the AI client to present to the user.

IMPORTANT for AI clients:

  • NEVER call external APIs (Zotero, webhooks, etc.) directly or generate scripts (PowerShell, curl, Python) to do so. Always use the built-in tools (collect, collect_to_zotero, send_push, etc.). Direct API calls will result in incomplete data and encoding issues.

  • If multiple platforms are detected and no platform is specified, the response will include ask_platform โ€” you MUST ask the user which platform to use, then call init_session again with platform=<user_choice>.

  • If only one platform is configured, it is auto-selected.

  • The send_push tool also accepts a platform parameter, so the user can override per-push even after init.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoPreferred push platform ("telegram", "discord", "feishu", "wecom"). If None, auto-detects from configured env vars.
session_idNoSession identifier (auto-generated if not provided). Use different IDs to isolate research vs daily topics.
load_contextNo"yes" = auto-load previous research context, "no" = start fresh, "ask" = return context summary for user to decide.ask
channel_actionNo"new" = create dedicated channel, "existing" = use configured channel, "auto" = use existing if available.auto

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations provided, but description discloses platform detection, channel management, optional context loading, and warnings against direct API calls. Could mention potential side effects like channel creation more explicitly.

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?

Well-structured with summary and bullet points; every sentence is valuable. Slightly long but justified by complexity. Clear callouts for AI clients.

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

Completeness5/5

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

Covers initialization, platform handling, user interaction, and behavior of all 4 parameters. Mentions output (session info). Minor omission of idempotency but not critical.

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

Parameters5/5

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

Adds significant meaning beyond schema: explains auto-detection for platform, isolation for session_id, three options for load_context and channel_action. Schema coverage is 100% but description still adds value.

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 initializes a research session as a first step, with specific verbs (initialize, set up, load) and distinguishes it from siblings like load_session_context.

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

Usage Guidelines5/5

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

Explicit guidance on when to call this tool first, never using external APIs, how to handle multiple platforms (must ask user), auto-selection for single platform, and interaction with send_push tool.

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

load_session_contextA

Load previous research context into current session.

Call this after init_session if user chose to load context. Returns accumulated keywords and summaries from interests.jsonl.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoIf provided, only load context from this session. If None, load all previous context.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility. It mentions returning 'accumulated keywords and summaries from interests.jsonl', which gives some insight into output, but does not disclose whether loading clears or merges with existing session context, or if it modifies any state.

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 short sentences, each adding unique value. The first states the core purpose, the second provides usage guidance and return information. No wasted words.

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

Completeness4/5

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

The tool is simple with one parameter and an output schema exists. The description covers the main behavior (loads context), usage condition, and return value. It lacks detail on potential side effects (e.g., whether it overwrites existing context), but given the output schema and simple nature, it is reasonably complete.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The tool description does not add any information about the 'session_id' parameter beyond what the schema already provides. Thus, score is baseline.

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 verb 'load', the resource 'previous research context', and the context 'into current session'. It also specifies the scenario (after init_session if user chose to load context) and distinguishes from siblings like init_session and ingest_research_context.

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

Usage Guidelines5/5

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

The description explicitly says when to call this tool: 'Call this after init_session if user chose to load context.' This provides clear, actionable guidance based on user choice, which is excellent for an AI agent.

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

manage_topicsC

Manage research topic preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoTopic key (required for block/unblock/set_weight, e.g. "llm-news")
actionYesOne of "list", "block", "unblock", "set_weight"
weightNoNew weight value (only for set_weight action, 0.0-1.0)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only states a vague purpose. No disclosure of side effects, permissions, or behavioral traits beyond 'manage'.

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?

Very brief (one phrase), no structural elements. While concise, it lacks substance; however, it does not contain unnecessary words.

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 moderate complexity (3 parameters, multiple actions), the description is too sparse. It doesn't explain the tool's behavior or output despite having an output schema, leaving gaps for an AI agent.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for each parameter (action, topic, weight). The description adds no additional meaning beyond the schema, so baseline score applies.

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

Purpose3/5

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

The description 'Manage research topic preferences' provides a general purpose but lacks specificity about the supported actions (list, block, unblock, set_weight) and does not differentiate from sibling 'add_topic'.

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 on when to use this tool versus alternatives like 'add_topic'. The description does not specify context or exclusions.

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

pool_refreshA

Refresh the paper search pool by querying 9 academic APIs.

Call this when pool is exhausted or when adding a new research topic. Searches: OpenAlex, Semantic Scholar, PubMed, arXiv, Papers with Code, CrossRef, Europe PMC, bioRxiv, DBLP.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoOptional single topic key to search (for new topics). If None, refreshes all topics.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/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 full burden. It discloses that 9 APIs are queried but doesn't mention potential side effects (e.g., rate limiting, latency) or safety profile. The listing of APIs adds some transparency, but behavioral details are limited.

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

Conciseness5/5

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

Three sentences with no wasted words. The purpose and usage are front-loaded, making it easy to parse quickly.

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

Completeness5/5

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

The description explains when to call and lists all APIs. With an output schema available (not shown), the return values are likely documented. For a tool with one optional parameter, this is complete.

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

Parameters3/5

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

Schema coverage is 100% and the parameter description is clear. The tool description doesn't add extra meaning beyond the schema, so baseline score applies.

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 'Refresh the paper search pool' and lists 9 specific APIs, making the action and resource unambiguous. It distinguishes from siblings like search_papers by focusing on batch pool refresh.

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?

Explicitly instructs to call when pool is exhausted or adding a new topic, providing clear context. While it doesn't mention when not to use or alternatives, the guidance is sufficient for typical usage.

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

pool_statusA

Show current pool status: paper counts by status, scan day, topics searched.

Returns: Dict with total, by_status, scan_day, total_scan_days, exhausted, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided. The description fails to disclose behavioral traits such as whether the operation is read-only, any side effects, or authentication requirements. It only lists return fields.

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 two short lines and a bullet list. Every word serves a purpose, and it is front-loaded with the main action.

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?

Given no parameters and an output schema, the description is adequate but lacks context about data freshness, refresh requirements, or any side effects. It is neither incomplete nor fully comprehensive.

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

Parameters4/5

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

The tool has zero parameters, so the schema coverage is 100%. According to guidelines, the baseline is 4. The description adds value by detailing the return dict structure.

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 'Show current pool status' and lists specific attributes like paper counts, scan day, and topics searched, making the purpose unambiguous. There are no sibling tools with similar functionality.

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 guidance on when to use this tool versus alternatives. It only describes the output without indicating appropriate contexts or exclusions.

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

prepare_reviewA

Prepare the review prompt for today's scan batch.

Returns a structured prompt listing candidate papers for the AI to review. The AI should respond with push/overflow/discard decisions in JSON format.

If pool is exhausted, returns "POOL_EXHAUSTED" โ€” call pool_refresh first.

ParametersJSON Schema
NameRequiredDescriptionDefault
dualNoEnable dual review mode (two reviewers each pick 3 papers)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Without annotations, the description explains key behaviors: it returns a structured prompt and signals pool exhaustion with a special value. It does not detail permissions or side effects, but the core behavior is adequately covered.

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 at four sentences, front-loading the main purpose. Every sentence adds value: purpose, output, AI response format, and error handling. No unnecessary words.

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

Completeness5/5

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

Given the tool's simplicity (one optional parameter, has output schema), the description covers all necessary information: what it does, what it returns, and how to handle the exhausted pool case. The output schema can detail the structure.

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 100% coverage and describes the 'dual' parameter. The tool description does not add any additional meaning beyond the schema, so the baseline of 3 is appropriate.

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 prepares a review prompt for today's scan batch. It specifies the output is a structured prompt for the AI to respond with decisions, distinguishing it from siblings like pool_refresh or finalize_review.

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 guidance on when to call pool_refresh if the pool is exhausted, indicating a clear condition for alternative use. However, it does not explicitly list when not to use the tool or compare it with other siblings beyond this edge case.

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

prepare_summarizeA

Generate a summarization prompt for unsummarized papers in today's batch.

Returns a dict with:

  • prompt: the summarization prompt (structured fields to extract)

  • summarizer: who should process this prompt ("self", agent name, or API URL)

  • paper_count: how many papers need summarizing

If summarizer is NOT "self", the calling agent should delegate this prompt to the specified agent or API instead of processing it directly. This can save significant token costs.

ParametersJSON Schema
NameRequiredDescriptionDefault
custom_focusNoOptional custom screening criteria to include

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/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. It explains the return dict structure and the delegation behavior, and mentions token cost savings. It does not disclose whether the operation is read-only or if there are side effects, but given the nature of generating a prompt, the description is transparent enough.

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 and well-structured: a single sentence for the purpose, a bullet-like list of return fields, and then usage guidance. Every sentence adds value with no unnecessary information.

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

Completeness5/5

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

Given the tool's simplicity (one optional parameter, straightforward output), the description covers all essential aspects: purpose, return structure, and delegation logic. The presence of an output schema further supports completeness.

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 input schema has 100% coverage with descriptions for the single optional parameter 'custom_focus'. The description in the tool text repeats the schema's wording ('Optional custom screening criteria to include'), adding no new semantic value beyond what is already in the schema.

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 summarization prompt for unsummarized papers in today's batch. It specifies the verb 'Generate' and the resource 'summarization prompt', and the scope is explicit, distinguishing it from sibling tools like prepare_review or generate_digest.

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 delegation guidance: if summarizer is not 'self', the agent should delegate the prompt elsewhere to save token costs. However, it does not explicitly compare this tool to alternatives like prepare_review or generate_digest, so usage context is good but not exhaustive.

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

rank_papersB

Score and rank papers using 4-factor weighted formula.

Factors: relevance (0.55), recency (0.20), impact (0.15), novelty (0.10). Uses topic_prefs.json for relevance scoring and papers.jsonl for novelty detection.

ParametersJSON Schema
NameRequiredDescriptionDefault
top_nNoReturn top N papers after ranking
papersYesList of paper dicts (from search_papers)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavioral traits. It reveals the scoring formula and data sources (topic_prefs.json, papers.jsonl), but does not state whether the tool is read-only, has side effects, or requires specific permissions. Missing safety profile.

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

Conciseness5/5

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

Two efficient sentences: first states purpose, second details formula and data sources. No fluff, front-loaded key information.

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?

Adequate for a ranking tool with 2 parameters, high schema coverage, and output schema present. Lacks prerequisites (e.g., existence of topic_prefs.json), error handling, and limits. Appropriate but could be richer.

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

Parameters3/5

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

Schema coverage is 100% (both parameters described). Description adds context about the ranking formula and external files, but does not significantly enhance understanding of individual parameters beyond the schema.

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?

Description clearly states the verb (score and rank) and resource (papers), with specific detail on the 4-factor weighted formula. Distinguishes from siblings like search_papers and filter_duplicates by focusing on ranking.

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 vs alternatives (e.g., filter_duplicates, search_papers). Implies it follows search/filtering, but no direct comparison or prerequisites stated.

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

search_papersA

Search academic papers across 9 sources (OpenAlex, Semantic Scholar, PubMed, arXiv, Papers with Code, CrossRef, Europe PMC, bioRxiv, DBLP).

Returns deduplicated, merged results sorted by cross-source hits + citation count. Each paper has: title, year, doi, authors, abstract, source, citation_count, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query string (e.g. "LLM reasoning chain-of-thought")
max_resultsNoMaximum number of results to return (default 10)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Without annotations, the description carries full burden. It explains that results are deduplicated, merged, and sorted by a composite score, and lists the fields returned. It does not mention caching, rate limits, or authentication, but the core behavioral traits are transparent.

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 long, front-loading the key purpose and scope, then adding details on deduplication and output fields. Every sentence is informative with no 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?

Given the complexity (9 sources, deduplication) and the presence of an output schema, the description covers essential aspects. It could mention pagination or that max_results is total, but it is largely adequate.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds value by contextualizing the query parameter as searching across 9 sources, which is not in the schema. It enriches understanding of how max_results controls the output.

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 searches academic papers across 9 named sources, returning deduplicated merged results sorted by cross-source hits and citation count. It distinguishes itself from sibling tools like collect or filter_duplicates by focusing on cross-source search.

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 the tool is for searching papers across sources, but it does not explicitly state when to use it versus alternatives like filter_duplicates or pool_refresh. No when-not-to-use guidance is provided.

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

send_pushB

Format and send daily paper distill to a messaging platform.

Supported platforms: telegram, discord, feishu (้ฃžไนฆ/Lark), wecom (ไผไธšๅพฎไฟก webhook).

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate string in YYYY-MM-DD format
papersYesPapers to include in the push message
platformNoTarget platform - "telegram", "discord", "feishu", or "wecom" (default: telegram)telegram

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist; description only mentions formatting and sending without disclosing side effects, rate limits, or dependencies.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose and platform list, no wasted words.

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

Completeness3/5

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

With no annotations and limited behavioral context, the description misses details like required prior steps or output format, but is adequate for a simple push tool.

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

Parameters3/5

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

Schema coverage is 100% with parameter descriptions; description adds only a list of platforms, which is already in the platform parameter description.

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?

Description clearly states the tool formats and sends a daily paper distill to messaging platforms, listing supported platforms. This distinguishes it from sibling tools like collect or generate_digest.

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 on when to use this tool versus alternatives, no prerequisites or context provided.

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

setupA

Check setup status and guide first-time configuration.

Call this FIRST when starting a new session. Returns setup state and instructions for the AI client on what to ask the user.

If setup is complete, returns current config summary. If first run, returns step-by-step instructions for the AI to follow.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 provided, the description fully discloses behavior: returns setup state and instructions, summarizing config if complete or step-by-step if first run. Adequately covers what the AI should expect.

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

Conciseness5/5

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

Three concise sentences with no wasted words: first sentence states purpose, second gives immediate usage, third details scenarios. Ideal front-loading and efficiency.

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?

Given no parameters and presence of an output schema, the description covers key scenarios (complete vs first run) and what to expect. Minor gap: no mention of side effects, but as a check tool, this is acceptable.

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?

No parameters exist, so schema coverage is 100% trivially. Per rules, baseline is 3 for high coverage (no param info needed); description adds nothing beyond schema, meeting minimum viability.

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?

Description uses clear verb 'Check' and resource 'setup status' plus 'guide first-time configuration', distinctly framing the tool as session initialization. It differentiates from siblings like 'add_topic' or 'search_papers' by explicitly positioning itself as the first call.

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?

Explicitly states 'Call this FIRST when starting a new session' and covers both scenarios (setup complete vs first run), providing clear context of use. Lacks explicit exclusions or alternatives but is comprehensive for its purpose.

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. 19 tool updates
    • Addedadd_topic
    • Addedcollect
    • Addedcollect_to_zotero
    • Addedconfigure
    • Addedfilter_duplicates
    • Addedfinalize_review
    • Addedgenerate_digest
    • Addedingest_research_context
    • Addedinit_session
    • Addedload_session_context
    • Addedmanage_topics
    • Addedpool_refresh
    • Addedpool_status
    • Addedprepare_review
    • Addedprepare_summarize
    • Addedrank_papers
    • Addedsearch_papers
    • Addedsend_push
    • Addedsetup
  2. 19 tool updatesv0.2.2
    • Removedadd_topic
    • Removedcollect
    • Removedcollect_to_zotero
    • Removedconfigure
    • Removedfilter_duplicates
    • Removedfinalize_review
    • Removedgenerate_digest
    • Removedingest_research_context
    • Removedinit_session
    • Removedload_session_context
    • Removedmanage_topics
    • Removedpool_refresh
    • Removedpool_status
    • Removedprepare_review
    • Removedprepare_summarize
    • Removedrank_papers
    • Removedsearch_papers
    • Removedsend_push
    • Removedsetup
  3. 19 tool updatesv0.2.4
    • First observedadd_topic
    • First observedcollect
    • First observedcollect_to_zotero
    • First observedconfigure
    • First observedfilter_duplicates
    • First observedfinalize_review
    • First observedgenerate_digest
    • First observedingest_research_context
    • First observedinit_session
    • First observedload_session_context
    • First observedmanage_topics
    • First observedpool_refresh
    • First observedpool_status
    • First observedprepare_review
    • First observedprepare_summarize
    • First observedrank_papers
    • First observedsearch_papers
    • First observedsend_push
    • First observedsetup

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation4/5

Most tools have distinct purposes, but 'collect' and 'collect_to_zotero' overlap in adding papers to Zotero. Descriptions help differentiate, but an agent might still misselect.

Naming Consistency4/5

Tool names mostly follow a verb_noun pattern (e.g., add_topic, search_papers), but a few are single verbs (collect, configure) or have longer phrases (load_session_context). Still readable and predictable.

Tool Count5/5

19 tools cover a complex research pipeline (search, review, collection, push) without being excessive. Each tool serves a clear step in the workflow.

Completeness5/5

The tool surface covers the full lifecycle: setup, session management, topic management, paper search, pool management, review, summarization, Zotero collection, and messaging push. No obvious gaps for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    C
    quality
    B
    maintenance
    Enables academic literature management through PDF import, hybrid search, knowledge graph construction, and automated literature review generation. Combines full-text search with semantic vector search for comprehensive paper analysis.
    55
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An academic paper management tool that enables multi-source research searching, batch PDF analysis, and the generation of comprehensive, cross-literature reviews. It features intelligent token compression and quality evaluation to streamline the literature review workflow for researchers.
    36 npm
    24
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A local academic tool that enables searching across nine academic sources, downloading PDFs, and performing AI-powered analysis of research papers. It also supports generating citation networks and recommending papers based on local workspace code.
    7
    15 PyPI
    95
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables searching, downloading, and exporting academic papers from 20+ scholarly sources including arXiv, PubMed, and Semantic Scholar. Supports multi-source concurrent search, citation network tracing, and export to CSV, RIS, and BibTeX.
    1
    MIT