LLMでPubMed検索を可能にする汎用的MCPサーバーを作った話
最近、Claude DesktopやAntigravityなどのAIエージェントから直接PubMedを検索できるツールを作成しました。Model Context Protocol(MCP)という仕組みを使って実装したのですが、これが思いのほか便利でしたので紹介します。
背景と動機
ぼくは日常的に論文を検索する機会が多いのですが、毎回ブラウザでPubMedを開いて検索するのが煩雑に感じていました。特に、関連論文を芋づる式に探したり、特定の著者の論文をまとめて確認したりする作業は、かなりの時間を要します。そんな折、AntigravityでMCP(Model Context Protocol)というものが使えることを知りました。これは、AIエージェントが外部のツールやデータソースにアクセスするための標準的なプロトコルです。「これを使えばPubMedに直接アクセスできるのではないか」と考え、実装してみることにしました。
実装した機能
作成したのは、PubMedにアクセスするためのMCPサーバーです。基本的な機能としては、キーワード検索と論文詳細の取得があります。通常のPubMed検索と同様に、キーワードで論文を検索でき、PMIDを指定すると、アブストラクト、著者、書誌情報、DOI、全文リンク(PubMed Central、DOI)などを取得できます。
さらに高度な機能として、著者名、雑誌名、発行日で絞り込んだ検索が可能です。自然言語での指示にも対応しており、「Smithさんの2023年の胃癌に関する論文を探して」とか「NEJMに掲載された免疫療法の論文を検索して」のように指示すると、AIが適切にパラメータを解釈して検索してくれます。
関連論文の推薦機能も実装しました。特定の論文(PMID)から関連論文を自動的に見つける機能で、高IF雑誌優先モードを搭載しています。NEJM、Lancet、JAMA、Natureなど19誌の高品質論文を優先的に表示し、高IF雑誌の論文が少ない場合は、自動的に他の論文も含めるスマートフォールバックという仕組みも導入しました。また、タイトルから「Review」「Systematic Review」「Meta-Analysis」を検出し、明示的にラベル付けする機能もあります。
特に重視したのは「(臨床試験名やMeSH用語を知らなくても)普通に話し言葉のような日本語の自然言語でPubmed検索できること」と「一通りの論文を探した後は論文の重み付けをして重要論文を優先的に拾うこと」です。なお作者の嗜好により重要論文の定義はかなり腫瘍学やゲノム医学に偏っています、あしからず。
技術的なポイント
当初は ``mcp`` SDKを使おうとしたのですが、Python環境の互換性の問題で断念しました。結局、標準ライブラリ(``httpx``、``xmltodict``のみ依存)を使ってStdio-based MCPサーバーを実装しました。JSON-RPC 2.0プロトコルで標準入出力を介して通信する仕組みです。この方式の利点は、外部HTTPサーバーを立てる必要がなく、MCPクライアントのサブプロセスとしてローカルで動作するため、セキュリティリスクが低く、レスポンスも高速な点です。
PubMed(NCBI E-utilities API)は、API Keyなしでも使えますが、レート制限が厳しい(3回/秒)です。API Keyを設定すると10回/秒まで緩和されるため、環境変数経由でAPI Keyを設定できるようにしました。重要なのは、API KeyをGitHubにコミットしないことです。クライアント側の設定ファイル(``claude_desktop_config.json``など)で環境変数として渡す仕組みにしています。
高IF雑誌フィルターの実装は、個人的にかなり気に入っている機能です。文献レビューを書く際、どうしても低品質な論文が混ざってしまうことがあります。そこで、主要な医学雑誌(NEJM、Lancet、JAMA、Nature、Cellなど)のリストを作成し、これらに掲載された論文を優先的に表示する機能を実装しました。ただし、高IF雑誌のみに絞り込むと結果が少なすぎる場合があります。そこで、「スマートフォールバック」という仕組みを導入しました。要求件数の半分以上が高IF雑誌なら高IF雑誌のみを返し、それ以下なら高IF雑誌を優先しつつ他の論文も含める、という動作をします。
レビュー論文の自動検出も実装しました。文献調査では、レビュー論文やメタアナリシスが非常に重要です。しかし、PubMedのAPI(esummary)では詳細なPublication Typeが取得できないことが判明しました。そこで、タイトルから「meta-analysis」「systematic review」「review」などのキーワードを検出し、該当する論文には ``[Meta-Analysis]``、``[Systematic Review]``、``[Review]`` といったラベルを自動的に付与するようにしました。完璧ではありませんが、実用上は十分です。
AntigravityとGemini 3.0とClaude Sonnet 4.5で作ってみたよ〜!動作してるところの動画も見てね。自由にダウンロードできるので試してほしい(意外とノロいので本当はもう少し動作を速くしたい)
— レ点🧬💉💊 (@m0370) November 24, 2025
LLM(生成AI)でPubMed検索を可能にする汎用的MCPサーバーを作った話https://t.co/enf2MjgEbK pic.twitter.com/Qg7xGhlgKm
使用例と実用性
実際に使ってみると、想像以上に便利でした。例えば、「PMID 39282917(HER2陽性胃癌のペムブロリズマブに関するNEJM論文)に関連する高IF雑誌の論文を探して」と指示すると、Lancet OncologyやNatureに掲載された関連論文が即座に表示されます。テストでは、5件中すべてが高い関連性を持つ論文で、同じ臨床試験(KEYNOTE-811)の関連論文も含まれていました。手動で探すと10分以上かかる作業が、数秒で完了するわけです。
自然言語での絞り込み検索も便利です。「Smithさんの2023年の胃癌に関する論文」のように自然言語で指示すると、AIが適切にパラメータを解釈して検索してくれます。PubMedの検索構文を覚える必要がないのは、かなり楽です。論文詳細を取得すると、PubMed、PubMed Central(PMC)、DOIの3種類のリンクが自動的に生成されます。PMCで無料全文が読める論文かどうかが一目で分かるのは便利です。
セットアップ方法
興味がある方のために、セットアップ方法を説明します。
方法1: LLMに設定してもらう(最も簡単)

このツールのGitHubページ(https://github.com/m0370/mcp-pubmed-server)をClaude、Gemini、ChatGPTなどに見せて、「このツールを私のMacで使えるようにセットアップしてください」と依頼すれば、必要な手順を全て案内してくれます。これが最も簡単で確実な方法です。VS code上のClaude CodeやAntigravityなどのAI搭載IDEを使えばセットアップ自体を代行してもらうこともできます。
方法2: 自分でセットアップする
自分でセットアップしたい方は、以下の手順に従ってください。ターミナルにコマンドをコピー&ペーストするだけで完了します。
ステップ1: NCBI API Keyの取得(任意)
NCBIのAPI Keyがなくても動作しますが、あると検索が速くなります(3回/秒 → 10回/秒)。
- https://www.ncbi.nlm.nih.gov/ にアクセス
- 右上の「Sign in」からアカウントを作成(無料)
- ログイン後、「Settings」→「API Key Management」→「Create an API Key」
- 表示されたキー(長い文字列)をコピーしてメモ帳に保存
ステップ2: ターミナルでコマンドを実行
Macの「アプリケーション」→「ユーティリティ」→「ターミナル」を開きます。
以下のコマンドを1行ずつコピーして、ターミナルに貼り付けて Enter キーを押してください。
cd ~ git clone https://github.com/m0370/mcp-pubmed-server.git cd mcp-pubmed-server python3 -m venv .venv ./.venv/bin/pip install -r requirements.txt
最後のコマンドは少し時間がかかります(30秒〜1分程度)。完了すると、また入力できる状態に戻ります。
ステップ3: 設定ファイルを編集
Claude Desktopを使う場合
- Finderを開く
- メニューバーの「移動」→「フォルダへ移動」を選択
- 以下をコピー&ペーストして「移動」をクリック
~/Library/Application Support/Claude/
- ``claude_desktop_config.json`` というファイルを探す(なければ新規作成)
- このファイルをテキストエディタ(メモ帳やVS Codeなど)で開く
- 以下の内容をコピーして貼り付け(既に他の設定がある場合は、``"pubmed": { ... }`` の部分だけを ``"mcpServers"`` の中に追加)
{
"mcpServers": {
"pubmed": {
"command": "/Users/あなたのユーザー名/mcp-pubmed-server/.venv/bin/python3",
"args": [
"/Users/あなたのユーザー名/mcp-pubmed-server/server_stdio.py"
],
"env": {
"NCBI_API_KEY": "ここにAPI Keyを貼り付け"
}
}
}
}
- 重要: ``あなたのユーザー名`` の部分を実際のユーザー名に置き換える
- ユーザー名がわからない場合は、ターミナルで ``whoami`` と入力すると表示されます
- ``ここにAPI Keyを貼り付け`` の部分に、ステップ1で取得したAPI Keyを貼り付け
- API Keyを取得していない場合は、以下のように ``"env"`` の行を削除してください
{
"mcpServers": {
"pubmed": {
"command": "/Users/あなたのユーザー名/mcp-pubmed-server/.venv/bin/python3",
"args": [
"/Users/あなたのユーザー名/mcp-pubmed-server/server_stdio.py"
]
}
}
}
- ファイルを保存
VS Code + Claude Codeを使う場合
- VS Codeを開く
- 「Cmd + ,」を押して設定を開く
- 右上の「設定(JSON)を開く」アイコン(ファイルのようなアイコン)をクリック
- 以下をコピーして貼り付け
{
"claude.mcpServers": {
"pubmed": {
"command": "/Users/あなたのユーザー名/mcp-pubmed-server/.venv/bin/python3",
"args": [
"/Users/あなたのユーザー名/mcp-pubmed-server/server_stdio.py"
],
"env": {
"NCBI_API_KEY": "ここにAPI Keyを貼り付け"
}
}
}
}
- Claude Desktopの場合と同様に、ユーザー名とAPI Keyを置き換え
- ファイルを保存
ステップ4: 再起動
Claude Desktop(またはVS Code)を完全に終了(Macの場合は「Cmd + Q」)してから、再度起動します。
ステップ5: 動作確認
Claudeに以下のように話しかけてみてください。
HER2陽性胃癌の治療に関する最新の論文を3件検索して
論文が表示されれば成功です!
トラブルシューティング
うまく動作しない場合は、以下を確認してください。
- そもそもMCP Pubmedサーバーが起動しているか→ClaudeやGeminiに「MCP Pubmedサーバーは起動している?」と訪ねれば起動しているかどうかは教えてくれます。トラブルシューティングも教えてくれます。
- ユーザー名が正しく置き換えられているか
- ファイルパスに日本語や空白が含まれていないか
- Claude Desktop(またはVS Code)を完全に再起動したか
それでも解決しない場合は、方法1(LLMに設定してもらう)を試してみてください。GitHubのURL(https://github.com/m0370/mcp-pubmed-server)とエラーメッセージをLLMに見せれば、解決策を提案してくれます。
おわりに
MCPを使ってPubMed検索をAIエージェントから直接行えるようにしたところ、文献調査の効率が劇的に向上しました。特に、関連論文の推薦機能と高IF雑誌フィルターは、日常的な論文検索で非常に役立っています。興味がある方は、GitHubリポジトリを参照していただければと思います。MITライセンスですので、自由に使っていただいて構いません。

この記事に対するコメント
このページには、まだコメントはありません。
更新日:2025-11-24 閲覧数:585 views.