Paper Distill MCP Server
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., "@Paper Distill MCP ServerFind recent papers on LLM reasoning and sync the top results to Zotero"
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.
๐ Paper Distill MCP Server
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-mcpThat'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 | shorbrew install uv
pip:
pip install paper-distill-mcpHomebrew:
brew tap Eclipse-Cj/tap
brew install paper-distill-mcpDocker:
docker run -i --rm ghcr.io/eclipse-cj/paper-distill-mcpFrom 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-mcpOr 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 # verifyTo 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 listTo 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 |
|
Trae | Settings โ MCP โ Add |
Cursor |
|
VS Code |
|
Windsurf |
|
Zed |
|
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:
Research topics โ describe your interests in plain language; the AI extracts keywords
Delivery platform โ set up Telegram / Discord / Feishu / WeCom (optional)
Paper library site โ build a personal paper library that updates automatically (optional)
Scraper delegate โ point to a low-cost agent or API for abstract extraction (recommended)
Preferences โ paper count, ranking weights, review mode, etc.
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 |
| Topic identifier (e.g. | โ |
| Display name (e.g. | โ |
| Search keywords, 3โ5 recommended | โ |
| Topic priority 0.0โ1.0 (higher = more papers) |
|
| Temporarily disable without deleting |
|
Paper Count & Review (configure)
Parameter | Options | Default | Description |
| any integer |
| Papers per push |
|
|
| Count mode |
| any integer |
| Shortlist size per reviewer |
|
|
| Single AI or dual blind review |
| 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 |
| Keyword and topic match |
|
| How recently the paper was published |
|
| Citation count (log-normalized) |
|
| Whether this is the first appearance |
|
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 |
|
| Main agent handles extraction (most expensive) |
agent name (e.g. | 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 |
| Split the paper pool into N batches, reviewed over N+1 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 3scan_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 |
|
Telegram |
|
|
Discord |
|
|
Feishu |
|
|
WeCom |
|
|
โ ๏ธ Important: set environment variables in the MCP client config
envfield, not as system environment variables. Otherwisesend_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 |
| Vercel deploy hook URL (triggers site rebuild) |
| Local path to the paper-library repository |
Setup steps (the AI agent will guide you):
Create a repo from the paper-library-template
Connect to Vercel and deploy
Create a deploy hook in Vercel (Settings > Git > Deploy Hooks)
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:
API Key: go to zotero.org/settings/keys/new โ check "Allow library access" + "Allow write access" โ Save Key
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 |
| Increases OpenAlex API rate limit; also used for Unpaywall | optional |
| CORE API key (free registration) | optional |
| Enhanced search via DeepSeek | optional |
| Save papers to Zotero | optional |
| Paper library website URL | optional |
| Data directory | default: |
๐ ๏ธ Tools (19 total)
Setup & Configuration
Tool | Description |
| First call โ detects fresh install and returns guided initialization instructions |
| Add a research topic with search keywords |
| Update any setting: paper count, ranking weights, review mode, etc. |
Search & Curation
Tool | Description |
| Parallel search across 11 sources |
| 4-dimensional weighted scoring |
| Deduplicate against previously pushed papers |
Daily Pipeline (paper pool mode)
Tool | Description |
| Search all 11 APIs and build the paper pool |
| Generate AI abstract extraction prompt |
| Generate review prompt โ AI makes push/overflow/discard decisions |
| Process AI decisions, update pool, output push message |
| Pool status: count, scan day, exhausted or not |
| Save papers to Zotero + generate Obsidian notes |
Session & Output
Tool | Description |
| Detect delivery platform and load research context |
| Load historical research context |
| Generate output files (JSONL, site, Obsidian) |
| Deliver to Telegram / Discord / Feishu / WeCom |
| Save to Zotero via DOI |
| List / disable / enable / reweight topics |
| 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 APIThe 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:
CORE โ world's largest OA aggregator (200M+ papers), covering author self-archived versions from institutional repositories
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_urlpriority: 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):
Increase
scan_batches(recommended) โ split the pool into more batches:configure(scan_batches=5)Reduce topics or keywords โ fewer topics โ fewer search results โ smaller pool.
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
Email: vertex.cj@gmail.com
GitHub Issues: Eclipse-Cj/paper-distill-mcp/issues
Bug reports and feature requests are welcome. The project is in active early development โ thank you for your patience and support ๐
Available Tools
19 toolsadd_topicB
Add a research topic for paper search.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Short identifier (e.g. "llm-reasoning", "rag-retrieval"), lowercase with hyphens | |
| label | Yes | Human-readable name (e.g. "LLM Reasoning") | |
| weight | No | Priority weight 0.0-1.0 (default 1.0 = highest priority) | |
| keywords | Yes | Search keywords for this topic (3-5 recommended) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| obsidian_mode | No | "none" (Zotero only), "summary" (with AI summary note), or "template" (empty template for user notes) | none |
| paper_indices | Yes | Comma-separated 1-based indices (e.g. "1,3") |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_ids | Yes | List of paper DOIs or IDs to add to Zotero |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| w_impact | No | Ranking weight for citation impact (default 0.15) | |
| w_novelty | No | Ranking weight for novelty/unseen (default 0.10) | |
| w_recency | No | Ranking weight for publication recency (default 0.20) | |
| summarizer | No | Who 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_mode | No | "single" (one AI reviews) or "dual" (two AIs review independently) | |
| w_relevance | No | Ranking weight for topic relevance (default 0.55) | |
| custom_focus | No | Custom screening criteria (e.g. "prefer clinical trials over reviews") | |
| scan_batches | No | Number of scan batches per pool cycle (default 2, pool is reviewed over batches+1 days) | |
| site_repo_path | No | Local path to the paper library site repo (for pushing digest JSON) | |
| paper_count_mode | No | "at_most", "at_least", or "exactly" | |
| site_deploy_hook | No | Vercel deploy hook URL for auto-deploying paper library website | |
| paper_count_value | No | Number of papers per push (e.g. 6) | |
| picks_per_reviewer | No | Papers each reviewer selects per scan (default 5) |
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 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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| papers | Yes | List of paper dicts to filter |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| is_final | No | True for final review (no discard allowed, only push/overflow) | |
| selections | Yes | JSON string with review decisions, e.g. '[{"index": 1, "action": "push", "tldr": "..."}, ...]' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date string in YYYY-MM-DD format | |
| papers | Yes | Final selected papers with annotations | |
| topics | No | Optional topics data for research note generation |
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 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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| search_now | No | If True, also run a paper search using extracted keywords | |
| session_id | No | Optional session identifier to isolate contexts (e.g. "openclaw-abc123"). If provided, only this session's interests are used for search_now. | |
| markdown_text | Yes | Markdown text containing research context (e.g. from another AI's summary) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
platformis specified, the response will includeask_platformโ you MUST ask the user which platform to use, then call init_session again withplatform=<user_choice>.If only one platform is configured, it is auto-selected.
The
send_pushtool also accepts aplatformparameter, so the user can override per-push even after init.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Preferred push platform ("telegram", "discord", "feishu", "wecom"). If None, auto-detects from configured env vars. | |
| session_id | No | Session identifier (auto-generated if not provided). Use different IDs to isolate research vs daily topics. | |
| load_context | No | "yes" = auto-load previous research context, "no" = start fresh, "ask" = return context summary for user to decide. | ask |
| channel_action | No | "new" = create dedicated channel, "existing" = use configured channel, "auto" = use existing if available. | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | If provided, only load context from this session. If None, load all previous context. |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Topic key (required for block/unblock/set_weight, e.g. "llm-news") | |
| action | Yes | One of "list", "block", "unblock", "set_weight" | |
| weight | No | New weight value (only for set_weight action, 0.0-1.0) |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | Optional single topic key to search (for new topics). If None, refreshes all topics. |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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. 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dual | No | Enable dual review mode (two reviewers each pick 3 papers) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| custom_focus | No | Optional custom screening criteria to include |
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 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| top_n | No | Return top N papers after ranking | |
| papers | Yes | List of paper dicts (from search_papers) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query string (e.g. "LLM reasoning chain-of-thought") | |
| max_results | No | Maximum number of results to return (default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date string in YYYY-MM-DD format | |
| papers | Yes | Papers to include in the push message | |
| platform | No | Target platform - "telegram", "discord", "feishu", or "wecom" (default: telegram) | telegram |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 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.
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.
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.
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.
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.
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.
19 tool updates
- Added
add_topic - Added
collect - Added
collect_to_zotero - Added
configure - Added
filter_duplicates - Added
finalize_review - Added
generate_digest - Added
ingest_research_context - Added
init_session - Added
load_session_context - Added
manage_topics - Added
pool_refresh - Added
pool_status - Added
prepare_review - Added
prepare_summarize - Added
rank_papers - Added
search_papers - Added
send_push - Added
setup
19 tool updates
v0.2.2- Removed
add_topic - Removed
collect - Removed
collect_to_zotero - Removed
configure - Removed
filter_duplicates - Removed
finalize_review - Removed
generate_digest - Removed
ingest_research_context - Removed
init_session - Removed
load_session_context - Removed
manage_topics - Removed
pool_refresh - Removed
pool_status - Removed
prepare_review - Removed
prepare_summarize - Removed
rank_papers - Removed
search_papers - Removed
send_push - Removed
setup
19 tool updates
v0.2.4- First observed
add_topic - First observed
collect - First observed
collect_to_zotero - First observed
configure - First observed
filter_duplicates - First observed
finalize_review - First observed
generate_digest - First observed
ingest_research_context - First observed
init_session - First observed
load_session_context - First observed
manage_topics - First observed
pool_refresh - First observed
pool_status - First observed
prepare_review - First observed
prepare_summarize - First observed
rank_papers - First observed
search_papers - First observed
send_push - First observed
setup
TDQS
Scored across 19 tools
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.
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.
19 tools cover a complex research pipeline (search, review, collection, push) without being excessive. Each tool serves a clear step in the workflow.
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
Related MCP Connectors
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Academic literature search, retrieval, and private library management on top of OpenAlex.
Search and download academic papers from arXiv, PubMed, bioRxiv, medRxiv, Google Scholar, Semanticโฆ
Related MCP Servers
- FlicenseCqualityBmaintenanceEnables 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-
- AlicenseNot gradedqualityDmaintenanceAn 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 npm24MIT
- AlicenseAqualityCmaintenanceA 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.715 PyPI95MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.1MIT