PubMed MCP Server について
PubMed MCP Server は、生物医学研究者や文献調査ワークフロー向けに、PubMed、Europe PMC などの検索、論文・全文の取得、引用処理を提供します。ローカル実行と公開ホスト型エンドポイントに対応し、出典情報付きの構造化データを返します。
主な機能
- 01PubMed と Europe PMC の検索
- 02論文メタデータと全文の取得
- 03引用の整形と解決
- 04MeSH 用語と引用指標の検索
- 05PMID、PMCID、DOI の変換
- 06出典情報と項目別エラーの提示
活用シーン
- 01テーマに沿った生物医学文献の検索
- 02論文の全文とメタデータの取得
- 03参考文献の形式調整と変換
- 04構造化された生物医学研究計画の作成
MCP 対応
文献検索、論文取得、引用処理、MeSH 検索などに使える 12 個のツール、1 つのリソース、1 つのプロンプトを MCP クライアントに公開します。stdio、ローカルの Streamable HTTP、公開ホスト型エンドポイントに対応します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://pubmed.caseyjhand.com/mcpclaude mcp add --transport http pubmed https://pubmed.caseyjhand.com/mcp{"mcpServers":{"pubmed":{"type":"http","url":"https://pubmed.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"pubmed":{"type":"http","url":"https://pubmed.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"pubmed":{"type":"http","url":"https://pubmed.caseyjhand.com/mcp"}}}{"mcpServers":{"pubmed":{"serverUrl":"https://pubmed.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
11| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | PubMed 検索クエリ(完全な NCBI 構文に対応) |
| maxResults | integer | いいえ | 返す結果の最大数 |
| offset | integer | いいえ | ページネーション用の結果オフセット(0 始まり)。PubMed が返す結果セットは先頭の 9999 件までのため、この値の上限は 9998 です。それ以降のレコードを取得するには、クエリを絞り込むかフィルターを追加してください。 |
| sort | enum | いいえ | 並べ替え順:relevance(デフォルト)、pub_date(新しい順)、author、journalrelevance | pub_date | author | journal |
| dateRange | object | いいえ | 日付範囲で絞り込みます。`minDate` と `maxDate` の両方が空でない場合にのみ適用され、どちらか一方が空の場合は日付範囲全体が無効になります。 |
| dateRange.minDate | string | はい | 開始日(YYYY/MM/DD、YYYY/MM、または YYYY)。空文字列の場合、この境界は無効になります |
| dateRange.maxDate | string | はい | 終了日(YYYY/MM/DD、YYYY/MM、または YYYY)。空文字列の場合、この境界は無効になります |
| dateRange.dateType | enum | いいえ | 日付の種類:pdat(出版)、mdat(変更)、edat(Entrez)pdat | mdat | edat |
| publicationTypes | array | いいえ | 出版タイプで絞り込みます(例:"Review"、"Clinical Trial"、"Meta-Analysis")。複数の値は OR 条件として扱われ、いずれかに一致すれば対象になります。 |
| author | string | いいえ | 著者名で絞り込みます(例:"Smith J") |
| journal | string | いいえ | ジャーナル名で絞り込みます |
| meshTerms | array | いいえ | MeSH 用語で絞り込みます。複数の用語は AND 条件として扱われ、すべて一致する必要があります。 |
| language | string | いいえ | 言語で絞り込みます(例:"english") |
| hasAbstract | boolean | いいえ | 抄録のある論文のみを含めます |
| freeFullText | boolean | いいえ | 無料で全文を閲覧できる論文のみを含めます |
| species | enum | いいえ | 種で絞り込みますhumans | animals |
| summaryCount | integer | いいえ | 上位 N 件の結果について簡単な要約を取得します(0 = PMID のみ)。上限の 50 件を超える場合は、残りの PMID を pubmed_fetch_articles に渡してください。 |
詳細
翻訳後に原文が更新されています。最新の内容は原文をご確認ください。
@cyanheads/pubmed-mcp-server
MCP 経由で PubMed/Europe PMC を検索し、論文と全文(PMC/EPMC/Unpaywall)、引用情報、MeSH 用語を取得します。STDIO または Streamable HTTP に対応。
公開ホスト型サーバー: https://pubmed.caseyjhand.com/mcp
概要
PubMed、PubMed Central、Europe PMC の生物医学文献を扱います。文献を検索し、メタデータと全文を取得し、識別子や部分的な引用情報を解決し、参考文献の形式を整え、MeSH の語彙に基づいてクエリを絞り込めます。stdio プロセス、ローカルの Streamable HTTP サーバー、または上記の公開ホスト型エンドポイントとして動作します。
ツール
| ツール | 説明 |
|---|---|
pubmed_search_articles | 完全なクエリ構文、構造化フィルター、日付範囲、任意の要約を使って PubMed を検索します |
pubmed_fetch_articles | PMID で論文のメタデータを取得します。抄録、著者、ジャーナル、MeSH 用語、助成金、リクエストに応じた集団著者の研究者、リンクされた撤回および訂正のお知らせが含まれます |
pubmed_fetch_fulltext | PMID、PMCID、または DOI で全文を取得します。PMC、Europe PMC、Unpaywall の順にフォールバックします |
pubmed_europepmc_search | PubMed に収録されていないプレプリント、特許、Agricola、オープンアクセス記録を Europe PMC で検索します |
pubmed_europepmc_fetch | 切り詰められていない抄録を含む Europe PMC の完全な記録を、records: [{ source, epmcId }] として取得します |
pubmed_format_citations | APA 7th、MLA 9th、BibTeX、RIS、または Vancouver(ICMJE/NLM)形式で引用を整形します。リンクされた撤回および訂正のお知らせも含まれます |
pubmed_find_related | PMID に関連する類似論文、引用論文、または参考文献を検索します |
pubmed_spell_check | NCBI ESpell を使って、誤記のある PubMed クエリを修正します |
pubmed_lookup_mesh | MeSH 見出しを、ツリー番号、適用範囲の注記、エントリー用語とともに検索します |
pubmed_lookup_citation | ECitMatch を使って、不完全な文献情報を一度に最大 25 件まで PMID に照合します |
pubmed_convert_ids | PMC ID Converter を使って DOI、PMID、PMCID の間で変換します |
リソース
| リソース | 説明 |
|---|---|
pubmed://database/info | EInfo を使った PubMed データベースのメタデータ(フィールド一覧、レコード数、最終更新日時) |
プロンプト
| プロンプト | 説明 |
|---|---|
research_plan | 生物医学研究の構造化された 4 フェーズ計画を生成します |
機能リファレンス
pubmed_search_articles ツール
- 完全な PubMed クエリ構文に加え、フィルター(著者、ジャーナル、MeSH、出版物の種類、言語、種、抄録、無料全文)および出版日/更新日/Entrez 日付の範囲を指定できます
- 1 ページあたり最大 1,000 件の結果を取得でき、オフセットは最大 9,998 まで指定できます。また、
maxResults: 0を指定すると一致件数のみを取得できます。summaryCountを指定すると、最大 50 件のヒットについて概要が追加されます totalCount、PubMed が実行したeffectiveQuery、適用されたappliedFiltersを報告します- PubMed の呼び出し前に、空のフィルター値、無効な日付、逆順の日付範囲を拒否します
pubmed_fetch_articles ツール
- 1 回の呼び出しで最大 200 件の PMID を指定できます。見つからなかったものは
unavailablePmidsに一覧表示されます - 抄録、著者、ジャーナル、DOI、出版物の種類、リンクされた撤回/正誤表/コメントのお知らせ、リンクを取得します。MeSH 用語はデフォルトで有効です。
includeGrantsで助成金を、includeInvestigatorsで集団著者のメンバー(そのInvestigatorList。一部のコンソーシアム試験では数千人)を取得できます - 撤回、訂正、または問題が指摘された論文には、タイトルの直下に
pubmed_format_citationsと同じお知らせブロックが表示されます recordTypeでジャーナル論文と Bookshelf の章および書籍を区別します。任意のmaxResponseCharactersを指定すると、上限を超えた分はdeferred.idsに回されます
pubmed_fetch_fulltext ツール
pmcids、pmids、doisを任意に組み合わせて、1 回の呼び出しで重複しない識別子を最大 50 件まで指定できます。先頭の 10 件を取得し、残りは後続の呼び出し用にoverLimitとして返します。それぞれ PMC、Europe PMC、Unpaywall(UNPAYWALL_EMAILが必要)の順に検索します。複数の識別子が同じ論文を指す場合、その論文は一度だけ取得して返し、応答元の階層をviaSourceに示しますsource: "pmc"はセクション(本文に続いて、謝辞、宣言、付録などの本文末尾の情報)、表、図を返します。source: "unpaywall"は、最善を尽くして取得した HTML または PDF の本文テキストを返します- 見つからなかった項目には、型付きの
reasonとtriedTiersが含まれます。sections、maxCharacters、overflowMode、maxResponseCharactersで応答を制限でき、切り詰められた内容はtruncationに報告されます
pubmed_europepmc_search tool
MEDとPMCに、プレプリント(PPR)、特許(PAT)、Agricola(AGR)を追加します。デフォルトはMED、PMC、PPRですcursorMark/nextCursorMarkによるカーソルページネーションに対応し、1ページあたり最大100件です。抄録は400文字の抜粋として返されます- カンマ区切りの
<field> asc|descキーで任意のsortを指定できます。デフォルトの順序はrelevanceです。Europe PMC が使用できないソートを指定すると、europepmc_invalid_inputエラーになります EUROPEPMC_ENABLED=falseの場合は登録されません
pubmed_europepmc_fetch tool
- 1回の呼び出しで最大25件のレコードを取得します。
records: [{ source, epmcId }]として指定し、各ペアは検索結果からコピーします。完全な抄録が返されます。解決できなかったIDはnotFoundに含まれます。maxResponseCharactersを指定すると、上限を超えた分はdeferred.recordsに繰り越されます EUROPEPMC_ENABLED=falseの場合は登録されません
pubmed_format_citations tool
- 1回の呼び出しで最大50件のPMIDを処理できます。
apa、mla、bibtex、ris、vancouverを任意に組み合わせて指定できます - Bookshelf のレコードは編集書として引用され、各章には個別の最終改訂日または寄稿日が使用されます。取得できないPMIDは利用不可として報告されます
- NCBI が論文にリンクしている撤回、正誤表、懸念表明は
noticesとして返され、引用より前に表示されます。Vancouver 形式ではRetraction in:/Erratum in:の注記が追加され、APA 形式では撤回に関する括弧書きが追加されます
pubmed_find_related tool
similar、cited_by、referencesに対応し、オフセットページネーションで1ページあたり最大50件を取得します- Europe PMC、次に OpenAlex にフォールバックし、応答したプロバイダーを示します。どのプロバイダーからも結果を得られない場合は
all_providers_failedエラーになります
pubmed_spell_check tool
original、corrected、hasSuggestionを返します。修正は該当箇所に適用されるため、フィールドタグ、演算子、スペース、遺伝子記号は入力どおりに保たれます- 検索結果が0件または少ない場合に実行し、
correctedを使ってpubmed_search_articlesを再試行してください
pubmed_lookup_mesh tool
- 名称またはフリーテキストの用語でディスクリプターを検索します。完全一致する見出し(薬物クラスの見出しの場合はディスクリプター)が最初に表示されます。1ページあたり最大50件で、
nextOffsetを使って続きの結果を取得できます - レコードにはEntrez UIDに加えて、MeSHの一意のID(
meshId、例:D000072657)が含まれます。includeDetails(デフォルトで有効)を指定すると、ツリー番号、スコープノート、エントリータームが追加されます
pubmed_lookup_citation tool
- 1回の呼び出しで最大25件の部分的な引用を処理します。ジャーナル名または4桁の年が必須で、巻、最初のページ、著者を指定すると照合精度が高まります
- それぞれを個別に照合し、復旧に役立つ詳細とともに
matched、not_found、ambiguousのいずれかを返します
pubmed_convert_ids tool
- 1回の呼び出しで最大50件のIDを処理できます。すべて同じ
idType(doi、pmid、pmcid)を指定する必要があります。PMCに索引付けされた論文のみ解決されます - 各IDについて、入力順に成功またはエラーの行を返すため、一部の処理に失敗してもバッチ全体は失敗しません
pubmed://database/info resource
pubmedデータベースに対するライブのEInfo呼び出しで、application/jsonとして返されますcount、lastUpdate、およびfields[]が含まれます。fields[]の名前はpubmed_search_articlesが受け付ける検索タグです
research_plan prompt
- 引数:
title、goal、keywordsは必須です。organismとincludeAgentPromptsは任意です - 4段階の研究計画を返します。
includeAgentPrompts: "true"を指定すると、9つのサブステップそれぞれにエージェント向けガイダンスブロックが追加されます。そのうち2つはツールを示します。文献レビューではpubmed_search_articlesとpubmed_lookup_meshが、解釈ステップではpubmed_search_articlesが示されます
機能
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP のトランスポート、差し替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、任意で OpenTelemetry トレーシングを利用できる構造化ログを備えています。
PubMed 固有の機能:
- NCBI E-utilities(ESearch、EFetch、ESummary、ELink、ESpell、EInfo、ECitMatch)と PMC ID Converter を利用し、不足部分は Europe PMC、OpenAlex、Unpaywall で補います
- NCBI へのリクエストキューを共有し、リクエスト開始間隔の調整、同時実行数の上限設定、NCBI から 429 が返された後にすべての呼び出しを保留するクールダウン、キューの待機時間と再試行時間を含む共通の期限を提供します
- PubMed の不整合なレコードに対応した XML 解析:構造化抄録、欠落フィールド、さまざまな日付形式
- 柔軟な識別子処理:先頭をゼロ埋めした PMID は、いずれのツールでも記載どおりの PMID として解決されます。
pubmed_fetch_fulltextは、大文字と小文字を区別しない DOI と、PMCプレフィックスの有無を問わない PMC ID にも対応します - 依存関係を使わず、手書きの引用形式出力機能(APA、MLA、BibTeX、RIS、Vancouver)を提供します
エージェント向けの出力:
- すべてのレスポンスに出典情報を付与:出典ラベル、ライセンスフィールド、Unpaywall の結果に関する可能な範囲での警告、検索時の有効なクエリのエコーにより、エージェントが信頼できる情報を判断できます
- 部分的な失敗を適切に処理:バッチツールはリクエスト全体を失敗させず、項目ごとの成功/エラー行を返し、構造化ステータスコードと次に取るべき具体的な手順を示すテキストを含みます
- 識別可能な出力コントラクト:
source: "pmc" | "unpaywall"、型付きのunavailable理由、viaSourceおよびtriedTiersフィールドにより、呼び出し元は文字列解析ではなくデータに基づいて分岐できます
はじめに
公開ホストインスタンス
https://pubmed.caseyjhand.com/mcp で公開インスタンスを利用できます。インストールは不要です。Streamable HTTP 経由で任意の MCP クライアントを接続してください。
{
"mcpServers": {
"pubmed-mcp-server": {
"type": "streamable-http",
"url": "https://pubmed.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
以下を MCP クライアントの設定ファイルに追加してください。
{
"mcpServers": {
"pubmed-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/pubmed-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NCBI_API_KEY": "your-key-here"
}
}
}
}
または、npx を使用します(Bun は不要です)。
{
"mcpServers": {
"pubmed-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/pubmed-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"NCBI_API_KEY": "your-key-here"
}
}
}
}
または、Docker を使用します。
{
"mcpServers": {
"pubmed-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/pubmed-mcp-server:latest"]
}
}
}
Streamable HTTP の場合は、トランスポートを設定してサーバーを起動します。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以降(または Node.js v24+)。
- 任意:NCBI API key を使用すると、レート制限が毎秒 3 リクエストから 10 リクエストに引き上げられます。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/pubmed-mcp-server.git
- ディレクトリに移動します:
cd pubmed-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set NCBI_API_KEY, NCBI_ADMIN_EMAIL, and UNPAYWALL_EMAIL as needed
Configuration
| 変数 | 説明 | デフォルト |
|---|---|---|
NCBI_API_KEY | NCBI API キーです。レート制限が 3 req/s から 10 req/s に引き上げられます。 | なし |
NCBI_ADMIN_EMAIL | NCBI の推奨に従い、NCBI リクエストとともに送信する連絡先メールアドレスです。 | なし |
NCBI_REQUEST_DELAY_MS | NCBI リクエストの開始間に設ける最小間隔(ミリ秒)です。 | 400(キーがある場合は 100) |
NCBI_MAX_CONCURRENT | 同時に実行中にできる NCBI リクエストの最大数です。 | 8 |
NCBI_MAX_RETRIES | 失敗した NCBI リクエストの再試行回数です。 | 6 |
NCBI_TIMEOUT_MS | リクエストごとの HTTP タイムアウト(ミリ秒)です。 | 30000 |
NCBI_TOTAL_DEADLINE_MS | キューの待機、再試行、バックオフを含む、1 回の NCBI 呼び出しの期限(ミリ秒)です。期限内に開始できない呼び出しは直ちに拒否されます。 | 60000 |
UNPAYWALL_EMAIL | Unpaywall の連絡先メールアドレスです。設定すると、PMC 以外の DOI に対して pubmed_fetch_fulltext の Unpaywall 階層が有効になります。 | なし |
UNPAYWALL_TIMEOUT_MS | Unpaywall の検索とコンテンツ取得のリクエストごとのタイムアウト(ミリ秒)です。 | 20000 |
EUROPEPMC_ENABLED | false に設定すると、すべての Europe PMC 呼び出しが無効になります。Europe PMC の両方のツールが登録解除され、pubmed_fetch_fulltext はその階層をスキップし、pubmed_find_related はそのフォールバックをスキップします。 | true |
EUROPEPMC_EMAIL | Europe PMC リクエストとともに送信する任意の連絡先メールアドレスです。 | なし |
EUROPEPMC_REQUEST_DELAY_MS | Europe PMC リクエストの開始間に設ける最小間隔(ミリ秒)です。 | 200 |
EUROPEPMC_MAX_RETRIES | 失敗した Europe PMC リクエストの再試行回数です。 | 3 |
EUROPEPMC_TIMEOUT_MS | Europe PMC 呼び出しのリクエストごとのタイムアウト(ミリ秒)です。 | 20000 |
MCP_TRANSPORT_TYPE | トランスポートです。stdio または http を指定します。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモードです。stateless、stateful、または auto を指定します。 | stateless |
MCP_AUTH_MODE | 認証方式です。none、jwt、または oauth を指定します。 | none |
MCP_LOG_LEVEL | ログレベルです(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイルのディレクトリです(Node.js のみ)。 | <app-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンドです。in-memory、filesystem、supabase、cloudflare-kv/r2/d1 を指定します。 | in-memory |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
すべてのサーバー設定と共通フレームワークのオーバーライドについては、.env.example を参照してください。
サーバーの実行
ローカル開発
-
本番版をビルドして実行する:
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
チェックとテストを実行する:
bun run devcheck # Lints, formats, type-checks, and more bun run test # Runs the test suite
プロジェクト構成
| ディレクトリ | 目的 |
|---|---|
src/mcp-server/tools | ツール定義(*.tool.ts)。PubMed、PMC、Europe PMC にまたがる 11 個のツールです。 |
src/mcp-server/resources | リソース定義。データベース情報リソースです。 |
src/mcp-server/prompts | プロンプト定義。研究計画プロンプトです。 |
src/services/ncbi | NCBI E-utilities サービス層 — API クライアント、キュー、パーサー、フォーマッターです。 |
src/services/europe-pmc | Europe PMC サービス — 検索と fullTextXML JATS の取得です。NCBI JATS パーサーを再利用します。 |
src/services/unpaywall | Unpaywall サービス — DOI から OA の掲載場所を解決し、コンテンツを取得します(HTML/PDF)。 |
src/services/openalex | OpenAlex サービス — pubmed_find_related の最終手段となるプロバイダーです。 |
src/config | Zod による、サーバー固有の環境変数の解析と検証です。 |
tests/ | src/ の構成を反映したユニットテストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します — ツールのロジック内で
try/catchを使用しないでください - ログには
ctx.logを、ストレージにはctx.stateを使用します - 新しいツールとリソースは、
src/index.tsのcreateApp()配列に登録します - 外部 API 呼び出しはラップします。生データを検証し、ドメイン型に正規化してから出力スキーマを返します。不足しているフィールドを捏造しないでください
コントリビューション
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
このプロジェクトは Apache 2.0 License の下でライセンスされています。詳細については、LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。