Medical Terminologies MCP
The Medical Terminologies MCP server provides unified programmatic access to 7+ major global medical terminologies (ICD-11, SNOMED CT, LOINC, RxNorm, MeSH, ATC, CID-10) through 31 default tools (37 with SNOMED CT enabled), 3 prompts, and 4 resources. It is designed for researchers, public-health analysts, clinical informatics developers, and educators — not for clinical-care decisions.
Search & Retrieval
Search and look up codes, descriptions, and details across all supported terminologies (e.g.,
icd11_search,loinc_search,rxnorm_search,mesh_descriptor)
Hierarchy Navigation
Explore parent/child relationships, chapter structures, and tree locations (e.g.,
icd11_hierarchy,icd11_chapters,mesh_tree,cid10_chapters)
Cross-Terminology Mapping & Validation
Map ICD-10 → ICD-11 using WHO transition tables, get LOINC→SNOMED mapping guidance, find equivalents across terminologies (
find_equivalent), and batch-validate up to 50 codes at once across all supported systems (validate_codes)
Drug Information
Look up RxNorm drug concepts, list active ingredients, find therapeutic/pharmacologic classes, and map RxCUI to NDC codes
Classify drugs via WHO ATC codes, look up ATC class names by level, and list class members
Specialty Capabilities
ICD-11: Postcoordination axes (severity, laterality, anatomy extensions)
LOINC: Answer lists for survey items and full panel structures
MeSH: Scope notes, tree numbers, and allowed qualifiers for PubMed indexing
CID-10: Portuguese-language search (diacritic-insensitive) for Brazilian SUS/ANVISA contexts
SNOMED CT (opt-in, requires self-hosted Snowstorm): Concept search, hierarchy navigation, descriptions, and ECL queries
Versioning & Metadata
Check current versions, release dates, and publishers for all terminologies (
terminology_versions), and get structural diff summaries (e.g., ICD-10 → ICD-11 transition)
Prompts & Resources
Pre-built workflows:
find-medical-code,drug-info,cid10-portuguese-lookupReference resources:
info://server,info://cid10/chapters,info://licenses,info://stats
Transport Options: Available via stdio (e.g., Claude Desktop) or Streamable HTTP (e.g., Cloudflare Workers, Docker).
Provides access to MeSH (Medical Subject Headings), the controlled vocabulary used by PubMed for indexing medical literature, enabling search and retrieval of MeSH descriptors, tree hierarchies, and qualifiers.
Medical Terminologies MCP Server
A Model Context Protocol (MCP) server providing unified access to major global medical terminologies:
ICD-11 - International Classification of Diseases (WHO)
SNOMED CT - Systematized Nomenclature of Medicine (opt-in; requires self-hosted Snowstorm)
LOINC - Logical Observation Identifiers Names and Codes
RxNorm - Normalized names for clinical drugs (NIH)
MeSH - Medical Subject Headings (NLM)
ATC - Anatomical Therapeutic Chemical classification (WHO Collaborating Centre, served via NLM RxClass)
CID-10 - Brazilian Portuguese translation of ICD-10 (DataSUS V2008, bundled)
See it in action
Ask your assistant:
"What's the ICD-11 code for type 2 diabetes?" →
icd11_search"Map ICD-10 code E11 to ICD-11." →
map_icd10_to_icd11"What does LOINC 2339-0 measure?" →
loinc_details"Qual o código CID-10 para infarto agudo do miocárdio?" →
cid10_search
The answers come from authoritative sources (WHO, NLM, NIH, DataSUS) — real codes and mappings, not guesses from training data.
Related MCP server: medical-mcp
Features
33 default tools (39 with SNOMED enabled): 31 terminology tools plus
search/fetchfor ChatGPT Deep Research3 MCP Prompts that orchestrate tool calls into named workflows (
find-medical-code,drug-info,cid10-portuguese-lookup) — clients render these as one-click user actions4 MCP Resources for in-process reference content (
info://server,info://cid10/chapters,info://licenses,info://stats) — sub-millisecond reads (exceptinfo://statswhich round-trips to the StatsCounter Durable Object on the hosted endpoint)Multi-terminology support in a single server
Cross-terminology mapping and search
Provenance on every response (since v1.8.0): each successful tool result carries a machine-readable provenance block — source, canonical URL, data vintage, real extraction instant (cache hits keep the original fetch instant), ready-to-use citation, and license — in
structuredContent.provenance+attribution, mirrored in_metaundercom.sidneybissoli.medical/*, with a compact text footer for text-only clients. Multi-source responses (find_equivalent,validate_codes) carry one block per source; server-computed ranking fields are flagged as derivedBuilt-in caching for improved performance
Rate limiting to respect API limits
Detailed responses with rich formatting
Two transports: stdio (default; for Claude Desktop, IDE clients) and Streamable HTTP (the hosted Cloudflare Worker at
https://medical.sidneybissoli.com/mcp, or your own instance ofworker/)
📖 Article (in Portuguese): CID-10, CID-11 e o que muda para quem trabalha com dados do SUS — the V2008 structure in numbers, what the WHO transition tables are and are not, and the licences that differ between sources. Also published on the site, in Portuguese and English: sidneybissoli.com.
Who is this for?
This server is not a clinical-care decision tool — practicing clinicians have specialized assistants (UpToDate AI, OpenEvidence, EHR-integrated tools) for that. The actual audience is researchers, public-health analysts, clinical informatics developers, and educators who need programmatic access to authoritative terminology data.
If you're a... | Start with | Why |
Biomedical researcher / bibliographer |
| MeSH is PubMed's indexing vocabulary; tree numbers let you traverse the controlled hierarchy programmatically |
Public-health analyst (Brazil / SUS) |
| CID-10 V2008 is the Brazilian operational standard; ATC pairs cleanly with DataSUS prescription data |
Public-health analyst (international) |
| WHO ICD-11 is the current international revision; chapters and hierarchy support pipeline classification |
Clinical-informatics developer |
| LOINC for lab/observation interoperability; cross-terminology search to scaffold new mappings |
Educator / curriculum author |
| Authoritative definitions, tree numbers, and drug term-types you can drop into self-checked exercises |
Try the hosted instance (no install)
A public Cloudflare Workers deployment runs at:
https://medical.sidneybissoli.com/mcpConnect via the MCP Inspector or any Streamable HTTP MCP client:
npx @modelcontextprotocol/inspector --transport streamable-http \
--server-url https://medical.sidneybissoli.com/mcpOr install via Smithery, which proxies the same endpoint through their gateway:
npx -y smithery mcp add sidneybissoli/medical-terminologies-mcpThe hosted instance has WHO credentials configured, so all 33 default tools work without any setup on your side. For your own deployment (e.g. corporate network, different region, custom WHO credentials), see the Installation and Hosted on Cloudflare Workers sections below.
Installation
Global Installation (Recommended)
npm install -g medical-terminologies-mcpLocal Installation
npm install medical-terminologies-mcpConfiguration
Claude Desktop
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"medical-terminologies": {
"command": "npx",
"args": ["-y", "medical-terminologies-mcp"],
"env": {
"WHO_CLIENT_ID": "your-who-client-id",
"WHO_CLIENT_SECRET": "your-who-client-secret"
}
}
}
}Environment Variables
Variable | Required | Description |
| Yes¹ | WHO ICD API Client ID |
| Yes¹ | WHO ICD API Client Secret |
| No | ICD-11 release to query (e.g. |
| No² | Set to |
| No² | Base URL for a Snowstorm instance, e.g. |
| No² | Accept-Language tag(s) for SNOMED responses, e.g. |
| No | pino log level ( |
¹ Required for ICD-11 tools. Get credentials at: https://icd.who.int/icdapi.
² See SNOMED CT setup (advanced) below. LOINC, RxNorm, and MeSH need no configuration.
HTTP transport (hosted)
The server runs over stdio by default — that's what Claude Desktop and IDE clients expect. The Streamable HTTP transport is served by the Cloudflare Worker in worker/ (an instance of the maintainer's Fase 0 hosting template). The --http flag of the Node entry was removed in v1.6.0 — if you need a local HTTP endpoint, run the Worker locally:
npm ci && cd worker && npm ci
npm run dev # wrangler dev on http://localhost:8787
# Inspector via HTTP
npx @modelcontextprotocol/inspector --transport streamable-http --server-url http://localhost:8787/mcpHosted endpoints (production and local alike):
POST /mcp— JSON-RPC over Streamable HTTP (the MCP protocol). Stateless mode: each request is independent.GET /health— liveness probe returning{ status, name, version, tool_count, uptime_s }.GET /status— version + deploy metadata.GET /metrics— aggregated per-tool usage.GET /statsandGET /stats/badge— public tool-call counter (since 2026-05-13) and its shields.io badge.GET /.well-known/mcp/server-card.json— static server card for registry scanners.CORS is permissive (
*) so browser clients (e.g. the MCP Inspector web UI) can connect directly.
ChatGPT (Deep Research)
ChatGPT deep research (and company knowledge, and research workflows over the Responses API) only uses an MCP server that exposes exactly search and fetch — this server does, on top of the terminology tools. Point the connector at the hosted endpoint, no key required:
https://medical.sidneybissoli.com/mcpsearch ranks the query across the bundled CID-10 (categories, subcategories, chapters), the terminology version records and a live fan-out to ICD-11, LOINC, RxNorm and MeSH (the same fan-out find_equivalent does; a source that fails is skipped) and returns { id, title, url }; fetch renders the document through the terminology's own lookup tool (cid10_lookup, icd11_lookup, loinc_details, rxnorm_concept, mesh_descriptor, terminology_versions) as readable Markdown with the canonical public page (WHO ICD browsers, loinc.org, RxNav, MeSH Browser), which is what ChatGPT cites. Both carry the same provenance block as every other tool — search one block per source that answered, like find_equivalent. SNOMED is not part of the corpus (its public browser retired, so there is no page to cite). In ChatGPT's developer mode (Settings → Security and login → Developer mode) any tool is callable — the terminology tools remain the ones to use for data.
Hosted on Cloudflare Workers (primary)
The production deployment is the Cloudflare Worker in worker/, config in worker/wrangler.jsonc, CI deploy in .github/workflows/deploy-worker.yml (auto-runs on every push to main).
To deploy your own instance:
npm ci && npm run build:worker-lib
cd worker && npm ci
npx wrangler login # one-time, browser flow
npx wrangler deploy # publishes to <name>.<account>.workers.dev
# Set ICD-11 secrets so those 5 tools work:
npx wrangler secret put WHO_CLIENT_ID
npx wrangler secret put WHO_CLIENT_SECRETNote: worker/wrangler.jsonc pins the maintainer's account_id and custom domain route — remove/replace both for your own deployment.
Why Workers: zero cold start at the edge, $5/mo flat for 10M requests (free tier covers up to 100k req/day), and no VMs to size or restart. The template ships per-IP rate limiting and a usage-stats Durable Object; the upstream-facing cache/rate-limiter are per-isolate (PROGRESS.md Phase 11.9 Stage 2 tracks the KV/DO upgrade).
Listing on Smithery
After your Worker is live, register the URL on Smithery:
Visit https://smithery.ai → Publish → MCP (or
https://smithery.ai/new).Pick the URL submission path (Smithery deprecated container hosting in 2024 — URL is the supported flow now).
Paste
https://<your-worker>.workers.dev/mcp. Smithery's gateway scans for compliance and proxies traffic.
Available Tools (33 by default, 39 with SNOMED enabled)
Official Portuguese (pt-BR) content
The server never machine-translates terminology content — but several sources publish official translations, and the tools expose them:
CID-10 is natively Portuguese:
cid10_search/cid10_lookup/cid10_chapter(s)serve the DataSUS V2008 dataset (the CID-10 the Brazilian SUS uses operationally).ICD-11 in official Portuguese: pass
language: "pt"toicd11_search/icd11_lookupto search and read WHO's official pt-BR linearization labels.MeSH: pass
language: "pt"tomesh_search/mesh_descriptorto request NLM's official translations where they exist.SNOMED CT (when enabled):
languagerequests the descriptions loaded in your Snowstorm edition (e.g. a national extension's pt-BR refset).
If a source has no official translation for an entry, you get the source language back — never a machine translation.
ICD-11 Tools (5)
Tool | Description | Example |
| Search ICD-11 by term |
|
| Get entity details by code/URI |
|
| Navigate parent/child relationships |
|
| List all ICD-11 chapters | - |
| Get postcoordination axes |
|
LOINC Tools (4)
Tool | Description | Example |
| Search lab tests and observations |
|
| Get full LOINC code details |
|
| Get answer list for surveys |
|
| Get panel/form structure |
|
RxNorm Tools (5)
Tool | Description | Example |
| Search drugs by name |
|
| Get drug concept details |
|
| Get active ingredients |
|
| Get therapeutic classes |
|
| Map between RxCUI and NDC |
|
MeSH Tools (4)
Tool | Description | Example |
| Search MeSH descriptors |
|
| Get descriptor details |
|
| Get tree hierarchy location |
|
| Get allowed qualifiers |
|
SNOMED CT Tools (5, disabled by default)
These are only registered when ENABLE_SNOMED_TOOLS=true. See SNOMED CT setup (advanced).
Tool | Description | Example |
| Search concepts by term |
|
| Get concept details by SCTID |
|
| Get parent/child concepts |
|
| Get all descriptions |
|
| Execute ECL queries |
|
Crosswalk Tools (5 — map_snomed_to_icd10 requires SNOMED)
Tool | Description | Example |
| Authoritative ICD-10 → ICD-11 mapping via bundled WHO transition tables; returns primary code + chapter + URIs and any WHO-documented alternatives |
|
| SNOMED CT → ICD-10 guidance (only when |
|
| LOINC ↔ SNOMED guidance |
|
| Batch-validate up to 100 codes across ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10 (and SNOMED when enabled); returns per-code valid/invalid + display name |
|
| Ranked unified search across terminologies: server-computed |
|
ATC Tools (3)
WHO Anatomical Therapeutic Chemical classification, served through NLM RxClass (free, no auth). The WHOCC base itself requires a paid subscription, but RxClass envelopes the same code/name pairs.
Tool | Description | Example |
| Drug name → ATC code(s) |
|
| ATC code (level 1-4) → name + level type |
|
| ATC class → member drugs |
|
CID-10 Tools (4)
Brazilian Portuguese translation of ICD-10 (DataSUS V2008). Bundled as a static dataset — no HTTP calls. The Brazilian SUS uses CID-10 V2008 operationally; for the international ICD-11 (current WHO revision), use the ICD-11 tools above.
Tool | Description | Example |
| Portuguese text search (diacritic-insensitive) |
|
| Code → official Portuguese name |
|
| List the 22 CID-10 chapters | - |
| Chapter detail with constituent groups |
|
Versioning Tools (2)
Surface what version of each terminology this server queries against today — useful when running batch validation against a pinned release or when investigating an unexpected lookup miss after an upstream update.
Tool | Description | Example |
| List all 8 supported terminologies with current version, release date, publisher, source URL, and update cadence | - |
| Report what diff data is available between two versions of a terminology (real cross-revision stats for ICD-10 → ICD-11; guidance otherwise) |
|
ChatGPT Deep Research (2)
The OpenAI Deep Research contract — the only two tools without a terminology prefix (names fixed by OpenAI). See ChatGPT (Deep Research) above.
Tool | Description | Example |
| Searches the catalog (CID-10, ICD-11, LOINC, RxNorm, MeSH, terminology versions) and returns |
|
| Returns the full document of an id from |
|
Example Outputs
The samples below are the actual formatted output the tools produce — the text body of the CallToolResult. Tools also return a structuredContent object matching each tool's outputSchema for programmatic consumers.
loinc_search — query: "glucose", max_results: 3
## LOINC Search Results for "glucose"
Found 1024 total results (showing 3):
1. **74790-7** - Glucose challenge (hydrogen breath test) panel - Exhaled gas
Component: Glucose challenge panel | Method: -
2. **104708-3** - Deprecated Estimated average glucose [Moles/volume] in Blood
Component: Estimated average glucose | Property: SCnc
3. **97510-2** - Glucose measurements in range out of Total glucose measurements during reporting period
Component: Glucose measurements in range/Total glucose measurements | Property: NFr | Method: Calculatedtotal_count (1024) reflects every match in the NLM Clinical Tables index, not just the page returned. Bump max_results (max 50) to see canonical codes like 2339-0 (Glucose [Mass/volume] in Blood); the API's relevance ranking puts panels and derived measurements above plain blood-glucose at small page sizes.
rxnorm_ingredients — rxcui: "6809" (metformin)
# Ingredients for RxCUI 6809
Found 18 ingredient(s):
| RxCUI | Name | Type |
|-------|------|------|
| 6809 | metformin | Single Ingredient |
| 1007411 | chlorpropamide / metformin | Multiple Ingredient |
| 1043562 | metformin / saxagliptin | Multiple Ingredient |
| 1243019 | linagliptin / metformin | Multiple Ingredient |
| 1486436 | dapagliflozin / metformin | Multiple Ingredient |
| 1545149 | canagliflozin / metformin | Multiple Ingredient |
| 1664314 | empagliflozin / metformin | Multiple Ingredient |
| 729717 | metformin / sitagliptin | Multiple Ingredient |
| ... | (10 more combinations) | Multiple Ingredient |For an RxCUI that is itself an ingredient (TTY=IN), the tool returns that ingredient plus every multi-ingredient (TTY=MIN) concept that includes it. Use this to enumerate combination products built around a substance.
mesh_descriptor — mesh_id: "D006973" (Hypertension)
# Hypertension
MeSH ID: D006973
## Scope Note
Persistently high systemic arterial BLOOD PRESSURE. Based on multiple readings (BLOOD PRESSURE DETERMINATION), hypertension is currently defined as when SYSTOLIC PRESSURE is consistently greater than 140 mm Hg or when DIASTOLIC PRESSURE is consistently 90 mm Hg or more.
## Tree Numbers
- C14.907.489
## Concepts
- Hypertension *(preferred)*
## Allowed Qualifiers
35 qualifier(s) allowed. Use mesh_qualifiers for details.The scope note comes from the descriptor's preferred concept, not its annotation field (which is an indexer-facing note). Tree numbers are the navigable path into MeSH's controlled hierarchy — C14.907.489 places Hypertension under Cardiovascular Diseases → Vascular Diseases.
Common Workflows
ICD-11 lookup:
icd11_searchwith a clinical term → pick the result →icd11_lookupwith the code for full details, oricd11_hierarchyto walk parents/children.Drug pipeline:
rxnorm_searchfor a brand or generic name →rxnorm_conceptfor the canonical record →rxnorm_ingredientsandrxnorm_classesfor downstream analysis.Cross-terminology scaffolding:
find_equivalentwith a clinical term searches ICD-11, LOINC, RxNorm, MeSH, and (when enabled) SNOMED in one call. Use it to bootstrap mappings; the pairwisemap_*tools refine them.ICD-10 → ICD-11 (text search, not authoritative):
map_icd10_to_icd11does honest text search against WHO ICD-11. Real WHO transition tables are tracked in PROGRESS.md Phase 13.1.
SNOMED CT setup (advanced)
The 5 SNOMED tools (snomed_search, snomed_concept, snomed_hierarchy, snomed_descriptions, snomed_ecl) plus the SNOMED-dependent crosswalk tool (map_snomed_to_icd10) are disabled by default. With them disabled, the server registers 33 tools instead of 39; find_equivalent still works and skips the SNOMED branch with an explanatory note.
The reason: as of 2026-05-08, the public IHTSDO Snowstorm endpoint that this project historically called (https://browser.ihtsdotools.org/snowstorm/snomed-ct/...) returns HTTP 410 Gone for every path. Without a working backend, registering these tools surfaces 6 guaranteed-broken tools to every client.
To enable the SNOMED tools:
Confirm your SNOMED CT license. SNOMED CT use requires an SNOMED International (IHTSDO) license. Member country residents typically have one through their national release center; non-members can obtain an Affiliate license. See https://www.snomed.org/snomed-ct/get-snomed.
Run a Snowstorm instance. SNOMED International publishes Snowstorm as open source (IHTSDO/snowstorm) and as a Docker image (
snomedinternational/snowstorm). Self-hosting requires importing an RF2 release file (provided to license holders).Configure this server:
{ "mcpServers": { "medical-terminologies": { "command": "npx", "args": ["-y", "medical-terminologies-mcp"], "env": { "WHO_CLIENT_ID": "...", "WHO_CLIENT_SECRET": "...", "ENABLE_SNOMED_TOOLS": "true", "SNOMED_BASE_URL": "https://my-snowstorm.example.com/snowstorm/snomed-ct", "SNOMED_LANGUAGE": "en" } } } }SNOMED_BASE_URLshould point at the base under which Snowstorm exposes its/MAIN/conceptsand related endpoints.SNOMED_LANGUAGEaccepts standardAccept-Languagetags (e.g.pt,es,pt-BR,en;q=0.8) — Snowstorm returns localized terms when the branch has them and falls back to English otherwise.Restart the MCP client so the server picks up the env vars.
If you set ENABLE_SNOMED_TOOLS=true without configuring a working Snowstorm, the SNOMED tools will register but every call will fail at the network layer.
Terminology Licenses
The MIT license covers the server code and server-maintained metadata
only — not the terminology content served through it, and not
the two bundled datasets (cid10.json, icd10-to-icd11.json), which
remain under their own terms. The consolidated notice ships with the
package as NOTICE.md; every tool response carries a
per-source provenance block with the applicable license.
ICD-11 (WHO)
ICD-11 content is provided under the Creative Commons Attribution-NoDerivatives 3.0 IGO license (CC BY-ND 3.0 IGO), per the ICD-11 Terms of Use and License Agreement.
Required citation: "International Classification of Diseases, Eleventh Revision (ICD-11), World Health Organization (WHO) 2019 https://icd.who.int/browse11. Licensed under the Creative Commons Attribution-NoDerivatives 3.0 IGO licence (CC BY-ND 3.0 IGO)."
This server always serves ICD-11 codes and titles together with their URIs, verbatim; non-English labels are WHO's own official translations (never machine-translated)
WHO may terminate the license at any time by notice (§4.7)
API access requires registration at https://icd.who.int/icdapi
WHO ICD-10 → ICD-11 transition tables (bundled)
Format conversion (TSV → JSON, content unaltered) of the tables WHO publishes within the ICD-11 release. © World Health Organization, under the ICD-11 Terms of Use — not under this project's MIT license. WHO's guidance: the tables show correspondence between revisions and "are not intended for directly converting data from one revision to the other."
CID-10 V2008 (DataSUS / CBCD, bundled)
© World Health Organization; Brazilian Portuguese translation © CBCD / Faculdade de Saúde Pública da USP; electronic files published by DataSUS (Ministério da Saúde do Brasil). DataSUS/CBCD permission: developers may use the files with due credit and at no charge — this server serves them free with credit in every response. Not under this project's MIT license.
SNOMED CT
SNOMED CT use requires an IHTSDO (SNOMED International) license. The SNOMED tools in this server are disabled by default and only enabled by operators with a valid license and a self-hosted Snowstorm instance — see SNOMED CT setup (advanced).
Member countries have national licenses
Affiliate licenses available for others (Brazil is not a member country)
More info: https://www.snomed.org/get-snomed
LOINC
This material contains content from LOINC (http://loinc.org). LOINC is copyright © Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee and is available at no cost under the license at http://loinc.org/license. LOINC® is a registered United States trademark of Regenstrief Institute, Inc.
Served via the free NLM Clinical Tables API; every code comes with its official display name
Terms with third-party copyright are served with their notice passed through verbatim
RxNorm
RxNorm is produced by the U.S. National Library of Medicine; the RxNav APIs serve non-proprietary, public-domain RxNorm content free of charge.
This product uses publicly available data from the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services; NLM is not responsible for the product and does not endorse or recommend this or any other product.
ATC (via NLM RxClass)
ATC classification © WHO Collaborating Centre for Drug Statistics Methodology (https://atcddd.fhi.no/), retrieved via NLM RxClass and served verbatim. This server never redistributes the WHOCC ATC/DDD index.
MeSH
MeSH is a U.S. government work served under the NLM Terms and Conditions. Courtesy of the U.S. National Library of Medicine.
API Rate Limits
This server implements rate limiting to respect API providers:
API | Rate Limit |
WHO ICD-11 | 5 requests/second |
NLM (LOINC, MeSH) | 10 requests/second |
RxNorm | 20 requests/second |
SNOMED CT (Snowstorm) | 10 requests/second |
Development
Building from source
git clone https://github.com/SidneyBissoli/medical-terminologies-mcp.git
cd medical-terminologies-mcp
npm install
npm run buildRunning locally
npm startTesting with MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsContributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/AmazingFeature)Commit your changes (
git commit -m 'Add some AmazingFeature')Push to the branch (
git push origin feature/AmazingFeature)Open a Pull Request
Author
Sidney Bissoli
GitHub: @SidneyBissoli
License
This project is licensed under the MIT License - see the LICENSE file for details.
Note: While this software is MIT licensed, the medical terminologies accessed through it have their own licenses (see Terminology Licenses above).
Acknowledgments
WHO for the ICD-11 API
Regenstrief Institute for LOINC
U.S. National Library of Medicine for RxNorm and MeSH
SNOMED International for SNOMED CT
Anthropic for the Model Context Protocol
Support
If you encounter any issues or have questions:
Open an issue on GitHub
Check existing issues for solutions
Made with love for the medical informatics community
Available Tools
31 toolsatc_classifyATC Classification for a DrugARead-onlyIdempotentInspect
Look up the WHO ATC (Anatomical Therapeutic Chemical) classification(s) for a drug by name.
Use this tool to:
Find the ATC code for a medication (e.g., "metformin" → A10BA02)
Identify the therapeutic and pharmacological class hierarchy
Cross-reference drugs with their international ATC codes
Returns one entry per ATC code the drug belongs to. A single-ingredient drug typically maps to one substance-level code; combination products map to multiple. ATC codes are international (WHO Collaborating Centre); this tool retrieves them via NLM RxClass.
| Name | Required | Description | Default |
|---|---|---|---|
| drug_name | Yes | Drug name to classify (brand or generic, e.g., "metformin") |
Output Schema
| Name | Required | Description |
|---|---|---|
| matches | Yes | |
| drug_name | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful behavioral detail: returns one entry per ATC code, single-ingradient vs combination mapping, and the NLM RxClass source. No contradiction with annotations is present.
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 with the core action and example, uses concise bullets for use cases, then adds relevant return and source notes. Every sentence contributes value without 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?
For a one-parameter, read-only tool with an output schema, the description covers purpose, usage contexts, return cardinality, and provenance. It does not address sibling-tool routing exclusions, but the explicit use cases make it sufficiently complete for an agent.
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?
Input schema has 100% coverage for drug_name, including brand/generic example. The description repeats the example but does not add new parameter-level semantics, so the baseline of 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?
States a specific action: 'Look up the WHO ATC classification(s) for a drug by name.' It includes a concrete example ('metformin' → A10BA02) and clarifies output cardiniality. It does not explicitly contrast with sibling tools like atc_lookup or atc_members, but the 'by name' scoping and return behavior make it largely distinguishable.
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?
A bulleted list of use cases (find code, identify hierarchy, cross-reference international codes) gives clear when-to-use context. There is no explicit exclusion or naming of alternatives, such as atc_lookup or atc_members, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atc_lookupATC Code DetailsARead-onlyIdempotentInspect
Look up an ATC code at level 1-4 to get its name and hierarchy level.
Use this tool to:
Resolve an ATC code (e.g., "A10BA") to its class name ("Biguanides")
Confirm a code exists in the current ATC index
Identify the level (anatomical / therapeutic / pharmacological / chemical)
Accepts codes 1-5 characters long: "A" (anatomical), "A10" (therapeutic), "A10B" (pharmacological), "A10BA" (chemical). Substance-level codes (7 chars, e.g., "A10BA02") are not exposed by this endpoint — use atc_classify with the drug name to retrieve the substance code.
| Name | Required | Description | Default |
|---|---|---|---|
| atc_code | Yes | ATC code at level 1-4 (1-5 chars). Substance-level codes (7 chars, e.g., A10BA02) are not exposed by this endpoint — use atc_classify with the drug name instead. |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | |
| details | Yes | |
| atc_code | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds useful behavioral boundaries: accepted code lengths, the levels covered, and the fact that substance-level codes are not returned by this endpoint. This is meaningful context beyond the annotations, though not exhaustive about not-found behavior.
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 well-structured with a clear opening line, a bulleted use list, and a compact code-length explanation. It is slightly redundant because the schema already covers the same 7-character exclusion, but overall every sentence contributes useful guidance.
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 single-parameter lookup tool with an output schema and strong annotations, the description is complete. It covers accepted input formats, level semantics, alternatives for unsupported codes, and the tool's scope. No critical calling information is missing.
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 the baseline is 3. The description adds concrete examples ('A', 'A10', 'A10B', 'A10BA') and maps them to level names, plus an example of resolving A10BA to 'Biguanides'. This reinforces schema semantics but is somewhat redundant with the parameter description.
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 opens with a specific verb and resource: 'Look up an ATC code at level 1-4 to get its name and hierarchy level.' It clearly distinguishes itself from siblings by explicitly stating that substance-level codes (7 characters) are not exposed and that atc_classify should be used instead.
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 explicit when-to-use scenarios: resolving a code to a class name, confirming code existence, and identifying the hierarchy level. It also gives a clear exclusion and alternative: 7-character substance codes should go to atc_classify.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
atc_membersATC Class MembersARead-onlyIdempotentInspect
List the drugs (substances) that belong to an ATC class.
Use this tool to:
Enumerate all members of a therapeutic class (e.g., "A10BA" → metformin, phenformin)
Build a list of drugs sharing a pharmacological mechanism
Explore an ATC subtree at any level
Each member includes its substance-level (7-char) ATC code via source_atc_code, useful for disambiguation when the queried class is at level 1-4. RxNorm's catalog is US-centric; the ATC class names and codes themselves are international.
| Name | Required | Description | Default |
|---|---|---|---|
| atc_code | Yes | ATC code at any level. Higher levels (1-4) return all member substances; level 5 returns the single substance. |
Output Schema
| Name | Required | Description |
|---|---|---|
| members | Yes | |
| atc_code | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive. The description adds useful behavioral detail beyond those annotations: each member includes a 7-char substance-level code via source_atc_code, this helps disambiguate level 1-4 queries, and RxNorm's catalog is US-centric while ATC names/codes are international. This gives agents important open-world and output-format context.
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 efficient and well organized: a one-sentence definition, a focused bulleted list of use cases, then a concise note on the returned source_atc_code and US-centric limitations. Each sentence carries information that helps an agent select or invoke the tool correctly, with no filler 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?
For a single-parameter, read-only tool with a full input schema and output schema, the description is complete: it covers what the tool does, when to use it, what the results include, and a key caveat about the curating catalog. An agent has enough to invoke it correctly without digging elsewhere.
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%, and the schema already explains that atc_code can be any level, with level 5 returning a single substance and levels 1-4 returning all members. The tool description mentions 'ATC class' and gives an example code but does not add meaningful parameter meaning beyond what the schema already provides. A 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?
Description opens with a clear verb and resource: 'List the drugs (substances) that belong to an ATC class.' It differentiates itself from siblings by focusing on enumerating members of an ATC class, with concrete examples like 'A10BA' → metformin, phenformin. This makes the tool's role distinct from atc_lookup or atc_classify.
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 'Use this tool to' bullets give clear contexts: enumerating class members, building drug lists by mechanism, and exploring ATC subtrees. However, it does not explicitly say when to prefer an alternative sibling tool or mention when not to use it, so it lacks the explicit exclusion guidance needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cid10_chapterCapítulo da CID-10ARead-onlyIdempotentInspect
Get one CID-10 chapter and its constituent groups (e.g., "Chapter IX → I00-I02 Febre reumática aguda, I05-I09 Doenças reumáticas crônicas do coração, ...").
Use this tool to:
Drill from a chapter into its groups
Build hierarchical browsers
Find which group contains a code range
Provide a chapter number (1-22).
| Name | Required | Description | Default |
|---|---|---|---|
| num | Yes | Chapter number (1-22). CID-10 V2008 has 22 chapters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| num | Yes | |
| found | Yes | |
| groups | Yes | |
| chapter | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful scope details (returns one chapter and its groups), but does not discuss error behavior, response size, or coverage caveats.
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: the main action appears in the first sentence, followed by helpful bullet use cases and a short parameter instruction. Minor redundancy with the schema, but no wasted content.
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 one-parameter read tool with a rich output schema and strong annotations, the description is essentially complete. It could more explicitly distinguish itself from cid10_chapters, but 'one chapter' plus the use cases is sufficient.
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%, with num fully described by type, min, max, and meaning. The description only repeats 'chapter number (1-22),' adding no semantic value 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 uses a specific verb-resource pair: 'Get one CID-10 chapter and its constituent groups,' with a concrete example. It clearly differentiates from sibling cid10_chapters by emphasizing 'one' chapter rather than a collection.
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?
Explicit use cases are listed: drilling from chapter to groups, building hierarchical browsers, and finding which group contains a code range. It does not mention alternatives/exclusions, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cid10_chaptersCapítulos da CID-10ARead-onlyIdempotentInspect
List the 22 chapters of CID-10 with their code ranges and Portuguese titles.
Use this tool to:
See the top-level structure of CID-10 (chapters I-XXII, e.g., "I. Algumas doenças infecciosas e parasitárias", "IX. Doenças do aparelho circulatório")
Map a code to its chapter by code range (e.g., I00-I99 → chapter IX)
Build a navigable table of contents for downstream tooling
Returns 22 entries — CID-10 V2008 has not been updated since 2008.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| chapters | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive behavior. The description adds useful context beyond that: exactly 22 entries are returned and CID-10 V2008 has not been updated since 2008, which gives an agent stability expectations it could not infer from the schema. No contradiction with annotations.
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 core purpose is front-loaded in the first sentence, followed by a tight bullet list of use cases and a single version/status note. Every sentence contributes either scope, usage context, or stability information with 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?
For a zero-parameter, read-only listing tool with an output schema, the description fully covers purpose, expected result count, typical use cases, and data currency. Nothing important for selection or invocation is missing.
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 zero parameters, so there is no parameter semantics burden on the description. The baseline for 0-param tools is 4, and the description does not need to add parameter-level detail.
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 states a specific verb and resource: 'List the 22 chapters of CID-10 with their code ranges and Portuguese titles.' It is unambiguous about scope, but it does not explicitly contrast itself with the sibling cid10_chapter, so differentiation depends on inference.
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?
A dedicated 'Use this tool to' section names concrete contexts: top-level structure, code-to-chapter mapping via ranges, and building a table of contents. It does not explicitly say when not to use the tool or name alternative tools, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cid10_lookupConsultar Código CID-10ARead-onlyIdempotentInspect
Look up a specific CID-10 code and return its Portuguese name.
Use this tool to:
Resolve a code to its Brazilian description ("I21" → "Infarto agudo do miocárdio")
Confirm a 3-char category or 4-char subcategory exists in CID-10
Retrieve gender / cause-of-death restriction flags when applicable
Accepts both dotted ("A00.1") and undotted ("A001") forms; returns the canonical display.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | CID-10 code (e.g., "A00", "A00.1", "A001", "I21"). Dotted and undotted forms both accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hit | Yes | |
| code | Yes | |
| found | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral detail beyond annotations: accepts dotted and undotted forms, returns the canonical display, and may include gender/cause-of-death flags. No contradictions.
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 well-structured: an opening sentence states the core function, followed by bullet use cases and a final formatting note. Every sentence adds value with 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?
For a single-parameter lookup tool with a full input schema, truthful annotations, and an output schema, the description covers what an agent needs: purpose, input format variants, and additional returned flags. Nothing essential is missing.
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 the schema already fully documents the 'code' parameter. The description reinforces the dotted/undotted acceptance and canonical output but does not add substantial new 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?
The description states a specific verb ('Look up'), a clear resource (a CID-10 code), and a concrete outcome (return its Portuguese name and restriction flags). It also distinguishes this tool from siblings like cid10_search by focusing on exact code resolution rather than search.
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 lists when to use the tool: resolving codes, confirming existence, and retrieving restriction flags. It does not mention alternatives or exclusions, but the use-case list is clear enough for an agent to select this over search/chapter tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cid10_searchBuscar na CID-10ARead-onlyIdempotentInspect
Search the Brazilian CID-10 (Classificação Estatística Internacional de Doenças, 10ª Revisão) by Portuguese text.
Use this tool to:
Find CID-10 codes for Brazilian SUS / ANVISA contexts ("infarto", "diabetes", "tuberculose")
Look up the official Portuguese (CBCD/USP) translation of a clinical term
Locate codes for billing, epidemiology, and clinical documentation in Brazil
Returns matches from CID-10 categories (3-char) and/or subcategories (4-char). Search is diacritic-insensitive: typing "infeccoes" matches "infecções". This tool searches the Brazilian Portuguese CID-10 V2008 — for the international ICD-11 (current WHO revision, in English by default), use icd11_search.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | Restrict search to 3-char categories, 4-char subcategories, or both. Default: all | all |
| query | Yes | Search term in Portuguese (e.g., "diabetes", "infarto", "tuberculose") | |
| max_results | No | Maximum number of results (1-100). Default: 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | |
| level | Yes | |
| query | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| shown_count | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, but the description adds meaningful behavioral detail beyond them: matches come from categories/subcategories, search is diacritic-insensitive, and it searches the Brazilian Portuguese CID-10 V2008. No contradiction exists.
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 front-loaded with the core purpose, followed by bulleted use cases, behavior notes, and sibling routing. It is slightly repetitive with the schema's query examples, but overall every section earns its place and the structure is easy to scan.
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 output schema exists and annotations cover the safety profile, the description is complete enough: it states the language, version, match granularity, diacritic behavior, and the key alternative tool. An agent can decide when to invoke cid10_search and what to expect from it.
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 the schema already documents query, level, and max_results. The description adds helpful context like diacritic-insensitivity and Portuguese examples, but it does not substantially extend the parameter-level meaning beyond what the schema provides. 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 opens with a specific verb-resource pair: 'Search the Brazilian CID-10 ... by Portuguese text.' It also names concrete use cases and explicitly contrasts with icd11_search, making it easy for an agent to distinguish this tool from the international ICD-11 search sibling.
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 clearly states when to use the tool: Brazilian SUS/ANVISA contexts, Portuguese translations, and billing/epidemiology/documentation. It also gives an explicit alternative: 'for the international ICD-11 ... use icd11_search.' This gives the agent actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_equivalentFind Equivalents Across TerminologiesARead-onlyIdempotentInspect
Ranked unified search for equivalent terms across multiple medical terminologies.
Use this tool to:
Find the same concept in different coding systems
Compare how terminologies represent a concept
Support terminology mapping and data integration
Searches across: ICD-11, SNOMED CT, LOINC, RxNorm, and MeSH. Set target_terminologies to limit which are searched, or set source_terminology to exclude one (e.g. when you already have a code from that terminology and want equivalents elsewhere). The two combine: source is subtracted from targets. limit caps candidates per terminology (default 5, max 10).
Every candidate carries match_score (lexical similarity to the search term, 0-1) and rank (global position across all searched terminologies) — both computed by this server, since upstreams don't expose comparable relevance scores. Candidates from different terminologies whose titles are lexically identical are clustered in groups — a strong same-concept signal (absence of a group is NOT evidence of non-equivalence).
Searches upstreams in English. For official pt-BR content, use the dedicated tools: icd11_search/mesh_search accept language: "pt", and cid10_search is natively Portuguese.
| Name | Required | Description | Default |
|---|---|---|---|
| term | Yes | Medical term to search (e.g., "diabetes", "aspirin") | |
| limit | No | Maximum candidates returned PER terminology (1-10, default 5). This is a cap, not a page: the live fan-out has no stable cursor across five upstreams, so raise the limit instead of paging. | |
| source_terminology | No | If set, this terminology is excluded from the search. Use this when the term came from this terminology and you want equivalents in the others. Combines with target_terminologies by subtraction (source is removed from the target list). | |
| target_terminologies | No | Limit the search to these terminologies. If omitted, all five are searched. |
Output Schema
| Name | Required | Description |
|---|---|---|
| term | Yes | |
| groups | Yes | |
| ranking | Yes | |
| results | Yes | |
| provenance | Yes | One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged) |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| source_terminology | Yes | |
| searched_terminologies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds substantial behavioral context beyond that: match_score and rank are server-computed because upstreams lack comparable scores, limit is explicitly a cap not a page due to no stable cursor across five upstreams, groups indicate lexical-identical titles with the caveat that absence of group is NOT non-equivalence, and upstream search is English-only. No contradiction with annotations.
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 well-structured with size-leaded bullets and each major section serves a purpose. It loses a point because some schema facts are repeated (default limit 5, max 10, source subtracted from targets), creating mild redundancy. Still, it is far from verbose and the code-formatted parameter names improve scannability.
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 that an output schema exists and annotations cover safety and idempotency, the description is thorough: it explains all parameter interactions, the English-only nature of upstream search, the meaning of match_score and rank, the grouping semantics, and the absense of a stable cursor. No critical information for invoking the tool correctly is missing.
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 adds a meaningful caveat for `limit`—'This is a cap, not a page'—and explains the source/target subtraction relationship, though the schema itself already states the subtraction behavior. It does not add much beyond schema for `term` or `target_terminologies`, but the added paging guidance is valuable for correct invocation.
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 opens with a specific verb and resource: 'Ranked unified search for equivalent terms across multiple medical terminologies.' It then states the exact terminologies searched (ICD-11, SNOMED CT, LOINC, RxNorm, MeSH) and enumerates three concrete use cases. This clearly differentiates it from the single-terminology search siblings like icd11_search or loinc_search.
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 gives clear when-to-use guidance ('Find the same concept in different coding systems', 'Compare how terminologies represent a concept', 'Support terminology mapping and data integration') and an explicit when-not-to-use for official pt-BR content, routing to icd11_search, mesh_search, and cid10_search. However, it does not explicitly position itself against the dedicated mapping siblings (map_icd10_to_icd11, map_loinc_to_snomed), which an agent might also consider for mapping tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
icd11_chaptersList ICD-11 ChaptersARead-onlyIdempotentInspect
List all ICD-11 chapters (top-level categories).
Use this tool to:
Get an overview of ICD-11 structure
Find which chapter covers a body system or condition type
Navigate to specific disease categories
ICD-11 has 28 chapters covering all areas of medicine.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| chapters | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, and non-destructive, so the description does not need to repeat that. It adds minor context by noting there are 28 chapters and that they are top-level categories, but it does not meaningfully expand beyond the annotations.
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, front-loaded with the core action, and uses a short bullet list for usage context. Every sentence contributes value, and the final note about 28 chapters adds useful scope without unnecessary elaboration.
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 listing tool with one optional parameter, full schema coverage, rich annotations, and an output schema, the description provides sufficient context. It covers what the tool returns conceptually, why to use it, and enough structural detail for an agent to invoke it 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?
Schema coverage for the single optional language parameter is 100%, so the schema already fully explains the parameter. The description does not add extra semantic detail about the language behavior beyond what the schema provides, making the baseline 3 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 begins with a specific verb and resource: 'List all ICD-11 chapters (top-level categories).' It clearly states what the tool does and distinguishes it from search, hierarchy, and lookup siblings by describing the chapter-level overview purpose.
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 'Use this tool to' section provides clear contexts: overview of structure, finding a chapter by body system, and navigating to disease categories. It does not explicitly mention when not to use it or name alternative tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
icd11_hierarchyBrowse ICD-11 HierarchyARead-onlyIdempotentInspect
Navigate the ICD-11 hierarchy to find parent or child entities.
Use this tool to:
Find broader categories (parents) of a condition
Find specific subtypes (children) of a condition
Understand the classification structure
Direction 'parents' returns ancestor categories, 'children' returns subcategories.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ICD-11 code to get hierarchy for | |
| direction | Yes | Direction: "parents" for ancestors, "children" for subtypes |
Output Schema
| Name | Required | Description |
|---|---|---|
| code | Yes | |
| entities | Yes | |
| direction | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds useful semantic context by explaining that 'parents' returns ancestors and 'children' returns subcategories. However, it does not disclose details like whether all ancestor levels are returned, ordering, or pagination, though with the output schema present this is less critical.
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 well-structured with an intro, a bullet list, and a clarifying sentence. Some redundancy exists between the opening line and the bullets, and the closing sentence repeats schema enum descriptions, but the overall length is reasonable and the key information is front-loaded.
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?
This is a simple tool with two parameters, full schema descriptions, an output schema, and annotations covering read-only/idempotent behavior. The description covers the purpose, usage scenarios, and direction semantics adequately. Any missing return-value details are covered by the output schema, making this sufficiently 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 description coverage is 100%, so both 'code' and 'direction' are already documented. The description's closing sentence restates the enum semantics ('Direction 'parents' returns ancestor categories, 'children' returns subcategories') but adds little beyond the schema. No additional parameter-specific meaning is provided for 'code'.
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: 'Navigate the ICD-11 hierarchy to find parent or child entities.' This concrete verb-resource pairing distinguishes it from sibling tools like icd11_lookup, icd11_search, and icd11_chapters. The bullet list further emphasizes finding broader or narrower categories, leaving no ambiguity about what the tool does.
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 explicit usage guidance with the 'Use this tool to:' bullet list, covering the main scenarios for parents, children, and understanding the classification structure. It does not explicitly name alternative tools or state when not to use it, but the clear use cases are sufficient for an agent to select the tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
icd11_lookupICD-11 Entity DetailsARead-onlyIdempotentInspect
Get detailed information about a specific ICD-11 entity by code or URI.
Use this tool to:
Get the full definition of a disease
Retrieve coding notes and exclusions
Get the official title and synonyms
Provide either an ICD-11 code (e.g., "BA00") or a full foundation URI. Set language for WHO's official translations (e.g. language: "pt" for official Portuguese).
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | Full ICD-11 foundation URI | |
| code | No | ICD-11 code (e.g., "BA00", "1A00") | |
| language | No | Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | |
| code | Yes | |
| title | Yes | |
| block_id | Yes | |
| class_kind | Yes | |
| code_range | Yes | |
| definition | Yes | |
| exclusions | Yes | |
| inclusions | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| browser_url | Yes | |
| coding_note | Yes | |
| index_terms | Yes | |
| long_definition | Yes | |
| diagnostic_criteria | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context (retrieval of definitions, notes, exclusions, synonyms, and official translation selection), but it does not disclose edge cases or limitations beyond what the schema and annotations already convey.
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 well-structured with a front-loaded main action, a bulleted list of use cases, and a short input instruction. It is compact and mostly non-redundant, though 'by code or URI' and 'Provide either an ICD-11 code or a full foundation URI' express the same constraint twice.
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 rich schema (100% parameter coverage), available output schema, and safety annotations, the description is largely complete for a lookup tool. It explains what data is returned, how to provide input, and how language selection works. It slightly lacks sibling routing guidance, but this is a minor gap rather than a fundamental omission.
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 baseline is 3. The description adds meaningful relational guidance by stating 'Provide either an ICD-11 code or a full foundation URI,' clarifying the one-of expectation that the schema does not encode structurally. It also provides a concrete code example, reinforcing the schema's format hints.
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 opens with a specific action and resource: 'Get detailed information about a specific ICD-11 entity by code or URI.' It enumerates concrete outputs (full definition, coding notes and exclusions, official title and synonyms), making the tool's scope clear and distinguishing it from search or hierarchy siblings by emphasizing specific entities rather than discovery.
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 gives clear context for when to use the tool through 'Use this tool to' bullets and states the required input pattern: provide either an ICD-11 code or a foundation URI. However, it never explicitly mentions alternatives or exclusions, such as using icd11_search when the code/URI is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
icd11_postcoordinationICD-11 Postcoordination OptionsARead-onlyIdempotentInspect
Get postcoordination information for an ICD-11 code.
Use this tool to:
Find available axes for building composite codes
Check required vs optional postcoordination
Understand code extension possibilities
Postcoordination allows adding severity, laterality, anatomy, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ICD-11 code to get postcoordination info for |
Output Schema
| Name | Required | Description |
|---|---|---|
| axes | Yes | |
| code | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful conceptual context about what postcoordination is ('adding severity, laterality, anatomy, etc.'), but it does not disclose details like error behavior, handling of invalid codes, or the exact response structure beyond what the output schema likely covers.
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 with the core action. The bullet list is scannable and each line adds distinct information. The final sentence clarifies the general concept without unnecessary 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?
For a simple one-parameter query tool with an output schema and comprehensive safety annotations, the description provides sufficient context: what the tool retrieves, why it is used, and the key decision points. No critical information appears to be missing for an agent to select and invoke it 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?
Schema description coverage is 100%, and the single parameter 'code' is already described as 'ICD-11 code to get postcoordination info for'. The description does not add meaning beyond the schema, so the baseline of 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 begins with a specific verb phrase, 'Get postcoordination information for an ICD-11 code', identifying both the action and the resource. The three bullet points further clarify the exact capabilities (axes, required vs optional postcoordination, extension possibilities), and the postcoordination focus cleanly distinguishes it from sibling tools like icd11_lookup, icd11_hierarchy, and icd11_search.
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 bulleted 'Use this tool to' list gives clear scenarios for when this tool is appropriate. It does not explicitly name alternatives or state when not to use it, but the postcoordination-specific framing and sibling list make the intended usage obvious enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
icd11_searchSearch ICD-11ARead-onlyIdempotentInspect
Search for medical conditions, diseases, and health problems in ICD-11 (International Classification of Diseases, 11th Revision).
Use this tool to:
Find ICD-11 codes for diagnoses
Search for diseases by name or keyword
Look up conditions in multiple languages
Set language for WHO's official translations — e.g. language: "pt" searches and returns the official Portuguese (pt-BR) ICD-11 labels. Never machine-translated.
Returns matching entities with codes, titles, and relevance scores.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text (disease name, symptom, or keyword) | |
| language | No | Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated. | en |
| max_results | No | Maximum number of results (1-100). Default: 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| entities | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral detail beyond annotations: it specifies that results include codes, titles, and relevance scores, and emphasizes that language support uses official WHO translations only, never machine-translated content.
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 well-structured: a clear opening sentence, a compact bulleted list of uses, a focused example of the language parameter, and a closing sentence about return values. Every sentence contributes useful information without unnecessary padding.
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 read-only search tool with rich annotations, a fully covered input schema, and an output schema, the description is complete. It explains the domain, language behavior, result contents, and supported use cases, leaving no critical gap for an agent deciding whether and how to invoke it.
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 the schema fully documents query, language, and max_results. The description adds a concrete language example ('language: "pt"') and clarifies the official-translation behavior, but this largely duplicates the schema's own parameter descriptions, so value added is marginal.
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 searches ICD-11 for medical conditions, diseases, and health problems, with specific use cases like finding codes and searching by name/keyword. It is unambiguous about the resource and action, though it does not explicitly distinguish itself from the sibling icd11_lookup beyond the general implication that this tool performs free-text searching.
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 explicit 'Use this tool to' bullets covering code lookup, keyword search, and multilingual lookups. It gives clear context for when to use the tool, though it does not state when not to use it or mention alternatives like icd11_lookup, mesh_search, or loinc_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loinc_answersLOINC Answer ListsARead-onlyIdempotentInspect
Get the list of valid answers for a LOINC questionnaire item.
Use this tool to:
Find valid response options for survey questions
Get answer codes for data entry validation
Look up standardized answer lists
Only applicable to LOINC codes that represent questions with defined answer sets.
| Name | Required | Description | Default |
|---|---|---|---|
| loinc_num | Yes | LOINC number (e.g., "2339-0") |
Output Schema
| Name | Required | Description |
|---|---|---|
| answers | Yes | |
| loinc_num | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds the useful limitation that the tool works only for LOINC codes with defined answer sets. However, it does not disclose behavior for non-applicable codes, empty results, or error handling, and it never contradicts the annotations.
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 with the main action, followed by scannable use-case bullets and an applicability constraint. The three bullets partially restate the first sentence ('valid response options,' 'answer codes,' 'answer lists' overlap), but the overall structure is still efficient and 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?
For a single-parameter, read-only lookup that has a full output schema and rich annotations, the description plus schema provide everything required: input format, purpose, and the critical applicability condition. No practical gap remains that would prevent an agent from selecting and invoking the 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?
Schema coverage is 100%: the only parameter 'loinc_num' has a format pattern and a concrete example. The description's 'questionnaire item' phrasing adds domain context, but it adds no format or syntactic detail beyond what the schema already provides. This matches the baseline score for high schema coverage.
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 names a specific verb and resource: 'Get the list of valid answers for a LOINC questionnaire item.' It also adds a clear scoping constraint, 'Only applicable to LOINC codes that represent questions with defined answer sets,' which helps distinguish it from sibling search/detail/panel tools even though no sibling is named.
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 bullets explicitly state when to use the tool ('Find valid response options for survey questions,' 'Get answer codes for data entry validation,' 'Look up standardized answer lists'). The final sentence provides a clear applicability boundary ('Only applicable to LOINC codes that represent questions with defined answer sets'). It lacks explicit alternatives or when-not-to-use contrast with sibling tools, so it does not earn 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loinc_detailsLOINC Code DetailsARead-onlyIdempotentInspect
Get detailed information about a specific LOINC code.
Use this tool to:
Get the full name and description of a LOINC code
Find the component, property, timing, and system
Check the scale type and method
Provide a LOINC number in format "XXXXX-X" (e.g., "2339-0" for Glucose).
| Name | Required | Description | Default |
|---|---|---|---|
| loinc_num | Yes | LOINC number (e.g., "2339-0") |
Output Schema
| Name | Required | Description |
|---|---|---|
| class | Yes | |
| status | Yes | |
| system | Yes | |
| property | Yes | |
| component | Yes | |
| loinc_num | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| scale_type | Yes | |
| short_name | Yes | |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| method_type | Yes | |
| time_aspect | Yes | |
| long_common_name | Yes | |
| external_copyright_notice | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful detail about what information is returned, but it does not disclose operational behavior such as error handling for unknown codes or whether partial matches are returned.
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, front-loaded with the main purpose, and uses a compact bullet list to convey the tool's uses. Every sentence contributes useful information with no filler 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?
For a single-parameter, read-only lookup tool with a rich output schema and comprehensive annotations, the description is complete: it states the purpose, the input format, and the kind of information available. No critical information needed to invoke the tool correctly is missing.
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 schema already documents the loinc_num parameter fully with a regex pattern and an example. The description adds value by giving a human-readable format 'XXXXX-X' and a meaningful domain example ('2339-0' for Glucose), reinforcing the expected input beyond the raw 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 a specific verb and resource: 'Get detailed information about a specific LOINC code,' and then enumerates the exact details returned (name, description, component, property, timing, system, scale, method). This sufficiently distinguishes it from search-oriented siblings like loinc_search.
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 it when you need full details for a specific LOINC code and supplies the required input format. However, it does not explicitly name sibling alternatives such as loinc_search, loinc_answers, or loinc_panels, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loinc_panelsLOINC Panel StructureARead-onlyIdempotentInspect
Get the structure of a LOINC panel or form.
Use this tool to:
See all tests included in a panel (e.g., CBC, metabolic panel)
Get the structure of assessment forms
Find related observations grouped together
Returns the list of LOINC codes that make up the panel.
| Name | Required | Description | Default |
|---|---|---|---|
| loinc_num | Yes | LOINC number (e.g., "2339-0") |
Output Schema
| Name | Required | Description |
|---|---|---|
| panel | Yes | |
| loinc_num | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructiveness, so the safety profile is covered. The description adds useful behavioral context by stating what the tool returns and that it covers panels and forms. It does not describe edge cases or behavior for invalid or non-panel LOINC codes, but this is acceptable given the annotations.
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 reasonably concise and front-loaded with the main purpose. The bullet list adds concrete use cases without excessive length, though the last bullet, 'Find related observations grouped together,' is somewhat vague and adds limited value.
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 read-only, one-parameter lookup with an output schema and strong annotations, the description is largely complete. It explains what the tool does, what it returns, and provides example use cases. A small gap is that it does not explicitly state that loinc_num must refer to a panel or form rather than any LOINC code.
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 provides 100% coverage with a description, pattern, and example for loinc_num. The tool description adds no additional meaning about the parameter beyond what the schema already states, so the baseline of 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 identifies a specific verb and resource: 'Get the structure of a LOINC panel or form.' It clarifies the output as the list of LOINC codes in the panel and provides concrete examples like CBC and metabolic panel. It does not explicitly contrast itself with siblings such as loinc_details or loinc_answers, but the panel-structure focus is clear enough to distinguish it.
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 a 'Use this tool to' section with three concrete use cases: seeing all tests in a panel, getting assessment form structures, and finding grouped observations. This gives clear context for when to use it, though it does not explicitly state when not to use it or name an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loinc_searchSearch LOINCARead-onlyIdempotentInspect
Search for laboratory tests, clinical observations, and measurements in LOINC (Logical Observation Identifiers Names and Codes).
Use this tool to:
Find LOINC codes for lab tests (e.g., "glucose", "hemoglobin")
Search for clinical measurements and vital signs
Look up diagnostic observations
Returns matching LOINC codes with names, components, and properties.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term (test name, keyword, or partial LOINC code) | |
| max_results | No | Maximum number of results (1-100). Default: 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| query | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| shown_count | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds that the tool returns matching codes with names, components, and properties, but it does not disclose additional behavioral details such as result ranking, truncation, or handling of partial matches. It does not contradict the annotations.
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 moderately concise and front-loaded with the core purpose in the first sentence. The bullet list is useful but somewhat redundant with the opening line (e.g., 'Find LOINC codes' restates the search purpose). Overall, every sentence contributes useful context.
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 two-parameter read-only search tool with an output schema and strong annotations, the description is complete enough for an agent to select and invoke it correctly. It could more explicitly distinguish when to use loinc_search versus loinc_details or loinc_panels, but the core search intent is well covered.
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 both parameters ('query' as search term and 'max_results' with range/default). The description adds example search terms but no deeper semantic guidance beyond what the schema provides, so the baseline of 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 clearly identifies the tool as a search over LOINC for laboratory tests, clinical observations, and measurements, with a specific verb ('Search') and resource. It gives concrete examples like 'glucose' and 'hemoglobin' and states the return type. However, it does not explicitly differentiate itself from sibling tools such as loinc_details or loinc_panels.
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 gives clear use cases: finding LOINC codes for lab tests, clinical measurements, vital signs, and diagnostic observations. This establishes appropriate search scenarios, but it does not mention exclusions or suggest alternatives like loinc_details for retrieving full code details or loinc_panels for panel searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_icd10_to_icd11Map ICD-10 to ICD-11ARead-onlyIdempotentInspect
Authoritative ICD-10 → ICD-11 mapping using WHO transition tables (release 2025-01, bundled with the server).
Returns the primary 1:1 ICD-11 category for the ICD-10 code plus any alternative ICD-11 candidates that WHO documents (some ICD-10 concepts split into multiple ICD-11 entities). For each mapping, includes the ICD-11 code, title, chapter, and the Foundation URI / Linearization URI for navigating to the full entity definition.
Use this for clinical coding, billing migration, retrospective analysis, and any workflow that needs authoritative mapping rather than text-search candidates. Coverage: 11,243 ICD-10 categories (excludes chapters and blocks like "A00-A09" which aren't used in clinical coding).
Provide a code like "E11" (Type 2 diabetes), "I21" (Acute MI), or "A07.8" (4 alternatives in WHO's table). Both dotted ("A07.8") and undotted ("A078") forms are accepted.
Returns "no mapping" when the code isn't in the WHO category-level table — that's the honest answer rather than a fuzzy search fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| icd10_code | Yes | ICD-10 code to query in the ICD-11 search index (e.g., E11, I21.0, J18.9) |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | Whether the code is in the WHO ICD-10 → ICD-11 transition table. |
| icd10 | Yes | Source ICD-10 entry from the WHO table. Null when found=false. |
| query | Yes | The ICD-10 code as submitted (raw, before normalization). |
| source | Yes | |
| primary | Yes | Primary 1:1 ICD-11 mapping. Null when found=false. |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| alternatives | Yes | Additional ICD-11 candidates WHO documents for this ICD-10 code. Empty when the primary is the only documented mapping (or when found=false). 1,461 of the 11,243 indexed codes have non-empty alternatives. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide read-only, idempotent, open-world, and non-destructive hints. The description adds valuable behavior beyond those: WHO release 2025-01 is bundled with the server, coverage excludes chapters/blocks, both dotted and undotted codes are accepted, and unknown codes produce an error by design. No contradiction exists with the annotations.
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 descriptionis well-structured and front-loaded, with the core purpose in the first sentence. It contains useful detail on coverage, input format, and error handling. It loses one point for a minor redundancy: 'rather than text-search candidates' and 'rather than a fuzzy search fallback' make the same point twice.
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 one-parameter read-only tool with an output schema, the description is nearly complete. It covers the source table, return contents, coverage limitations, realistic input examples, and the error contract. An agent has enough context to select this tool and invoke it correctly without ambiguity.
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 single parameter is already fully described in the schema with examples. The description adds useful semantic detail by explicitly stating that both dotted and undotted forms are accepted and that no fuzzy matching is attempted, clarifying the exact input contract. This goes slightly beyond the schema without being redundant.
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 opens with a precise function statement: 'Authoritative ICD-10 → ICD-11 mapping using WHO transition tables'. It clearly describes what is returned (primary 1:1 ICD-11 category plus alternative candidates) and distinguishes itself from text-search tools by positioning itself as authoritative mapping rather than fuzzy search.
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 lists use cases: clinical coding, billing migration, retrospective analysis, and any workflow needing authoritative mapping. It also gives a clear when-not condition: no fuzzy matching is attempted, and unknown codes return an error by design. However, it does not explicitly name which sibling tool should be used instead for text-search candidates, so the alternative guidance is slightly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
map_loinc_to_snomedMap LOINC to SNOMED CT (Guidance)ARead-onlyIdempotentInspect
This tool looks up a LOINC code in NLM Clinical Tables and returns guidance on where to obtain a LOINC → SNOMED CT mapping. It does not perform the mapping.
Direct LOINC → SNOMED CT mappings are not freely available via API. UMLS Metathesaurus contains the relationships but requires an individual UMLS Terminology Services license; the LOINC SNOMED CT Expression Association is published by Regenstrief Institute as part of the LOINC release and requires authenticated download from loinc.org under the LOINC license.
For programmatic LOINC → SNOMED mapping, use UMLS or the LOINC Expression Association files. For interactive lookup, use the SNOMED CT browser available to your organization or the Regenstrief RELMA desktop tool.
Provide a LOINC code like "2339-0" (Glucose) or "718-7" (Hemoglobin).
| Name | Required | Description | Default |
|---|---|---|---|
| loinc_code | Yes | LOINC code (e.g., 2339-0 for Glucose) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | Always "guidance-only" — direct LOINC → SNOMED CT mappings require licensed sources (UMLS Metathesaurus or LOINC SNOMED CT Expression Association). This tool returns pointers, not the mapping itself. |
| guidance | Yes | Short human-readable explanation of why this tool returns guidance instead of a mapping. |
| loinc_code | Yes | The LOINC code as submitted. |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| loinc_details | Yes | NLM Clinical Tables details for the LOINC code (component, system, property, etc.). Null when the code was not found upstream. |
| mapping_sources | Yes | Structured list of authoritative LOINC → SNOMED CT mapping sources (UMLS Metathesaurus, LOINC SNOMED CT Expression Association, Regenstrief RELMA). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only/idempotent/open-world, so the bar focuses on added context. The description discloses that direct mappings are not freely available via API, licensing constraints, that the tool returns guidance only, and external resources; this exceeds annotation coverage and prevents false expectations.
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?
Four paragraphs, but each contributes: purpose, licensing caveat, alternative routes, and input format. No filler; key limitations appear right after the core sentence. Could be trimmed slightly but the length is justified by the caveats.
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?
With an output schema present and one well-documented parameter, the description's caveats about licensing, actual mapping availability, and alternatives fully equip an agent to decide whether to call and how to interpret the result. Nothing critical is missing.
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 is 100% covered with a pattern and example, so the baseline is 3. The description adds a second concrete example ('718-7' Hemoglobin) and a 'like' format hint, which is useful but not substantially richer.
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 ('looks up') and resource ('LOINC code in NLM Clinical Tables') and states the deliverable is guidance, not a mapping. It explicitly distinguishes itself from mapping tools by saying 'It does not perform the mapping'.
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?
Gives explicit when-to-use (need guidance on obtaining a mapping) and when-not-to-use (need actual mapping), plus named alternatives: UMLS, LOINC Expression Association, SNOMED CT browser, and RELMA. This is model routing guidance for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_descriptorMeSH Descriptor DetailsARead-onlyIdempotentInspect
Get detailed information about a MeSH descriptor by ID.
Use this tool to:
Get the full definition (scope note) of a MeSH term
View tree numbers showing hierarchy location
See related concepts and synonyms
Provide a MeSH Descriptor ID like "D015242" (Ofloxacin). Set language to request NLM's official translations where they exist (e.g. language: "pt").
| Name | Required | Description | Default |
|---|---|---|---|
| mesh_id | Yes | MeSH Descriptor ID (e.g., D015242, D003920) | |
| language | No | Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated. | en |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| uri | Yes | |
| label | Yes | |
| concepts | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| qualifiers | Yes | |
| scope_note | Yes | |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| tree_numbers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful context about language handling: official translations are returned 'where they exist', and 'content is never machine-translated', which shapes expectations about fallback behavior. It doesn't describe return structure, but the output schema covers that.
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 core purpose is front-loaded in the first sentence, followed by a compact bullet list of use cases and a single usage instruction. No redundant wording skills; every sentence adds information.
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 two-parameter read-only lookup with a complete input schema and an output schema, the description covers the essential invocation details: required ID, optional language, and the semantics of translations. It is sufficient for an agent to select and call it 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?
Schema description coverage is 100%, so the baseline is 3. The description adds an example ID (D015242) and repeats the language translation behavior, but does not substantially expand on the schema's parameter documentation for language or mesh_id.
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?
States a specific verb and resource: 'Get detailed information about a MeSH descriptor by ID.' The bullet list enumerates distinct outputs (scope note, tree numbers, related concepts/synonyms), which differentiates it from siblings like mesh_search or mesh_tree that retrieve sets or hierarchy rather than a single descriptor's details.
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 'Use this tool to' list gives clear contexts: retrieving definitions, tree numbers, and synonyms. It does not mention exclusions or name alternative tools (e.g., 'use mesh_search when you don't have an ID'), so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_qualifiersMeSH Allowable QualifiersARead-onlyIdempotentInspect
Get allowed qualifiers (subheadings) for a MeSH descriptor.
Use this tool to:
Find which qualifiers can be combined with a descriptor
Build precise MeSH search queries
Understand aspects that can be specified
Qualifiers refine descriptors (e.g., "Diabetes Mellitus/drug therapy").
| Name | Required | Description | Default |
|---|---|---|---|
| mesh_id | Yes | MeSH Descriptor ID (e.g., D015242, D003920) |
Output Schema
| Name | Required | Description |
|---|---|---|
| mesh_id | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| qualifiers | Yes | |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds context that qualifiers refine descriptors and gives a concrete example, but it does not describe any nuances like potential result variability or output behavior 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?
The description is well-structured: a clear opening sentence, bulleted use cases, and a short explanatory example. It is mostly front-loaded and free of fluff, though one bullet ('Understand aspects that can be specified') is somewhat redundant with the first bullet.
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 single-parameter read-only lookup tool with a full output schema and comprehensive annotations, the description provides enough context for an agent to select and invoke it correctly. Nothing essential is missing.
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 covers the single parameter mesh_id completely with a pattern and concrete examples. The description does not need to add parameter details, but also does not enrich them. Since schema coverage is 100%, 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 starts with a precise verb and resource: 'Get allowed qualifiers (subheadings) for a MeSH descriptor.' It then clarifies intended use cases like finding combinable qualifiers and building precise search queries, which clearly separates it from sibling tools like mesh_search or mesh_descriptor.
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 tool explicitly lists when to use it: finding which qualifiers can be combined with a descriptor, building precise MeSH search queries, and understanding specifiable aspects. It does not explicitly mention alternatives or when not to use it, so it misses the full 'when-not' guidance needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_searchSearch MeSHARead-onlyIdempotentInspect
Search for MeSH (Medical Subject Headings) descriptors.
Use this tool to:
Find MeSH terms for indexing medical literature
Look up subject headings for PubMed searches
Find controlled vocabulary terms
Set language to request NLM's official translations where they exist (e.g. language: "pt" for Portuguese labels); content is never machine-translated.
Returns matching descriptors with MeSH IDs and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | Match type: exact, contains, or startswith. Default: contains | contains |
| query | Yes | Search term (e.g., "diabetes", "heart failure") | |
| language | No | Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated. | en |
| max_results | No | Maximum number of results (1-100). Default: 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| match | Yes | |
| query | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| descriptors | Yes | |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations, notably that language values request NLM's official translations and that content is never machine-translated, plus the kind of data returned.
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 front-loaded with the core action and uses a scannable bullet list for use cases. The three bullets are somewhat synonymous, creating minor redundancy, but the overall length and structure are still efficient.
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 rich annotations and an output schema, the description is complete enough: it states the purpose, return type, and the unique translation behavior. It doesn't need to explain return structures or auth, leaving only sibling-routing nuance as a minor gap.
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?
Input schema coverage is 100%, so the baseline is 3. The 'language' explanation in the description largely repeats the schema's own language parameter description, and it adds no new detail about query, match, or max_results.
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 identifies the verb ('Search') and resource ('MeSH descriptors'), and states it returns matching descriptors with MeSH IDs and labels. It doesn't explicitly differentiate itself from sibling tools like mesh_descriptor or mesh_tree, though the return-value phrase hints at a search-level result.
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?
A dedicated 'Use this tool to' section lists concrete scenarios: indexing medical literature, PubMed subject headings, and controlled-vocabulary lookups. It gives clear context but does not mention alternatives or when not to use this tool, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_treeMeSH Tree LocationsARead-onlyIdempotentInspect
Get the tree hierarchy location(s) for a MeSH descriptor.
Use this tool to:
See where a term fits in the MeSH hierarchy
Understand broader/narrower relationships
Find related terms in the same branch
MeSH tree numbers show the hierarchical path (e.g., C14.280.647 for Myocardial Infarction).
| Name | Required | Description | Default |
|---|---|---|---|
| mesh_id | Yes | MeSH Descriptor ID (e.g., D015242, D003920) |
Output Schema
| Name | Required | Description |
|---|---|---|
| mesh_id | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| tree_numbers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value by explaining that tree numbers represent hierarchical paths and giving a concrete example, but it does not go deeper into behavior such as pagination, number of multiple tree locations returned, or any edge cases. This is acceptable given the annotations but not exceptional.
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 well-structured: a single-sentence definition, a short bullet list of use cases, and an illustrative example. Every sentence earns its place, and the core purpose is front-loaded.
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 read-only lookup tool with a complete input schema, output schema, and comprehensive annotations, the description provides enough context for an agent to call it correctly. The explanatory example of tree numbering adds helpful domain context without overloading.
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% for the single parameter, including a regex pattern and examples, so the schema already fully documents mesh_id. The description does not need to add parameter-level detail, and indeed does not. Baseline 3 is appropriate when the schema carries the full semantic load.
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 states the exact action ('Get the tree hierarchy location(s)') and the resource ('a MeSH descriptor'), making the tool's purpose unambiguous. It also differentiates from sibling tools like mesh_descriptor and mesh_search by focusing specifically on tree locations, and the tree-number example reinforces what makes this tool unique.
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 use cases ('See where a term fits...', 'Understand broader/narrower relationships', 'Find related terms in the same branch'), effectively telling an agent when this tool is appropriate. However, it does not explicitly name alternative sibling tools or state when to avoid this tool, so it falls short of full explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rxnorm_classesRxNorm Drug ClassesARead-onlyIdempotentInspect
Get therapeutic and pharmacologic classes for a drug.
Use this tool to:
Find the drug class (e.g., "Beta-blockers", "NSAIDs")
Identify therapeutic categories
Look up mechanism of action classifications
Returns class IDs, names, and classification sources.
| Name | Required | Description | Default |
|---|---|---|---|
| rxcui | Yes | RxCUI of the drug |
Output Schema
| Name | Required | Description |
|---|---|---|
| rxcui | Yes | |
| classes | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is known. The description adds that the tool returns class IDs, names, and classification sources, which tells the agent what output to expect. There is no mention of side effects because none exist, and the description reinforces the read-only nature.
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 with the core purpose. The bullet list adds value by giving concrete examples, and the return line is a single efficient sentence. Some bullets overlap conceptually, but overall it is well-structured and not verbose.
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?
With a single parameter and no output schema, the description provides sufficient information: main purpose, use cases, and return contents. It lacks edge-case behavior like empty results, but this is a minor gap for a simple lookup tool. The provided description, combined with the annotations, gives an agent everything needed to call and interpret the 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?
The only parameter, rxcui, is already well described in the schema with a regex pattern and label. The description adds no extra semantic detail about how to obtain the RxCUI or format requirements. Given 100% schema coverage, 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 opening sentence uses a specific verb ('Get') and identifies the exact resource: therapeutic and pharmacologic classes for a drug. Examples like 'Beta-blockers' and 'NSAIDs' clarify the intended output. It does not explicitly name sibling tools, but the RxNorm scope and classification-type language make it distinguishable.
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 'Use this tool to' list provides three concrete scenarios: finding drug class, therapeutic categories, and mechanism of action. This gives clear context for when to invoke it. It stops short of naming alternative tools or exclusion criteria, so it does not fully reach the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rxnorm_conceptRxNorm Concept DetailsARead-onlyIdempotentInspect
Get detailed information about a specific RxNorm concept by RxCUI.
Use this tool to:
Get the full name and synonyms for a drug
Check the concept status (active, remapped, etc.)
View related concepts (ingredients, brands, forms)
Provide an RxCUI (RxNorm Concept Unique Identifier) like "161".
| Name | Required | Description | Default |
|---|---|---|---|
| rxcui | Yes | RxNorm Concept Unique Identifier | |
| include_related | No | Include related concepts (ingredients, brands, dose forms) |
Output Schema
| Name | Required | Description |
|---|---|---|
| tty | Yes | |
| name | Yes | |
| rxcui | Yes | |
| status | Yes | |
| synonym | Yes | |
| umlscui | Yes | |
| language | Yes | |
| suppress | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| remapped_to | Yes | |
| related_groups | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safe, read-onily nature is already machine-readable. The description adds relevant output context like checking active or remapped status, but does not disclose additional behavioral traits such as not-found behavior, pagination, or rate limits; with the annotations covering safety, this is adequate but not rich.
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 and well organized: a direct summary sentence, a short bulleted purpose list, and a final usage note. Every sentence adds value, and the most important information is front-loaded.
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 read-only, single-concept lookup tool, the description fully covers what the tool does, the key use cases, and how to provide the identifier. An output schema exists to handle return-value expectations, and annotations cover the safety and idempotency profile, so nothing crucial is missing.
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 schema already documents both parameters at 100% coverage, so the baseline is 3. The description adds a concrete usage example for rxcui — 'like 161' — and clarifies that related concepts include ingredients, brands, and forms, which reinforces the include_related parameter's meaning. This extra guidance nudges the score above the schema-only baseline.
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 opens with a clear verb-resource pair: 'Get detailed information about a specific RxNorm concept by RxCUI.' This directly distinguishes the tool from search-oriented siblings like rxnorm_search and from resource-specific siblings like rxnorm_ingredients. The bulleted use cases add concrete scope: names, synonyms, status, and related 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 provides explicit 'Use this tool to' guidance with specific use cases, making the intended invocation context clear. However, it does not name alternatives or state when not to use this tool versus a sibling such as rxnorm_search, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rxnorm_ingredientsRxNorm Drug IngredientsARead-onlyIdempotentInspect
Get active ingredients for a drug by RxCUI.
Use this tool to:
Find the active ingredients in a medication
Check for single vs. multiple ingredient products
Identify the generic components of brand drugs
Returns ingredient RxCUIs and names.
| Name | Required | Description | Default |
|---|---|---|---|
| rxcui | Yes | RxCUI of the drug |
Output Schema
| Name | Required | Description |
|---|---|---|
| rxcui | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| ingredients | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the return format (ingredient RxCUIs and names) and implies multi-result behavior for multi-ingredient drugs, but does not disclose edge cases like invalid RxCUI or empty results. This is acceptable for a simple read-only lookup.
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: the primary action is in the first sentence, followed by a bulleted use-case list and a one-line return summary. Every sentence earns its place; no filler or repetition.
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 single-parameter read-only tool with annotations covering safety and an output schema present, the description is fully adequate. It states what the tool does, when to use it, what input is expected, and what it returns. Nothing essential is missing.
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%: the only parameter 'rxcui' is already described as 'RxCUI of the drug' with a numeric pattern. The description merely restates 'by RxCUI' without adding format, examples, or constraints beyond the schema, so 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 opens with a specific verb and resource: 'Get active ingredients for a drug by RxCUI.' It further specifies three concrete use cases (find active ingredients, check single vs. multiple ingredient products, identify generic components) and states the return type (ingredient RxCUIs and names). This clearly distinguishes it from siblings like rxnorm_search, rxnorm_concept, and rxnorm_classes.
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 'Use this tool to' section gives explicit contexts for when this tool is appropriate, such as identifying active ingredients and determining single vs. multi-ingredient products. It does not explicitly name alternatives or state when not to use it, but the context is clear enough that an agent can route to it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rxnorm_ndcRxNorm / NDC MappingARead-onlyIdempotentInspect
Map between RxNorm concepts and National Drug Codes (NDC).
Use this tool to:
Get all NDC codes for a drug (by RxCUI)
Find the RxCUI for an NDC code
Cross-reference between coding systems
Provide either an RxCUI to get NDCs, or an NDC to get the RxCUI.
| Name | Required | Description | Default |
|---|---|---|---|
| ndc | No | NDC code to look up RxCUI (alternative to rxcui) | |
| rxcui | No | RxCUI to get NDC codes for |
Output Schema
| Name | Required | Description |
|---|---|---|
| ndc | Yes | |
| ndcs | Yes | |
| rxcui | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| query_mode | Yes | |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idemPotent, and non-destructive behavior. The description adds value by clarifying the two-way mapping relationship and the either/or parameter expectation. It does not over-extend or contradict annotations.
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, uses bullets for scannability, front-loads the main verb/resource, and contains no filler or repetition of structured fields.
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 two-parameter, no-required-parameter mapping tool with an output schema and full annotations, the description covers the invocation directions suffciently. It does not address edge cases like both parameters being provided, but those are minor for this use case.
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 baseline is 3. The descriptions of ndc and rxcui in the schema already convey their meanings and alternatives. The tool description reinforces the either/or relationship but adds little beyond the schema's own 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 uses a specific verb ('Map') and explicitly states the resource (RxNorm concepts and National Drug Codes). It then itemizes the two main operations: getting NDCs for an RxCUI and finding an RxCUI from an NDC, making its purpose unmistakable.
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 bulleted 'Use this tool to' section gives clear contexts for invocation, and the final line explains which parameter to provide for each direction. It does not explicitly name sibling alternatives or exclude when not to use it, but the directive is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rxnorm_searchSearch RxNorm DrugsARead-onlyIdempotentInspect
Search for drugs in RxNorm (Normalized names for clinical drugs).
Use this tool to:
Find drug concepts by brand or generic name
Look up medications for prescribing
Search for drug formulations
Returns matching drugs with RxCUI identifiers, names, and term types.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Drug name to search (brand or generic) | |
| max_results | No | Maximum number of results (1-100). Default: 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| drugs | Yes | |
| query | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| total_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds modest context by stating results include RxCUI identifiers, names, and term types, but it does not disclose additional behavioral traits such as matching behavior or limitations.
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 front-loaded with the main purpose, followed by concise bullets and a clear return summary. It is well organized and reasonably sized, though the bullets are somewhat repetitive with the opening sentence.
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 search tool with full schema coverage, strong annotations, and an output schema, the description covers purpose, usage contexts, and return contents reasonably well. It could be more complete by pointing to sibling tools for related lookups, but nothing critical is missing.
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 full descriptions for both parameters (query and max_results), so the description adds little beyond what the schema contains. It reinforces that query can be a brand or generic name, but this is already in 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 the tool searches for drugs in RxNorm by brand or generic name, which is a specific verb+resource. It does not explicitly differentiate itself from sibling tools like rxnorm_concept or rxnorm_ingredients, so it misses the highest score for sibling differentiation.
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?
Explicit use cases are listed under 'Use this tool to', including finding drug concepts, looking up medications for prescribing, and searching formulations. However, it does not state when to avoid this tool in favor of siblings such as rxnorm_concept or rxnorm_ndc, so it lacks exclusions/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminology_diffTerminology Version DiffARead-onlyIdempotentInspect
Report what diff data is available between two versions of a terminology.
For most terminologies this is guidance only — the server doesn't ship historical snapshots, so the tool points at the publisher's official changelog and explains the cadence. bundled_versions lists the version(s) this server actually has on hand.
For ICD-10 vs ICD-11 specifically, the tool surfaces a real cross-revision summary from the bundled WHO transition tables (the ICD-10 → ICD-11 case is a structural diff between two WHO revisions). Use terminology: "icd10" with no to_version to get the cross-revision summary: total mapped ICD-10 categories, how many are 1:1 vs split into multiple ICD-11 codes, and the average number of alternatives when split.
Inputs:
terminology(required): which terminology to report on.from_version(optional): the version you have data from. If omitted, the tool reports against the currently-bundled version.to_version(optional): the version you want to compare to. If omitted, the tool reports against the publisher's latest known release.
This tool is intentionally a metadata + guidance layer, not a diff engine — for terminologies that change frequently (SNOMED, LOINC, RxNorm, MeSH), the publisher's official changelog is the authoritative source.
| Name | Required | Description | Default |
|---|---|---|---|
| to_version | No | Version you want to compare to. Optional. | |
| terminology | Yes | Which terminology to report on. | |
| from_version | No | Version you have data from. Optional; behavior depends on terminology. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes | |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| to_version | Yes | |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| terminology | Yes | |
| from_version | Yes | |
| changelog_url | Yes | |
| diff_available | Yes | True when this server has the data to compute a real diff for the requested terminology. False = guidance-only response. |
| bundled_versions | Yes | |
| cross_revision_summary | Yes | Populated only for terminology="icd10" today — the bundled WHO ICD-10 → ICD-11 transition tables let us surface a real structural diff between the two WHO revisions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations. It explains that the server doesn't ship historical snapshots, so most results are guidance only; it introduces `bundled_versions` as the server-side truth; it details the ICD-10/ICD-11 cross-revision special behavior; and it explicitly states the tool is intentionally not a diff engine. These are meaningful behavioral traits not available in the annotations or 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?
The description is well structured: an opening sentence states the purpose, a paragraph handles the general vs ICD-specific behavior, a bulleted input section explains parameters, and a closing caveat frames limits. No sentence is wasted; each one contributes either parameter behavior, output details, or usage boundaries. It's longer than two sentences but the complexity justifies it.
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 complexity (three parameters, a special ICD case, external authoritative fallback, and a non-diff engine posture), the description covers all important aspects. It explains what the tool returns, when to expect guidance vs actual data, what the omitted parameters do, and why the tool should not be used as a diff engine. Since an output schema exists, the missing structured return-format details are not a gap.
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?
Although schema coverage is 100%, the description adds real semantic value beyond the schema's short descriptions: it defines what each optional parameter means ('If omitted, the tool reports against the currently-bundled version' / 'publisher's latest known release'), and it documents a parameter combination (`terminology: "icd10"` with no `to_version`) that triggers the special cross-revision output. This is exactly the kind of usage nuance schema fields rarely convey.
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 says exactly what the tool does: 'Report what diff data is available between two versions of a terminology.' It clearly distinguishes this from actual mapping/diff siblings by calling itself a 'metadata + guidance layer, not a diff engine' and by separating the ordinary guidance case from the ICD-10 vs ICD-11 special case.
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 gives explicit usage guidance: for most terminologies it is guidance-only and points to the publisher's changelog as authoritative; for ICD-10 vs ICD-11 it names the exact inputs (`terminology: "icd10"` with no `to_version`) and the expected output. It does not explicitly name an alternative sibling like `map_icd10_to_icd11`, but its when-not phrasing ('not a diff engine') is clear. One small gap: no direct comparison to the `terminology_versions` sibling for simply listing available versions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminology_versionsTerminology VersionsARead-onlyIdempotentInspect
List the current version, release date, publisher, source URL, and update cadence of every terminology this server queries against.
Useful for pipeline maintainers who need to:
Confirm which release of ICD-11 / SNOMED / LOINC / RxNorm / MeSH / ATC the server is querying before a batch run.
Verify the bundled CID-10 (frozen at V2008) and ICD-10 → ICD-11 transition tables (currently 2025-01) match expectations.
Cite the data version in research artifacts.
Pass terminology to filter to a single entry; otherwise the full set of 8 is returned. The ICD-10 → ICD-11 version reads live from the bundled dataset; everything else is metadata maintained alongside the project release.
| Name | Required | Description | Default |
|---|---|---|---|
| terminology | No | Filter to a single terminology. Omit to return all 8. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| generated | Yes | Date this snapshot was generated. |
| provenance | Yes | Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| terminologies | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already say readOnly/openWorld/idempotent/non-destructive; the description adds genuinely useful behavior: the tool returns the full set of 8 unless filtered, the ICD-10→ICD-11 entry is read live from the bundled dataset, and everything else is project metadata. This exceeds annotation coverage without contradiction.
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 front-loaded with the core function, uses bullets for the target audience, and ends with a concise usage/behavior note. Every sentence earns its place with no tautology or 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?
For a one-parameter, read-only list tool with an output schema present, the description covers the return scope, filtering behavior, special frozen-value case, and live-vs-metadata distinction. No important caller-facing gap remains.
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% and the schema already describes the filter parameter, so the baseline is 3. The description adds meaning by clarifying that CID-10 is frozen at V2008 and by associating the display terminologies (ICD-11, SNOMED, LOINC, RxNorm, MeSH, ATC) with their enum values, which helps agents choose correctly.
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 opening sentence states a precise verb (List) with a specific resource (terminology versions) and enumerates the exact data fields (version, release date, publisher, source URL, update cadence). This is clearly distinct from the sibling lookup/search/diff tools and from terminology_diff.
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 gives concrete use cases: pre-flight checks, verifying frozen CID-10 and ICD-10→ICD-11 transition tables, and citing versions in research. It does not explicitly name sibling alternatives to avoid, but the context is specific enouugh to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_codesValidate Medical CodesARead-onlyIdempotentInspect
Validate a mixed batch of medical codes against their source terminologies. Useful for retrospective analysis of legacy databases — flag codes that no longer exist, surface ICD-10 → ICD-11 replacements, and grade activity status where the terminology exposes it.
For each input { code, terminology }, returns:
valid: whether the code exists in the source terminology.
active: whether the code is currently active. Null when the source doesn't expose an explicit active/inactive distinction at category level (CID-10, ATC, ICD-11, RxNorm, MeSH all return null today; SNOMED and LOINC return a real boolean).
title: the official label/name when available.
replaced_by: a successor code, populated today only for ICD-10 codes that have a primary ICD-11 mapping in the bundled WHO transition tables.
source: human-readable provenance of the validation (terminology + release/version).
error: non-null only when validation couldn't be performed (network error, SNOMED feature flag off, etc.).
valid: false+error: nullmeans "code not found";valid: false+error: setmeans "couldn't validate".
Terminology is required per code — auto-detection isn't supported because category codes like "A00" exist in both ICD-10 and CID-10. Accepted values: icd11, icd10, snomed, loinc, rxnorm, mesh, atc, cid10.
Hard cap of 50 codes per call; codes are validated in parallel through their respective clients, so total wall time scales with the slowest upstream + its rate limit (worst case ~10 s for a full batch hitting ICD-11).
| Name | Required | Description | Default |
|---|---|---|---|
| codes | Yes | List of code+terminology pairs to validate. Hard cap of 50 per call to keep total latency under ~10 s given upstream rate limits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Number of codes submitted. |
| results | Yes | |
| provenance | Yes | One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged) |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| error_count | Yes | How many couldn't be validated due to upstream/network errors. |
| valid_count | Yes | How many were confirmed valid. |
| invalid_count | Yes | How many were not found. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnly and idempotent hints, the description adds substantial behavioral context beyond them: the exact meaning of valid/active/title/replaced_by/source/error, terminology-specific null behavior, ICD-10-only replacement mapping today, error semantics distinguishing 'not found' from 'couldn't validate', and worst-case timing due to parallel upstream calls. This is far beyond what annotations alone provide.
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 long but tightly structured: purpose first, then use case, then a clear field-by-field output breakdown, then constraints and performance expectations. Every sentence adds useful information, and the bullet formatting makes the return semantics easy for an agent to parse.
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 one nested parameter, eight terminologies, nuanced output fields, and multiple sibling tools, yet the description leaves no practical gap. It explains return semantics, error interpretation, terminology requirements, batch limits, and latency behavior, making it fully actionable for an agent even before inspecting an output schema.
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%, and the schema already documents the code field, the terminology enum, the required-term logic, and the maxItems constraint. The description restates and reinforces these details but does not add materially new input-parameter semantics beyond what the schema provides, so 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 names a specific verb and resource: validate a mixed batch of medical codes against their source terminologies. It clearly distinguishes itself from the many single-terminology lookup/search siblings by emphasizing batch, mixed-terminology validation and features like replacement surfacing and activity grading.
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 gives a clear use case ('retrospective analysis of legacy databases') and explains when the tool is appropriate, including the hard 50-code cap and parallel execution behavior. It does not explicitly name sibling alternatives or state when not to use this tool, but the context is clear enough for an agent to select it correctly.
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.
31 tool updates
v1.9.1- Changed
atc_classify4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
atc_lookup4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
atc_members4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
cid10_chapter4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
cid10_chapters4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
cid10_lookup5 fields changed- changed
Output schema / properties / hit / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "causa_obito": { - "type": "string" - }, - "chapter_num": { - "anyOf": [ - { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "classif": { - "type": "string" - }, - "code": { - "type": "string" - }, - "display": { - "type": "string" - }, - "excluidos": { - "type": "string" - }, - "group_range": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "level": { - "enum": [ - "category", - "subcategory" - ], - "type": "string" - }, - "refer": { - "type": "string" - }, - "restr_sexo": { - "type": "string" - }, - "title": { - "type": "string" - }, - "title_short": { - "type": "string" - } - }, - "required": [ - "level", - "code", - "display", - "classif", - "title", - "title_short", - "refer", - "excluidos", - "restr_sexo", - "causa_obito", - "chapter_num", - "group_range" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "causa_obito": { + "type": "string" + }, + "chapter_num": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "classif": { + "type": "string" + }, + "code": { + "type": "string" + }, + "display": { + "type": "string" + }, + "excluidos": { + "type": "string" + }, + "group_range": { + "type": [ + "string", + "null" + ] + }, + "level": { + "enum": [ + "category", + "subcategory" + ], + "type": "string" + }, + "refer": { + "type": "string" + }, + "restr_sexo": { + "type": "string" + }, + "title": { + "type": "string" + }, + "title_short": { + "type": "string" + } + }, + "required": [ + "level", + "code", + "display", + "classif", + "title", + "title_short", + "refer", + "excluidos", + "restr_sexo", + "causa_obito", + "chapter_num", + "group_range" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
cid10_search6 fields changed- removed
Output schema / properties / hits / items / properties / group_range / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / hits / items / properties / group_range / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
find_equivalent24 fields changed- removed
Output schema / properties / provenance / items / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / items / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / items / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / items / properties / license / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / icd11 / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / icd11 / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / icd11 / properties / items / items / properties / uri / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / icd11 / properties / items / items / properties / uri / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / loinc / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / loinc / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / loinc / properties / items / items / properties / uri / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / loinc / properties / items / items / properties / uri / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / mesh / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / mesh / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / mesh / properties / items / items / properties / uri / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / mesh / properties / items / items / properties / uri / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / rxnorm / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / rxnorm / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / rxnorm / properties / items / items / properties / uri / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / rxnorm / properties / items / items / properties / uri / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / snomed / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / snomed / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / properties / snomed / properties / items / items / properties / uri / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / properties / snomed / properties / items / items / properties / uri / typeAdded value: +[ + "string", + "null" +]
- Changed
icd11_chapters12 fields changed- removed
Output schema / properties / chapters / items / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / chapters / items / properties / code / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / chapters / items / properties / code_range / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / chapters / items / properties / code_range / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / chapters / items / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / chapters / items / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / chapters / items / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / chapters / items / properties / title / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
icd11_hierarchy8 fields changed- removed
Output schema / properties / entities / items / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / entities / items / properties / code / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / entities / items / properties / code_range / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / entities / items / properties / code_range / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
icd11_lookup22 fields changed- removed
Output schema / properties / block_id / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / block_id / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / browser_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / browser_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / class_kind / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / class_kind / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / code / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / code_range / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / code_range / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / coding_note / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / coding_note / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / definition / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / definition / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / diagnostic_criteria / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / diagnostic_criteria / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / long_definition / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / long_definition / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
icd11_postcoordination4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
icd11_search6 fields changed- removed
Output schema / properties / entities / items / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / entities / items / properties / code / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
loinc_answers4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
loinc_details6 fields changed- removed
Output schema / properties / external_copyright_notice / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / external_copyright_notice / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
loinc_panels4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
loinc_search6 fields changed- removed
Output schema / properties / items / items / properties / external_copyright_notice / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / items / items / properties / external_copyright_notice / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
map_icd10_to_icd114 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
map_loinc_to_snomed7 fields changed- changed
Output schema / properties / loinc_details / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "component": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "long_common_name": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "property": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "system": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "code", - "long_common_name", - "component", - "system", - "property" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "component": { + "type": [ + "string", + "null" + ] + }, + "long_common_name": { + "type": [ + "string", + "null" + ] + }, + "property": { + "type": [ + "string", + "null" + ] + }, + "system": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code", + "long_common_name", + "component", + "system", + "property" + ], + "type": "object" + }, + { + "type": "null" + } +] - removed
Output schema / properties / mapping_sources / items / properties / url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / mapping_sources / items / properties / url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
mesh_descriptor4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
mesh_qualifiers4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
mesh_search4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
mesh_tree4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
rxnorm_classes4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
rxnorm_concept4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
rxnorm_ingredients4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
rxnorm_ndc8 fields changed- removed
Output schema / properties / ndc / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / ndc / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / rxcui / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / rxcui / typeAdded value: +[ + "string", + "null" +]
- Changed
rxnorm_search4 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +]
- Changed
terminology_diff10 fields changed- removed
Output schema / properties / changelog_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / changelog_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / from_version / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / from_version / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / to_version / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / to_version / typeAdded value: +[ + "string", + "null" +]
- Changed
terminology_versions8 fields changed- removed
Output schema / properties / provenance / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / properties / license / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / terminologies / items / properties / changelog_url / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / terminologies / items / properties / changelog_url / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / terminologies / items / properties / notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / terminologies / items / properties / notes / typeAdded value: +[ + "string", + "null" +]
- Changed
validate_codes12 fields changed- removed
Output schema / properties / provenance / items / properties / data_vintage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / items / properties / data_vintage / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / provenance / items / properties / license / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / provenance / items / properties / license / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / active / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / active / typeAdded value: +[ + "boolean", + "null" +] - removed
Output schema / properties / results / items / properties / error / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / error / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / replaced_by / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / replaced_by / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / results / items / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / results / items / properties / title / typeAdded value: +[ + "string", + "null" +]
31 tool updates
v1.8.0- Changed
atc_classify3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "drug_name", - "matches" -]New value: +[ + "drug_name", + "matches", + "provenance", + "attribution" +]
- Changed
atc_lookup3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "atc_code", - "found", - "details" -]New value: +[ + "atc_code", + "found", + "details", + "provenance", + "attribution" +]
- Changed
atc_members3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "atc_code", - "members" -]New value: +[ + "atc_code", + "members", + "provenance", + "attribution" +]
- Changed
cid10_chapter3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "num", - "found", - "chapter", - "groups" -]New value: +[ + "num", + "found", + "chapter", + "groups", + "provenance", + "attribution" +]
- Changed
cid10_chapters3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "chapters" -]New value: +[ + "chapters", + "provenance", + "attribution" +]
- Changed
cid10_lookup3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "code", - "found", - "hit" -]New value: +[ + "code", + "found", + "hit", + "provenance", + "attribution" +]
- Changed
cid10_search3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query", - "level", - "total_count", - "shown_count", - "hits" -]New value: +[ + "query", + "level", + "total_count", + "shown_count", + "hits", + "provenance", + "attribution" +]
- Changed
find_equivalent26 fields changed- added
Input schema / properties / limitAdded value: +{ + "description": "Maximum candidates returned PER terminology (1-10, default 5). This is a cap, not a page: the live fan-out has no stable cursor across five upstreams, so raise the limit instead of paging.", + "maximum": 10, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / groupsAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "members": { + "items": { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "match_score": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "terminology": { + "enum": [ + "icd11", + "snomed", + "loinc", + "rxnorm", + "mesh" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "terminology", + "code", + "title", + "match_score" + ], + "type": "object" + }, + "type": "array" + }, + "normalized_title": { + "type": "string" + }, + "terminologies": { + "items": { + "enum": [ + "icd11", + "snomed", + "loinc", + "rxnorm", + "mesh" + ], + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "normalized_title", + "terminologies", + "members" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)", + "items": { + "additionalProperties": false, + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / rankingAdded value: +{ + "additionalProperties": false, + "properties": { + "method": { + "const": "lexical", + "type": "string" + }, + "note": { + "type": "string" + } + }, + "required": [ + "method", + "note" + ], + "type": "object" +} - added
Output schema / properties / results / properties / icd11 / properties / items / items / properties / match_scoreAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Output schema / properties / results / properties / icd11 / properties / items / items / properties / rankAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / results / properties / icd11 / properties / items / items / properties / uriAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / results / properties / icd11 / properties / items / items / requiredPrevious value: -[ - "code", - "title" -]New value: +[ + "code", + "title", + "uri", + "match_score", + "rank" +] - added
Output schema / properties / results / properties / loinc / properties / items / items / properties / match_scoreAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Output schema / properties / results / properties / loinc / properties / items / items / properties / rankAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / results / properties / loinc / properties / items / items / properties / uriAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / results / properties / loinc / properties / items / items / requiredPrevious value: -[ - "code", - "title" -]New value: +[ + "code", + "title", + "uri", + "match_score", + "rank" +] - added
Output schema / properties / results / properties / mesh / properties / items / items / properties / match_scoreAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Output schema / properties / results / properties / mesh / properties / items / items / properties / rankAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / results / properties / mesh / properties / items / items / properties / uriAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / results / properties / mesh / properties / items / items / requiredPrevious value: -[ - "code", - "title" -]New value: +[ + "code", + "title", + "uri", + "match_score", + "rank" +] - added
Output schema / properties / results / properties / rxnorm / properties / items / items / properties / match_scoreAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Output schema / properties / results / properties / rxnorm / properties / items / items / properties / rankAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / results / properties / rxnorm / properties / items / items / properties / uriAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / results / properties / rxnorm / properties / items / items / requiredPrevious value: -[ - "code", - "title" -]New value: +[ + "code", + "title", + "uri", + "match_score", + "rank" +] - added
Output schema / properties / results / properties / snomed / properties / items / items / properties / match_scoreAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Output schema / properties / results / properties / snomed / properties / items / items / properties / rankAdded value: +{ + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / results / properties / snomed / properties / items / items / properties / uriAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / results / properties / snomed / properties / items / items / requiredPrevious value: -[ - "code", - "title" -]New value: +[ + "code", + "title", + "uri", + "match_score", + "rank" +] - changed
Output schema / requiredPrevious value: -[ - "term", - "source_terminology", - "searched_terminologies", - "results" -]New value: +[ + "term", + "source_terminology", + "searched_terminologies", + "results", + "groups", + "ranking", + "provenance", + "attribution" +]
- Changed
icd11_chapters4 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language code (default: en)"New value: +"Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated." - added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "chapters" -]New value: +[ + "chapters", + "provenance", + "attribution" +]
- Changed
icd11_hierarchy3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "code", - "direction", - "entities" -]New value: +[ + "code", + "direction", + "entities", + "provenance", + "attribution" +]
- Changed
icd11_lookup4 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language code (default: en)"New value: +"Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated." - added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "code", - "code_range", - "uri", - "title", - "class_kind", - "block_id", - "definition", - "long_definition", - "diagnostic_criteria", - "coding_note", - "exclusions", - "inclusions", - "index_terms", - "browser_url" -]New value: +[ + "code", + "code_range", + "uri", + "title", + "class_kind", + "block_id", + "definition", + "long_definition", + "diagnostic_criteria", + "coding_note", + "exclusions", + "inclusions", + "index_terms", + "browser_url", + "provenance", + "attribution" +]
- Changed
icd11_postcoordination3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "code", - "axes" -]New value: +[ + "code", + "axes", + "provenance", + "attribution" +]
- Changed
icd11_search4 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language code (default: en)"New value: +"Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated." - added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query", - "total_count", - "entities" -]New value: +[ + "query", + "total_count", + "entities", + "provenance", + "attribution" +]
- Changed
loinc_answers3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "loinc_num", - "answers" -]New value: +[ + "loinc_num", + "answers", + "provenance", + "attribution" +]
- Changed
loinc_details4 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / external_copyright_noticeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "loinc_num", - "long_common_name", - "short_name", - "component", - "property", - "time_aspect", - "system", - "scale_type", - "method_type", - "class", - "status" -]New value: +[ + "loinc_num", + "long_common_name", + "short_name", + "component", + "property", + "time_aspect", + "system", + "scale_type", + "method_type", + "class", + "status", + "external_copyright_notice", + "provenance", + "attribution" +]
- Changed
loinc_panels3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "loinc_num", - "panel" -]New value: +[ + "loinc_num", + "panel", + "provenance", + "attribution" +]
- Changed
loinc_search5 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / items / items / properties / external_copyright_noticeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "loinc_num", - "long_common_name", - "short_name", - "component", - "property", - "time_aspect", - "system", - "scale_type", - "method_type", - "class", - "status" -]New value: +[ + "loinc_num", + "long_common_name", + "short_name", + "component", + "property", + "time_aspect", + "system", + "scale_type", + "method_type", + "class", + "status", + "external_copyright_notice" +] - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query", - "total_count", - "shown_count", - "items" -]New value: +[ + "query", + "total_count", + "shown_count", + "items", + "provenance", + "attribution" +]
- Changed
map_icd10_to_icd113 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query", - "found", - "icd10", - "primary", - "alternatives", - "source" -]New value: +[ + "query", + "found", + "icd10", + "primary", + "alternatives", + "source", + "provenance", + "attribution" +]
- Changed
map_loinc_to_snomed3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "loinc_code", - "loinc_details", - "status", - "guidance", - "mapping_sources" -]New value: +[ + "loinc_code", + "loinc_details", + "status", + "guidance", + "mapping_sources", + "provenance", + "attribution" +]
- Changed
mesh_descriptor4 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language code (default: en)"New value: +"Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated." - added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "id", - "uri", - "label", - "scope_note", - "tree_numbers", - "concepts", - "qualifiers" -]New value: +[ + "id", + "uri", + "label", + "scope_note", + "tree_numbers", + "concepts", + "qualifiers", + "provenance", + "attribution" +]
- Changed
mesh_qualifiers3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "mesh_id", - "qualifiers" -]New value: +[ + "mesh_id", + "qualifiers", + "provenance", + "attribution" +]
- Changed
mesh_search4 fields changed- changed
Input schema / properties / language / descriptionPrevious value: -"Language code (default: en)"New value: +"Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated." - added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query", - "match", - "total_count", - "descriptors" -]New value: +[ + "query", + "match", + "total_count", + "descriptors", + "provenance", + "attribution" +]
- Changed
mesh_tree3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "mesh_id", - "tree_numbers" -]New value: +[ + "mesh_id", + "tree_numbers", + "provenance", + "attribution" +]
- Changed
rxnorm_classes3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "rxcui", - "classes" -]New value: +[ + "rxcui", + "classes", + "provenance", + "attribution" +]
- Changed
rxnorm_concept3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "rxcui", - "name", - "synonym", - "tty", - "language", - "suppress", - "umlscui", - "status", - "remapped_to", - "related_groups" -]New value: +[ + "rxcui", + "name", + "synonym", + "tty", + "language", + "suppress", + "umlscui", + "status", + "remapped_to", + "related_groups", + "provenance", + "attribution" +]
- Changed
rxnorm_ingredients3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "rxcui", - "ingredients" -]New value: +[ + "rxcui", + "ingredients", + "provenance", + "attribution" +]
- Changed
rxnorm_ndc3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query_mode", - "rxcui", - "ndc", - "ndcs" -]New value: +[ + "query_mode", + "rxcui", + "ndc", + "ndcs", + "provenance", + "attribution" +]
- Changed
rxnorm_search3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "query", - "total_count", - "drugs" -]New value: +[ + "query", + "total_count", + "drugs", + "provenance", + "attribution" +]
- Changed
terminology_diff3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "terminology", - "from_version", - "to_version", - "diff_available", - "message", - "changelog_url", - "bundled_versions", - "cross_revision_summary" -]New value: +[ + "terminology", + "from_version", + "to_version", + "diff_available", + "message", + "changelog_url", + "bundled_versions", + "cross_revision_summary", + "provenance", + "attribution" +]
- Changed
terminology_versions3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "additionalProperties": false, + "description": "Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license", + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "generated", - "total", - "terminologies" -]New value: +[ + "generated", + "total", + "terminologies", + "provenance", + "attribution" +]
- Changed
validate_codes3 fields changed- added
Output schema / properties / attributionAdded value: +{ + "description": "Canonical source URLs of this response (attribution list)", + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / provenanceAdded value: +{ + "description": "One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)", + "items": { + "additionalProperties": false, + "properties": { + "citation": { + "description": "Ready-to-use citation/attribution string", + "type": "string" + }, + "data_vintage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Version/release of the data as exposed by the source; null when not exposed" + }, + "license": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "License / legal regime of the data" + }, + "retrieved_at": { + "description": "Real instant of the upstream extraction (ISO-8601, UTC). Responses served from cache keep the ORIGINAL fetch instant.", + "type": "string" + }, + "source": { + "description": "Official upstream source of this data", + "type": "string" + }, + "source_url": { + "description": "Canonical URL of the source (API base or dataset release)", + "type": "string" + } + }, + "required": [ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "citation", + "license" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "total", - "valid_count", - "invalid_count", - "error_count", - "results" -]New value: +[ + "total", + "valid_count", + "invalid_count", + "error_count", + "results", + "provenance", + "attribution" +]
31 tool updates
v1.5.7- Changed
atc_classify1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
atc_lookup1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
atc_members1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
cid10_chapter4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / chapter / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "code_end": { - "type": "string" - }, - "code_start": { - "type": "string" - }, - "num": { - "type": "integer" - }, - "title": { - "type": "string" - }, - "title_short": { - "type": "string" - } - }, - "required": [ - "num", - "code_start", - "code_end", - "title", - "title_short" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "code_end": { + "type": "string" + }, + "code_start": { + "type": "string" + }, + "num": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "title": { + "type": "string" + }, + "title_short": { + "type": "string" + } + }, + "required": [ + "num", + "code_start", + "code_end", + "title", + "title_short" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / num / maximumAdded value: +9007199254740991 - added
Output schema / properties / num / minimumAdded value: +-9007199254740991
- Changed
cid10_chapters3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / chapters / items / properties / num / maximumAdded value: +9007199254740991 - added
Output schema / properties / chapters / items / properties / num / minimumAdded value: +-9007199254740991
- Changed
cid10_lookup2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / hit / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "causa_obito": { - "type": "string" - }, - "chapter_num": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "classif": { - "type": "string" - }, - "code": { - "type": "string" - }, - "display": { - "type": "string" - }, - "excluidos": { - "type": "string" - }, - "group_range": { - "type": [ - "string", - "null" - ] - }, - "level": { - "enum": [ - "category", - "subcategory" - ], - "type": "string" - }, - "refer": { - "type": "string" - }, - "restr_sexo": { - "type": "string" - }, - "title": { - "type": "string" - }, - "title_short": { - "type": "string" - } - }, - "required": [ - "level", - "code", - "display", - "classif", - "title", - "title_short", - "refer", - "excluidos", - "restr_sexo", - "causa_obito", - "chapter_num", - "group_range" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "causa_obito": { + "type": "string" + }, + "chapter_num": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "classif": { + "type": "string" + }, + "code": { + "type": "string" + }, + "display": { + "type": "string" + }, + "excluidos": { + "type": "string" + }, + "group_range": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "level": { + "enum": [ + "category", + "subcategory" + ], + "type": "string" + }, + "refer": { + "type": "string" + }, + "restr_sexo": { + "type": "string" + }, + "title": { + "type": "string" + }, + "title_short": { + "type": "string" + } + }, + "required": [ + "level", + "code", + "display", + "classif", + "title", + "title_short", + "refer", + "excluidos", + "restr_sexo", + "causa_obito", + "chapter_num", + "group_range" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
cid10_search8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / hits / items / properties / chapter_num / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +] - added
Output schema / properties / hits / items / properties / group_range / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / hits / items / properties / group_range / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / shown_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / shown_count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / total_count / minimumAdded value: +-9007199254740991
- Changed
find_equivalent11 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / results / properties / icd11 / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / properties / icd11 / properties / error / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / results / properties / loinc / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / properties / loinc / properties / error / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / results / properties / mesh / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / properties / mesh / properties / error / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / results / properties / rxnorm / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / properties / rxnorm / properties / error / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / results / properties / snomed / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / properties / snomed / properties / error / typeRemoved value: -[ - "string", - "null" -]
- Changed
icd11_chapters11 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / chapters / items / properties / code / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / chapters / items / properties / code / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / chapters / items / properties / code_range / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / chapters / items / properties / code_range / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / chapters / items / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / chapters / items / properties / error / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / chapters / items / properties / number / maximumAdded value: +9007199254740991 - added
Output schema / properties / chapters / items / properties / number / minimumAdded value: +-9007199254740991 - added
Output schema / properties / chapters / items / properties / title / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / chapters / items / properties / title / typeRemoved value: -[ - "string", - "null" -]
- Changed
icd11_hierarchy5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / entities / items / properties / code / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / entities / items / properties / code / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / entities / items / properties / code_range / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / entities / items / properties / code_range / typeRemoved value: -[ - "string", - "null" -]
- Changed
icd11_lookup19 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / block_id / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / block_id / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / browser_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / browser_url / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / class_kind / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / class_kind / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / code / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / code / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / code_range / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / code_range / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / coding_note / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / coding_note / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / definition / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / definition / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / diagnostic_criteria / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / diagnostic_criteria / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / long_definition / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / long_definition / typeRemoved value: -[ - "string", - "null" -]
- Changed
icd11_postcoordination2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / axes / items / properties / value_count / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } +]
- Changed
icd11_search5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / entities / items / properties / code / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / entities / items / properties / code / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / total_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / total_count / minimumAdded value: +-9007199254740991
- Changed
loinc_answers3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / answers / items / properties / sequence / maximumAdded value: +9007199254740991 - added
Output schema / properties / answers / items / properties / sequence / minimumAdded value: +-9007199254740991
- Changed
loinc_details1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
loinc_panels2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / panel / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "items": { - "items": { - "additionalProperties": false, - "properties": { - "loinc_num": { - "type": "string" - }, - "name": { - "type": "string" - }, - "required": { - "type": "boolean" - }, - "sequence": { - "type": "integer" - } - }, - "required": [ - "sequence", - "loinc_num", - "name", - "required" - ], - "type": "object" - }, - "type": "array" - }, - "loinc_num": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "loinc_num", - "name", - "items" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": false, + "properties": { + "loinc_num": { + "type": "string" + }, + "name": { + "type": "string" + }, + "required": { + "type": "boolean" + }, + "sequence": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "sequence", + "loinc_num", + "name", + "required" + ], + "type": "object" + }, + "type": "array" + }, + "loinc_num": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "loinc_num", + "name", + "items" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
loinc_search5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / shown_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / shown_count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / total_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / total_count / minimumAdded value: +-9007199254740991
- Changed
map_icd10_to_icd115 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / alternatives / items / properties / depth / maximumAdded value: +9007199254740991 - added
Output schema / properties / alternatives / items / properties / depth / minimumAdded value: +-9007199254740991 - changed
Output schema / properties / icd10 / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "chapter": { - "type": "string" - }, - "code": { - "type": "string" - }, - "depth": { - "type": "integer" - }, - "title": { - "type": "string" - } - }, - "required": [ - "code", - "title", - "chapter", - "depth" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "chapter": { + "type": "string" + }, + "code": { + "type": "string" + }, + "depth": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "title": { + "type": "string" + } + }, + "required": [ + "code", + "title", + "chapter", + "depth" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / primary / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "chapter": { - "type": "string" - }, - "classKind": { - "type": "string" - }, - "code": { - "type": "string" - }, - "depth": { - "type": "integer" - }, - "foundationUri": { - "type": "string" - }, - "linearizationUri": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "required": [ - "code", - "title", - "chapter", - "foundationUri", - "linearizationUri", - "classKind", - "depth" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "chapter": { + "type": "string" + }, + "classKind": { + "type": "string" + }, + "code": { + "type": "string" + }, + "depth": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "foundationUri": { + "type": "string" + }, + "linearizationUri": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "code", + "title", + "chapter", + "foundationUri", + "linearizationUri", + "classKind", + "depth" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
map_loinc_to_snomed4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Output schema / properties / loinc_details / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "component": { - "type": [ - "string", - "null" - ] - }, - "long_common_name": { - "type": [ - "string", - "null" - ] - }, - "property": { - "type": [ - "string", - "null" - ] - }, - "system": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "code", - "long_common_name", - "component", - "system", - "property" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "component": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "long_common_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "property": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "system": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "code", + "long_common_name", + "component", + "system", + "property" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / mapping_sources / items / properties / url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / mapping_sources / items / properties / url / typeRemoved value: -[ - "string", - "null" -]
- Changed
mesh_descriptor1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
mesh_qualifiers1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
mesh_search3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / total_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / total_count / minimumAdded value: +-9007199254740991
- Changed
mesh_tree1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
rxnorm_classes1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
rxnorm_concept1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
rxnorm_ingredients1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
rxnorm_ndc5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / ndc / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / ndc / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / rxcui / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rxcui / typeRemoved value: -[ - "string", - "null" -]
- Changed
rxnorm_search3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / total_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / total_count / minimumAdded value: +-9007199254740991
- Changed
terminology_diff8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / changelog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / changelog_url / typeRemoved value: -[ - "string", - "null" -] - changed
Output schema / properties / cross_revision_summary / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "avg_alternatives_when_split": { - "type": "number" - }, - "icd10_categories_total": { - "type": "integer" - }, - "one_to_many_splits": { - "type": "integer" - }, - "one_to_one_mappings": { - "type": "integer" - } - }, - "required": [ - "icd10_categories_total", - "one_to_one_mappings", - "one_to_many_splits", - "avg_alternatives_when_split" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "avg_alternatives_when_split": { + "type": "number" + }, + "icd10_categories_total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "one_to_many_splits": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "one_to_one_mappings": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "icd10_categories_total", + "one_to_one_mappings", + "one_to_many_splits", + "avg_alternatives_when_split" + ], + "type": "object" + }, + { + "type": "null" + } +] - added
Output schema / properties / from_version / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / from_version / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / to_version / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / to_version / typeRemoved value: -[ - "string", - "null" -]
- Changed
terminology_versions7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Output schema / properties / terminologies / items / properties / changelog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / terminologies / items / properties / changelog_url / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / terminologies / items / properties / notes / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / terminologies / items / properties / notes / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991
- Changed
validate_codes18 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / codes / items / additionalPropertiesRemoved value: -false - added
Output schema / properties / error_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / error_count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / invalid_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / invalid_count / minimumAdded value: +-9007199254740991 - added
Output schema / properties / results / items / properties / active / anyOfAdded value: +[ + { + "type": "boolean" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / active / typeRemoved value: -[ - "boolean", - "null" -] - added
Output schema / properties / results / items / properties / error / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / error / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / results / items / properties / replaced_by / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / replaced_by / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / results / items / properties / title / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / results / items / properties / title / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / total / maximumAdded value: +9007199254740991 - added
Output schema / properties / total / minimumAdded value: +-9007199254740991 - added
Output schema / properties / valid_count / maximumAdded value: +9007199254740991 - added
Output schema / properties / valid_count / minimumAdded value: +-9007199254740991
2 tool updates
v1.5.0- Changed
map_icd10_to_icd111 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "alternatives": { + "description": "Additional ICD-11 candidates WHO documents for this ICD-10 code. Empty when the primary is the only documented mapping (or when found=false). 1,461 of the 11,243 indexed codes have non-empty alternatives.", + "items": { + "additionalProperties": false, + "properties": { + "chapter": { + "type": "string" + }, + "classKind": { + "type": "string" + }, + "code": { + "type": "string" + }, + "depth": { + "type": "integer" + }, + "foundationUri": { + "type": "string" + }, + "linearizationUri": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "code", + "title", + "chapter", + "foundationUri", + "linearizationUri", + "classKind", + "depth" + ], + "type": "object" + }, + "type": "array" + }, + "found": { + "description": "Whether the code is in the WHO ICD-10 → ICD-11 transition table.", + "type": "boolean" + }, + "icd10": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "chapter": { + "type": "string" + }, + "code": { + "type": "string" + }, + "depth": { + "type": "integer" + }, + "title": { + "type": "string" + } + }, + "required": [ + "code", + "title", + "chapter", + "depth" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Source ICD-10 entry from the WHO table. Null when found=false." + }, + "primary": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "chapter": { + "type": "string" + }, + "classKind": { + "type": "string" + }, + "code": { + "type": "string" + }, + "depth": { + "type": "integer" + }, + "foundationUri": { + "type": "string" + }, + "linearizationUri": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "code", + "title", + "chapter", + "foundationUri", + "linearizationUri", + "classKind", + "depth" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Primary 1:1 ICD-11 mapping. Null when found=false." + }, + "query": { + "description": "The ICD-10 code as submitted (raw, before normalization).", + "type": "string" + }, + "source": { + "additionalProperties": false, + "properties": { + "publisher": { + "description": "Authoritative publisher (e.g. \"WHO\").", + "type": "string" + }, + "release_date": { + "description": "ISO date string for the release.", + "type": "string" + }, + "version": { + "description": "Transition table release identifier (e.g. \"2025-01\").", + "type": "string" + } + }, + "required": [ + "publisher", + "version", + "release_date" + ], + "type": "object" + } + }, + "required": [ + "query", + "found", + "icd10", + "primary", + "alternatives", + "source" + ], + "type": "object" +}
- Changed
map_loinc_to_snomed1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": false, + "properties": { + "guidance": { + "description": "Short human-readable explanation of why this tool returns guidance instead of a mapping.", + "type": "string" + }, + "loinc_code": { + "description": "The LOINC code as submitted.", + "type": "string" + }, + "loinc_details": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "type": "string" + }, + "component": { + "type": [ + "string", + "null" + ] + }, + "long_common_name": { + "type": [ + "string", + "null" + ] + }, + "property": { + "type": [ + "string", + "null" + ] + }, + "system": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "code", + "long_common_name", + "component", + "system", + "property" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "NLM Clinical Tables details for the LOINC code (component, system, property, etc.). Null when the code was not found upstream." + }, + "mapping_sources": { + "description": "Structured list of authoritative LOINC → SNOMED CT mapping sources (UMLS Metathesaurus, LOINC SNOMED CT Expression Association, Regenstrief RELMA).", + "items": { + "additionalProperties": false, + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "url": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "name", + "description", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "description": "Always \"guidance-only\" — direct LOINC → SNOMED CT mappings require licensed sources (UMLS Metathesaurus or LOINC SNOMED CT Expression Association). This tool returns pointers, not the mapping itself.", + "enum": [ + "guidance-only" + ], + "type": "string" + } + }, + "required": [ + "loinc_code", + "loinc_details", + "status", + "guidance", + "mapping_sources" + ], + "type": "object" +}
5 tool updates
v1.4.0- Changed
mesh_descriptor1 field changed- added
Input schema / properties / languageAdded value: +{ + "default": "en", + "description": "Language code (default: en)", + "enum": [ + "en", + "es", + "pt", + "fr", + "de", + "it", + "zh", + "ja", + "ar", + "ru" + ], + "type": "string" +}
- Changed
mesh_search1 field changed- added
Input schema / properties / languageAdded value: +{ + "default": "en", + "description": "Language code (default: en)", + "enum": [ + "en", + "es", + "pt", + "fr", + "de", + "it", + "zh", + "ja", + "ar", + "ru" + ], + "type": "string" +}
- Added
terminology_diff - Added
terminology_versions - Added
validate_codes
28 tool updates
v1.2.1- First observed
atc_classify - First observed
atc_lookup - First observed
atc_members - First observed
cid10_chapter - First observed
cid10_chapters - First observed
cid10_lookup - First observed
cid10_search - First observed
find_equivalent - First observed
icd11_chapters - First observed
icd11_hierarchy - First observed
icd11_lookup - First observed
icd11_postcoordination - First observed
icd11_search - First observed
loinc_answers - First observed
loinc_details - First observed
loinc_panels - First observed
loinc_search - First observed
map_icd10_to_icd11 - First observed
map_loinc_to_snomed - First observed
mesh_descriptor - First observed
mesh_qualifiers - First observed
mesh_search - First observed
mesh_tree - First observed
rxnorm_classes - First observed
rxnorm_concept - First observed
rxnorm_ingredients - First observed
rxnorm_ndc - First observed
rxnorm_search
TDQS
Tools are namespaced by terminology (icd11_, mesh_, loinc_, rxnorm_, cid10_, atc_) and each namespace separates search, lookup, and hierarchy/metadata operations. Cross-cutting tools like find_equivalent, map_icd10_to_icd11, and validate_codes have clearly non-overlapping purposes, so an agent can reliably pick the right tool.
All tool names use snake_case and follow a predictable `<terminology>_<operation>` convention, with mapping and validation tools using clear verb phrases. Minor plural/singular differences like cid10_chapters vs cid10_chapter are internally consistent and readable.
31 tools is high, but the server intentionally spans eight medical terminologies plus cross-cutting mapping, validation, and versioning utilities, and no tool is redundant. The count sits above the typical well-scoped range but is reasonable for the server's broad stated purpose.
Coverage is deep for ICD-11, MeSH, LOINC, RxNorm, CID-10, and ATC, including hierarchy, postcoordination, qualifiers, and mappings. Direct SNOMED search/detail tools and a dedicated international ICD-10 lookup are noticable gaps, though find_equivalent and validate_codes partially mitigate them.
Maintenance
Related MCP Connectors
Hosted MCP server exposing US hospital procedure cost data to AI assistants
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA FastAPI backend service that connects to Azure's Managed Chat Project using GPT-4o to provide medical chatbot functionality through a simple HTML interface.-
- AlicenseBqualityFmaintenanceAn MCP server that provides comprehensive medical information by querying multiple authoritative medical APIs including FDA, WHO, PubMed, Google Scholar, and RxNorm.351171111MIT
- AlicenseNot gradedqualityFmaintenanceProvides comprehensive medical information by querying authoritative sources including FDA drug database, WHO health statistics, PubMed literature, RxNorm nomenclature, Google Scholar, and Australia's PBS API through 22+ specialized tools.713MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI-powered medical information retrieval through FHIR clinical document search and GraphRAG-based exploration of medical entities and relationships. Combines vector search with knowledge graph queries for comprehensive healthcare data analysis.MIT
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/SidneyBissoli/medical-terminologies-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server