mcpField
P
PubMed MCP Server

PubMed MCP Server

リモート
npmjs.comデータ・分析1632 日前に更新
リポジトリ公式サイト

PubMed MCP Server について

PubMed MCP Server は、生物医学研究者や文献調査ワークフロー向けに、PubMed、Europe PMC などの検索、論文・全文の取得、引用処理を提供します。ローカル実行と公開ホスト型エンドポイントに対応し、出典情報付きの構造化データを返します。

主な機能

  1. 01PubMed と Europe PMC の検索
  2. 02論文メタデータと全文の取得
  3. 03引用の整形と解決
  4. 04MeSH 用語と引用指標の検索
  5. 05PMID、PMCID、DOI の変換
  6. 06出典情報と項目別エラーの提示

活用シーン

  1. 01テーマに沿った生物医学文献の検索
  2. 02論文の全文とメタデータの取得
  3. 03参考文献の形式調整と変換
  4. 04構造化された生物医学研究計画の作成

MCP 対応

文献検索、論文取得、引用処理、MeSH 検索などに使える 12 個のツール、1 つのリソース、1 つのプロンプトを MCP クライアントに公開します。stdio、ローカルの Streamable HTTP、公開ホスト型エンドポイントに対応します。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://pubmed.caseyjhand.com/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

パッケージ
npm@cyanheads/pubmed-mcp-server2.11.1

ツール

11
パラメーター型必須説明
querystringはいPubMed 検索クエリ(完全な NCBI 構文に対応)
maxResultsintegerいいえ返す結果の最大数
offsetintegerいいえページネーション用の結果オフセット(0 始まり)。PubMed が返す結果セットは先頭の 9999 件までのため、この値の上限は 9998 です。それ以降のレコードを取得するには、クエリを絞り込むかフィルターを追加してください。
sortenumいいえ並べ替え順:relevance(デフォルト)、pub_date(新しい順)、author、journalrelevance | pub_date | author | journal
dateRangeobjectいいえ日付範囲で絞り込みます。`minDate` と `maxDate` の両方が空でない場合にのみ適用され、どちらか一方が空の場合は日付範囲全体が無効になります。
dateRange.minDatestringはい開始日(YYYY/MM/DD、YYYY/MM、または YYYY)。空文字列の場合、この境界は無効になります
dateRange.maxDatestringはい終了日(YYYY/MM/DD、YYYY/MM、または YYYY)。空文字列の場合、この境界は無効になります
dateRange.dateTypeenumいいえ日付の種類:pdat(出版)、mdat(変更)、edat(Entrez)pdat | mdat | edat
publicationTypesarrayいいえ出版タイプで絞り込みます(例:"Review"、"Clinical Trial"、"Meta-Analysis")。複数の値は OR 条件として扱われ、いずれかに一致すれば対象になります。
authorstringいいえ著者名で絞り込みます(例:"Smith J")
journalstringいいえジャーナル名で絞り込みます
meshTermsarrayいいえMeSH 用語で絞り込みます。複数の用語は AND 条件として扱われ、すべて一致する必要があります。
languagestringいいえ言語で絞り込みます(例:"english")
hasAbstractbooleanいいえ抄録のある論文のみを含めます
freeFullTextbooleanいいえ無料で全文を閲覧できる論文のみを含めます
speciesenumいいえ種で絞り込みますhumans | animals
summaryCountintegerいいえ上位 N 件の結果について簡単な要約を取得します(0 = PMID のみ)。上限の 50 件を超える場合は、残りの PMID を pubmed_fetch_articles に渡してください。

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

@cyanheads/pubmed-mcp-server

MCP 経由で PubMed/Europe PMC を検索し、論文と全文(PMC/EPMC/Unpaywall)、引用情報、MeSH 用語を取得します。STDIO または Streamable HTTP に対応。

11 個のツール • 1 個のリソース • 1 個のプロンプト

バージョン ライセンス Docker MCP SDK npm TypeScript Bun

Claude Desktop にインストール Cursor にインストール VS Code にインストール

フレームワーク

公開ホスト型サーバー: https://pubmed.caseyjhand.com/mcp


概要

PubMed、PubMed Central、Europe PMC の生物医学文献を扱います。文献を検索し、メタデータと全文を取得し、識別子や部分的な引用情報を解決し、参考文献の形式を整え、MeSH の語彙に基づいてクエリを絞り込めます。stdio プロセス、ローカルの Streamable HTTP サーバー、または上記の公開ホスト型エンドポイントとして動作します。

ツール
ツール説明
pubmed_search_articles完全なクエリ構文、構造化フィルター、日付範囲、任意の要約を使って PubMed を検索します
pubmed_fetch_articlesPMID で論文のメタデータを取得します。抄録、著者、ジャーナル、MeSH 用語、助成金、リクエストに応じた集団著者の研究者、リンクされた撤回および訂正のお知らせが含まれます
pubmed_fetch_fulltextPMID、PMCID、または DOI で全文を取得します。PMC、Europe PMC、Unpaywall の順にフォールバックします
pubmed_europepmc_searchPubMed に収録されていないプレプリント、特許、Agricola、オープンアクセス記録を Europe PMC で検索します
pubmed_europepmc_fetch切り詰められていない抄録を含む Europe PMC の完全な記録を、records: [{ source, epmcId }] として取得します
pubmed_format_citationsAPA 7th、MLA 9th、BibTeX、RIS、または Vancouver(ICMJE/NLM)形式で引用を整形します。リンクされた撤回および訂正のお知らせも含まれます
pubmed_find_relatedPMID に関連する類似論文、引用論文、または参考文献を検索します
pubmed_spell_checkNCBI ESpell を使って、誤記のある PubMed クエリを修正します
pubmed_lookup_meshMeSH 見出しを、ツリー番号、適用範囲の注記、エントリー用語とともに検索します
pubmed_lookup_citationECitMatch を使って、不完全な文献情報を一度に最大 25 件まで PMID に照合します
pubmed_convert_idsPMC ID Converter を使って DOI、PMID、PMCID の間で変換します
リソース
リソース説明
pubmed://database/infoEInfo を使った 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 リクエストに引き上げられます。
インストール
  1. リポジトリをクローンします:
git clone https://github.com/cyanheads/pubmed-mcp-server.git
  1. ディレクトリに移動します:
cd pubmed-mcp-server
  1. 依存関係をインストールします:
bun install
  1. 環境を設定します:
cp .env.example .env
# edit .env and set NCBI_API_KEY, NCBI_ADMIN_EMAIL, and UNPAYWALL_EMAIL as needed

Configuration

変数説明デフォルト
NCBI_API_KEYNCBI API キーです。レート制限が 3 req/s から 10 req/s に引き上げられます。なし
NCBI_ADMIN_EMAILNCBI の推奨に従い、NCBI リクエストとともに送信する連絡先メールアドレスです。なし
NCBI_REQUEST_DELAY_MSNCBI リクエストの開始間に設ける最小間隔(ミリ秒)です。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_EMAILUnpaywall の連絡先メールアドレスです。設定すると、PMC 以外の DOI に対して pubmed_fetch_fulltext の Unpaywall 階層が有効になります。なし
UNPAYWALL_TIMEOUT_MSUnpaywall の検索とコンテンツ取得のリクエストごとのタイムアウト(ミリ秒)です。20000
EUROPEPMC_ENABLEDfalse に設定すると、すべての Europe PMC 呼び出しが無効になります。Europe PMC の両方のツールが登録解除され、pubmed_fetch_fulltext はその階層をスキップし、pubmed_find_related はそのフォールバックをスキップします。true
EUROPEPMC_EMAILEurope PMC リクエストとともに送信する任意の連絡先メールアドレスです。なし
EUROPEPMC_REQUEST_DELAY_MSEurope PMC リクエストの開始間に設ける最小間隔(ミリ秒)です。200
EUROPEPMC_MAX_RETRIES失敗した Europe PMC リクエストの再試行回数です。3
EUROPEPMC_TIMEOUT_MSEurope PMC 呼び出しのリクエストごとのタイムアウト(ミリ秒)です。20000
MCP_TRANSPORT_TYPEトランスポートです。stdio または http を指定します。stdio
MCP_HTTP_PORTHTTP サーバーのポートです。3010
MCP_SESSION_MODEHTTP セッションモードです。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_ENABLEDOpenTelemetry を有効にします。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/ncbiNCBI E-utilities サービス層 — API クライアント、キュー、パーサー、フォーマッターです。
src/services/europe-pmcEurope PMC サービス — 検索と fullTextXML JATS の取得です。NCBI JATS パーサーを再利用します。
src/services/unpaywallUnpaywall サービス — DOI から OA の掲載場所を解決し、コンテンツを取得します(HTML/PDF)。
src/services/openalexOpenAlex サービス — pubmed_find_related の最終手段となるプロバイダーです。
src/configZod による、サーバー固有の環境変数の解析と検証です。
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 ファイルをご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。