Academic paper search across 11 sources with AI curation, ranked push, Zotero and Obsidian support.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
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!
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 | shorbrew install uv
pip:
Homebrew:
Docker:
From source (developers):
Add to claude_desktop_config.json (Settings β Developer β Edit Config):
Or add to .mcp.json:
Add to ~/.codex/config.toml:
Add to ~/.gemini/settings.json:
To remove:
mcporter config remove paper-distill
To remove:
rm -rf ~/.openclaw/tools/paper-distill-mcp && mcporter config remove paper-distill
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 |
After connecting your client, tell the agent "initialize paper-distill". It will call setup() and walk you through:
pool_refresh() populates the paper poolAll settings can be updated at any time through conversation:
All parameters are set via configure() or add_topic() β no manual file editing needed.
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 |
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").
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)
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").
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 3scan_batches=3: review one-third per day, finalize on day 4When all batches are reviewed, the pool is exhausted and the next run triggers a fresh API search automatically.
| 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
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):
Restart the MCP client after editing the config.
Push message format (fixed):
Factual signals from GitHub, npm, and our automated checks β not a rating.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/paper-distill-mcp)<a href="https://allmcps.com/mcp/paper-distill-mcp"><img src="https://allmcps.com/api/badge/paper-distill-mcp?style=directory" alt="Paper Distill MCP on AllMCPs" /></a>