omophub
Registry code: 0608fb72a00308ba
Hosted remote MCP server giving AI agents access to the OHDSI OMOP vocabularies: 11M+ concepts, SNOMED CT, ICD-10, LOINC, RxNorm. Concept search, mappings, hierarchy and FHIR-to-OMOP resolution. Auth: OMOPHub API key (Bearer); free tier available.
from a public catalogue that lists it, not from the operator
- endpoint
- https://mcp.omophub.com
- protocol
- http-sse ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is omophub live?
- Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
- Is omophub free to use?
- Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
- What tools does omophub have?
- 11 tools: get_hierarchy, search_concepts, semantic_search, get_concept_by_code, explore_concept, map_concept, fhir_resolve, fhir_resolve_codeable_concept, ….
- Is omophub safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 100%· all time 100%
last good check
of 11 tools
- unknown → live
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
list_vocabularies auth-required 1h ago
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "search": { "type": "string", "maxLength": 200, "description": "Optional search term to filter vocabularies by name" } } }arguments 11 linesget_hierarchy unknown never probed
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "concept_id" ], "properties": { "direction": { "enum": [ "up", "down", "both" ], "type": "string", "default": "both", "description": "Hierarchy direction: 'up' for ancestors, 'down' for descendants, 'both' for full context (default: 'both')" }, "concept_id": { "type": "number", "description": "The OMOP concept_id" }, "max_levels": { "type": "number", "description": "Maximum levels to traverse (default 5 for 'up', 10 for 'down', 5/3 for 'both')" }, "max_results": { "type": "number", "default": 200, "maximum": 200, "minimum": 1, "description": "Maximum number of nodes to return (1-200, default 200). Use a smaller value for broad concepts." }, "vocabulary_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated vocabulary IDs to filter results. Leave empty for all." } } }arguments 39 linessearch_concepts unknown never probed
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'.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "query" ], "properties": { "page": { "type": "number", "default": 1, "minimum": 1, "description": "Page number (1-based, default 1)" }, "query": { "type": "string", "maxLength": 500, "minLength": 1, "description": "The medical term or concept name to search for" }, "page_size": { "type": "number", "default": 10, "maximum": 200, "minimum": 1, "description": "Number of results to return (1-200, default 10)" }, "domain_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated domain IDs to filter by. Examples: 'Condition', 'Drug', 'Measurement', 'Procedure'. Leave empty for all domains." }, "vocabulary_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated vocabulary IDs to filter by. Examples: 'SNOMED', 'ICD10CM', 'RxNorm', 'LOINC'. Leave empty to search all vocabularies." }, "standard_concept": { "enum": [ "S", "C" ], "type": "string", "description": "Filter by standard concept status: 'S' for Standard, 'C' for Classification. Omit to search all." } } }arguments 46 linessemantic_search unknown never probed
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "query" ], "properties": { "query": { "type": "string", "maxLength": 500, "minLength": 1, "description": "Natural language description of the medical concept to find" }, "page_size": { "type": "number", "default": 10, "maximum": 100, "minimum": 1, "description": "Number of results to return (1-100, default 10)" }, "threshold": { "type": "number", "default": 0.5, "maximum": 1, "minimum": 0, "description": "Minimum similarity score (0.0-1.0). Higher = stricter matching. Default 0.5." }, "domain_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated domain IDs to filter by. Examples: 'Condition', 'Drug', 'Measurement'." }, "vocabulary_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated vocabulary IDs to filter by. Examples: 'SNOMED', 'ICD10CM', 'RxNorm'." }, "standard_concept": { "enum": [ "S", "C" ], "type": "string", "description": "Filter by standard concept status: 'S' for Standard, 'C' for Classification." } } }arguments 47 linesget_concept_by_code unknown never probed
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'.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "vocabulary_id", "concept_code" ], "properties": { "concept_code": { "type": "string", "maxLength": 50, "description": "The vocabulary-specific code. Examples: 'E11.9' (ICD-10), '44054006' (SNOMED), '4850' (LOINC)" }, "vocabulary_id": { "type": "string", "maxLength": 50, "description": "The vocabulary system. Examples: 'ICD10CM', 'SNOMED', 'RxNorm', 'LOINC', 'HCPCS', 'NDC'" } } }arguments 20 linesexplore_concept unknown never probed
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "concept_id" ], "properties": { "concept_id": { "type": "number", "description": "The OMOP concept_id to explore" }, "hierarchy_levels": { "type": "number", "default": 2, "maximum": 5, "minimum": 1, "description": "How many hierarchy levels to fetch (1-5, default 2)" }, "include_mappings": { "type": "boolean", "default": true, "description": "Include cross-vocabulary mappings. Default true." }, "include_hierarchy": { "type": "boolean", "default": true, "description": "Include ancestors and descendants. Default true." }, "mappings_page_size": { "type": "number", "default": 100, "maximum": 200, "minimum": 1, "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." }, "target_vocabularies": { "type": "string", "maxLength": 200, "description": "Comma-separated vocabulary IDs to filter mappings. Examples: 'ICD10CM', 'SNOMED'." } } }arguments 42 linesmap_concept unknown never probed
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "concept_id" ], "properties": { "page": { "type": "number", "default": 1, "minimum": 1, "description": "Page number (1-based, default 1)" }, "page_size": { "type": "number", "default": 100, "maximum": 200, "minimum": 1, "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." }, "concept_id": { "type": "number", "description": "The source OMOP concept_id to map FROM" }, "target_vocabularies": { "type": "string", "maxLength": 200, "description": "Comma-separated vocabulary IDs to map TO. Examples: 'ICD10CM', 'SNOMED', 'RxNorm'. Omit to see all available mappings." } } }arguments 31 linesfhir_resolve unknown never probed
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "code": { "type": "string", "description": "Code value from the FHIR Coding" }, "system": { "type": "string", "description": "FHIR code system URI (e.g. http://snomed.info/sct, http://loinc.org)" }, "display": { "type": "string", "description": "Display text for semantic search fallback when code is unavailable" }, "on_unmapped": { "enum": [ "error", "sentinel" ], "type": "string", "description": "Behavior when nothing resolves: 'error' (default, 404) or 'sentinel' (return a concept_id 0 record)" }, "resource_type": { "type": "string", "description": "FHIR resource type (Condition, Observation, MedicationRequest, Procedure, etc.)" }, "vocabulary_id": { "type": "string", "description": "Direct OMOP vocabulary_id (e.g. SNOMED, ICD10CM), bypasses URI resolution" }, "include_quality": { "type": "boolean", "default": false, "description": "Include mapping quality signal (high/medium/low/manual_review)" }, "include_recommendations": { "type": "boolean", "default": false, "description": "Include Phoebe-recommended related concepts" } } }arguments 44 linesfhir_resolve_codeable_concept unknown never probed
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "coding" ], "properties": { "text": { "type": "string", "description": "CodeableConcept.text — semantic fallback if no coding resolves" }, "coding": { "type": "array", "items": { "type": "object", "required": [ "system", "code" ], "properties": { "code": { "type": "string", "minLength": 1, "description": "Code value" }, "system": { "type": "string", "minLength": 1, "description": "FHIR code system URI" }, "display": { "type": "string", "description": "Display text" }, "user_selected": { "type": "boolean", "description": "FHIR Coding.userSelected — wins over vocabulary preference when set" } } }, "maxItems": 20, "minItems": 1, "description": "Array of FHIR Coding entries from the CodeableConcept" }, "on_unmapped": { "enum": [ "error", "sentinel" ], "type": "string", "description": "Behavior when nothing resolves: 'error' (default, 404) or 'sentinel' (concept_id 0 record)" }, "resource_type": { "type": "string", "description": "FHIR resource type" }, "include_quality": { "type": "boolean", "default": false }, "include_recommendations": { "type": "boolean", "default": false } } }arguments 66 linesfind_similar_concepts unknown 1h ago
Find medical concepts similar to a reference concept, name, or natural language query. Supports three algorithms: 'semantic' (neural embeddings — best for meaning, and the default), 'lexical' (text matching — best for typos), 'hybrid' (combined). 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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "page": { "type": "number", "default": 1, "minimum": 1, "description": "Page of results (1-based, default 1)" }, "query": { "type": "string", "maxLength": 500, "description": "Find concepts matching this natural language description" }, "algorithm": { "enum": [ "semantic", "lexical", "hybrid" ], "type": "string", "default": "semantic", "description": "Similarity algorithm: 'semantic' (meaning), 'lexical' (text), 'hybrid' (both). Default 'semantic', matching the API." }, "page_size": { "type": "number", "default": 20, "maximum": 1000, "minimum": 1, "description": "Number of results (1-1000, default 20)" }, "concept_id": { "type": "number", "description": "Find concepts similar to this OMOP concept ID" }, "domain_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated domain IDs to filter results. Examples: 'Condition', 'Drug'." }, "concept_name": { "type": "string", "maxLength": 500, "description": "Find concepts similar to this concept name" }, "vocabulary_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated vocabulary IDs to filter results. Examples: 'SNOMED', 'ICD10CM'." }, "concept_class_ids": { "type": "string", "maxLength": 200, "description": "Comma-separated concept class IDs to filter results. Examples: 'Clinical Finding', 'Ingredient'." }, "include_explanations": { "type": "boolean", "default": false, "description": "Include a short explanation of why each concept matched. Default false." }, "similarity_threshold": { "type": "number", "default": 0.7, "maximum": 1, "minimum": 0, "description": "Minimum similarity score (0.0-1.0). Default 0.7." } } }arguments 70 linesget_concept unknown 1h ago
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.
{ "type": "object", "$schema": "http://json-schema.org/draft-07/schema#", "required": [ "concept_id" ], "properties": { "concept_id": { "type": "number", "description": "The OMOP concept_id (numeric identifier)" } } }arguments 13 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's id0608fb72a00308ba.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/0608fb72a00308ba/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/0608fb72a00308ba?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.