Skip to main content
Glama

PubMed Search MCP

PyPI version Python 3.10+ License: Apache 2.0 MCP CI

AIエージェントのためのプロフェッショナル文献リサーチアシスタント - 単なるAPIラッパーではありません

PubMed Search MCP research workflow

AIエージェント向けのインテリジェントなリサーチアシスタントとして機能する、ドメイン駆動設計(DDD)ベースのMCPサーバーです。タスク指向の文献検索・分析機能を提供します。

✨ 含まれるもの:

  • 🔧 45個のMCPツール - PubMed、Europe PMC、CORE、NCBIデータベースへの効率的なアクセス、およびResearch Chronicle / Context Graph

  • 🛡️ マルチエージェントサービスモード - 一度デプロイすれば多くのエージェントに提供可能: テナントごとのセッション、キャッシュ、アーティファクト、ベアラートークン認証、テナントごとのフェアシェア制限。 DEPLOYMENT.md を参照

  • 🖼️ OA図の抽出 - PMCオープンアクセス論文から図のキャプション、直接画像URL、PDFリンクを取得

  • 📘 ドキュメントサイト - 言語切替対応の完全なハンドブックを閲覧: ユーザーワークフロー、アーキテクチャ、45ツールリファレンス、パイプラインチュートリアル、ソース/ブローカー契約、統合と運用、セキュリティ、デプロイメントは u9401066.github.io/pubmed-search-mcp を参照

  • 📖 GitHub Wiki - 同じ正規ドキュメントのGitHubネイティブミラー: github.com/u9401066/pubmed-search-mcp/wiki

  • 📚 26のClaudeスキル - AIエージェント向けのすぐ使えるワークフローガイド(Claude Code専用)

  • 📖 Copilot Instructions - VS Code GitHub Copilot統合ガイド

🌐 言語: English | 繁體中文

📘 ドキュメントマップ: READMEはプロジェクトへのクイックエントリーポイントです。最適な読書体験にはドキュメントサイト、GitHubネイティブなナビゲーションにはGitHub Wiki、編集用のソースドキュメントは以下を参照: ユーザーガイド | 高度なワークフロー | 機能ファーストガイド | プロバイダーデータプレーン | BioMCPアーキテクチャ分析 | 開発者ガイド | 完全な索引


🚀 クイックインストール

前提条件

  • Python 3.10+ダウンロード

  • uv (推奨) — uvをインストール

    # macOS / Linux
    curl -LsSf https://astral.sh/uv/install.sh | sh
    # Windows
    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
  • NCBI EmailNCBI APIポリシーで必須。任意の有効なメールアドレス。

  • NCBI API Key (任意) — レート制限の引き上げ(3 req/s に対して 10 req/s)のためこちらで取得

  • OpenAlex API Key (任意) — 認証済みクレジット割り当てを使用するには OPENALEX_API_KEY を設定します。設定しない場合、リクエストはOpenAlexの現在の匿名カジュアル利用予算を使用します。 mailto は連絡先メタデータであり、認証ではありません。ソース固有のメールがない場合、サーバーはOpenAlex、CrossRef、Unpaywallに対して設定済みのランタイム連絡先メールを再利用します。

インストールと実行

# Option 1: Zero-install with uvx (recommended for trying out)
uvx pubmed-search-mcp

# Option 2: Add as project dependency
uv add pubmed-search-mcp

# Option 3: pip install
pip install pubmed-search-mcp

Python SDKファサード

プロセス内Python統合には、MCPツールモジュールをインポートする代わりに安定したSDKファサードを使用してください:

from pubmed_search.api import PubMedSearchClient, PubMedSearchConfig

client = PubMedSearchClient(PubMedSearchConfig(email="your@email.com"))
result = await client.unified_search("remimazolam ICU sedation", limit=20)

print(result.articles)
print(result.source_counts)
print(result.artifact)  # artifact locator when persistence is enabled

エージェントツールの検出には uvx pubmed-search-mcp または /mcp を使用します。型付きオブジェクトがMCPレスポンス文字列の解析より簡単なPythonパッケージ/ノートブック呼び出しにはSDKを使用してください。

ランタイム契約の選択

契約

コマンド

ネットワークと信頼境界

ローカル stdio

uvx pubmed-search-mcp

ローカルAIクライアント1台に推奨。MCPポートをリッスンしません

ローカルループバックHTTP

pubmed-search-mcp-http --mode local --host 127.0.0.1

信頼できるシングルユーザー統合。MCPリクエストは永続的なdefaultテナントを共有し、ポートを公開してはなりません

マルチユーザーサービス

pubmed-search-mcp-http --mode service

HTTPS経由のリモート/チーム利用。ベアラー認証、許可されたホスト/オリジン、プリンシパルごとのストレージが必須です

ローカル展開とサービス展開は意図的に別々の契約です。バインドアドレスだけを変更してローカルHTTPコマンドを公開サービスにしないでください。明示的なローカルプロファイルは、pmids="last"、セッション、キャッシュ、エクスポートをMCPリクエスト間および再接続時にも永続的なdefaultテナントに保持します。これは強制されたループバック/Host/Origin境界内でのみ安全です。サービスの環境とComposeプロファイルについてはDEPLOYMENT.mdを参照してください。現在のサービスプロファイルは1つのサーバープロセスで多くの認証済みプリンシパルをサポートします。セッション、ロック、アーティファクト、サブスクリプションに共有バックエンドができるまでレプリカは1台に保ってください。

プロトコルベースラインはMCP SDK v2(mcp>=2.0,<3)です。最新の2026-07-28クライアントはinitializeハンドシェイクやMcp-Session-Idなしでtools/listtools/callを直接送信します。ローカルモードはファイルシステム機能を保持します。認証済みサービス呼び出し元はfile:パイプラインをロードしたり、ノートoutput_dir/template_fileを選択したり、プロセス全体のパイプラインワークスペースを継承したりできません。サービスComposeスケジューラは無効です。機能マトリックスについては統合・運用ガイドを参照してください。


Related MCP server: ScholarMCP

⚙️ 設定

このMCPサーバーはあらゆるMCP互換AIツールで動作します。お好みのクライアントを選択してください:

VS Code / Cursor (.vscode/mcp.json)

{
  "servers": {
    "pubmed-search": {
      "type": "stdio",
      "command": "uvx",
      "args": ["pubmed-search-mcp"],
      "env": {
        "NCBI_EMAIL": "your@email.com"
      }
    }
  }
}

任意: ブラウザセッションPDFフォールバックを一度有効にすると、ツールが自動的に使用します:

{
  "servers": {
    "pubmed-search": {
      "type": "stdio",
      "command": "uvx",
      "args": ["pubmed-search-mcp"],
      "env": {
        "NCBI_EMAIL": "your@email.com",
        "BROWSER_FETCH_CONFIG": "{\"enabled\":true,\"auto_enabled\":true,\"broker_url\":\"http://127.0.0.1:8766/fetch\",\"token\":\"<random-32-byte-token>\",\"allowed_hosts\":[\"jamanetwork.com\",\"*.jamanetwork.com\",\"nejm.org\",\"*.nejm.org\"]}"
      }
    }
  }
}

この設定により、get_fulltextは機関向けまたは出版社のランディングページに対してローカルブローカーを自動的に試行します。特定の呼び出しで抑制したい場合のみ allow_browser_session=false を渡してください。

ダウンロードインターセプト付きでローカルブローカーを実行:

uv sync --extra browser-broker
uv run playwright install chromium
uv run python -c "import secrets; print(secrets.token_urlsafe(32))"
uv run pubmed-browser-fetch-broker --token "<same-random-32-byte-token>"

生成された値を両方のコマンド/設定にコピーしてください。公開されているサンプルトークンを再利用しないでください。--tokenを省略すると、ブローカーは高エントロピーのランタイムトークンを生成して出力します。ブローカーはダウンロードインターセプトが有効な永続ブラウザプロファイルを起動します。そのブローカー制御のブラウザウィンドウ内で一度ログインすると、以降のPDFダウンロードはネイティブの「Save As」ダイアログなしで自動的にキャプチャされます。

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "pubmed-search": {
      "command": "uvx",
      "args": ["pubmed-search-mcp"],
      "env": {
        "NCBI_EMAIL": "your@email.com"
      }
    }
  }
}

設定ファイルの場所:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Claude Code

claude mcp add pubmed-search -- uvx pubmed-search-mcp

またはプロジェクトルートの .mcp.json に追加:

{
  "mcpServers": {
    "pubmed-search": {
      "command": "uvx",
      "args": ["pubmed-search-mcp"],
      "env": {
        "NCBI_EMAIL": "your@email.com"
      }
    }
  }
}

Zed AI (settings.json)

Zedエディタ(z.ai)はMCPサーバーをネイティブにサポートします。Zedのsettings.jsonに追加:

{
  "context_servers": {
    "pubmed-search": {
      "command": "uvx",
      "args": ["pubmed-search-mcp"],
      "env": {
        "NCBI_EMAIL": "your@email.com"
      }
    }
  }
}

ヒント: コマンドパレットを開いて zed: open settings を実行して編集するか、Agent Panel → Settings → "Add Custom Server" に移動します。

OpenClaw 🦞 (~/.openclaw/openclaw.json)

OpenClawmcp-adapterプラグインを介してMCPサーバーを使用します。最初にアダプターをインストール:

openclaw plugins install mcp-adapter

次に ~/.openclaw/openclaw.json に追加:

{
  "plugins": {
    "entries": {
      "mcp-adapter": {
        "enabled": true,
        "config": {
          "servers": [
            {
              "name": "pubmed-search",
              "transport": "stdio",
              "command": "uvx",
              "args": ["pubmed-search-mcp"],
              "env": {
                "NCBI_EMAIL": "your@email.com"
              }
            }
          ]
        }
      }
    }
  }
}

設定後、ゲートウェイを再起動:

openclaw gateway restart
openclaw plugins list  # Should show: mcp-adapter | loaded

Cline (cline_mcp_settings.json)

{
  "mcpServers": {
    "pubmed-search": {
      "command": "uvx",
      "args": ["pubmed-search-mcp"],
      "env": {
        "NCBI_EMAIL": "your@email.com",
        "S2_API_KEY": "your_semantic_scholar_key",
        "PUBMED_SEARCH_DISABLED_SOURCES": ""
      },
      "alwaysAllow": [],
      "disabled": false
    }
  }
}

その他のMCPクライアント

MCP互換クライアントはstdioトランスポート経由でこのサーバーを使用できます:

# Command
uvx pubmed-search-mcp

# With environment variable
NCBI_EMAIL=your@email.com uvx pubmed-search-mcp

: NCBI_EMAIL はNCBI APIポリシーで必須です。レート制限を上げるには任意で NCBI_API_KEY を設定してください(3 req/s に対して 10 req/s)。 📖 詳細な統合ガイド: すべての環境変数、Copilot Studioのセットアップ、Dockerデプロイ、プロキシ設定、トラブルシューティングについてはdocs/INTEGRATIONS.mdを参照してください。


🎯 設計思想

中核となる位置付け: AIエージェントと学術検索エンジンの間のインテリジェントミドルウェア

なぜこのサーバーなのか?

他のツールは生のAPIアクセスを提供します。当社は語彙変換+インテリジェントルーティング+リサーチ分析を提供します:

課題

当社のソリューション

エージェントがICDコードを使用、PubMedはMeSHが必要

自動ICD→MeSH変換

複数のデータベース、異なるAPI

統合検索 単一エントリポイント

臨床質問には構造化検索が必要

PICOハンドオフ+パイプラインparse_picoはエージェント提供のP/I/C/Oを検証し、実行可能なtemplate: picoパイプラインを返します)

医療用語のタイプミス

ESpell自動修正

1つのソースから多すぎる結果

並列マルチソース 重複排除付き

研究の進化を追跡する必要がある

Research Chronicle & Tree ランドマーク検出、診断、サブトピック分岐、バージョン管理されたリビジョン付き

引用コンテキストが不明確

Citation Tree 前方/後方/ネットワーク

全文にアクセスできない

マルチソース全文(Europe PMC XML、Unpaywall OAロケーション、機関直接/EZproxy、CORE、ダウンローダーフォールバック)

遺伝子/薬剤情報がDBに分散

NCBI Extended(Gene、PubChem、ClinVar)

最先端のプレプリントが必要

プレプリント検索(arXiv、medRxiv、bioRxiv)査読フィルタリング付き

参考文献管理ツールへのエクスポート

ワンクリックエクスポート(公式RIS/MEDLINE/CSL JSON、ローカルRIS/BibTeX/CSV/MEDLINE/JSON)

主な差別化ポイント

  1. 語彙変換レイヤー - エージェントは自然に話し、各データベースの用語体系(MeSH、ICD-10、テキストマイニングされたエンティティ)に変換します

  2. 統合検索ゲートウェイ - 1回の unified_search() 呼び出しで、PubMed、Europe PMC、CORE、OpenAlex、Semantic Scholar、および有効化されたプレプリント・商用ソースに対して、機能を認識したディスパッチを行います

  3. PICOハンドオフ + パイプライン - エージェントがP/I/C/Oを抽出し、parse_pico() がその構造化ハンドオフを検証し、バックエンドの template: pico パイプラインがOを考慮した精度/再現率検索を実行します

  4. 研究クロニクルと系統ツリー - ポリシー駆動のヒューリスティックでマイルストーンを検出し、マルチシグナルスコアリングでランドマーク論文を特定し、診断情報を提示し、差分を確認できるバージョン管理されたリビジョンを保持し、研究の進化をサブトピックごとの分岐ツリーとして可視化します

  5. 引用ネットワーク分析 - 単一の論文から研究全体の状況を把握するための多段階引用ツリーを構築します

  6. 研究ライフサイクル全体 - 検索 → 発見 → 全文 → 分析 → エクスポートまで、すべてを1つのサーバーで実現

  7. エージェントファースト設計 - 人間が読むためではなく、機械の意思決定に最適化された出力


📡 外部APIとデータソース

このMCPサーバーは、複数の学術データベースおよびAPIと統合されています:

コアデータソース

ソース

対象範囲

語彙

自動変換

説明

NCBI PubMed

36M+ 論文

MeSH

✅ ネイティブ

主要な生物医学文献

NCBI Entrez

マルチDB

MeSH

✅ ネイティブ

遺伝子、PubChem、ClinVar

Europe PMC

33M+

テキストマイニング

✅ 抽出

全文XMLアクセス

CORE

200M+

なし

➡️ フリーテキスト

オープンアクセスアグリゲータ

Semantic Scholar

進化するグラフ + オペレータデータセット

S2フィールド / バルク構文

✅ ブローカーコンパイル済みモード

関連性、制限付きバルク、バッチ、引用グラフ、およびメタデータのみのリリース/差分プレーン。パーティションのダウンロードなし

OpenAlex

進化するオープン研究グラフ

トピック / キーワード

✅ キーワード + 制限付きネイティブセマンティック

カーソル、コストの来歴、エンティティグラフ、および宣言されたオペレータースナップショットパス。ローカルインデックスはまだなし

NIH iCite

PubMed

N/A

N/A

引用メトリクス(RCR)

🔑 キー: ✅ = 完全な語彙サポート | ➡️ = クエリパススルー(統制語彙なし)

ICDコード: PubMed検索の前に自動検出されMeSHに変換されます

環境変数

# Required
NCBI_EMAIL=your@email.com          # Required by NCBI policy

# Optional - For higher rate limits
NCBI_API_KEY=your_ncbi_api_key     # Get from: https://www.ncbi.nlm.nih.gov/account/settings/
CORE_API_KEY=your_core_api_key     # Get from: https://core.ac.uk/services/api
CROSSREF_EMAIL=your@email.com      # Optional override; defaults to server/NCBI email
UNPAYWALL_EMAIL=your@email.com     # Optional override; defaults to server/NCBI email
S2_API_KEY=your_s2_api_key         # Alias: SEMANTIC_SCHOLAR_API_KEY
OPENALEX_API_KEY=your_openalex_key # Raises the OpenAlex credit budget; actual grant is response-driven
PUBMED_SEARCH_DISABLED_SOURCES=    # Example: semantic_scholar

# Optional - Network settings
HTTP_PROXY=http://proxy:8080       # HTTP proxy for API requests
HTTPS_PROXY=https://proxy:8080     # HTTPS proxy for API requests

# Optional - Institutional fulltext access
INSTITUTIONAL_DIRECT_FETCH=true    # Try DOI publisher pages before CORE fallback
EZPROXY_ENABLED=false              # Enable only after configuring EZPROXY_HOST + cookie
EZPROXY_HOST=ezproxy.example.edu
EZPROXY_COOKIE_FILE=/path/to/cookies.json

# Optional - Local note export
PUBMED_NOTES_DIR=/path/to/wiki/references  # save_literature_notes target folder
PUBMED_WORKSPACE_DIR=/path/to/project       # fallback: references/ under this workspace
PUBMED_DATA_DIR=~/.pubmed-search-mcp        # fallback: references/ under this data dir

CrossRefとUnpaywallは、ソース固有のメールが設定されていない限り、ランタイムサーバーの連絡先メール(NCBI_EMAIL、CLIの--email、または検出されたgitメール)を再利用します。OpenAlexはカジュアルな匿名利用とオプションのAPIキーを受け入れます。ブローカーは、永続的な「ポライトプール」クォータを想定する代わりに、応答のクレジット/レートメタデータを読み取ります。

ローカルノートのエクスポートは、output_dir引数、PUBMED_NOTES_DIRPUBMED_WORKSPACE_DIR/referencesPUBMED_DATA_DIR/references、次に~/.pubmed-search-mcp/referencesの順にディレクトリを解決します。 このパス/テンプレート選択は、信頼できるローカルモードにのみ適用されます。認証済みサービスノートは、常に現在のテナントの分離されたreferences/ディレクトリの下にある組み込み形式を使用します。 LLMウィキ互換性のため、wikiおよびfoamエクスポートはPMID、DOI、PMCID、またはフォールバック識別子に基づく安定したリンクターゲットを使用します。タイトルはエイリアス/表示ラベルのままとなり、応答には未解決のウィキリンクチェック用のwiki_validationが含まれます。

🔄 仕組み:ミドルウェアアーキテクチャ

┌─────────────────────────────────────────────────────────────────────────────┐
│                              AI AGENT                                        │
│                                                                              │
│   "Find papers about I10 hypertension treatment in diabetic patients"       │
│                                                                              │
└─────────────────────────────────┬───────────────────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                     🔄 PUBMED SEARCH MCP (MIDDLEWARE)                        │
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │  1️⃣ VOCABULARY TRANSLATION                                              ││
│  │     • ICD-10 "I10" → MeSH "Hypertension"                                ││
│  │     • "diabetic" → MeSH "Diabetes Mellitus"                             ││
│  │     • ESpell: "hypertention" → "hypertension"                           ││
│  └─────────────────────────────────────────────────────────────────────────┘│
│  ┌─────────────────────────────────────────────────────────────────────────┐│
│  │  2️⃣ INTELLIGENT ROUTING                                                 ││
│  │     ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐             ││
│  │     │ PubMed   │  │Europe PMC│  │   CORE   │  │ OpenAlex │             ││
│  │     │  36M+    │  │   33M+   │  │  200M+   │  │  250M+   │             ││
│  │     │  (MeSH)  │  │(fulltext)│  │  (OA)    │  │(metadata)│             ││
│  │     └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬─────┘             ││
│  │          └──────────────┴──────────────┴──────────────┘                 ││
│  │                              ▼                                          ││
│  │  3️⃣ RESULT AGGREGATION: Dedupe + Rank + Enrich                         ││
│  └─────────────────────────────────────────────────────────────────────────┘│
└─────────────────────────────────┬───────────────────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         UNIFIED RESULTS                                      │
│   • 150 unique papers (deduplicated from 4 sources)                          │
│   • Ranked by relevance + citation impact (RCR)                              │
│   • Full text links enriched from Europe PMC                                 │
└─────────────────────────────────────────────────────────────────────────────┘

🛠️ MCPツール概要

ツールの全体像を使えるシステムとして理解したいなら、45個のツール名を暗記することから始めないでください。

ツール使用ガイドから始めてください。そこには現在の45ツールが8つの機能ファミリーに圧縮され、理論上の下限が説明され、人間とエージェントの両方に対する意図ベースのルーティングが示されています。

🔍 検索とクエリインテリジェンス

検索とクエリインテリジェンスのワークフロー

┌─────────────────────────────────────────────────────────────────┐
│                      SEARCH ENTRY POINT                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│   unified_search()          ← 🌟 Single entry for all sources    │
│        │                                                         │
│        ├── Quick search     → Direct multi-source query          │
│        ├── Native semantic → Bounded OpenAlex semantic mode    │
│        ├── Systematic       → Bounded provider bulk/cursor mode  │
│        ├── PICO hints       → Detects comparison, shows P/I/C/O  │
│        └── ICD expansion    → Auto ICD→MeSH conversion           │
│                                                                  │
│   Sources: PubMed · Europe PMC · CORE · OpenAlex · S2            │
│   Auto: Deduplicate → Rank → Enrich full-text links              │
│                                                                  │
├─────────────────────────────────────────────────────────────────┤
│   QUERY INTELLIGENCE                                             │
│                                                                  │
│   generate_search_queries() → MeSH expansion + synonym discovery │
│   parse_pico()              → Agent-provided PICO handoff        │
│   analyze_search_query()    → Query analysis without execution   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

1つの検索エントリ、3つの取得ポリシー

一般的な文献発見は、意図的に正確に1つのMCPツールunified_searchとして公開されています。プロバイダー固有のAPIは、内部ブローカー機能のままです。

# Default relevance/keyword routing across enabled sources
unified_search(query="treatment resistance")

# OpenAlex native semantic search (provider maximum 50 results)
unified_search(
    query="mechanisms of treatment resistance",
    sources="openalex",
    options="native_semantic",
)

# Deterministic/bounded retrieval: OpenAlex cursor and S2 bulk where selected
unified_search(
    query="melanoma AND immunotherapy",
    sources="pubmed,openalex,semantic_scholar",
    options="systematic",
)

native_semanticsystematicは相互排他的であり、マルチストラテジーのディープサーチ展開を無効にします。要求された取得モードがサポートされていない場合、明示的なソース選択はネットワーク呼び出しの前に失敗します。自動ソース選択は、対応可能なプロバイダーのみを保持します。limitはソースごとに最大100のままなので、systematicは決定論的で制限付きのプロバイダー実行を意味し、網羅的な系統的レビューの保証ではありません。構造化出力とアーティファクトは、retrieval_modeに加えてソースごとのsource_metadata(要求/プロバイダーモード、正規またはコンパイル済みクエリ、継続可能性、コスト/レートメタデータ、利用可能な場合は警告)を記録します。

公開リクエスト境界はフェイルクローズドです。limitは1から100までの整数である必要があります。不明または不正なfilters/options、逆順または範囲外の年、サポートされていないランキングまたは出力モードは、プロバイダーI/Oの前に検証エラーを返します。デフォルトのディープサーチポリシーでは、limitはそのソースのクエリ戦略全体に分割されるソースごとの合計予算であり、すべての戦略に対するlimit件の結果ではありません。戦略呼び出しは、グローバル/ソースごとの制限付き同時実行とタイムアウトを使用し、別のソースがタイムアウト、レート制限、または失敗した場合でも、成功したソースは使用可能なままです。

Europe PMC、Scopus、Web of Scienceは今リリースではキーワードのみのままです。これらのソースに対する明示的な系統的リクエストは、単一ページを系統的カバレッジと誤って表示する代わりに、I/Oの前に失敗します。

プロバイダーの制限とオペレーターのデータプレーン境界については、ソース契約Semantic ScholarOpenAlexを参照してください。

🔬 発見ツール(重要な論文を見つけた後)

論文発見と引用のワークフロー

                        Found important paper (PMID)
                                   │
           ┌───────────────────────┼───────────────────────┐
           │                       │                       │
           ▼                       ▼                       ▼
    ┌─────────────┐        ┌─────────────┐        ┌─────────────┐
    │  BACKWARD   │        │  SIMILAR    │        │  FORWARD    │
    │  ◀──────    │        │  ≈≈≈≈≈≈     │        │  ──────▶    │
    │             │        │             │        │             │
    │ get_article │        │find_related │        │find_citing  │
    │ _references │        │ _articles   │        │ _articles   │
    │             │        │             │        │             │
    │ Foundation  │        │  Similar    │        │ Follow-up   │
    │  papers     │        │   topic     │        │  research   │
    └─────────────┘        └─────────────┘        └─────────────┘

    fetch_article_details()   → Detailed article metadata
    get_citation_metrics()    → iCite RCR, citation percentile
    build_citation_tree()     → Full network visualization (6 formats)

📚 全文、図の抽出、エクスポート

全文、図、および生物医学画像のワークフロー

カテゴリ

ツール

全文

get_fulltext → PMCIDが利用可能な場合はEurope PMC XML。必要な場合はDOI連携のUnpaywall、機関ダイレクト/EZproxy、CORE、ダウンローダーのフォールバック

get_article_figures → PMCオープンアクセス記事から図のラベル、キャプション、画像URL、PDFリンクを抽出

図対応の全文

get_fulltext(include_figures=True) → 図のメタデータを構造化全文と一緒に埋め込む

テキストマイニング

get_text_mined_terms → 遺伝子、疾患、化学物質を抽出

エクスポート

prepare_export → 公式RIS/MEDLINE/CSL JSONまたはローカルRIS/BibTeX/CSV/MEDLINE/JSON。save_literature_notes → ローカルwiki/Foam互換/Markdown/MedPaperスタイルのノートに加えて、コレクションレベルのCSL JSON

🖼️ OA図ファースト探索

エージェントが記事のテキストだけでなく証拠となる図を必要とする場合は、PMCオープンアクセスパスを使用します:

  • get_article_figures(identifier="PMC12086443") → 図のラベル、キャプション、画像URL、PDF/記事リンク

  • get_fulltext(pmcid="PMC7096777", include_figures=True) → 図をインラインに含む構造化全文

  • 図の出力は記事の文脈を保持するため、エージェントは各図をそれが言及されているセクションに接続できます

🧬 NCBI拡張データベース

NCBI拡張生物医学データワークフロー

ツール

説明

search_gene

NCBI Geneデータベースを検索

get_gene_details

NCBI Gene IDによる遺伝子詳細

get_gene_literature

遺伝子にリンクされたPubMed論文

search_compound

PubChem化合物を検索

get_compound_details

PubChem CIDによる化合物詳細

get_compound_literature

化合物にリンクされたPubMed論文

search_clinvar

ClinVarの臨床バリアントを検索

🕰️ 研究クロニクルと系統ツリー

評価とタイムラインのワークフロー

ツール

説明

build_research_chronicle

ランドマーク検出を備えた、永続化・バージョン管理されたクロニクルを構築します。出力: summary、chronicle_map、timeline、tree、graph、evidence、milestones、mermaid、timeline_mermaid、mindmap、narrative、json

read_research_chronicle

リビジョンのロード、一覧表示、差分、引用付きのナレーション、マイルストーン分布の分析、または最大5つのトピックの比較

mermaidは標準の結合ビューです。水平の年軸を持ち、観測された各研究ラインが、取得された範囲内で最も古い日付の論文で分岐します。これは説明可能なグループ化であり、因果関係の系譜や、その分野の真の最初の論文に関する主張ではありません。系統は、複数の論文で共有されているMeSH記述子と著者キーワードを優先します。シングルトンしかない、または不十分なシグナルの場合は、警告付きの研究ステージフォールバックがトリガーされます。同年内の表示順は安定していますが、出版の精度がそれを証明できない場合に優先順位を主張するものではありません。timeline_mermaidは従来のフラットなタイムラインビューを維持します。実装された契約については、docs/RESEARCH_CHRONICLE_REFACTOR_SPEC.mdを参照してください。

Chronicle Mermaid の出力は、構造化されたノードとエッジから構築され、安全なラベルエスケープ、サイクル/孤立ノードの修復、衝突耐性のある ID、グラフサイズの制限を備えています。クロニクル全体を失敗させる代わりに、リッチ構文からセーフ構文、最小構文へとフォールバックします。mermaid_validation.json はすべての修正、フォールバック、省略された視覚アイテムを記録し、chronicle.mmd は純粋な Mermaid ソースのままです。

Chronicle のリビジョンは不変であり、アトミックに追記されます。セッションの成果物(アーティファクト)永続化が有効な場合、アーティファクトの失敗は明示的に表面化されますが、保存された Chronicle のリビジョンは引き続き利用可能です。

トピック構築は、境界付き取得の前に年制限を PubMed に送信し、上限をランドマークと時間的広がりで埋めながら、最初と最後に観測された論文を保持します。監査は PubMed の returned / available カウントを記録し、可用性が不明な場合、または取得/選択の上限によってビューが非網羅的になる場合に警告します。PubMed エラーや記事エビデンスのないスコープでは、空のリビジョンを公開しません。

明示的な PMID 入力は厳格です(12345678 または PMID:12345678、正の ASCII 数字、最大 20 桁)。DOI や混在テキストは強制変換されずに拒否されます。信頼できる発行日がないレコードは、日付付きエントリの後に Undated として表示され、表示される年範囲から除外されます。エントリ ID は、日付や分類子の修正をまたいで PMID/DOI のエビデンス同一性に従い、トピックの連続性は 1 つの Unicode/大文字小文字/空白の正規化キーを使用します。複数シグナルの論文は、1 つのプライマリブランチと明示的な相互リンクを維持します。20% 以上の重複は警告として監査されます。リビジョンの差分では、不在は not_observed_in_revision / removed_from_view を意味し、決定的な退役を意味しません。

🏥 機関アクセスと ICD 変換

Institutional access workflow

ツール

説明

configure_institutional_access

機関のリンクリゾルバを構成する

get_institutional_link

OpenURL アクセスリンクを生成する

list_resolver_presets

リゾルバのプリセットを一覧表示する

test_institutional_access

リゾルバの構成をテストする

diagnose_institutional_access

直接 DOI、EZproxy、OpenURL ハンドオフ経路を診断する

convert_icd_mesh

ICD コードと MeSH 用語を相互変換する(双方向)

unified_search

クエリ内の ICD コードを自動検出し、MeSH に展開する

💾 セッション管理

Session and pipeline workflow

ツール

説明

get_session_pmids

キャッシュされた PMID リストを取得する

get_cached_article

セッションキャッシュから記事を取得する(API コストなし)

get_session_summary

セッションステータスの概要

read_session

PMID、キャッシュされた記事、永続的な検索実行、リプレイ引数、履歴、永続的アーティファクトのファサード

動的 MCP リソースも、リソースを直接読み取れるエージェント向けに利用できます。

  • session://context — アクティブなセッションステータス

  • session://last-search — 最新の検索メタデータ

  • session://last-search/pmids — 最新の PMID リスト + CSV 形式

  • session://last-search/results — 最新の検索用にキャッシュされた記事ペイロード

永続的アーティファクト

セッション永続化が構成されている場合、再利用可能な unified_search および get_fulltext レスポンスに対して、永続的な MCP 出力アーティファクトが保存されます。ツールのレスポンスはインデックスカードのように機能します。エージェントが即座に回答できるだけのカウント、ソース警告、アーティファクトのヒントが含まれる一方、完全なエビデンスペイロードは繰り返し読み取れるファイルに保持されます。コンパクトな artifact ロケーターには、artifact_idartifact_uriprimary_filesummary、ファイルインベントリ、read_order、監査ステータス、正確な read_session(...) 取得ヒントが含まれます。ローカル MCP クライアントが local_pathmanifest_path も直接受け取る必要がある場合にのみ、PUBMED_ARTIFACT_INCLUDE_LOCAL_PATHS=true を設定してください。

サーバーのファイルシステムを読み取れないリモートクライアントは、セッションファサードを通じて同じコンテンツを取得できます。

read_session(action="list_artifacts")
read_session(action="artifact", artifact_id="...")
read_session(action="artifact", artifact_uri="artifact://...")
read_session(action="artifact", artifact_uri="artifact://...", artifact_file="audit.json")
read_session(action="artifact", artifact_uri="artifact://...", artifact_file="query_strategy.json")
read_session(action="artifact", artifact_uri="artifact://...", artifact_file="results.json", offset=0, max_chars=200000)
read_session(action="list_artifacts", include_local_paths=true)

リカバリ可能な検索実行

セッション管理がアクティブな場合、すべての unified_search 呼び出しは安定した実行 ID を受け取ります。これには、通常の検索、検証/計画の失敗、インライン、saved:<name>、または dry_run=true のパイプライン実行が含まれます。構造化された結果とエラーには search_run ハンドオフが添付されます。Markdown は同じ実行 ID をコンパクトなリカバリノートとして返します。通常の文献結果エンベロープは、2 つの別々のマシン契約を公開します。

  • search_status は境界付き取得の結果を説明します: state (completedemptypartial、または failed)、bounded=trueexhaustive=false、返された件数、試行済み/成功/失敗/再試行可能なソース、継続/完全性不明のソースリスト。

  • search_run はリカバリのハンドオフです: 安定した run_id、ジャーナルステータス、recoverable、正確な read_session の検査/リプレイ引数、およびコミットされた場合のアーティファクト URI。

テナントスコープの search-run/v1 ジャーナルは、プロバイダー I/O または終端検証レスポンスの前に公開され、サニタイズされたリクエスト、計画、物理的なソース別またはパイプラインステップ別の試行、カウント、安全な失敗、結果参照、該当する場合はアーティファクトロケーターを記録します。これは終端状態 completedpartialfailed、または cancelled に到達します。有効なゼロ結果検索は、search_status.stateempty である completed 実行です。再起動時、未完了の started / planned / running エントリは消える代わりに、一度だけ interrupted としてリカバリされます。非ドライランの保存済みパイプラインは、さらに PipelineStore のレポート/実行履歴を保持します。これは呼び出しレベルの検索ジャーナルを補完するものであり、その代替ではありません。

パイプラインのリプレイは、元のインラインまたは saved:<name> 引数に加えて dry_run / stop_at を保持します。キー、トークン、クッキー、パスワード、その他の資格情報を含むパイプラインテキストは拒否され、失敗した実行として記録されます。プロバイダーの資格情報はサーバーの環境/構成に属するものであり、パイプラインの YAML や JSON には決して含めません。

read_session(action="search_runs")
read_session(action="search_runs", run_status="partial")
read_session(action="search_run", run_id="...")
read_session(action="replay_search", run_id="...")

replay_search は、元の資格情報を含まない unified_search kwargs のみを返します。ネットワーク呼び出しを自動的に実行することはありません。エージェントまたはユーザーがそれらを確認し、明示的に送信する必要があります。プロバイダーのカーソル/トークン値は、source_metadataquery_strategy.json 内で不透明な来歴として保持されますが、公開カーソル再開パラメータはまだないため、リプレイは新しい境界付き検索を開始します。

終端ジャーナルの書き込みをリカバリできない場合、レスポンスは search_run.status="history_unavailable"history_available=false、意図された終端ステータス、および警告を報告します。永続的なリカバリが保証されないため、検査/リプレイアクションは意図的に省略されます。検索結果自体は引き続き使用できる可能性があります。

unified_search のアーティファクトはリサーチエンベロープを使用します。ソース数と完全性の警告については audit.json から始め、次に実行された正確なプランについては query_strategy.json、最後に完全な記事リストについては results.json / results.toon を使用します。これにより、学術的なトレーサビリティを失うことなく、MCP レスポンストークンを小さく保つことができます。

アーティファクトはすでに計算済みの結果オブジェクトから生成されるため、アーティファクトを読み取っても検索や全文取得は再実行されません。 アーティファクトディレクトリがアトミックに公開された後、セッションインデックスが更新される前にクラッシュが発生した場合、セッションの再ロードでは完全なチェックサム索引付きマニフェストのみを検出し、孤児となったアーティファクトを search_run_id によってその検索実行に再リンクします(古いアーティファクトには控えめなクエリマッチを使用)。read_session はデフォルトでローカルファイルシステムのパスを編集します。local_pathmanifest_path はサーバーローカルパスであり、移植可能なクライアントパスではありません。get_fulltext からのアーティファクトには、購読または機関アクセスされたコンテンツを含む記事本文が含まれる場合があります。発行者、ライセンス、機関のアクセス条件に従って保存および共有してください。 大きな get_fulltext レスポンスは、アーティファクトが利用可能な場合、プレビューとしてインラインで返されます。アーティファクトロケーターを使用して、保存された全文コンテンツを取得してください。

1 つのソースが失敗しても検索全体が続行できる場合、JSON レスポンスには source_errors が含まれることがあります。Markdown レスポンスには Source warnings 行が表示されます。Semantic Scholar の HTTP 429 の場合は、S2_API_KEY / SEMANTIC_SCHOLAR_API_KEY を設定するか、後で再試行するか、sources="auto,-semantic_scholar" または PUBMED_SEARCH_DISABLED_SOURCES=semantic_scholar で一時的に除外してください。

パイプライン管理

Session and pipeline workflow

manage_pipeline は、パイプラインの CRUD、履歴、スケジュール設定の主要ファサードです。より具体的なパイプラインツールは、互換性ラッパーとして引き続き利用できます。

ツール

説明

manage_pipeline

保存、一覧表示、ロード、削除、履歴、スケジュールアクションの主要ファサード

save_pipeline

後で再利用するためのパイプライン構成を保存する(YAML/JSON、自動検証)

list_pipelines

保存済みパイプラインを一覧表示する(タグ/スコープでフィルタリング)

load_pipeline

保存名でロードする。信頼できるローカル呼び出し元はファイルをロードすることもできる

delete_pipeline

パイプラインとその実行履歴を削除する

get_pipeline_history

記事差分分析付きの実行履歴を表示する

schedule_pipeline

定期的なパイプラインスケジュールを作成、更新、または削除する

認証されたサービス呼び出し元は、テナント派生ストア内の名前付きパイプラインを使用します。workspace および file: アクセスはローカルのみです。サービス Compose プロファイルは、別途設計された単一リーダーなしではスケジュールを実行しません。

ステップバイステップのチュートリアル:

👁️ ビジョンと画像検索

Full text, figures, and biomedical image workflow

ツール

説明

analyze_figure_for_search

アップロードされた画像、画像 URL、またはデータ URI をエージェントビジョンに渡し、検索語の抽出を行う

search_biomedical_images

Open-i 全体で生物医学画像を検索する(X線、顕微鏡、写真、図)

ユーザーが画像を提供し、エージェントが最初にその意味を解釈する必要がある場合は、analyze_figure_for_search を使用します。このツールは MCP の ImageContent と、LLM エージェントが英語の生物医学用語を抽出するための指示を返します。その後、類似した Open-i 画像については search_biomedical_images を、関連論文については unified_search を続行します。

📄 プレプリント検索

unified_searchoptions フラグを使用して、arXivmedRxivbioRxiv のプレプリントサーバーを検索します。

  • preprints: プレプリントサーバーを検索し、article_type=PREPRINT でプレプリントをメインの集約結果セットに統合します。

  • all_types: プレプリントサーバーのクロールなしでも、選択した学術ソースが返した非査読コンテンツを保持します。

推奨される組み合わせ:

  • 空の options: 査読済み結果のみ。プレプリント類似のレコードはフィルタリングされます。

  • options="preprints": arXiv、medRxiv、bioRxiv を検索し、それらのプレプリントをメイン結果とランキング/重複排除します。

  • options="preprints, all_types": 同じプレプリントサーバーのクロールに加え、選択したソースからの他の非査読レコードも保持されます。

  • options="all_types": プレプリントサーバーのクロールは行いませんが、検索ソースからの非査読アイテムは保持されます。

プレプリント検出 — 記事がプレプリントとして識別される条件:

  • ソースAPI(OpenAlex、CrossRef、Semantic Scholar)による記事タイプ

  • PubMed ID なしで arXiv ID が存在する

  • 既知のプレプリントサーバーのソースまたはジャーナル名

  • DOIプレフィックスがプレプリントサーバーと一致する(例: 10.1101/ → bioRxiv/medRxiv、10.48550/ → arXiv)

🌳 研究コンテキストグラフ

unified_search は、PMID に基づくランキング結果から構築された軽量な研究系統図ビューを追加できます:

オプションフラグ

説明

context_graph

現在の PMID ベースのランキングセットから軽量な研究コンテキストグラフプレビューを Markdown 出力に追加し、research_context を JSON 出力に含めます。

これは、エージェントが2回目の build_research_chronicle 呼び出しを行わずに迅速なテーマ分岐を必要とする場合に役立ちます。

🧪 臨床試験レジストリ補助

ClinicalTrials.gov は暗黙的に照会されることはありません。制限付きレジストリ補助が有用な場合は、Markdown 検索に options="trials" を追加してください。これは文献ソース計画やソース数とは別に保たれ、永続化アーティファクトはその切り詰められた物理クエリと結果を adjunct_queries の下に記録します。構造化 JSON/TOON 検索では、この表示専用の補助は実行されません。

unified_search(query="remimazolam ICU sedation", options="trials")

📊 件数優先オリエンテーション

unified_search は、ランキングリストを読む前にルーティング支援を求めるエージェント向けに、既存のソースカバレッジと意思決定ヒントを前面に出すこともできます:

オプションフラグ

説明

counts_first

ソース件数テーブル、カバレッジ概要、次のツール推奨をレスポンスに追加します

例:

unified_search(query="remimazolam ICU sedation", options="counts_first")

このモードは、エージェントがソースを拡張するか、リード PMID を検査するか、全文を取得するか、図を抽出するか、タイムライン探索に切り替えるかを決定する必要がある場合に役立ちます。

⏱️ MCP 進捗レポート

MCP クライアントが進捗トークンを提供すると、unified_searchbuild_research_chronicleget_fulltextget_text_mined_terms は主要フェーズの進捗更新を発行します。 これにより、長時間の検索中にエージェントが感じる「ブラックボックス」の待ち時間が短縮されます。 進捗コールバックはベストエフォートであり、ツール呼び出しがアクティブな間はサーバーによってキャンセルされないため、進捗通知のバックプレッシャーによるホスト側の Canceled: Canceled メッセージを回避できます。


📋 エージェント使用例

1️⃣ クイック検索(最もシンプル)

# Agent just asks naturally - middleware handles everything
unified_search(query="remimazolam ICU sedation", limit=20)

# Or with clinical codes - auto-converted to MeSH
unified_search(query="I10 treatment in E11.9 patients")
#                     ↑ ICD-10           ↑ ICD-10
#                     Hypertension       Type 2 Diabetes

2️⃣ PICO 臨床疑問

PICO 臨床検索ワークフロー

シンプルパスunified_search は直接検索できます(PICO 分解なし):

# unified_search searches as-is; detects "A vs B" pattern and shows PICO hints in metadata
unified_search(query="Is remimazolam better than propofol for ICU sedation?")
# → Multi-source keyword search + PICO hint metadata in output
# ⚠️ This does NOT auto-decompose PICO or expand MeSH!
# For structured PICO search, use the Agent workflow below

エージェントワークフロー — エージェント提供の PICO + バックエンドパイプライン検索(臨床疑問に推奨):

┌─────────────────────────────────────────────────────────────────────────┐
│  "Is remimazolam better than propofol for ICU sedation?"                │
└─────────────────────────────────┬───────────────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                         parse_pico()                                     │
│  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐                     │
│  │    P    │  │    I    │  │    C    │  │    O    │                     │
│  │  ICU    │  │remimaz- │  │propofol │  │sedation │                     │
│  │patients │  │  olam   │  │         │  │outcomes │                     │
│  └────┬────┘  └────┬────┘  └────┬────┘  └────┬────┘                     │
└───────┼────────────┼────────────┼────────────┼──────────────────────────┘
        │            │            │            │
        ▼            ▼            ▼            ▼
┌─────────────────────────────────────────────────────────────────────────┐
│              generate_search_queries() × 4 (parallel)                    │
│                                                                          │
│  P → "Intensive Care Units"[MeSH]                                        │
│  I → "remimazolam" [Supplementary Concept], "CNS 7056"                   │
│  C → "Propofol"[MeSH], "Diprivan"                                        │
│  O → "Conscious Sedation"[MeSH], "Deep Sedation"[MeSH]                   │
└─────────────────────────────────┬───────────────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────────────┐
│              Agent combines with Boolean logic                           │
│                                                                          │
│  (P) AND (I) AND (C) AND (O)  ← High precision                           │
│  (P) AND (I OR C) AND (O)     ← High recall                              │
└─────────────────────────────────┬───────────────────────────────────────┘
                                  │
                                  ▼
┌─────────────────────────────────────────────────────────────────────────┐
│              unified_search() (auto multi-source + dedup)                │
│                                                                          │
│  PubMed + Europe PMC + CORE + OpenAlex → Auto deduplicate & rank         │
└─────────────────────────────────────────────────────────────────────────┘
# Step 1: Agent extracts P/I/C/O, then validates the structured handoff
pico = parse_pico(
    description="Is remimazolam better than propofol for ICU sedation?",
    p="ICU patients requiring sedation",
    i="remimazolam",
    c="propofol",
    o="sedation efficacy, delirium, hypotension"
)
# Returns validation plus a ready-to-run `template: pico` pipeline.

# Step 2: Get MeSH for each element (parallel!)
generate_search_queries(topic="ICU patients")   # P
generate_search_queries(topic="remimazolam")    # I
generate_search_queries(topic="propofol")       # C
generate_search_queries(topic="sedation")       # O

# Step 3: Either pass expanded fragments back as p_query/i_query/c_query/o_query
# or let the backend pipeline use the structured P/I/C/O labels.

# Step 4: Search (backend runs O-aware precision/recall searches, dedup, rank)
unified_search(
    query="Is remimazolam better than propofol for ICU sedation?",
    pipeline=pico["pipeline"]
)

3️⃣ キーペーパーから探索

# Found landmark paper PMID: 33475315
find_related_articles(pmid="33475315")   # Similar methodology
find_citing_articles(pmid="33475315")    # Who built on this?
get_article_references(pmid="33475315")  # What's the foundation?

# Build complete research map
build_citation_tree(pmid="33475315", depth=2, output_format="mermaid")

4️⃣ 遺伝子/薬剤リサーチ

# Research a gene
search_gene(query="BRCA1", organism="human")
get_gene_literature(gene_id="672", limit=20)

# Research a drug compound
search_compound(query="propofol")
get_compound_literature(cid="4943", limit=20)

5️⃣ 結果のエクスポート

# Export last search results
prepare_export(pmids="last", format="ris")      # → EndNote/Zotero
prepare_export(pmids="last", format="bibtex", source="local")  # → LaTeX
prepare_export(pmids="last", format="csl")      # → CSL JSON from the official NCBI Citation API
save_literature_notes(pmids="last")              # → local wiki note + Foam-compatible wikilinks + CSL JSON
save_literature_notes(pmids="last", note_format="medpaper", output_dir="./references")
save_literature_notes(pmids="last", template_file="./reference-template.md")

# Retrieve full text for a selected paper from the last search
get_fulltext(pmid="12345678", extended_sources=True)

6️⃣ プレプリント検索

# Include preprints alongside peer-reviewed results
unified_search(query="COVID-19 vaccine efficacy", options="preprints")
# → Main aggregated results include labelled arXiv, medRxiv, and bioRxiv preprints

# Include preprints and retain non-peer-reviewed items in main results
unified_search(query="CRISPR gene therapy", options="preprints, all_types")
# → Preprint-server crawl + non-peer-reviewed items retained in main results

# Only peer-reviewed (default behavior)
unified_search("diabetes treatment")
# → Preprints from any source automatically filtered out

# Add a research context graph preview to the same search response
unified_search("remimazolam ICU sedation", options="context_graph")

7️⃣ パイプライン(再利用可能な検索プラン)

# Save a template-based pipeline through the primary facade
manage_pipeline(
  action="save",
    name="icu_sedation_weekly",
    config="template: pico\nparams:\n  P: ICU patients\n  I: remimazolam\n  C: propofol\n  O: delirium",
    tags="anesthesia,sedation",
    description="Weekly ICU sedation monitoring"
)

# Save a custom DAG pipeline
manage_pipeline(
  action="save",
    name="brca1_comprehensive",
    config="""
steps:
  - id: expand
    action: expand
    params: { topic: BRCA1 breast cancer }
  - id: pubmed
    action: search
    params: { query: BRCA1, sources: pubmed, limit: 50 }
  - id: expanded
    action: search
    inputs: [expand]
    params: { strategy: mesh, sources: pubmed,openalex, limit: 50 }
  - id: merged
    action: merge
    inputs: [pubmed, expanded]
    params: { method: rrf }
  - id: enriched
    action: metrics
    inputs: [merged]
output:
  limit: 30
  ranking: quality
"""
)

# Execute a saved pipeline
unified_search(pipeline="saved:icu_sedation_weekly")

# List & manage
manage_pipeline(action="list", tag="anesthesia")
manage_pipeline(action="load", source="brca1_comprehensive")  # Review YAML
manage_pipeline(action="history", name="icu_sedation_weekly")  # View past runs

🔍 検索モード比較

┌─────────────────────────────────────────────────────────────────────────┐
│                        SEARCH MODE DECISION TREE                         │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│   "What kind of search do I need?"                                       │
│         │                                                                │
│         ├── Know exactly what to search?                                 │
│         │   └── unified_search(query="topic keywords")                   │
│         │       → Quick, auto-routing to best sources                    │
│         │                                                                │
│         ├── Have a clinical question (A vs B)?                           │
│         │   └── Agent P/I/C/O → parse_pico() handoff                  │
│         │       → unified_search(template:pico) or expanded Boolean    │
│         │                                                                │
│         ├── Need comprehensive systematic coverage?                      │
│         │   └── generate_search_queries() → parallel search              │
│         │       → MeSH expansion, multiple strategies, merge             │
│         │                                                                │
│         └── Exploring from a key paper?                                  │
│             └── find_related/citing/references → build_citation_tree     │
│                 → Citation network, research context                     │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

モード

エントリーポイント

最適

自動機能

クイック

unified_search()

高速なトピック検索

ICD→MeSH、マルチソース、重複排除

PICO

エージェント P/I/C/O -> parse_pico()

臨床疑問

ハンドオフ検証 -> template:pico バックエンド検索

系統的

generate_search_queries()unified_search(options="systematic")

再現可能なレビューの種

MeSH/同義語に加え、制限付きバルク/カーソル実行。網羅性を主張するものではありません

ネイティブセマンティック

unified_search(options="native_semantic")

タイトル/アブストラクト空間での概念的な類似性

機能検証。OpenAlex セマンティックモード、最大50件

探索

find_*_articles()

キーペーパーから

引用ネットワーク、関連記事


🤖 Claude スキル(AI エージェントワークフロー)

.claude/skills/ にある事前構築済みのワークフローガイドで、使用スキル(MCP サーバーの利用向け)と開発スキル(プロジェクトの保守向け)に分かれています:

📚 使用スキル (11) — この MCP サーバーを使用する AI エージェント向け

スキル

説明

pubmed-quick-search

フィルター付き基本検索

pubmed-systematic-search

MeSH 展開、包括的

pubmed-pico-search

臨床疑問の分解

pubmed-paper-exploration

引用ツリー、関連記事

pubmed-research-chronicle

永続的でバージョン管理された研究の進化

pubmed-gene-drug-research

遺伝子/PubChem/ClinVar

pubmed-fulltext-access

Europe PMC、CORE 全文

pubmed-export-citations

RIS/BibTeX/CSV/CSL エクスポートガイド

pubmed-multi-source-search

クロスデータベース統合検索

pubmed-mcp-tools-reference

完全なツールリファレンスガイド

pipeline-persistence

検索プランの保存、読み込み、再利用

🔧 開発スキル (15) — プロジェクト貢献者向け

スキル

説明

changelog-updater

CHANGELOG.md を自動更新

code-refactor

DDD アーキテクチャのリファクタリング

code-reviewer

コード品質とセキュリティレビュー

ddd-architect

新機能のための DDD スキャフォールド

git-doc-updater

コミット前のドキュメント同期

git-precommit

プリコミットワークフローのオーケストレーション

memory-checkpoint

コンテキストをメモリーバンクに保存

memory-updater

メモリーバンクファイルを更新

pdf-asset-extractor

引用可能な PDF アセットの抽出とインベントリ作成

project-init

新規プロジェクトの初期化

readme-i18n

多言語 README の同期

readme-updater

コード変更に合わせて README を同期

roadmap-updater

ROADMAP.md のステータスを更新

test-generator

テストスイートを生成

tool-sync

MCP レジストリと生成されたツールドキュメントの整合性を維持

📁 場所: .claude/skills/*/SKILL.md(Claude Code 固有であり、リポジトリのスキルに関する唯一の情報源) リポジトリのスキルを .github/skills/ にミラーリングしたり分割したりしないでください。 これらのリポジトリスキルはプロジェクトスコープであり、バージョン管理下に保つ必要があります。個人のクロスプロジェクトスキルは ~/.copilot/skills/~/.claude/skills/ などのユーザーディレクトリに属し、このリポジトリには属しません。


🏗️ アーキテクチャ(DDD)

このプロジェクトは ドメイン駆動設計(DDD) アーキテクチャを採用しており、文献研究のドメイン知識を中核モデルとしています。

src/pubmed_search/
├── domain/                     # Core business logic
│   └── entities/article.py     # UnifiedArticle, Author, etc.
├── application/                # Use cases
│   ├── search/                 # QueryAnalyzer, ResultAggregator
│   ├── export/                 # Citation export (RIS, BibTeX...)
│   └── session/                # SessionManager
├── infrastructure/             # External systems
│   ├── ncbi/                   # Entrez, iCite, Citation Exporter
│   ├── sources/                # Europe PMC, CORE, CrossRef...
│   └── http/                   # HTTP clients
├── presentation/               # User interfaces
│   ├── mcp_server/             # MCP tools, prompts, resources
│   │   └── tools/              # discovery, strategy, pico, export...
│   └── api/                    # Auxiliary HTTP API routes (not pubmed_search.api)
└── shared/                     # Cross-cutting concerns
    ├── exceptions.py           # Unified error handling
    └── async_utils.py          # Rate limiter, retry, circuit breaker

内部メカニズム(エージェントに対して透過的)

メカニズム

説明

セッション

自動作成、自動切り替え

キャッシュ

検索結果を自動キャッシュし、重複 API 呼び出しを回避

レート制限

NCBI API の制限に自動対応(0.34秒/0.1秒)

MeSH ルックアップ

generate_search_queries() が NCBI MeSH データベースを自動照会

ESpell

自動スペル修正(remifentanylremifentanil

クエリ分析

各提案クエリが、PubMed が実際にどのように解釈するかを表示

語彙変換層(主要機能)

私たちのコアバリュー: 私たちはエージェントと検索エンジンの中間に位置するインテリジェントミドルウェアであり、エージェントが各データベースの用語を知る必要がないよう、語彙の標準化を自動的に処理します。

異なるデータソースは異なる統制語彙システムを使用します。このサーバーは自動変換を提供します:

API / データベース

語彙システム

自動変換

PubMed / NCBI

MeSH(医学件名標目表)

expand_with_mesh() による完全サポート

ICD コード

ICD-10-CM / ICD-9-CM

✅ 自動検出して MeSH に変換

Europe PMC

テキストマイニングされたエンティティ(遺伝子、疾患、化学物質)

get_text_mined_terms() による抽出

OpenAlex

トピック/キーワード(モデル推論)

✅ ブローカーキーワードモード。選択時は制限付きネイティブセマンティックモード

Semantic Scholar

S2 フィールド/バルククエリ構文

✅ ブローカーが関連性モードか制限付きバルクモードを選択。プロバイダー注釈が来歴を保持

CORE

なし

❌ フリーテキストのみ

CrossRef

なし

❌ フリーテキストのみ

自動 ICD → MeSH 変換

ICD コード(例: 高血圧の I10)で検索すると、unified_search() は自動的に:

  1. detect_and_expand_icd_codes() を使用して ICD-10/ICD-9 パターンを検出します

  2. 内部マッピング(ICD10_TO_MESHICD9_TO_MESH)から対応する MeSH 用語を検索します

  3. 包括的な検索のために MeSH 同義語でクエリを拡張します

# Agent calls unified_search with clinical terminology
unified_search(query="I10 treatment outcomes")

# Server auto-expands to PubMed-compatible query
"(I10 OR Hypertension[MeSH]) treatment outcomes"

📖 完全なアーキテクチャドキュメント: ARCHITECTURE.md

MeSH 自動展開 + クエリ分析

generate_search_queries("remimazolam sedation") を呼び出すと、内部では次の処理が行われます:

  1. ESpell 修正 - スペルミスを修正します

  2. MeSH クエリ - Entrez.esearch(db="mesh") を使用して標準ボキャブラリを取得します

  3. 同義語抽出 - MeSH Entry Terms から同義語を取得します

  4. クエリ分析 - PubMed が各クエリをどのように解釈するかを分析します

{
  "mesh_terms": [
    {
      "input": "remimazolam",
      "preferred": "remimazolam [Supplementary Concept]",
      "synonyms": ["CNS 7056", "ONO 2745"]
    }
  ],
  "all_synonyms": ["CNS 7056", "ONO 2745", ...],
  "suggested_queries": [
    {
      "id": "q1_title",
      "query": "(remimazolam sedation)[Title]",
      "purpose": "Exact title match - highest precision",
      "estimated_count": 8,
      "pubmed_translation": "\"remimazolam sedation\"[Title]"
    },
    {
      "id": "q3_and",
      "query": "(remimazolam AND sedation)",
      "purpose": "All keywords required",
      "estimated_count": 561,
      "pubmed_translation": "(\"remimazolam\"[Supplementary Concept] OR \"remimazolam\"[All Fields]) AND (\"sedate\"[All Fields] OR ...)"
    }
  ]
}

クエリ分析の価値: Agent は remimazolam AND sedation がこれら2つの単語のみを検索すると考えますが、PubMed は実際には Supplementary Concept + 同義語に展開するため、結果は 8 件から 561 件に増えます。これにより Agent は 意図実際の検索 の違いを理解できます。


🔒 ローカル HTTPS デモとサービスデプロイ

同梱の自己署名証明書と curl -k フローは ローカル TLS デモ であり、 本番セキュリティプロファイルではありません。共有サービスとして使用する場合は、 DEPLOYMENT.md に記載されている認証付きサービス用 Compose ファイルと 信頼された証明書を使用してください。

ローカル HTTPS スモークテスト

# Step 1: Generate SSL certificates
./scripts/generate-ssl-certs.sh

# Step 2: Start HTTPS service (Docker)
./scripts/start-https-docker.sh up

# Verify deployment
curl -k https://localhost/

HTTPS エンドポイント

サービス

URL

説明

MCP

https://localhost/mcp

Streamable HTTP MCP エンドポイント

Health

https://localhost/health

ヘルスチェック

Ready

https://localhost/ready

レディネスチェック

Info

https://localhost/info

ランタイムトランスポートとエンドポイントメタデータ

Exports

https://localhost/exports

ローカルの準備済みエクスポート一覧。サービスモードではベアラー認証とテナントスコープが必要です

リモート MCP クライアント設定

{
  "mcpServers": {
    "pubmed-search": {
      "url": "https://localhost/mcp"
    }
  }
}

🏢 Microsoft Copilot Studio 連携

PubMed Search MCP を Microsoft 365 Copilot (Word、Teams、Outlook) と統合します!

クイックスタート

# Unpublished local schema/protocol smoke only; never tunnel local mode
pubmed-search-mcp-http --mode local --transport streamable-http \
  --copilot-compatible --host 127.0.0.1 --port 8765

# Public Copilot endpoint: authenticated service mode is mandatory
export PUBMED_AUTH_TOKENS="copilot:$(openssl rand -hex 32)"
export NGROK_DOMAIN="your-assigned-domain.ngrok.dev"
./scripts/start-copilot-studio.sh --with-ngrok

Copilot Studio 設定

フィールド

サーバー名

PubMed Search

サーバーURL

https://your-server.com/mcp

認証

サービスモードではベアラートークン。None は未公開のローカルデモのみ

📖 完全なドキュメント: copilot-studio/README.md

パッケージ化された Copilot HTTP セマンティクスには pubmed-search-mcp-http --copilot-compatible を使用します。run_server.py はソースツリー開発用ラッパーのままです。run_copilot.py はループバック専用の 12 ツールプリミティブスキーマスモークテストのみに使用します。この簡略化されたサーフェスは、unified_search(query, limit, min_year, max_year, sources, options) を通じて共有ランナーを呼び出し、検索実行、リプレイ引数、成果物の復旧のためにプリミティブスキーマの read_session を公開します。ただし、PubMed 専用の汎用検索エイリアスは公開しません。トンネルスクリプトは割り当てられた NGROK_DOMAIN を必要とし、占有されたバックエンドポートを拒否し、--mode service がレディネスチェックと未認証拒否チェックに合格した後にのみ公開します。

⚠️ 注記: SSE トランスポートは 2025 年 8 月に非推奨となりました。streamable-http を使用してください。


📖 その他のドキュメント:


🔐 セキュリティ

セキュリティ機能

レイヤー

機能

説明

HTTPS

TLS 終端

リモート認証情報に必要。同梱の自己署名プロファイルはローカルのみ

ベアラー認証

安定したプリンシパル

サービスモードで必須であり、テナント認証に使用されます

テナントストレージ

ファイルシステム分離

セッション、成果物、エクスポート、クロニクル、パイプラインは認証済みプリンシパルの下に保存されます

公平性とレートポリシー

テナント並行性 + 共有アップストリーム予算

1 つの呼び出し元がアップストリーム API 割り当てを増幅することを防ぎます

セキュリティヘッダー

クリックジャッキング/MIME 強化

リバースプロキシヘッダーは認証を補完します。CSRF 認証ではありません

シークレット処理

ランタイムシークレット注入

API キーとベアラートークンはデプロイのシークレット/環境から取得する必要があり、コミットやログに記録してはなりません

詳細なデプロイ手順については DEPLOYMENT.md を参照してください。


📤 エクスポート形式

Export and local notes workflow

検索結果を主要な参考文献管理ツールに対応した形式でエクスポートします。

形式

ソース

対応ツール

ユースケース

RIS

公式またはローカル

EndNote、Zotero、Mendeley

汎用インポート

MEDLINE

公式またはローカル

PubMed ツール

ネイティブな PubMed 形式のアーカイブ

CSL JSON

公式

引用処理プロセッサ

プログラムによる引用スタイル設定

BibTeX

ローカル

LaTeX、Overleaf、JabRef

学術執筆

CSV

ローカル

Excel、Google Sheets

データ分析

JSON

ローカル

プログラムからのアクセス

カスタム処理

エクスポートされるフィールド

  • コア: PMID、Title、Authors、Journal、Year、Volume、Issue、Pages

  • 識別子: DOI、PMC ID、ISSN

  • コンテンツ: Abstract (HTML タグは除去済み)

  • メタデータ: Language、Publication Type、Keywords

  • アクセス: DOI URL、PMC URL、全文の利用可能性

特殊文字の処理

  • BibTeX エクスポートは、適切な LaTeX エンコーディングのために pylatexenc を使用します

  • 北欧文字 (ø、æ、å)、ウムラウト (ü、ö、ä)、およびアクセント記号は正しく変換されます

  • 例: Søren HansenS{\o}ren Hansen


📚 引用

GitHub は CITATION.cff から Cite this repository を表示します。研究、方法セクション、または社内テクニカルレポートで PubMed Search MCP を使用する場合は、GitHub が生成した引用を優先するか、リポジトリのメタデータを直接再利用してください。

@software{pubmed_search_mcp,
  title = {PubMed Search MCP},
  author = {u9401066},
  url = {https://github.com/u9401066/pubmed-search-mcp}
}

📄 ライセンス

Apache License 2.0 - LICENSE を参照


🔗 リンク

Install Server
A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
2wRelease cycle
8Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that enables coding agents to search academic papers, ingest full-text PDFs, extract structured details, and manage citations in literature research workflows.
    23
    MIT
  • F
    license
    A
    quality
    B
    maintenance
    AI-powered research assistant MCP server for searching academic papers and answering research questions with DOI citations.
    3
  • F
    license
    Not graded
    quality
    D
    maintenance
    An advanced scholarly research MCP server that enables AI assistants to discover, fetch, process, and manage academic papers across multiple sources like arXiv, PubMed, and Semantic Scholar, with capabilities for summarization, citation analysis, and concept relationship extraction.
    1

View all related MCP servers

Related MCP Connectors

  • Academic research MCP server for paper search, citation checks, graphs, and deep research.

  • Open scientific and engineering knowledge for AI agents: search, evidence, document publishing.

  • Read-only MCP over an agentic SLR workspace with per-claim citation verification

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/u9401066/pubmed-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server