pubmed-search-mcp
PubMed Search MCP
AIエージェントのためのプロフェッショナル文献リサーチアシスタント - 単なるAPIラッパーではありません
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 Email — NCBI 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-mcpPython 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 |
| ローカルAIクライアント1台に推奨。MCPポートをリッスンしません |
ローカルループバックHTTP |
| 信頼できるシングルユーザー統合。MCPリクエストは永続的な |
マルチユーザーサービス |
| 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/listとtools/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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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)
OpenClawはmcp-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 | loadedCline (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ハンドオフ+パイプライン( |
医療用語のタイプミス | ✅ 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) |
主な差別化ポイント
語彙変換レイヤー - エージェントは自然に話し、各データベースの用語体系(MeSH、ICD-10、テキストマイニングされたエンティティ)に変換します
統合検索ゲートウェイ - 1回の
unified_search()呼び出しで、PubMed、Europe PMC、CORE、OpenAlex、Semantic Scholar、および有効化されたプレプリント・商用ソースに対して、機能を認識したディスパッチを行いますPICOハンドオフ + パイプライン - エージェントがP/I/C/Oを抽出し、
parse_pico()がその構造化ハンドオフを検証し、バックエンドのtemplate: picoパイプラインがOを考慮した精度/再現率検索を実行します研究クロニクルと系統ツリー - ポリシー駆動のヒューリスティックでマイルストーンを検出し、マルチシグナルスコアリングでランドマーク論文を特定し、診断情報を提示し、差分を確認できるバージョン管理されたリビジョンを保持し、研究の進化をサブトピックごとの分岐ツリーとして可視化します
引用ネットワーク分析 - 単一の論文から研究全体の状況を把握するための多段階引用ツリーを構築します
研究ライフサイクル全体 - 検索 → 発見 → 全文 → 分析 → エクスポートまで、すべてを1つのサーバーで実現
エージェントファースト設計 - 人間が読むためではなく、機械の意思決定に最適化された出力
📡 外部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 dirCrossRefとUnpaywallは、ソース固有のメールが設定されていない限り、ランタイムサーバーの連絡先メール(NCBI_EMAIL、CLIの--email、または検出されたgitメール)を再利用します。OpenAlexはカジュアルな匿名利用とオプションのAPIキーを受け入れます。ブローカーは、永続的な「ポライトプール」クォータを想定する代わりに、応答のクレジット/レートメタデータを読み取ります。
ローカルノートのエクスポートは、output_dir引数、PUBMED_NOTES_DIR、PUBMED_WORKSPACE_DIR/references、PUBMED_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_semanticとsystematicは相互排他的であり、マルチストラテジーのディープサーチ展開を無効にします。要求された取得モードがサポートされていない場合、明示的なソース選択はネットワーク呼び出しの前に失敗します。自動ソース選択は、対応可能なプロバイダーのみを保持します。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 Scholar、OpenAlexを参照してください。
🔬 発見ツール(重要な論文を見つけた後)
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)
📚 全文、図の抽出、エクスポート
カテゴリ | ツール |
全文 |
|
図 |
|
図対応の全文 |
|
テキストマイニング |
|
エクスポート |
|
🖼️ OA図ファースト探索
エージェントが記事のテキストだけでなく証拠となる図を必要とする場合は、PMCオープンアクセスパスを使用します:
get_article_figures(identifier="PMC12086443")→ 図のラベル、キャプション、画像URL、PDF/記事リンクget_fulltext(pmcid="PMC7096777", include_figures=True)→ 図をインラインに含む構造化全文図の出力は記事の文脈を保持するため、エージェントは各図をそれが言及されているセクションに接続できます
🧬 NCBI拡張データベース
ツール | 説明 |
| NCBI Geneデータベースを検索 |
| NCBI Gene IDによる遺伝子詳細 |
| 遺伝子にリンクされたPubMed論文 |
| PubChem化合物を検索 |
| PubChem CIDによる化合物詳細 |
| 化合物にリンクされたPubMed論文 |
| ClinVarの臨床バリアントを検索 |
🕰️ 研究クロニクルと系統ツリー
ツール | 説明 |
| ランドマーク検出を備えた、永続化・バージョン管理されたクロニクルを構築します。出力: summary、chronicle_map、timeline、tree、graph、evidence、milestones、mermaid、timeline_mermaid、mindmap、narrative、json |
| リビジョンのロード、一覧表示、差分、引用付きのナレーション、マイルストーン分布の分析、または最大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 変換
ツール | 説明 |
| 機関のリンクリゾルバを構成する |
| OpenURL アクセスリンクを生成する |
| リゾルバのプリセットを一覧表示する |
| リゾルバの構成をテストする |
| 直接 DOI、EZproxy、OpenURL ハンドオフ経路を診断する |
| ICD コードと MeSH 用語を相互変換する(双方向) |
| クエリ内の ICD コードを自動検出し、MeSH に展開する |
💾 セッション管理
ツール | 説明 |
| キャッシュされた PMID リストを取得する |
| セッションキャッシュから記事を取得する(API コストなし) |
| セッションステータスの概要 |
| PMID、キャッシュされた記事、永続的な検索実行、リプレイ引数、履歴、永続的アーティファクトのファサード |
動的 MCP リソースも、リソースを直接読み取れるエージェント向けに利用できます。
session://context— アクティブなセッションステータスsession://last-search— 最新の検索メタデータsession://last-search/pmids— 最新の PMID リスト + CSV 形式session://last-search/results— 最新の検索用にキャッシュされた記事ペイロード
永続的アーティファクト
セッション永続化が構成されている場合、再利用可能な unified_search および get_fulltext レスポンスに対して、永続的な MCP 出力アーティファクトが保存されます。ツールのレスポンスはインデックスカードのように機能します。エージェントが即座に回答できるだけのカウント、ソース警告、アーティファクトのヒントが含まれる一方、完全なエビデンスペイロードは繰り返し読み取れるファイルに保持されます。コンパクトな artifact ロケーターには、artifact_id、artifact_uri、primary_file、summary、ファイルインベントリ、read_order、監査ステータス、正確な read_session(...) 取得ヒントが含まれます。ローカル MCP クライアントが local_path と manifest_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(completed、empty、partial、またはfailed)、bounded=true、exhaustive=false、返された件数、試行済み/成功/失敗/再試行可能なソース、継続/完全性不明のソースリスト。search_runはリカバリのハンドオフです: 安定したrun_id、ジャーナルステータス、recoverable、正確なread_sessionの検査/リプレイ引数、およびコミットされた場合のアーティファクト URI。
テナントスコープの search-run/v1 ジャーナルは、プロバイダー I/O または終端検証レスポンスの前に公開され、サニタイズされたリクエスト、計画、物理的なソース別またはパイプラインステップ別の試行、カウント、安全な失敗、結果参照、該当する場合はアーティファクトロケーターを記録します。これは終端状態 completed、partial、failed、または cancelled に到達します。有効なゼロ結果検索は、search_status.state が empty である 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_metadata と query_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_path と manifest_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 で一時的に除外してください。
パイプライン管理
manage_pipeline は、パイプラインの CRUD、履歴、スケジュール設定の主要ファサードです。より具体的なパイプラインツールは、互換性ラッパーとして引き続き利用できます。
ツール | 説明 |
| 保存、一覧表示、ロード、削除、履歴、スケジュールアクションの主要ファサード |
| 後で再利用するためのパイプライン構成を保存する(YAML/JSON、自動検証) |
| 保存済みパイプラインを一覧表示する(タグ/スコープでフィルタリング) |
| 保存名でロードする。信頼できるローカル呼び出し元はファイルをロードすることもできる |
| パイプラインとその実行履歴を削除する |
| 記事差分分析付きの実行履歴を表示する |
| 定期的なパイプラインスケジュールを作成、更新、または削除する |
認証されたサービス呼び出し元は、テナント派生ストア内の名前付きパイプラインを使用します。workspace および file: アクセスはローカルのみです。サービス Compose プロファイルは、別途設計された単一リーダーなしではスケジュールを実行しません。
ステップバイステップのチュートリアル:
👁️ ビジョンと画像検索
ツール | 説明 |
| アップロードされた画像、画像 URL、またはデータ URI をエージェントビジョンに渡し、検索語の抽出を行う |
| Open-i 全体で生物医学画像を検索する(X線、顕微鏡、写真、図) |
ユーザーが画像を提供し、エージェントが最初にその意味を解釈する必要がある場合は、analyze_figure_for_search を使用します。このツールは MCP の ImageContent と、LLM エージェントが英語の生物医学用語を抽出するための指示を返します。その後、類似した Open-i 画像については search_biomedical_images を、関連論文については unified_search を続行します。
📄 プレプリント検索
unified_search の options フラグを使用して、arXiv、medRxiv、bioRxiv のプレプリントサーバーを検索します。
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 に基づくランキング結果から構築された軽量な研究系統図ビューを追加できます:
オプションフラグ | 説明 |
| 現在の PMID ベースのランキングセットから軽量な研究コンテキストグラフプレビューを Markdown 出力に追加し、 |
これは、エージェントが2回目の build_research_chronicle 呼び出しを行わずに迅速なテーマ分岐を必要とする場合に役立ちます。
🧪 臨床試験レジストリ補助
ClinicalTrials.gov は暗黙的に照会されることはありません。制限付きレジストリ補助が有用な場合は、Markdown 検索に options="trials" を追加してください。これは文献ソース計画やソース数とは別に保たれ、永続化アーティファクトはその切り詰められた物理クエリと結果を adjunct_queries の下に記録します。構造化 JSON/TOON 検索では、この表示専用の補助は実行されません。
unified_search(query="remimazolam ICU sedation", options="trials")📊 件数優先オリエンテーション
unified_search は、ランキングリストを読む前にルーティング支援を求めるエージェント向けに、既存のソースカバレッジと意思決定ヒントを前面に出すこともできます:
オプションフラグ | 説明 |
| ソース件数テーブル、カバレッジ概要、次のツール推奨をレスポンスに追加します |
例:
unified_search(query="remimazolam ICU sedation", options="counts_first")このモードは、エージェントがソースを拡張するか、リード PMID を検査するか、全文を取得するか、図を抽出するか、タイムライン探索に切り替えるかを決定する必要がある場合に役立ちます。
⏱️ MCP 進捗レポート
MCP クライアントが進捗トークンを提供すると、unified_search、build_research_chronicle、get_fulltext、get_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 Diabetes2️⃣ 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 │
│ │
└─────────────────────────────────────────────────────────────────────────┘モード | エントリーポイント | 最適 | 自動機能 |
クイック |
| 高速なトピック検索 | ICD→MeSH、マルチソース、重複排除 |
PICO | エージェント P/I/C/O -> | 臨床疑問 | ハンドオフ検証 -> |
系統的 |
| 再現可能なレビューの種 | MeSH/同義語に加え、制限付きバルク/カーソル実行。網羅性を主張するものではありません |
ネイティブセマンティック |
| タイトル/アブストラクト空間での概念的な類似性 | 機能検証。OpenAlex セマンティックモード、最大50件 |
探索 |
| キーペーパーから | 引用ネットワーク、関連記事 |
🤖 Claude スキル(AI エージェントワークフロー)
.claude/skills/ にある事前構築済みのワークフローガイドで、使用スキル(MCP サーバーの利用向け)と開発スキル(プロジェクトの保守向け)に分かれています:
📚 使用スキル (11) — この MCP サーバーを使用する AI エージェント向け
スキル | 説明 |
| フィルター付き基本検索 |
| MeSH 展開、包括的 |
| 臨床疑問の分解 |
| 引用ツリー、関連記事 |
| 永続的でバージョン管理された研究の進化 |
| 遺伝子/PubChem/ClinVar |
| Europe PMC、CORE 全文 |
| RIS/BibTeX/CSV/CSL エクスポートガイド |
| クロスデータベース統合検索 |
| 完全なツールリファレンスガイド |
| 検索プランの保存、読み込み、再利用 |
🔧 開発スキル (15) — プロジェクト貢献者向け
スキル | 説明 |
| CHANGELOG.md を自動更新 |
| DDD アーキテクチャのリファクタリング |
| コード品質とセキュリティレビュー |
| 新機能のための DDD スキャフォールド |
| コミット前のドキュメント同期 |
| プリコミットワークフローのオーケストレーション |
| コンテキストをメモリーバンクに保存 |
| メモリーバンクファイルを更新 |
| 引用可能な PDF アセットの抽出とインベントリ作成 |
| 新規プロジェクトの初期化 |
| 多言語 README の同期 |
| コード変更に合わせて README を同期 |
| ROADMAP.md のステータスを更新 |
| テストスイートを生成 |
| 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 ルックアップ |
|
ESpell | 自動スペル修正( |
クエリ分析 | 各提案クエリが、PubMed が実際にどのように解釈するかを表示 |
語彙変換層(主要機能)
私たちのコアバリュー: 私たちはエージェントと検索エンジンの中間に位置するインテリジェントミドルウェアであり、エージェントが各データベースの用語を知る必要がないよう、語彙の標準化を自動的に処理します。
異なるデータソースは異なる統制語彙システムを使用します。このサーバーは自動変換を提供します:
API / データベース | 語彙システム | 自動変換 |
PubMed / NCBI | MeSH(医学件名標目表) | ✅ |
ICD コード | ICD-10-CM / ICD-9-CM | ✅ 自動検出して MeSH に変換 |
Europe PMC | テキストマイニングされたエンティティ(遺伝子、疾患、化学物質) | ✅ |
OpenAlex | トピック/キーワード(モデル推論) | ✅ ブローカーキーワードモード。選択時は制限付きネイティブセマンティックモード |
Semantic Scholar | S2 フィールド/バルククエリ構文 | ✅ ブローカーが関連性モードか制限付きバルクモードを選択。プロバイダー注釈が来歴を保持 |
CORE | なし | ❌ フリーテキストのみ |
CrossRef | なし | ❌ フリーテキストのみ |
自動 ICD → MeSH 変換
ICD コード(例: 高血圧の I10)で検索すると、unified_search() は自動的に:
detect_and_expand_icd_codes()を使用して ICD-10/ICD-9 パターンを検出します内部マッピング(
ICD10_TO_MESH、ICD9_TO_MESH)から対応する MeSH 用語を検索します包括的な検索のために 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") を呼び出すと、内部では次の処理が行われます:
ESpell 修正 - スペルミスを修正します
MeSH クエリ -
Entrez.esearch(db="mesh")を使用して標準ボキャブラリを取得します同義語抽出 - MeSH Entry Terms から同義語を取得します
クエリ分析 - 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 |
| Streamable HTTP MCP エンドポイント |
Health |
| ヘルスチェック |
Ready |
| レディネスチェック |
Info |
| ランタイムトランスポートとエンドポイントメタデータ |
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-ngrokCopilot Studio 設定
フィールド | 値 |
サーバー名 |
|
サーバーURL |
|
認証 | サービスモードではベアラートークン。 |
📖 完全なドキュメント: 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を使用してください。
📖 その他のドキュメント:
アーキテクチャ → ARCHITECTURE.md
パイプラインチュートリアル (英語) → docs/PIPELINE_MODE_TUTORIAL.en.md
パイプラインチュートリアル (zh-TW) → docs/PIPELINE_MODE_TUTORIAL.md
デプロイガイド → DEPLOYMENT.md
Copilot Studio → copilot-studio/README.md
🔐 セキュリティ
セキュリティ機能
レイヤー | 機能 | 説明 |
HTTPS | TLS 終端 | リモート認証情報に必要。同梱の自己署名プロファイルはローカルのみ |
ベアラー認証 | 安定したプリンシパル | サービスモードで必須であり、テナント認証に使用されます |
テナントストレージ | ファイルシステム分離 | セッション、成果物、エクスポート、クロニクル、パイプラインは認証済みプリンシパルの下に保存されます |
公平性とレートポリシー | テナント並行性 + 共有アップストリーム予算 | 1 つの呼び出し元がアップストリーム API 割り当てを増幅することを防ぎます |
セキュリティヘッダー | クリックジャッキング/MIME 強化 | リバースプロキシヘッダーは認証を補完します。CSRF 認証ではありません |
シークレット処理 | ランタイムシークレット注入 | API キーとベアラートークンはデプロイのシークレット/環境から取得する必要があり、コミットやログに記録してはなりません |
詳細なデプロイ手順については DEPLOYMENT.md を参照してください。
📤 エクスポート形式
検索結果を主要な参考文献管理ツールに対応した形式でエクスポートします。
形式 | ソース | 対応ツール | ユースケース |
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 Hansen→S{\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 を参照
🔗 リンク
Maintenance
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
- AlicenseAqualityDmaintenanceMCP server enabling AI agents to search and retrieve scientific papers, citations, and author profiles from Crossref, OpenAlex, and Semantic Scholar with no API keys required.53MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables coding agents to search academic papers, ingest full-text PDFs, extract structured details, and manage citations in literature research workflows.23MIT
- FlicenseAqualityBmaintenanceAI-powered research assistant MCP server for searching academic papers and answering research questions with DOI citations.3
- FlicenseNot gradedqualityDmaintenanceAn 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
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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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