Paper Distill MCP について
Paper Distill MCP は、11 のデータソースを並列に検索し、重み付けスコアで論文を順位付けする MCP サーバーです。現在は初期開発段階にあり、定期的な論文ダイジェストを受け取りたい研究者向けです。
主な機能
- 0111 の学術データソースを並列検索
- 02重みを調整できる 4 次元スコアリング
- 03オプションのデュアル AI によるブラインドレビュー
- 04Telegram、Discord、Feishu、WeCom への配信
- 05Zotero と Obsidian との連携
活用シーン
- 01研究トピックごとに新着論文を毎日絞り込んで配信
- 02選定した論文を Zotero ライブラリに保存
- 03論文ごとの Obsidian ノートカードを生成
MCP 対応
uvx、pip、Docker で起動する MCP サーバーとして動作し、Claude Desktop、Claude Code、Cursor、VS Code などの MCP クライアントから検索、ランキング、配信のツールを利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx paper-distill-mcpOPENALEX_EMAILEmail for OpenAlex polite pool (higher rate limits) and Unpaywall queriesCORE_API_KEYシークレットCORE API key for enhanced open-access paper retrieval (free at core.ac.uk)TELEGRAM_BOT_TOKENシークレットTelegram bot token for paper deliveryTELEGRAM_CHAT_IDTelegram chat ID for paper deliveryDISCORD_WEBHOOK_URLシークレットDiscord webhook URL for paper deliveryZOTERO_LIBRARY_IDZotero user ID for saving papers to your libraryZOTERO_API_KEYシークレットZotero API key for saving papers to your libraryローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
19掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 検索クエリ文字列(例:"LLM reasoning chain-of-thought") |
| max_results | integer | いいえ | 返す結果の最大数(デフォルト 10) |
詳細
📚 Paper Distill MCP Server
Model Context Protocol を基盤とした、学術論文の検索、インテリジェントな選別、マルチプラットフォームへの配信。
すべての MCP クライアントに対応しています:Claude Desktop、Claude Code、Cursor、Trae、Codex CLI、Gemini CLI、OpenClaw、VS Code、Zed など。
⚠️ 開発初期段階です。 多くの機能はまだ検証中であり、バグや不安定な動作が含まれる可能性があります。フィードバックやバグ報告を歓迎します!
✨ 特長
- 🔍 11の情報源を並行検索 — OpenAlex、Semantic Scholar、PubMed、arXiv、Papers with Code、CrossRef、Europe PMC、bioRxiv、DBLP、CORE、Unpaywall
- 🤖 適応型AI配信 — エージェントが変化する研究関心を追跡し、検索キーワードとおすすめを時間とともに自動で最適化します
- 📊 4次元の重み付けランキング — 関連性 × 新しさ × 影響度 × 新規性。重みは完全にカスタマイズ可能です
- 👥 2つのAIによるブラインドレビュー — 2人のAIレビュアーが独立して論文を選別し、チーフレビュアーが最終的な配信/繰り越し/除外の判断をまとめます(任意)
- 🧹 スクレイパーへの委任 — 要旨の抽出を低コストのエージェントまたはAPIに委任して、トークン消費を大幅に削減できます
- 🌐 個人用論文ライブラリサイト — Astro + Vercel による自動デプロイ。プッシュのたびに30秒以内にサイトが更新されます
- 📬 マルチプラットフォーム配信 — Telegram / Discord / Feishu / WeCom
- 📦 Zotero 連携 — 1つのコマンドで論文を Zotero に保存できます
- 📝 Obsidian 連携 — Zotero へのバックリンク付き論文ノートカードを自動生成します。要約モードとテンプレートモードに対応しています
🚀 クイックインストール
uvx paper-distill-mcp
以上です。AI クライアントがすべてのツールを自動的に検出します。基本的な論文検索に API キーは必要ありません。
uvがありませんか? →curl -LsSf https://astral.sh/uv/install.sh | shまたはbrew install uv
その他のインストール方法(pip / Homebrew / Docker / ソース)
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
ソースから(開発者向け):
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 .
🔗 AI クライアントへの接続
Claude Desktop
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
または .mcp.json に追加します:
{
"mcpServers": {
"paper-distill": {
"command": "uvx",
"args": ["paper-distill-mcp"]
}
}
}
Codex CLI(OpenAI)
~/.codex/config.toml に追加します:
[mcp_servers.paper-distill]
command = "uvx"
args = ["paper-distill-mcp"]
Gemini CLI(Google)
~/.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
削除するには:
mcporter config remove paper-distill
OpenClaw — ソースからインストール
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
削除するには:
rm -rf ~/.openclaw/tools/paper-distill-mcp && mcporter config remove paper-distill
その他のクライアント(Cursor、VS Code、Windsurf、Zed、Trae)
同じ JSON 設定を使いますが、設定ファイルのパスは異なります:
| クライアント | 設定パス |
|---|---|
| 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 トランスポート(リモート/ホスト型)
paper-distill-mcp --transport http --port 8765
🎯 はじめに
クライアントを接続したら、エージェントに 「initialize paper-distill」 と伝えてください。setup() が呼び出され、次の設定が順に案内されます。
- 研究トピック — 関心のある分野を自然な言葉で説明すると、AI がキーワードを抽出します
- 配信プラットフォーム — Telegram / Discord / Feishu / WeCom を設定します(任意)
- 論文ライブラリサイト — 自動で更新される個人用論文ライブラリを作成します(任意)
- スクレイパーの委任先 — 要旨の抽出を依頼する低コストのエージェントまたは API を指定します(推奨)
- 設定 — 論文数、ランキングの重み、レビュー方法などを設定します
- 初回検索 —
pool_refresh()で論文プールを更新します
すべての設定は、会話を通じていつでも変更できます。
- 「次回は論文を8件プッシュして」
- 「新しいトピックを追加:RAG retrieval」
- 「二重AIブラインドレビューを有効にして」
- 「新しさの重みを上げて」
⚙️ 設定リファレンス
すべてのパラメーターは configure() または add_topic() で設定できます。ファイルを手動で編集する必要はありません。
研究トピック(add_topic / manage_topics)
| パラメーター | 説明 | デフォルト |
|---|---|---|
key | トピック識別子(例:"llm-reasoning") | — |
label | 表示名(例:"LLM Reasoning") | — |
keywords | 検索キーワード。3〜5個を推奨 | — |
weight | トピックの優先度。0.0〜1.0(高いほど論文数が増えます) | 1.0 |
blocked | 削除せずに一時的に無効化します | false |
論文数とレビュー(configure)
| パラメーター | 選択肢 | デフォルト | 説明 |
|---|---|---|---|
paper_count_value | 任意の整数 | 6 | 1回のプッシュあたりの論文数 |
paper_count_mode | "at_most" / "at_least" / "exactly" | "at_most" | 件数モード |
picks_per_reviewer | 任意の整数 | 5 | レビュアーごとの候補数 |
review_mode | "single" / "dual" | "single" | 単一AIレビューまたは二重ブラインドレビュー |
custom_focus | 自由記述 | "" | カスタム選定基準 |
💡 二重ブラインドレビュー:2人の独立したAIレビュアーがそれぞれ論文を候補として選定し、チーフレビュアーが最終的にプッシュ、繰り越し、破棄を判断します。選定されなかった論文は破棄されず、次回まで保留されます。
configure(review_mode="dual")で有効にできます。
ランキングの重み(configure)
論文のスコアリングを制御します。4つの重みの合計は約1.0にしてください。
| パラメーター | 評価対象 | デフォルト |
|---|---|---|
w_relevance | キーワードとトピックの一致度 | 0.55 |
w_recency | 論文の公開時期 | 0.20 |
w_impact | 被引用数(対数正規化) | 0.15 |
w_novelty | 初登場かどうか | 0.10 |
例:「最近の論文を優先して」→
configure(w_recency=0.35, w_relevance=0.40)
スクレイパー/要旨抽出の委任先(configure)
要旨の抽出は、最も多くのトークンを消費する処理です。デフォルトではメインエージェントで実行されますが、より低コストのモデルに委任して、大幅にコストを削減できます。
| パラメーター | 値 | 説明 |
|---|---|---|
summarizer | "self" | メインエージェントが抽出を担当します(最も高コスト) |
エージェント名(例:"scraper") | 低コストのサブエージェントに委任します | |
| API URL | 外部LLM API(DeepSeek、Ollamaなど)を呼び出します |
🔧 強く推奨:論文が30件を超えると、最先端モデルのコストはすぐにかさみます。トークン100万個あたり0.14ドルのモデルでも、同じ品質で抽出を行えます。
configure(summarizer="scraper")で設定してください。
論文プールとスキャンバッチ(configure)
| パラメーター | 説明 | デフォルト |
|---|---|---|
scan_batches | 論文プールを N 個のバッチに分割し、N+1 日かけてレビューします | 2(3 日間) |
pool_refresh() は 11 個すべての API を検索して、プールを満たします。その後、1 回のレビューで 60 件を超える論文がまとめて表示されないよう、プールを日ごとの AI レビュー用バッチに分割します。
scan_batches=2(デフォルト):1 日目に前半、2 日目に後半をレビューし、3 日目に確定しますscan_batches=3:毎日 3 分の 1 ずつレビューし、4 日目に確定します
すべてのバッチがレビューされるとプールが使い切られ、次回の実行時に新しい API 検索が自動的に開始されます。
配信プラットフォーム(環境変数)
| プラットフォーム | 環境変数 | platform の値 |
|---|---|---|
| Telegram | TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID | "telegram" |
| Discord | DISCORD_WEBHOOK_URL | "discord" |
| Feishu | FEISHU_WEBHOOK_URL | "feishu" |
| WeCom | WECOM_WEBHOOK_URL | "wecom" |
⚠️ 重要:環境変数はシステム環境変数ではなく、MCP クライアントの設定の
envフィールドに設定してください。そうしないと、send_push()が Webhook URL にアクセスできず、AI が Webhook を直接呼び出すスクリプトを生成して、エンコーディングの問題が発生する可能性があります。
設定例(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"
}
}
}
}
設定を編集した後、MCP クライアントを再起動してください。
プッシュメッセージの形式(固定):
1. Paper Title (Year)
Journal Name
- One-sentence summary
- Why it was selected
https://doi.org/...
論文ライブラリーサイト(configure)
個人用論文ライブラリーサイトです。プッシュのたびに自動更新されます。Astro + Vercel(無料プラン)で構築されています。
| パラメーター | 説明 |
|---|---|
site_deploy_hook | Vercel のデプロイフック URL(サイトの再ビルドを実行) |
site_repo_path | 論文ライブラリーリポジトリーのローカルパス |
セットアップ手順(AI エージェントが案内します):
- paper-library-template からリポジトリーを作成します
- Vercel に接続してデプロイします
- Vercel でデプロイフックを作成します(Settings > Git > Deploy Hooks)
- フック URL をエージェントに伝えます →
configure(site_deploy_hook=...)で保存されます
セットアップ後、finalize_review() を呼び出すたびに、ダイジェスト JSON がサイトリポジトリーにプッシュされ、Vercel の再ビルドが実行されます。サイトは約 30 秒で更新されます。
Zotero 連携
コマンド 1 つで論文を Zotero に保存できます。Zotero アカウントと API キーが必要です。
認証情報の取得方法:
- API キー:zotero.org/settings/keys/new にアクセスし、「Allow library access」+「Allow write access」にチェックを入れて、「Save Key」をクリックします
- ライブラリー ID:zotero.org/settings/keys にアクセスすると、ページ上部にユーザー ID が表示されます
MCP クライアントの設定に追加:
{
"mcpServers": {
"paper-distill": {
"command": "uvx",
"args": ["paper-distill-mcp"],
"env": {
"ZOTERO_LIBRARY_ID": "your userID",
"ZOTERO_API_KEY": "your API key"
}
}
}
}
セットアップ後、プッシュの後に collect 1 3 と返信すると、論文 1 と 3 が Zotero に保存され、トピックごとのフォルダーに自動で振り分けられます。
すべての環境変数
| 変数 | 説明 | 必須 |
|---|---|---|
OPENALEX_EMAIL | OpenAlex API のレート制限を緩和します。Unpaywall にも使用されます | 任意 |
CORE_API_KEY | CORE API キー(無料登録) | 任意 |
DEEPSEEK_API_KEY | DeepSeek による検索機能の強化 | 任意 |
ZOTERO_LIBRARY_ID + ZOTERO_API_KEY | 論文を Zotero に保存します | 任意 |
SITE_URL | 論文ライブラリーサイトの URL | 任意 |
PAPER_DISTILL_DATA_DIR | データディレクトリー | デフォルト:~/.paper-distill/ |
🛠️ ツール(全 19 個)
セットアップと設定
| ツール | 説明 |
|---|---|
setup() | 最初の呼び出し — 新規インストールを検出し、初期化手順を案内します |
add_topic(key, label, keywords) | 検索キーワードを指定して研究トピックを追加します |
configure(...) | 論文数、ランキングの重み、レビューモードなど、任意の設定を更新します |
検索とキュレーション
| ツール | 説明 |
|---|---|
search_papers(query) | 11 のソースを並列検索します |
rank_papers(papers) | 4 次元の重み付けスコアリングを行います |
filter_duplicates(papers) | 以前にプッシュした論文と照合して重複を除外します |
毎日のパイプライン(論文プールモード)
| ツール | 説明 |
|---|---|
pool_refresh(topic?) | 11 の API をすべて検索し、論文プールを作成します |
prepare_summarize(custom_focus?) | AI による要旨抽出プロンプトを生成します |
prepare_review(dual?) | レビュープロンプトを生成します — AI がプッシュ/保留/破棄を判断します |
finalize_review(selections) | AI の判断を処理し、プールを更新して、プッシュメッセージを出力します |
pool_status() | プールの状態を表示します:件数、スキャン日、枯渇しているかどうか |
collect(paper_indices) | 論文を Zotero に保存し、Obsidian ノートを生成します |
セッションと出力
| ツール | 説明 |
|---|---|
init_session | 配信プラットフォームを検出し、研究コンテキストを読み込みます |
load_session_context | 過去の研究コンテキストを読み込みます |
generate_digest(papers, date) | 出力ファイル(JSONL、サイト、Obsidian)を生成します |
send_push(date, papers, platform) | Telegram / Discord / Feishu / WeCom に配信します |
collect_to_zotero(paper_ids) | DOI を使って論文を Zotero に保存します |
manage_topics(action, topic) | トピックの一覧表示/無効化/有効化/重みの変更を行います |
ingest_research_context(text) | セッション間で研究コンテキストを引き継ぎます |
🏗️ アーキテクチャ
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
このサーバーは内部で LLM を呼び出しません。検索、ランキング、重複排除はすべて純粋なデータ操作です。インテリジェンスは AI クライアントが担います。
📖 ペイウォール論文とオープンアクセス
システムはデフォルトですべての論文(購読制ジャーナルを含む)を検索し、次の方法で無料の全文へのアクセスを最大化します。
- CORE — 世界最大の OA アグリゲーター(2 億件以上の論文)で、機関リポジトリに著者がセルフアーカイブしたバージョンを収録しています
- Unpaywall — 検索結果を統合した後、DOI を使って合法的に無料公開されている PDF を自動検索します(プレプリント、グリーン OA、著者版)
無料版がない論文については、システムは DOI リンクを返します。機関の VPN にアクセスできる場合、接続中に DOI リンクをクリックするだけで通常は十分です。出版社は IP アドレスから所属機関を判別します。
open_access_urlの優先順位:arXiv > CORE > Unpaywall > OpenAlex > Semantic Scholar > Papers with Code
❓ FAQ
レビュー段階で停止する/30 分以上応答がない
症状:prepare_review() が生成したレビュープロンプトによって、AI クライアントが停止またはタイムアウトします。
原因:プール内の候補論文が多すぎる(例:80~100 件)ため、プロンプトがクライアントのコンテキストウィンドウまたは出力トークンの上限を超えています。VS Code Copilot や一部の IDE プラグインは、コンテキスト容量に制限があります。
解決策(いずれかを選択してください):
scan_batchesを増やす(推奨) — プールをより多くのバッチに分割します:configure(scan_batches=5)- トピックまたはキーワードを減らす — トピックを減らすと検索結果が減り、プールも小さくなります。
- より大きなコンテキストに対応したクライアントに切り替える — Claude Code(200k)、Claude Desktop(200k)、または Cursor は長いプロンプトをより適切に処理できます。
インストールエラー:Requires-Python >=3.10
Python 3.10 以降が必要です。macOS にはデフォルトで Python 3.9 が付属しています。brew install [email protected] で新しいバージョンをインストールするか、uv を使用してください。
Docker イメージをプルできない(中国本土)
中国本土では ghcr.io がブロックされています。中国のミラーを使って pip を実行してください:
pip install paper-distill-mcp -i https://pypi.tuna.tsinghua.edu.cn/simple
🧑💻 開発
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
📄 ライセンス
このプロジェクトは AGPL-3.0 ライセンスの下で公開されています。詳細は LICENSE を参照してください。
許可されていない商用利用は禁止されています。 商用ライセンスに関するお問い合わせは、作者までご連絡ください。
📬 お問い合わせ
- メール:[email protected]
- GitHub Issues:Eclipse-Cj/paper-distill-mcp/issues
バグ報告や機能リクエストを歓迎します。このプロジェクトは開発初期段階にあり、現在も活発に開発中です。ご理解とご支援に感謝いたします 🙏
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。