UniProt MCP Server について
UniProt MCP Serverは、UniProtのタンパク質情報をAIアシスタントに提供し、検索や比較を伴う研究・分析に利用できます。複数件の取得に対応し、配列特徴と利用可能な構造を返します。同一エントリーのデータは24時間キャッシュされます。
主な機能
- 01名称、遺伝子、キーワードで検索
- 02アクセッション番号で情報取得
- 03複数タンパク質の一括取得
- 04注釈付き配列特徴と位置の表示
- 05PDBとAlphaFoldの構造取得
活用シーン
- 01タンパク質名からエントリーを検索
- 02複数タンパク質情報の比較
- 03配列境界と活性部位の確認
- 04利用可能なタンパク質構造の調査
MCP 対応
UniProtの検索、タンパク質情報、配列特徴、構造を取得するツールをMCPクライアントに提供します。同一エントリーへの関連クエリでは24時間キャッシュを共有します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
UniProt MCP サーバー
UniProt のタンパク質情報にアクセスできる Model Context Protocol(MCP)サーバーです。このサーバーを使用すると、AI アシスタントは UniProt からタンパク質の機能や配列に関する情報を直接取得できます。
特長
- アクセッション番号がまだ分からない場合に、タンパク質名、遺伝子名、またはキーワードで UniProtKB を検索
- UniProt のアクセッション番号でタンパク質情報を取得
- 複数のタンパク質を一括取得
- 注釈付き配列フィーチャーとその位置を取得:シグナルペプチド、プロペプチド、成熟鎖、活性部位および結合部位、ジスルフィド結合、ドメイン、グリコシル化、自然変異、変異誘発
- 利用可能な構造を取得:手法、分解能、対象残基範囲を含む PDB エントリー、および AlphaFold DB モデル
- パフォーマンス向上のためのキャッシュ(TTL は 24 時間)。同じエントリーを読み取るツール間で共有されます
- エラー処理とロギング
要件
- Python 3.10 以降
- MCP Python SDK 1.x(
mcp>=1.1,<2)
このプロジェクトの基盤となっている低レベルの
Serverクラスから、MCP SDK 2.0 リリースでは@server.list_tools()/@server.call_tool()デコレーターが削除されました。mcp2.x をインストールすると、サーバーの起動時にAttributeError: 'Server' object has no attribute 'list_tools'が発生するため、依存関係は 1.x 系に固定されています。2.x サーバー API への移行は別途追跡されています。
クイックスタート
- Python 3.10 以降がインストールされていることを確認します
- このリポジトリをクローンします:
git clone https://github.com/TakumiY235/uniprot-mcp-server.git cd uniprot-mcp-server - 依存関係をインストールします:
# Using uv (recommended) uv pip install -r requirements.txt # Or using pip pip install -r requirements.txt
設定
Claude Desktop の設定ファイルに追加します:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"uniprot": {
"command": "uv",
"args": ["--directory", "path/to/uniprot-mcp-server", "run", "uniprot-mcp-server"]
}
}
}
使用例
Claude Desktop でサーバーを設定した後、次のような質問ができます:
Can you get the protein information for UniProt accession number P98160?
一括クエリの場合:
Can you get and compare the protein information for both P04637 and P02747?
アクセッション番号が手元にない場合:
Find the reviewed human phospholipase A2 entries and show me their lengths.
コンストラクトやバリアントパネルを設計する前に、境界と遵守すべき残基を確認する場合:
What are the signal peptide, propeptide and mature chain boundaries of P04054,
and where are its active sites and disulfide bonds?
作業に使用する構造を探す場合:
Which PDB structures cover P04054, and at what resolution?
API リファレンス
ツール
-
get_protein_info- 1 つのタンパク質の情報を取得します
- 必須パラメーター:
accession(UniProt アクセッション番号) - レスポンスの例:
{ "accession": "P12345", "protein_name": "Example protein", "function": ["Description of protein function"], "sequence": "MLTVX...", "length": 123, "organism": "Homo sapiens" }
-
get_batch_protein_info- 複数のタンパク質の情報を取得します
- 必須パラメーター:
accessions(UniProt アクセッション番号の配列) - タンパク質情報オブジェクトの配列を返します
- 検索に失敗した場合はアクセッションごとに報告されるため、1 つのエントリーに問題があっても、バッチ内のほかの情報は失われません
-
search_proteins- アクセッション番号がまだ分からない場合にエントリーを検索します
- 必須パラメーター:
query(検索語。UniProt のクエリ構文を使用できます。 例:gene:PLA2G1B) - 任意:
organism_id(NCBI 分類 ID。ヒトの場合は9606)、reviewed_only(デフォルトはtrue、Swiss-Prot のみ)、limit(1~50、 デフォルトは 10) - 配列は含まれないため、結果リストは小さく保たれます
- レスポンスの例:
{ "count": 1, "results": [ { "accession": "P04054", "entry_name": "PA2GA_HUMAN", "protein_name": "Phospholipase A2", "gene_names": ["PLA2G1B"], "organism": "Homo sapiens", "taxon_id": 9606, "length": 148, "reviewed": true } ] }
-
get_protein_features- 1 始まりの包含位置で注釈付き配列フィーチャーを取得します
- 必須パラメーター:
accession - 任意:
types(指定したフィーチャータイプのみを含めます。大文字と小文字を区別せず照合します。 例:["Active site", "Disulfide bond"])、include_secondary_structure(デフォルトはfalse) - 二次構造(
Helix、Beta strand、Turn)は要素ごとに報告されるため、1 つのエントリーに何十個も含まれますが、配列設計の判断には役立ちません。include_secondary_structureを設定するか、typesで指定しない限り、これらは返されません。 - レスポンスの例:
{ "accession": "P04054", "length": 148, "feature_counts": {"Signal": 1, "Propeptide": 1, "Chain": 1, "Active site": 2, "Disulfide bond": 7}, "features": [ {"type": "Signal", "start": 1, "end": 15, "description": ""}, {"type": "Propeptide", "start": 16, "end": 22, "description": "Activation peptide"}, {"type": "Chain", "start": 23, "end": 148, "description": "Phospholipase A2"} ] } - フィーチャーは位置順に並びます。UniProt で位置が設定されていないフィーチャーは
nullとして報告され、最後に並びます。
-
get_protein_structures- タンパク質で利用可能な構造を取得します
- 必須パラメーター:
accession - レスポンスの例:
{ "accession": "P04054", "pdb_entries": [ {"pdb_id": "3ELO", "method": "X-ray", "resolution": "1.55 A", "chains": "A=16-148"}, {"pdb_id": "6Q42", "method": "X-ray", "resolution": "1.90 A", "chains": "A/B=23-148"} ], "alphafold_id": "P04054" } - 構造が解明されていないタンパク質の場合、エラーではなく空のリストと
nullのalphafold_idが返されます
get_protein_info、get_protein_features、get_protein_structures は、同じ UniProt エントリーの異なる部分を読み取るため、アクセッションごとに 1 つのリクエストをキャッシュして共有します。3 つすべてを呼び出しても、ラウンドトリップは 1 回だけです。
開発
開発環境のセットアップ
- リポジトリをクローンします
- 仮想環境を作成します:
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate - 開発用依存関係をインストールします:
pip install -e ".[dev]"
テストの実行
pytest
コードスタイル
このプロジェクトでは、以下を使用します。
- コードのフォーマットには Black
- インポートの並べ替えには isort
- リントには flake8
- 型チェックには mypy
- セキュリティチェックには bandit
- 依存関係の脆弱性チェックには pip-audit
すべてのチェックを実行します。
black .
isort .
flake8 .
mypy .
bandit -r src/
pip-audit .
技術的な詳細
- MCP Python SDK を使用して構築されています
- 非同期 HTTP リクエストには httpx を使用します
- OrderedDict ベースのキャッシュを使用し、TTL は 24 時間です
- すべての UniProt リクエストにタイムアウトを設定します(接続 10 秒、合計 30 秒)
- 429 によるレート制限を含む UniProt API エラーをツールエラーとして通知します。自動再試行やバックオフは行いません
- 詳細なエラーメッセージを提供します
エラー処理
サーバーは、さまざまなエラーシナリオに対応します。
- 無効なアクセッション番号(UniProt は 404 ではなく 400 を返します)
- API 接続の問題(ネットワークエラー)
- レート制限(429 応答):呼び出し元に通知しますが、再試行はしません
- 不正な形式のレスポンス(JSON 解析エラー)
- キャッシュ管理(TTL とサイズ制限)
貢献
貢献を歓迎します!お気軽にプルリクエストを送信してください。貢献する手順は以下のとおりです。
- リポジトリをフォークします
- 機能ブランチを作成します(
git checkout -b feature/amazing-feature) - 変更をコミットします(
git commit -m 'Add some amazing feature') - ブランチにプッシュします(
git push origin feature/amazing-feature) - プルリクエストを作成します
必要に応じてテストを更新し、既存のコーディングスタイルに従ってください。
ライセンス
このプロジェクトは MIT ライセンスのもとでライセンスされています。詳細については、LICENSE ファイルをご覧ください。
謝辞
- タンパク質データ API を提供している UniProt
- Model Context Protocol の仕様を提供している Anthropic
- このプロジェクトの改善に協力してくださるコントリビューター
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
