omophub-mcp について
omophub-mcpは、臨床研究者や医療データチーム向けのMCPサーバーです。OMOP医学用語の検索、用語間マッピング、階層の探索、FHIRからOMOPへの解決に対応します。
主な機能
- 01語彙横断の概念検索
- 02語彙間の概念マッピング
- 03概念階層の探索
- 04セマンティック検索と類似概念検索
- 05FHIRコードのOMOPへの解決
活用シーン
- 01臨床用語のOMOP ID検索
- 02コードの検証とマッピング確認
- 03表現型の概念セット作成
- 04FHIR値のOMOPへの解決
MCP 対応
OMOP語彙の検索、参照、マッピング、階層探索、FHIR解決のツールに加え、語彙リソースとガイド用プロンプトをMCPクライアントに提供します。stdioとHTTP接続に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
6掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| page | number | いいえ | ページ番号(1 始まり、デフォルトは 1) |
| query | string | はい | 検索する医学用語または概念名 |
| page_size | number | いいえ | 返す結果の数(1~50、デフォルト:10) |
| domain_ids | string | いいえ | 絞り込みに使用する、カンマ区切りのドメイン ID。例:'Condition'、'Drug'、'Measurement'、'Procedure'。すべてのドメインを検索する場合は空欄にします。 |
| vocabulary_ids | string | いいえ | 絞り込みに使用する、カンマ区切りの語彙 ID。例:'SNOMED'、'ICD10CM'、'RxNorm'、'LOINC'。すべての語彙を検索する場合は空欄にします。 |
| standard_concept | enum | いいえ | 標準概念のステータスで絞り込みます。'S' は標準、'C' は分類を示します。省略するとすべてを検索します。S | C |
詳細
OMOPHub MCP Server
AI エージェント向けの医療用語集。
1,100 万件以上の OMOP コンセプトを検索、マッピング、閲覧できます。SNOMED CT、ICD-10、RxNorm、LOINC などに対応しています。Claude、Cursor、VS Code、その他の MCP 対応クライアントから直接利用できます。
クイックスタート · ツール · 使用例 · ドキュメント · ウェブサイト
OMOPHub MCP を選ぶ理由
現在、医療用語集を扱うには、数ギガバイトの CSV ファイルをダウンロードし、ローカルデータベースに読み込んで、必要な情報を見つけるための SQL を毎回書かなければなりません。
OMOPHub MCP Server を使えば、AI アシスタントから OHDSI ATHENA の用語集全体にすぐにアクセスできます。データベースのセットアップも、CSV の操作も、作業の切り替えも不要です。質問するだけです。
You: "Map ICD-10 code E11.9 to SNOMED"
Claude: Found it - E11.9 (Type 2 diabetes mellitus without complications)
maps to SNOMED concept 201826 (Type 2 diabetes mellitus)
via standard 'Maps to' relationship.
使用例:
- コンセプト検索 - 臨床用語に対応する OMOP コンセプト ID を数秒で検索します
- 用語集間のマッピング - ICD-10、SNOMED、RxNorm、LOINC、その他 120 以上の用語集間でマッピングします
- 階層の閲覧 - 表現型の定義に必要な上位概念と下位概念を調べます
- コンセプトセットの作成 - コホート定義用のコンセプトセット一式を AI エージェントに作成させます
- コードの検証 - 医療コードを検証し、標準マッピングを確認します
クイックスタート
1. API キーを取得する
omophub.com で登録し、ダッシュボードで API キーを作成します。
2. AI クライアントに追加する
Claude Desktop
Claude Desktop の設定 >「Developer」タブ >「Edit Config」を開きます。claude_desktop_config.json に追加します:
{
"mcpServers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}
Claude Code
claude mcp add omophub -- npx -y @omophub/omophub-mcp
# Then set OMOPHUB_API_KEY in your environment
Cursor
コマンドパレットを開き、「Cursor Settings」>「MCP」>「Add new global MCP server」を選択します。.cursor/mcp.json に追加します:
{
"mcpServers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}
VS Code
.vscode/mcp.json に追加します:
{
"servers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}
Streamable HTTP(リモート/ホスト型)
クライアントが URL 経由で接続できる HTTP サービスとして、MCP サーバーを実行します:
# Start HTTP server on port 3100
npx -y @omophub/omophub-mcp --transport=http --port=3100 --api-key=oh_your_key_here
# MCP endpoint: http://localhost:3100/mcp
# Health check: http://localhost:3100/health
MCP クライアントを / または /mcp に接続します。複数の AI エージェントが 1 つのサーバーインスタンスを共有する集中型デプロイに便利です。
ホスト型(mcp.omophub.com)
OMOPHub がホストする MCP サーバーに直接接続します。インストールは不要です。各クライアントは独自の API キーを Authorization ヘッダーで認証します:
Claude Code:
claude mcp add omophub --transport http \
-H "Authorization: Bearer oh_your_key_here" \
https://mcp.omophub.com
VS Code(.vscode/mcp.json):
{
"servers": {
"omophub": {
"type": "http",
"url": "https://mcp.omophub.com",
"headers": { "Authorization": "Bearer oh_your_key_here" }
}
}
}
Cursor/Windsurf:
{
"mcpServers": {
"omophub": {
"url": "https://mcp.omophub.com",
"headers": { "Authorization": "Bearer oh_your_key_here" }
}
}
}
注: Claude Desktop のカスタムコネクター UI は OAuth のみをサポートしており、カスタムヘッダーを送信できません。代わりに npx setup を使用してください。
Docker
# HTTP mode (default in Docker) - serves MCP on port 3100
docker run -e OMOPHUB_API_KEY=oh_your_key_here -p 3100:3100 omophub/omophub-mcp
# Stdio mode (for piping)
docker run -i -e OMOPHUB_API_KEY=oh_your_key_here omophub/omophub-mcp --transport=stdio
3. 質問を始める
「2 型糖尿病の OMOP コンセプト ID は何ですか?」
「ICD-10 コード E11.9 を SNOMED にマッピングしてください」
「SNOMED で Diabetes mellitus のすべての子孫を表示してください」
利用可能なツール
| ツール | 説明 |
|---|---|
search_concepts | すべての語彙を対象に、名前または臨床用語から医学的コンセプトを検索します |
get_concept | concept_id を指定して、特定の OMOP コンセプトの詳細情報を取得します |
get_concept_by_code | 語彙固有のコード(例:ICD-10 の E11.9)を使ってコンセプトを検索します |
map_concept | コンセプトを他の語彙の同等コンセプトにマッピングします(ページネーション対応 — 下記の注を参照) |
get_hierarchy | コンセプト階層をたどり、祖先、子孫、またはその両方を取得します |
list_vocabularies | 利用可能な医学的語彙を統計情報とともに一覧表示します |
semantic_search | ニューラル埋め込みを使用して自然言語で検索します(臨床的な意味を理解します) |
find_similar_concepts | 参照コンセプト、名前、または説明に類似したコンセプトを検索します |
explore_concept | 1 回の呼び出しで、コンセプトの詳細、階層、語彙間のマッピングを取得します |
fhir_resolve | FHIR のコード化された値(HL7 FHIR-to-OMOP IG ConceptMaps を介した管理コードを含む)を、対応する OMOP 標準コンセプトおよび CDM の対象テーブルに解決します |
fhir_resolve_codeable_concept | FHIR CodeableConcept を解決します。userSelected を尊重し、OHDSI の語彙優先設定に基づいて最適な候補を選びます |
リソース
| URI | 説明 |
|---|---|
omophub://vocabularies | 統計情報を含む語彙カタログ全体 |
omophub://vocabularies/{vocabulary_id} | 特定の語彙の詳細 |
プロンプト
| プロンプト | 説明 |
|---|---|
phenotype-concept-set | 臨床表現型のコンセプトセットを作成するためのガイド付きワークフロー |
code-lookup | マッピングと階層を含めて、医学的コードを検索・検証します |
プロンプトの例
概念を検索 → search_concepts
「RxNormでmetforminを検索してください」
語彙間のマッピング → map_concept
「SNOMEDの概念201826があります。ICD-10コードは何ですか?」
概念セットを作成 → search_concepts → get_hierarchy → map_concept
「すべての子孫概念を含む、2型糖尿病の概念セットの作成を手伝ってください」
ここでは漏れがないことが重要です。
map_conceptは一度に1ページを返します (page_sizeは1~200、デフォルトは100)。広く使われている医薬品の成分には、 1,000を超えるNDCマッピングがある場合があるため、1回の呼び出しで得られるのはサンプルであり、完全な結果ではありません。 レスポンスのhas_moreを確認し、falseになるまでpageの値を増やしてください。 そうしないと、コードがひそかに欠落しているのに、概念セットが完全に見えてしまいます。これには
find_similar_conceptsではなく、探索に使用してください。埋め込みの類似度で順位付けされるため、 セットのメンバーシップという概念がなく、page_sizeをどれだけ大きくしても網羅的な結果にはなりません。
コードを検証 → get_concept_by_code → map_concept
「ICD-10コードE11.9は有効ですか?SNOMEDでは何にマッピングされますか?」
セマンティック検索 → semantic_search
「『heart attack』に関連する概念を見つけてください」
概念を調査 → explore_concept
「SNOMEDの概念201826について、すべて教えてください」
FHIRからOMOPへの解決 → fhir_resolve
「FHIRのSNOMEDコード44054006をOMOPに解決してください。どのテーブルに入りますか?」
CodeableConcept → fhir_resolve_codeable_concept
「このCodeableConceptにはSNOMED 44054006とICD-10 E11.9の両方があります。OMOPにはどちらを使うべきですか?」
類似概念を検索 → find_similar_concepts
「『Type 2 diabetes mellitus』に類似する概念は何ですか?」
設定
環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
OMOPHUB_API_KEY | ✅ | OMOPHub APIキー |
OMOPHUB_BASE_URL | カスタムAPIベースURL(デフォルト:https://api.omophub.com/v1) | |
OMOPHUB_LOG_LEVEL | debug · info · warn · error(デフォルト:info) | |
OMOPHUB_ANALYTICS_OPTOUT | true に設定すると、分析用ヘッダーを無効にします | |
OMOPHUB_USER_AGENT_SUFFIX | omophub-mcp/<version> に追加する任意のデプロイ識別子(デフォルト:なし) | |
MCP_TRANSPORT | stdio(デフォルト)または http | |
MCP_PORT | HTTPサーバーのポート(デフォルト:3100、http トランスポートでのみ使用) | |
HEALTH_PORT | stdioモードのスタンドアロンヘルスエンドポイント用ポート(デフォルト:無効) |
CLI引数
# Stdio mode (default)
npx @omophub/omophub-mcp --api-key=oh_your_key --base-url=https://custom.api.com/v1
# HTTP mode
npx @omophub/omophub-mcp --transport=http --port=3100 --api-key=oh_your_key
# Stdio mode with standalone health endpoint
npx @omophub/omophub-mcp --api-key=oh_your_key --health-port=8080
ヘルスエンドポイント(Docker / Kubernetes)
HTTPモードでは、MCPエンドポイントと同じポートの /health でヘルスエンドポイントを利用できます。
npx @omophub/omophub-mcp --transport=http --port=3100 --api-key=oh_your_key
curl http://localhost:3100/health
# → {"status":"ok","version":"1.5.0","uptime_seconds":42}
stdioモードでは、スタンドアロンのヘルスエンドポイントに --health-port を使用してください。
HEALTH_PORT=8080 OMOPHUB_API_KEY=oh_your_key npx @omophub/omophub-mcp
curl http://localhost:8080/health
Dockerイメージは、ヘルスチェックが組み込まれたポート3100のHTTPモードをデフォルトで使用します。
開発
git clone https://github.com/OMOPHub/omophub-mcp.git
cd omophub-mcp
npm install
npm run build
npm test
ローカルで実行する場合:
OMOPHUB_API_KEY=oh_your_key npx tsx src/index.ts
トラブルシューティング
| エラー | 解決方法 |
|---|---|
API key required | 環境またはMCP設定で OMOPHUB_API_KEY を設定してください |
Authentication failed | APIキーが無効か、有効期限切れの可能性があります。新しいキーを生成してください |
Rate limit exceeded | 自動再試行が組み込まれています。上限を引き上げるには、プランをアップグレードしてください |
| ツールが表示されない | AIクライアントを再起動し、npx @omophub/omophub-mcp がエラーなく実行されることを確認して、設定パスを確認してください |
リンク
ライセンス
MIT - LICENSEを参照
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。