OMOPHub MCP Server
OfficialThe OMOPHub MCP Server provides AI agents with instant access to 10M+ OMOP medical concepts across SNOMED CT, ICD-10, RxNorm, LOINC, and 100+ other vocabularies — no local database setup required.
Search & Discovery
Concept search (
search_concepts) — Find concepts by name, synonym, or clinical term, with filtering by vocabulary, domain, and standard statusSemantic/natural language search (
semantic_search) — Use everyday language (e.g., "heart attack") to find clinical concepts via neural embeddingsFind similar concepts (
find_similar_concepts) — Discover related concepts using semantic, lexical, or hybrid similarity algorithms
Concept Lookup
Get concept details (
get_concept) — Retrieve full metadata for a known concept ID: name, vocabulary, domain, class, valid dates, and synonymsLook up by vocabulary code (
get_concept_by_code) — Resolve a code like ICD-10E11.9or SNOMED44054006directly to its OMOP concept
Mapping & Hierarchy
Cross-vocabulary mapping (
map_concept) — Map concepts between vocabularies (e.g., SNOMED to ICD-10CM or RxNorm)Hierarchy navigation (
get_hierarchy) — Traverse ancestors and descendants of any concept, essential for phenotype and cohort definitionsAll-in-one exploration (
explore_concept) — Get details, hierarchy, and cross-vocabulary mappings in a single consolidated call
FHIR Integration
FHIR-to-OMOP resolution (
fhir_resolve) — Resolve a FHIR coded value (system URI + code) to the correct OMOP standard concept and CDM target tableFHIR CodeableConcept resolution (
fhir_resolve_codeable_concept) — Resolve a multi-coding FHIR CodeableConcept to the best OMOP match using OHDSI vocabulary preference ordering
Utilities
List vocabularies (
list_vocabularies) — Browse all supported terminology systems with concept counts and metadataGuided prompts — Built-in workflows for phenotype concept set building and medical code lookup & validation
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OMOPHub MCP ServerMap ICD-10 code E11.9 to SNOMED"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Why OMOPHub MCP?
Working with medical vocabularies today means downloading multi-gigabyte CSV files, loading them into a local database, and writing SQL to find what you need. Every time.
OMOPHub MCP Server gives your AI assistant instant access to the entire OHDSI ATHENA vocabulary. No database setup, no CSV wrangling, no context switching. Just ask.
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.Use cases:
Concept lookup - Find OMOP concept IDs for clinical terms in seconds
Cross-vocabulary mapping - Map between ICD-10, SNOMED, RxNorm, LOINC, and 120+ vocabularies
Hierarchy navigation - Explore ancestors and descendants for phenotype definitions
Concept set building - Let your AI agent assemble complete concept sets for cohort definitions
Code validation - Verify medical codes and check their standard mappings
Related MCP server: snowstorm-mcp-server
Quick Start
1. Get an API Key
Sign up at omophub.com → create an API key in your dashboard.
2. Add to Your AI Client
Open Claude Desktop settings > "Developer" tab > "Edit Config". Add to claude_desktop_config.json:
{
"mcpServers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}claude mcp add omophub -- npx -y @omophub/omophub-mcp
# Then set OMOPHUB_API_KEY in your environmentOpen the command palette and choose "Cursor Settings" > "MCP" > "Add new global MCP server". Add to .cursor/mcp.json:
{
"mcpServers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}Add to .vscode/mcp.json:
{
"servers": {
"omophub": {
"command": "npx",
"args": ["-y", "@omophub/omophub-mcp"],
"env": {
"OMOPHUB_API_KEY": "oh_your_key_here"
}
}
}
}Run the MCP server as an HTTP service that clients connect to via URL:
# 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/healthConnect MCP clients to / or /mcp. Useful for centralized deployments where multiple AI agents share one server instance.
Connect directly to the OMOPHub-hosted MCP server - no installation required. Each client authenticates with their own API key via the Authorization header:
Claude Code:
claude mcp add omophub --transport http \
-H "Authorization: Bearer oh_your_key_here" \
https://mcp.omophub.comVS 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" }
}
}
}Note: Claude Desktop's Custom Connectors UI only supports OAuth and cannot send custom headers. Use the npx setup instead.
# 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=stdio3. Start Asking
"What's the OMOP concept ID for type 2 diabetes?"
"Map ICD-10 code E11.9 to SNOMED"
"Show me all descendants of Diabetes mellitus in SNOMED"
Available Tools
Tool | What it does |
| Search for medical concepts by name or clinical term across all vocabularies |
| Get detailed info about a specific OMOP concept by |
| Look up a concept using a vocabulary-specific code (e.g., ICD-10 |
| Map a concept to equivalent concepts in other vocabularies (paginated — see note below) |
| Navigate concept hierarchy - ancestors, descendants, or both |
| List available medical vocabularies with statistics |
| Search using natural language with neural embeddings (understands clinical meaning) |
| Find concepts similar to a reference concept, name, or description |
| Get concept details, hierarchy, and cross-vocabulary mappings in one call |
| Resolve a FHIR coded value (incl. administrative codes via the HL7 FHIR-to-OMOP IG ConceptMaps) to its OMOP standard concept and CDM target table |
| Resolve a FHIR CodeableConcept — best match by OHDSI vocabulary preference, honoring |
Resources
URI | Description |
| Full vocabulary catalog with statistics |
| Details for a specific vocabulary |
Prompts
Prompt | Description |
| Guided workflow to build a concept set for a clinical phenotype |
| Look up and validate a medical code with mappings and hierarchy |
Example Prompts
Find a concept → search_concepts
"Search for metformin in RxNorm"
Cross-vocabulary mapping → map_concept
"I have SNOMED concept 201826 - what's the ICD-10 code?"
Build a concept set → search_concepts → get_hierarchy → map_concept
"Help me build a concept set for Type 2 diabetes including all descendants"
Completeness matters here.
map_conceptreturns one page at a time (page_size1-200, default 100). A widely-used drug ingredient can have well over a thousand NDC mappings, so a single call is a sample, not the answer. Checkhas_morein the response and keep incrementingpageuntil it isfalse— otherwise the concept set looks complete while silently missing codes.Use
find_similar_conceptsfor exploration, not for this: it is ranked embedding similarity, so it has no notion of set membership and cannot be exhaustive no matter how largepage_sizeis.
Validate a code → get_concept_by_code → map_concept
"Is ICD-10 code E11.9 valid? What does it map to in SNOMED?"
Semantic search → semantic_search
"Find concepts related to 'heart attack'"
Explore a concept → explore_concept
"Give me everything about SNOMED concept 201826"
FHIR-to-OMOP resolution → fhir_resolve
"Resolve FHIR SNOMED code 44054006 to OMOP — what table does it go in?"
CodeableConcept → fhir_resolve_codeable_concept
"This CodeableConcept has both SNOMED 44054006 and ICD-10 E11.9 — which should I use for OMOP?"
Find similar → find_similar_concepts
"What concepts are similar to 'Type 2 diabetes mellitus'?"
Configuration
Environment Variables
Variable | Required | Description |
| ✅ | Your OMOPHub API key |
| Custom API base URL (default: | |
|
| |
| Set to | |
| Optional deployment identifier appended to | |
|
| |
| HTTP server port (default: | |
| Port for standalone health endpoint in stdio mode (default: disabled) |
CLI Arguments
# 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=8080Health Endpoint (Docker / Kubernetes)
In HTTP mode, the health endpoint is available at /health on the same port as the MCP endpoint:
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}In stdio mode, use --health-port for a standalone health endpoint:
HEALTH_PORT=8080 OMOPHUB_API_KEY=oh_your_key npx @omophub/omophub-mcp
curl http://localhost:8080/healthThe Docker image defaults to HTTP mode on port 3100 with health checks built in.
Development
git clone https://github.com/OMOPHub/omophub-mcp.git
cd omophub-mcp
npm install
npm run build
npm testRun locally:
OMOPHUB_API_KEY=oh_your_key npx tsx src/index.tsTroubleshooting
Error | Solution |
| Set |
| API key may be invalid or expired - generate a new one |
| Automatic retries are built in. For higher limits, upgrade your plan |
Tools not appearing | Restart your AI client, verify |
Links
License
MIT - see LICENSE
Available Tools
11 toolsexplore_conceptA
Get a comprehensive view of a medical concept in one call: detailed info, ancestors/descendants hierarchy, and cross-vocabulary mappings. Use this instead of calling get_concept + get_hierarchy + map_concept separately. Ideal for understanding what a concept is, where it sits in the classification tree, and how it maps to other coding systems.
| Name | Required | Description | Default |
|---|---|---|---|
| concept_id | Yes | The OMOP concept_id to explore | |
| hierarchy_levels | No | How many hierarchy levels to fetch (1-5, default 2) | |
| include_mappings | No | Include cross-vocabulary mappings. Default true. | |
| include_hierarchy | No | Include ancestors and descendants. Default true. | |
| mappings_page_size | No | Maximum mappings to fetch (1-200, default 100). This is an overview tool — for a complete code list use map_concept and page through it. | |
| target_vocabularies | No | Comma-separated vocabulary IDs to filter mappings. Examples: 'ICD10CM', 'SNOMED'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the aggregated nature (combines three operations), and labels itself as an overview tool, but doesn't explicitly state read-only behavior, error handling, or potential for large responses. The verb 'Get' implies safety, but not explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, first is a clear statement of function and components; second gives usage guidance. No redundant words or irrelevant details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex with 6 parameters and no output schema. The description explains the combined nature and the overview scope, and the schema covers all parameters. However, it lacks a detailed explanation of the response structure or any explicit limitations on result size beyond parameter descriptions, so not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with thorough parameter descriptions including defaults and ranges. The main description adds no parameter-specific semantics, but the schema fully compensates, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Get', resource 'medical concept', and clearly enumerates the three components (detailed info, ancestors/descendants, mappings). It explicitly distinguishes from siblings by recommending replacing get_concept + get_hierarchy + map_concept, making purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use this instead of calling get_concept + get_hierarchy + map_concept separately' and provides ideal use cases ('Ideal for understanding...'), giving clear when-to-use guidance. It also indirectly says this is an overview tool, with additional exclusion note in the mappings_page_size parameter description recommending map_concept for complete code lists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fhir_resolveA
Resolve a FHIR coded value (system URI + code) to its OMOP standard concept and CDM target table. Supports text-only input via semantic search fallback and optional Phoebe recommendations. Examples: system='http://snomed.info/sct' code='44054006' for Type 2 diabetes, or display='heart attack' for text-only resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Code value from the FHIR Coding | |
| system | No | FHIR code system URI (e.g. http://snomed.info/sct, http://loinc.org) | |
| display | No | Display text for semantic search fallback when code is unavailable | |
| on_unmapped | No | Behavior when nothing resolves: 'error' (default, 404) or 'sentinel' (return a concept_id 0 record) | |
| resource_type | No | FHIR resource type (Condition, Observation, MedicationRequest, Procedure, etc.) | |
| vocabulary_id | No | Direct OMOP vocabulary_id (e.g. SNOMED, ICD10CM), bypasses URI resolution | |
| include_quality | No | Include mapping quality signal (high/medium/low/manual_review) | |
| include_recommendations | No | Include Phoebe-recommended related concepts |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses fallback behavior (semantic search), optional recommendations, and unmapped handling, but does not explain output format (e.g., single vs. multiple results), ordering, or error behavior beyond the on_unmapped parameter. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is relatively concise with three sentences and an example. The main purpose is front-loaded, and the example aids clarity. Minor verbosity could be trimmed, but overall it is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input parameters and general behavior but lacks details on the output structure (e.g., what fields are returned for the resolved concept and target table). With no output schema, this gap is notable. Also, given the sibling list, more contextual differentiation would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents parameters. The description adds value by explaining the 'display' parameter's role in semantic search fallback and the 'include_recommendations' parameter's relation to Phoebe recommendations. This extra context enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it resolves FHIR coded values to OMOP standard concepts and CDM target tables, with examples for system/code and text-only input. However, it does not explicitly distinguish itself from the sibling 'fhir_resolve_codeable_concept', which may have similar functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples of when to use the tool (e.g., system/code or text-only display) but lacks explicit guidance on when to choose this tool over siblings like 'map_concept' or 'fhir_resolve_codeable_concept'. Usage context is implied but not clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fhir_resolve_codeable_conceptA
Resolve a FHIR CodeableConcept with multiple codings. Picks the best match per OHDSI vocabulary preference (SNOMED > RxNorm > LOINC > CVX > ICD-10). Falls back to the text field via semantic search if no coding resolves.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | CodeableConcept.text — semantic fallback if no coding resolves | |
| coding | Yes | Array of FHIR Coding entries from the CodeableConcept | |
| on_unmapped | No | Behavior when nothing resolves: 'error' (default, 404) or 'sentinel' (concept_id 0 record) | |
| resource_type | No | FHIR resource type | |
| include_quality | No | ||
| include_recommendations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses vocabulary preference hierarchy, semantic search fallback, unmapped behavior options (error or sentinel), and boolean flags for recommendations and quality. However, it does not mention return format or potential side effects like HTTP status codes or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the core purpose. Every sentence adds distinct value: first sentence states main action and preference, second sentence covers fallback and behavior. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Tool has 6 parameters and no output schema. Description covers core logic but omits what the tool returns (e.g., concept ID, error details). Without an output schema, the agent lacks clarity on result structure. Also does not explain the resource_type parameter's role. Could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, but description adds substantial meaning: explains vocabulary preference order, the role of user_selected to override preference, fallback logic using text, and the purpose of on_unmapped, include_recommendations, and include_quality. This goes well beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states it resolves a FHIR CodeableConcept with multiple codings, specifies vocabulary preference order (SNOMED > RxNorm > LOINC > CVX > ICD-10), and mentions fallback to text via semantic search. This is a specific verb-resource combination that distinguishes it from siblings like fhir_resolve or map_concept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when handling CodeableConcepts with multiple codings and notes the fallback behavior, but does not proactively state when to use this tool versus alternatives (e.g., simpler fhir_resolve, or search_concepts). No explicit when-not-to-use or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_similar_conceptsA
Find medical concepts similar to a reference concept, name, or natural language query. Supports three algorithms: 'semantic' (neural embeddings — best for meaning), 'lexical' (text matching — best for typos), 'hybrid' (combined — default). Provide exactly ONE of: concept_id, concept_name, or query. Use this to explore related concepts, find alternative codes, or build phenotype concept sets. Tip: For drug vocabularies like RxNorm, use drug class names ('ACE inhibitors', 'beta blockers', 'antihypertensives') rather than symptom descriptions ('medications for high blood pressure') — the embedding model aligns better with clinical terminology than lay language.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Find concepts matching this natural language description | |
| algorithm | No | Similarity algorithm: 'semantic' (meaning), 'lexical' (text), 'hybrid' (both). Default 'hybrid'. | hybrid |
| page_size | No | Number of results (1-1000, default 20) | |
| concept_id | No | Find concepts similar to this OMOP concept ID | |
| domain_ids | No | Comma-separated domain IDs to filter results. Examples: 'Condition', 'Drug'. | |
| concept_name | No | Find concepts similar to this concept name | |
| vocabulary_ids | No | Comma-separated vocabulary IDs to filter results. Examples: 'SNOMED', 'ICD10CM'. | |
| similarity_threshold | No | Minimum similarity score (0.0-1.0). Default 0.7. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It explains the three algorithms with trade-offs ('semantic' best for meaning, 'lexical' best for typos, 'hybrid' default), enforces the exactly-one-input constraint, and offers a practical tip about drug vocabulary usage. It does not describe output format or edge cases, but for a read-only similarity search this is a solid level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the core function, uses semicolons and em-dashes to pack algorithm details, and remains under three sentences. The final tip is extra but earns its place by providing practical guidance. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no output schema, the description covers the main decision points: algorithm selection, the three input modes, and intended use cases. Filters like domain_ids and vocabulary_ids are left to the schema, which adequately documents them. It could mention default thresholds or result ranking, but overall it is sufficiently complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds meaningful value beyond the schema by explaining algorithm behavior, clarifying that query is natural language, and emphasizing the exactly-one-of constraint. The drug vocabulary tip also enriches parameter semantics, helping agents choose appropriate inputs for RxNorm concepts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find medical concepts similar to a reference concept, name, or natural language query.' It specifies the verb (Find), resource (medical concepts), and input types (concept_id, concept_name, query). It also distinguishes from siblings by emphasizing similarity search and naming three algorithms, plus concrete use cases like exploring related concepts and building phenotype sets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Use this to explore related concepts, find alternative codes, or build phenotype concept sets.' However, it does not explicitly mention when not to use this tool or name alternatives like get_concept or search_concepts, even though sibling tools exist. The guidance is adequate but lacks direct exclusion or comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conceptA
Get detailed information about a specific OMOP concept by its numeric concept_id. Returns the concept name, vocabulary, domain, concept class, standard status, valid dates, and synonyms. Use this when you already have a concept_id and need its details.
| Name | Required | Description | Default |
|---|---|---|---|
| concept_id | Yes | The OMOP concept_id (numeric identifier) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It lists the returned fields but does not disclose error handling (e.g., behavior for invalid concept_id), rate limits, or any side effects. For a simple retrieval tool, it is adequate but has gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first defines the action and returns, second states use case. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 required param, no output schema), the description covers the purpose and return fields reasonably. Minor gaps: no mention of error handling or full return structure (e.g., whether concept_id is included in response).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description of concept_id as 'The OMOP concept_id (numeric identifier)'. The description reinforces it is numeric but adds no additional semantic detail beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves detailed information about a specific OMOP concept by its numeric concept_id, listing specific returned fields. It distinguishes itself from sibling tools like search_concepts or explore_concept by specifying that it requires an exact concept_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you already have a concept_id and need its details,' providing clear usage context. However, it does not mention when not to use it or suggest alternative tools for searching or exploring concepts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_concept_by_codeA
Look up an OMOP concept using a vocabulary-specific code and vocabulary ID. Both parameters are required to avoid ambiguity - the same code can exist in multiple vocabularies (e.g., 'E11' exists in both ICD10CM and ICD10). If multiple concepts share the same code within a vocabulary, all matches are returned - prefer the one with standard_concept='S'.
| Name | Required | Description | Default |
|---|---|---|---|
| concept_code | Yes | The vocabulary-specific code. Examples: 'E11.9' (ICD-10), '44054006' (SNOMED), '4850' (LOINC) | |
| vocabulary_id | Yes | The vocabulary system. Examples: 'ICD10CM', 'SNOMED', 'RxNorm', 'LOINC', 'HCPCS', 'NDC' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It discloses that same code can exist across vocabularies and that multiple matches may be returned. For a simple lookup, this is adequate, though it does not mention exact match behavior or response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. Front-loaded with tool purpose, then important details. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description mentions the preferred result (standard_concept='S') but lacks details on return format or edge cases. Still, for a lookup tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions for both parameters. The description reinforces the necessity of both parameters and clarifies ambiguity, adding marginal value beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Look up an OMOP concept using a vocabulary-specific code and vocabulary ID.' It specifies verb (look up), resource (OMOP concept), and required parameters, distinguishing it from siblings like search_concepts or get_concept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description explains that both parameters are required to avoid ambiguity and provides concrete example (E11 in ICD10CM and ICD10). It advises preferring standard_concept='S' when multiple matches exist. While it doesn't explicitly state when not to use this tool, it provides clear context for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hierarchyA
Navigate the vocabulary hierarchy for a concept. Use direction='up' for ancestors (broader terms like 'Diabetes mellitus' → 'Metabolic disease'), direction='down' for descendants (narrower terms, essential for building concept sets in phenotype definitions), or direction='both' for full hierarchical context. Results are capped at max_results nodes (default 200). If truncated, the response will indicate total available count so you can narrow with vocabulary_ids or reduce max_levels.
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | Hierarchy direction: 'up' for ancestors, 'down' for descendants, 'both' for full context (default: 'both') | both |
| concept_id | Yes | The OMOP concept_id | |
| max_levels | No | Maximum levels to traverse (default 5 for 'up', 10 for 'down', 5/3 for 'both') | |
| max_results | No | Maximum number of nodes to return (1-200, default 200). Use a smaller value for broad concepts. | |
| vocabulary_ids | No | Comma-separated vocabulary IDs to filter results. Leave empty for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses result capping ('capped at max_results nodes default 200'), truncation behavior ('If truncated, the response will indicate total available count'), and provides remediation guidance ('narrow with vocabulary_ids or reduce max_levels'). This adds behavioral context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, each sentence adds meaningful guidance. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers direction semantics, result limits, truncation handling, and narrowing strategies. While it lacks explicit return-structure details, the absence of an output schema is partially mitigated by the phrase 'Results are capped at max_results nodes', implying a list of nodes. Overall sufficient for a 5-param hierarchy tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description enriches parameters by providing real-world examples for direction, explaining the purpose of 'down' for concept sets, and explaining the interplay between max_results, vocabulary_ids, and max_levels for dealing with truncation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('navigate') and resource ('vocabulary hierarchy for a concept') with concrete examples (e.g., 'Diabetes mellitus' → 'Metabolic disease'). This clearly distinguishes it from sibling tools like search_concepts or get_concept.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use each direction value ('direction=''up'' for ancestors... down for descendants... both for full context') and highlights a key use case ('essential for building concept sets in phenotype definitions'). It does not explicitly name alternative tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vocabulariesA
List all available medical vocabularies in the OMOP standardized vocabulary system with concept counts and metadata. Use this to understand what terminology systems are available (SNOMED CT, ICD-10-CM, RxNorm, LOINC, etc.) and their scope.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Optional search term to filter vocabularies by name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It correctly indicates this is a read-only listing operation with no destructive side effects. It mentions the output includes concept counts and metadata, giving a clear picture of what to expect. Could add more detail about pagination or sorting, but for a simple list tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no wasted words. The first sentence states the action and output, the second gives usage guidance. Each sentence serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description is complete. It conveys the scope (medical vocabularies), output details (concept counts and metadata), and usage context. No further information is needed for an agent to use this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter 'search' with a max length of 200, and schema coverage is 100%. The description does not provide additional semantic detail beyond the schema, such as supported search patterns or case sensitivity. The baseline of 3 is appropriate since the schema already documents the parameter sufficiently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all available medical vocabularies with concept counts and metadata. It gives specific examples (SNOMED CT, ICD-10-CM) and the verb 'list' with resource 'vocabularies' is unambiguous. Sibling tools like 'search_concepts' or 'get_hierarchy' are distinctly different, so this stands out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: 'Use this to understand what terminology systems are available and their scope.' It implies a discovery purpose. While it doesn't explicitly state when not to use or list alternatives, the context from sibling tools makes it clear this is for browsing vocabularies, not concepts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_conceptA
Find mappings FROM a source concept TO equivalent concepts in other vocabularies. The concept_id you provide is always the SOURCE — results show what it maps TO. Returns cross-vocabulary mappings with relationship types and mapping quality. If no mappings exist, the response explicitly states 'No mappings found' with mapped=false in JSON — never returns ambiguous empty results. Example: provide a SNOMED concept_id and filter by target_vocabularies='ICD10CM' to get the ICD-10 equivalent. PAGINATED: results are one page of a possibly larger set — total_mappings is the full count and has_more says whether further pages exist. When building a complete code list, keep incrementing page until has_more is false; a single call is not the whole answer.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based, default 1) | |
| page_size | No | Mappings per page (1-200, default 100). A concept can have thousands — check has_more in the response and increment page until it is false, otherwise your code list will be incomplete. | |
| concept_id | Yes | The source OMOP concept_id to map FROM | |
| target_vocabularies | No | Comma-separated vocabulary IDs to map TO. Examples: 'ICD10CM', 'SNOMED', 'RxNorm'. Omit to see all available mappings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses response structure: 'Returns cross-vocabulary mappings with relationship types and mapping quality.' Also reveals edge case behavior: 'If no mappings exist, the response explicitly states "No mappings found" with mapped=false — never returns ambiguous empty results.' Pagination behavior is disclosed in detail. No annotations provided, so description carries full burden and does it well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but front-loaded with the core purpose in the first sentence. Subsequent sentences add valuable behavioral and usage details. It repeats pagination guidance already in the schema, but the whole description remains readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers essential context: what the tool does, how to use it, empty-result behavior, and pagination. It gives enough for an agent to call and interpret results correctly. It also provides a practical example.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters (100% coverage), but the description adds a concrete example and clarifies the directionality of concept_id ('always the SOURCE — results show what it maps TO'). This reinforces the parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Find mappings FROM a source concept TO equivalent concepts in other vocabularies' — specific verb, resource, and direction. The example with SNOMED to ICD10CM further clarifies. It distinguishes from siblings like 'find_similar_concepts' (similarity vs exact mappings).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete example usage (SNOMED concept_id filtered by target_vocabularies='ICD10CM') and explicit pagination instructions ('keep incrementing page until has_more is false'). It does not explicitly name alternatives but clearly describes when this tool is appropriate for cross-vocabulary mapping lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_conceptsA
Search for medical concepts across OHDSI standardized vocabularies by name, synonym, or clinical term. Returns matching concepts with IDs, names, vocabulary, domain, and standard status. Use this when you need to find the OMOP concept ID for a medical term. Examples: 'type 2 diabetes', 'metformin 500mg', 'systolic blood pressure', 'HbA1c'.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based, default 1) | |
| query | Yes | The medical term or concept name to search for | |
| page_size | No | Number of results to return (1-200, default 10) | |
| domain_ids | No | Comma-separated domain IDs to filter by. Examples: 'Condition', 'Drug', 'Measurement', 'Procedure'. Leave empty for all domains. | |
| vocabulary_ids | No | Comma-separated vocabulary IDs to filter by. Examples: 'SNOMED', 'ICD10CM', 'RxNorm', 'LOINC'. Leave empty to search all vocabularies. | |
| standard_concept | No | Filter by standard concept status: 'S' for Standard, 'C' for Classification. Omit to search all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool returns (IDs, names, vocabulary, domain, standard status) and the search scope, which is useful. However, it does not mention whether the operation is read-only (though implied by 'search'), how pagination works, or any limitations on search behavior. This is adequate for a search tool but leaves some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences and a list of examples, and it front-loads the primary purpose. The structure is efficient and easy to scan. However, there is a typographical issue ('OHCPD' instead of likely 'OHDSI'), which slightly undermines clarity and precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential context for a search tool: what it searches, what it returns, and when to use it. It provides examples and relies on the well-documented schema for parameter details. Since there is no output schema, the description's mention of return fields is important. It could be improved by stating default sorting or pagination behavior, but for a straightforward search/filter tool, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for all 6 parameters, including descriptions for query, page, page_size, domain_ids, vocabulary_ids, and standard_concept. The tool description adds example queries but does not add new meaning to the parameters themselves. Since schema coverage is high, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: searching for medical concepts across standardized vocabularies by name, synonym, or clinical term. It specifies the resource (OMOP concepts) and the action (search), and distinguishes from sibling tools like get_concept or get_concept_by_code by emphasizing term-based lookup and the return of concept IDs and metadata. The examples ('type 2 diabetes', 'metformin 500mg') further clarify the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when you need to find the OMOP concept ID for a medical term,' which provides clear context for when to invoke this tool. It does not explicitly name alternatives or when not to use it, but the use case is stated. This is sufficient but lacks the exclusionary guidance seen in the calibration example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_searchA
Search for medical concepts using natural language with neural embeddings. Unlike keyword search, semantic search understands clinical meaning — 'heart attack' finds 'Myocardial infarction', 'high blood sugar' finds 'Hyperglycemia'. Returns concepts ranked by similarity score. Use this when the user describes symptoms, conditions, or treatments in everyday language rather than exact medical terminology.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural language description of the medical concept to find | |
| page_size | No | Number of results to return (1-100, default 10) | |
| threshold | No | Minimum similarity score (0.0-1.0). Higher = stricter matching. Default 0.5. | |
| domain_ids | No | Comma-separated domain IDs to filter by. Examples: 'Condition', 'Drug', 'Measurement'. | |
| vocabulary_ids | No | Comma-separated vocabulary IDs to filter by. Examples: 'SNOMED', 'ICD10CM', 'RxNorm'. | |
| standard_concept | No | Filter by standard concept status: 'S' for Standard, 'C' for Classification. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explains the semantic matching behavior, notes that results are 'ranked by similarity score,' and gives illustrative examples. It does not cover edge cases or system limits, but the core behavioral traits are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, followed by illustrative examples and usage guidance. Every sentence adds value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters and no output schema. The description gives sufficient context for a semantic search tool, including what it returns ('concepts ranked by similarity score') and when to use it. It lacks detailed output structure, but that is not critical for understanding invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all 6 parameters, so the description does not need to compensate. The description reinforces the query semantics with examples but does not add significant new detail beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search for medical concepts using natural language with neural embeddings.' It differentiates from keyword search with concrete examples ('heart attack' finds 'Myocardial infarction'), making it distinct from sibling tools like search_concepts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when the user describes symptoms, conditions, or treatments in everyday language rather than exact medical terminology.' This gives clear when-to-use guidance and implies when-not-to-use, though it does not name specific alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
6 tool updates
v1.6.0- Changed
explore_concept1 field changed- added
Input schema / properties / mappings_page_sizeAdded value: +{ + "default": 100, + "description": "Maximum mappings to fetch (1-200, default 100). This is an overview tool — for a complete code list use map_concept and page through it.", + "maximum": 200, + "minimum": 1, + "type": "number" +}
- Changed
find_similar_concepts2 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results (1-100, default 20)"New value: +"Number of results (1-1000, default 20)" - changed
Input schema / properties / page_size / maximumPrevious value: -100New value: +1000
- Changed
get_hierarchy3 fields changed- changed
Input schema / properties / max_results / defaultPrevious value: -500New value: +200 - changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum number of nodes to return (1-500, default 500). Use a smaller value for broad concepts."New value: +"Maximum number of nodes to return (1-200, default 200). Use a smaller value for broad concepts." - changed
Input schema / properties / max_results / maximumPrevious value: -500New value: +200
- Changed
map_concept2 fields changed- added
Input schema / properties / pageAdded value: +{ + "default": 1, + "description": "Page number (1-based, default 1)", + "minimum": 1, + "type": "number" +} - added
Input schema / properties / page_sizeAdded value: +{ + "default": 100, + "description": "Mappings per page (1-200, default 100). A concept can have thousands — check has_more in the response and increment page until it is false, otherwise your code list will be incomplete.", + "maximum": 200, + "minimum": 1, + "type": "number" +}
- Changed
search_concepts2 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results to return (1-50, default 10)"New value: +"Number of results to return (1-200, default 10)" - changed
Input schema / properties / page_size / maximumPrevious value: -50New value: +200
- Changed
semantic_search2 fields changed- changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results to return (1-50, default 10)"New value: +"Number of results to return (1-100, default 10)" - changed
Input schema / properties / page_size / maximumPrevious value: -50New value: +100
11 tool updates
v1.5.0- First observed
explore_concept - First observed
fhir_resolve - First observed
fhir_resolve_codeable_concept - First observed
find_similar_concepts - First observed
get_concept - First observed
get_concept_by_code - First observed
get_hierarchy - First observed
list_vocabularies - First observed
map_concept - First observed
search_concepts - First observed
semantic_search
TDQS
Each tool has a clearly distinct purpose: explore_concept combines multiple operations, FHIR tools handle coding, get/search tools address different lookups, and list_vocabularies is for metadata. No overlap.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., explore_concept, fhir_resolve, get_hierarchy), making the API predictable.
With 11 tools covering concept lookup, search, FHIR resolution, hierarchy, mapping, and vocabulary listing, the count is well-scoped for a medical terminology server.
The tool surface covers all essential operations for exploring OMOP vocabularies: individual lookups, search, mapping, hierarchy, FHIR integration, and vocabulary metadata. No obvious gaps.
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 Connectors
Diagnoses, drugs & lab codes: ICD-11, SNOMED, LOINC, RxNorm, MeSH, ATC, CID-10. 33 tools, MIT.
33112NIH Clinical Tables: ICD-10/9, RxTerms, LOINC, NPI, conditions search. Keyless.
Connect AI clients to biomedical data and tools.
Medical RAG: semantic search for clinical guidelines, drug interactions, diagnoses & EHR data.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides keyless access to NIH clinical data including ICD-10/9, RxTerms, LOINC, NPI, and conditions search, allowing AI agents to query medical terminologies without authentication.MIT

snowstorm-mcp-serverofficial
AlicenseNot gradedqualityBmaintenanceEnables AI assistants to look up, search, validate, navigate hierarchies, and expand value sets for SNOMED CT clinical terminology through the Model Context Protocol.8Apache 2.0
vClinic MCP Serverofficial
FlicenseNot gradedqualityCmaintenanceEnables AI agents to manage virtual clinic data including patients, visits, diagnoses, treatments, lab/radiology orders, and search medical literature and internal knowledge base.-- FlicenseNot gradedqualityDmaintenanceEnables LLMs and AI agents to query a biomedical knowledge graph stored in RedisGraph, with tools for concept search, synonym enrichment, and study variable discovery through semantic relationships.-
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/OMOPHub/omophub-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server