PubMed MCP Server について
PubMed MCP Server は、研究・医療分野のユーザーが MCP 経由で PubMed 文献を検索、分析できるサーバーです。詳細な絞り込みに加え、記事取得、引用出力、関連文献検索、トレンド分析を備えています。
主な機能
- 01日付、著者、雑誌、MeSH による検索
- 02記事詳細と抄録の取得
- 03複数形式での引用出力
- 04関連文献と著者の論文検索
- 05出版トレンドの分析
- 06結果のキャッシュとレート制限
活用シーン
- 01研究課題に合う文献の検索
- 02PMID による記事メタデータと抄録の取得
- 03研究文書用の引用情報の準備
- 04特定テーマの出版動向の確認
MCP 対応
PubMed の検索、記事、引用、著者、関連文献、MeSH、トレンド分析のツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PubMed MCP サーバー
PubMed の文献検索と管理に対応する、包括的な Model Context Protocol(MCP)サーバーです。MCP プロトコルを通じて、高度な検索機能、引用形式の整形、研究分析ツールを提供します。
機能
- 高度な PubMed 検索:日付範囲、論文の種類、著者、ジャーナル、MeSH 用語などの複雑なフィルターを使って検索できます
- 論文の詳細:特定の PMID の抄録、著者、メタデータなど、詳細な情報を取得できます
- 引用のエクスポート:複数の形式(BibTeX、APA、MLA、Chicago、Vancouver、EndNote、RIS)で引用をエクスポートできます
- 著者検索:共著者の情報を含め、特定の著者による論文を検索できます
- 関連記事:特定の PMID に関連する論文を見つけられます
- MeSH 用語検索:Medical Subject Headings を検索して調べられます
- ジャーナル分析:特定のジャーナルの指標や最近の論文を取得できます
- 研究トレンド:経時的な出版トレンドを分析できます
- 論文の比較:複数の論文を並べて比較できます
- キャッシュ:パフォーマンスを向上させるキャッシュ機能を内蔵しています
- レート制限:設定可能なレート制限により、API を適切に利用できます
インストール
前提条件
- Python 3.8 以上
- NCBI API キー(無料の登録が必要です)
- NCBI API での識別に使用する有効なメールアドレス
クイックスタート
-
リポジトリをクローンします:
git clone https://github.com/your-org/pubmed-mcp.git cd pubmed-mcp -
依存関係をインストールします:
pip install -r requirements.txt -
環境変数を設定します:
cp env.example .env # Edit .env with your NCBI API key and email -
サーバーを起動します:
python -m src.main
開発用インストール
追加ツールを使用した開発の場合:
make install-dev
または、手動でインストールします:
pip install -r requirements.txt
pip install -e .
pip install black isort mypy flake8
設定
プロジェクトのルートに .env ファイルを作成し、次の変数を設定します:
# Required
PUBMED_API_KEY=your_ncbi_api_key_here
[email protected]
# Optional
CACHE_TTL=300
CACHE_MAX_SIZE=1000
RATE_LIMIT=3.0
LOG_LEVEL=info
NCBI API キーの取得
- NCBI アカウント設定にアクセスします
- サインインするか、アカウントを作成します
- 「API Key Management」に移動します
- 新しい API キーを作成します
- キーを
.envファイルにコピーします
使用方法
利用可能なツール
このサーバーは、次の MCP ツールを提供します:
1. search_pubmed
高度なフィルターオプションを使って PubMed を検索します。
{
"query": "machine learning healthcare",
"max_results": 20,
"date_range": "5y",
"article_types": ["Journal Article", "Review"],
"has_abstract": true
}
2. get_article_details
特定の PMID の詳細情報を取得します。
{
"pmids": ["12345678", "87654321"],
"include_abstracts": true,
"include_citations": false
}
3. search_by_author
特定の著者による論文を検索します。
{
"author_name": "Smith J",
"max_results": 10,
"include_coauthors": true
}
4. export_citations
さまざまな形式で引用をエクスポートします。
{
"pmids": ["12345678"],
"format": "bibtex",
"include_abstracts": false
}
5. find_related_articles
特定の PMID に関連する論文を見つけます。
{
"pmid": "12345678",
"max_results": 10
}
6. search_mesh_terms
MeSH 用語を使って検索します。
{
"term": "Machine Learning",
"max_results": 20
}
7. analyze_research_trends
経時的な出版トレンドを分析します。
{
"topic": "artificial intelligence",
"years_back": 5,
"include_subtopics": false
}
MCP クライアントを使った使用例
import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
async def main():
server_params = StdioServerParameters(
command="python",
args=["-m", "src.main"]
)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the session
await session.initialize()
# Search PubMed
result = await session.call_tool(
"search_pubmed",
{
"query": "COVID-19 vaccines",
"max_results": 5,
"date_range": "1y"
}
)
print(result.content[0].text)
if __name__ == "__main__":
asyncio.run(main())
開発
テストの実行
# Run all tests
make test
# Run with coverage
make test-coverage
# Run specific test types
python run_tests.py unit
python run_tests.py integration
python run_tests.py coverage
コード品質
# Format code
make format
# Run linting
make lint
# Type checking
mypy src/
プロジェクト構成
pubmed-mcp/
├── src/
│ ├── __init__.py
│ ├── main.py # Entry point
│ ├── server.py # MCP server implementation
│ ├── models.py # Pydantic models
│ ├── pubmed_client.py # PubMed API client
│ ├── tool_handler.py # Tool request handlers
│ ├── citation_formatter.py # Citation formatting
│ ├── tools.py # Tool definitions
│ └── utils.py # Utility functions
├── tests/ # Test suite
├── requirements.txt # Dependencies
├── setup.py # Package setup
├── pyproject.toml # Modern Python config
├── Makefile # Development commands
├── Dockerfile # Container setup
└── README.md # This file
Docker
ビルドと実行
# Build Docker image
make docker-build
# Run with environment variables
make docker-run PUBMED_API_KEY=your_key PUBMED_EMAIL=your_email
Docker Compose
version: '3.8'
services:
pubmed-mcp:
build: .
environment:
- PUBMED_API_KEY=your_key
- PUBMED_EMAIL=your_email
- LOG_LEVEL=info
volumes:
- ./data:/app/data
API リファレンス
検索パラメーター
query:PubMed 構文を使った検索クエリmax_results:結果の最大件数(1~200)sort_order:並べ替え順(関連度、出版日、著者、ジャーナル、タイトル)date_from/date_to:日付範囲のフィルターdate_range:定義済みの日付範囲(1y、5y、10y、all)article_types:出版物の種類によるフィルターauthors:著者名によるフィルターjournals:ジャーナル名によるフィルターmesh_terms:MeSH 用語によるフィルターlanguage:言語のフィルター(例:'eng'、'fre')has_abstract:抄録のある論文のみhas_full_text:全文のある論文のみhumans_only:ヒトを対象とする研究のみ
引用形式
bibtex:BibTeX 形式apa:APA スタイルmla:MLA スタイルchicago:Chicago スタイルvancouver:Vancouver スタイルendnote:EndNote 形式ris:RIS 形式
コントリビューション
- リポジトリをフォークします
- フィーチャーブランチを作成します
- 変更を加えます
- 新しい機能のテストを追加します
- テストスイートを実行します
- プルリクエストを送信します
開発ガイドライン
- PEP 8 のスタイルガイドラインに従います
- すべての関数に型ヒントを追加します
- 包括的なテストを作成します
- 新機能についてドキュメントを更新します
- Conventional Commits のメッセージを使用します
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細は LICENSE ファイルをご覧ください。
サポート
- 問題:GitHub Issues
- ドキュメント:Project Wiki
- ディスカッション:GitHub Discussions
謝辞
- PubMed API へのアクセスを提供する NCBI E-utilities
- MCP の仕様を提供する Model Context Protocol
- MCP の開発とサポートを提供する Anthropic
変更履歴
変更履歴の詳細は CHANGELOG.md をご覧ください。
注:このサーバーを使用するには有効な NCBI API キーが必要で、NCBI の利用ガイドラインに従います。API のレート制限と利用規約を遵守してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。