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
33 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 the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower; the description still adds useful behavior – return cardinality ('one entry per ATC code'), the single-ingredient vs combination-product distinction, and the NLM RxClass source. This is meaningful context beyond the structured fields.
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?
Front-loaded with the core action, then a tight bulleted list, then return-shape notes. Structure is clean and scannable; the bullets border on restating the purpose but remain compact.
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 annotations carrying safety hints and an output schema handling the return shape, the description supplies the remaining essentials: cardinality of results and the combination-product caveat. An agent has enough to call it correctly, though the missing sibling differentiation with atc_lookup is a small 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?
Schema description coverage is 100% and the schema itself documents drug_name as brand or generic with an example. The description repeats an example ('metformin') but adds no syntax, format, or edge-case semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Look up the WHO ATC classification(s) for a drug by name', with a concrete example mapping ("metformin" → A10BA02). It does not differentiate itself from the sibling atc_lookup, which appears to address the same domain, leaving the agent to guess which to pick.
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 context (finding ATC codes, class hierarchy, cross-referencing), but they largely restate the purpose rather than stating when this tool is preferred over atc_lookup or atc_members. No exclusions or alternative routing is provided.
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 cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds real scope context: the endpoint does not expose substance-level 7-char codes and maps code length to hierarchy level, which is behavior an agent needs. It stops short of covering error handling on invalid codes.
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?
Front-loaded purpose followed by a bulleted use-case list and a param note; every element earns its place. Minor redundancy: the substance-level caveat is repeated verbatim in both the description and the schema property.
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 fully-documented parameter and an output schema that carries return values, the description supplies everything needed to invoke correctly, including the level semantics and the boundary against the sibling that handles substance codes.
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, but the description goes further by mapping each code length to a semantic level ('A' anatomical, 'A10' therapeutic, 'A10B' pharmacological, 'A10BA' chemical), which interprets the pattern rather than just restating it.
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 (look up an ATC code to get its name and hierarchy level) and pins the scope to levels 1-4. It also distinguishes itself from the sibling atc_classify, so an agent can route without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'Use this tool to' list (resolve, confirm existence, identify level) and names an alternative plus the condition that selects it: substance-level 7-char codes are not exposed, use atc_classify instead. Both the when and the when-not are present.
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 cover the safety profile (readOnly, idempotent, non-destructive), so the description rightly focuses on other behavior: each member carries source_atc_code for disambiguation, class levels 1-4 return all substances while 5 returns one, and RxNorm's catalog is US-centric while ATC codes are international. That is genuine added context beyond the structured fields.
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?
Front-loads the purpose in a single sentence, then uses a compact bulleted list for usage variants. Slightly repetitive (the level-1-4/level-5 behavior appears in both schema and prose), which keeps it from a 5.
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, return values need not be explained, and the description still adds the source_atc_code field note and the US-centric vs international caveat. It omits any mention of result size, ordering, or pagination for potentially large classes, a minor gap for a subtree-expansion tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the atc_code regex and the level-1-4 vs level-5 behavior that the description restates. The description adds no syntax or format detail the schema lacks, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'List the drugs (substances) that belong to an ATC class.' The scope is unmistakable and an agent can distinguish it from classification/lookup siblings like atc_classify or atc_lookup based on the phrasing alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides three concrete use cases (enumerate class members, build mechanism-based lists, explore a subtree at any level) with a worked example ('A10BA' → metformin, phenformin). It does not name exclusions or the sibling tools that would be chosen instead, so it falls 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.
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, idempotentHint, destructiveHint=false and openWorldHint, and an output schema exists, so the safety/return profile is largely covered before the description speaks. The description contributes little beyond that — no note on what happens with an out-of-range chapter number, no mention of a fixed CID-10 V2008 dataset, and no pagination or cardinality remarks (how many groups per chapter).
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?
Front-loaded with the core statement, then scannable bullets and the input requirement. Slightly verbose: the long inline example occupies most of the first sentence, but it earns its place by showing the real 'chapter → groups with code ranges' payload.
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 with a rich annotation set and an output schema, the definition supplies purpose, usage scenarios and the input contract, so an agent can call it correctly. The only real gap is how it relates to sibling entry points (cid10_chapters, cid10_lookup) in a workflow.
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 'num' parameter already documents the 1-22 bound and the V2008 basis. The description only restates 'Provide a chapter number (1-22)', adding nothing about numbering conventions or whether the argument is a sequence index versus an official chapter designation, so the 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?
Specific verb ('Get') plus a precisely scoped resource ('one CID-10 chapter and its constituent groups'), and the embedded example ("Chapter IX → I00-I02 Febre reumática aguda, I05-I09 ...") makes the returned shape unambiguous. The singular 'one chapter' cleanly separates it from the sibling cid10_chapters, which enumerates the chapter list.
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?
Three explicit 'Use this tool to' bullets give concrete scenarios: drilling from a chapter into its groups, building hierarchical browsers, and resolving which group contains a code range. It states when to use it but never names an alternative or exclusion (e.g., use cid10_chapters first to discover valid chapter numbers, or cid10_lookup for a single code).
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 declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: the exact result size (22 entries) and the staleness caveat that CID-10 V2008 has not been updated since 2008, which an agent needs to reason about data currency.
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?
Front-loaded opening sentence defines the tool, followed by a compact bulleted usage block and a one-line return note. Efficient, though the bullets restate part of the opening sentence (chapters I-XXII) rather than adding entirely new 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?
With zero parameters, full annotation coverage and an output schema handling return structure, the description supplies everything else an agent needs: result cardinality, an example of the returned data, and a version/currency caveat. Nothing material 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 tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond confirming this is a parameterless listing call.
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 with explicit scope: 'List the 22 chapters of CID-10 with their code ranges and Portuguese titles.' The word 'chapters' (top-level, 22 entries) clearly separates it from the singular sibling 'cid10_chapter' and from 'icd11_chapters' by naming the specific terminology.
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:' block gives three concrete scenarios (view top-level structure, map codes to chapters, build a table of contents), which is clear contextual guidance. It does not, however, state when to prefer the singular 'cid10_chapter' or 'cid10_lookup' instead, so exclusion/routing guidance is incomplete.
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 readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: it normalizes both dotted and undotted forms and returns the canonical display, plus it discloses that gender / cause-of-death restriction flags may be surfaced.
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?
Front-loaded one-line summary followed by a tight, scannable bullet list of use cases and a closing normalization note. No filler sentences; every line carries usable 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?
With annotations covering the safety profile and an output schema covering the return shape, the description needs only to explain purpose, usage, and input normalization — all of which it does. Nothing required to call 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% and the single parameter's description already documents the dotted/undotted examples and the regex pattern. The description's acceptance note and canonical-return statement largely restate the schema, so the 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 gives a specific verb and resource ("look up a specific CID-10 code") plus the concrete output ("return its Portuguese name"). The word "specific" implicitly contrasts with a search-style sibling, but it never names cid10_search or cid10_chapter, so sibling differentiation is only inferable.
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?
Three explicit use cases are enumerated (resolve a code to its description, confirm existence of a 3/4-char category, retrieve restriction flags), which gives clear context for when to reach for this tool. However, it never states when NOT to use it or points to the alternative (e.g., cid10_search) for partial/name-based queries.
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, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds non-obvious behavior beyond annotations: it returns 3-char categories and/or 4-char subcategories, and it is diacritic-insensitive ('infeccoes' matches 'infecções'), which is genuinely useful for query construction. It does not describe rate limits or result ordering, but the added behavior is meaningful.
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?
Front-loaded with the core action, followed by a scannable bullet list of use cases, then the return-shape and the sibling alternative. It is slightly longer than strictly necessary but every sentence (return granularity, diacritic-insensitivity, icd11_search alternative) carries information. No wasted framing.
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?
A read-only search tool with a full output schema, so the description need not explain return values. It covers language, edition/version, scope-of-match granularity, and the ICD-11 alternative. What is missing is how it differs from the other CID-10 lookup siblings, but for correct invocation of this tool it is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and all three parameters are documented in the schema, so the baseline is 3. The description adds real meaning: it explains the category/subcategory granularity that the 'level' enum controls and flags the Portuguese-language and diacritic-insensitivity constraints that shape the 'query' parameter. This is beyond what the schema alone states.
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 clear verb-and-resource: search the Brazilian CID-10 by Portuguese text, with explicit sub-use cases (SUS/ANVISA codes, official translation, billing/epidemiology). It explicitly distinguishes itself from icd11_search and names the CID-10 V2008 edition, so the agent can separate it from the international ICD-11 sibling. It does not clearly differentiate from the other CID-10 siblings (cid10_lookup, cid10_chapter, cid10_chapters), but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use this tool to' block gives concrete conditions (SUS/ANVISA contexts, official Portuguese translation, billing/epidemiology), and the closing sentence explicitly names the alternative icd11_search and the condition that selects it (international ICD-11 in English). There are no explicit exclusions for the sibling CID-10 lookup tools, but the contextual guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchDeep Research DocumentARead-onlyIdempotentInspect
Returns the full document for an id obtained from search, as { id, title, text, url, metadata }: text is the readable content (Markdown) and url the canonical public page to cite.
Companion of search in the OpenAI Deep Research contract, over the medical terminologies (CID-10 categories and chapters, ICD-11, LOINC, RxNorm, MeSH, terminology version records) catalog. Only ids returned by search are valid; an unknown id returns an error.
The terminology tools (icd11_*, cid10_*, loinc_*, rxnorm_*, mesh_*, atc_*, map_*, find_equivalent, validate_codes) remain the tools for data queries.
Behavior: read-only and idempotent — a live GET against the public source when the document needs it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identifier of a document returned by `search` |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Unique identifier of the document on this server; what `fetch` takes |
| url | Yes | Canonical public URL of the document — ChatGPT's citation depends on it |
| text | Yes | Full readable content of the document (Markdown) |
| title | Yes | Human-readable title of the document |
| metadata | No | Additional key/value pairs about the document (kind, source, period…) |
| 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, openWorld, and non-destructive hints. The description adds useful behavioral context: unknown ids return an error, the operation is a live GET against the public source when needed, and the return payload has a defined shape. This goes beyond annotation-only information.
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 and front-loads the return contract, then context, then behavior. It is a bit longer than strictly necessary because it restates some annotation-backed properties, but every paragraph adds useful orientation.
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 tool with a rich output schema and complete annotations, the description covers return shape, valid input source, error behavior, positioning relative to siblings, and safety semantics. Nothing critical is 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?
The input schema already describes `id` as 'Identifier of a document returned by `search`' at 100% coverage. The description reinforces this by explaining the id must come from `search`, but it does not add new format or syntax details. With full schema coverage, the 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 uses a specific verb ('Returns') with a clear resource (the full document for an id from `search`) and specifies the exact output shape. It also separates itself from the terminology data-query tools, so an agent can distinguish it from siblings without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states that `fetch` is the companion of `search`, that only ids returned by `search` are valid, and that terminology tools should be used for data queries instead. This gives clear when-to-use and when-not-to-use 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 cover the safety profile (readOnly, idempotent, non-destructive, openWorld), but the description adds substantial non-obvious behavior: match_score/rank are server-computed because upstreams lack comparable scores, groups cluster lexically identical titles and their absence is explicitly NOT evidence of non-equivalence, and the search is English-only.
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?
Front-loaded with the purpose, then a scannable bullet list, then parameter behavior, then the alternative tools — good ordering with no filler. It loses a point for mild redundancy, since the source/target combination rule and terminology list are stated in both prose and the schema.
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 rich annotations, a full schema, and an output schema present, the description still covers the one thing the schema cannot: how to interpret the returned match_score/rank/groups and why paging is not an option. Nothing an agent needs to call or interpret this tool 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 the baseline is 3; the description still adds meaning by clarifying that limit is a per-terminology cap rather than a page cursor and by restating the subtraction rule for source_terminology. It stops short of adding anything new for term or target_terminologies that the schema does not already say.
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 ('ranked unified search for equivalent terms') and immediately bounds the scope to cross-terminology search over five named systems. It is clearly distinguishable from the per-terminology siblings (icd11_search, loinc_search, mesh_search), which it explicitly routes away from for pt-BR.
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 three concrete use cases, explains exactly how source_terminology and target_terminologies interact ('source is subtracted from targets'), and names alternatives with their conditions (icd11_search/mesh_search with language 'pt', cid10_search for natively Portuguese content). Explicit when-to-use and when-to-use-something-else.
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 readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is fully covered without prose. The description adds only the incidental fact that ICD-11 has 28 chapters; it says nothing about translation behavior (which lives in the schema) or result shape. This meets the reduced bar for an annotated tool but adds little beyond it.
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?
Front-loads the core definition in the first line, then uses a short bulleted list and a closing fact. No sentence is wasted, though the final '28 chapters covering all areas of medicine' line is mild filler rather than essential routing 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?
With an output schema present, return values need not be explained, and the single optional parameter is handled by the schema. The description covers purpose and use cases adequately for a simple read-only listing tool, with only sibling differentiation and any pagination/size hints left unstated.
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 'language' enum parameter is fully documented in the schema including the note about official translations vs. machine translation. The description does not mention the parameter at all, 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?
States a specific verb (List) and resource (ICD-11 chapters), with the parenthetical '(top-level categories)' clarifying what a chapter is. It is distinguishable from siblings like icd11_search, icd11_lookup, and icd11_hierarchy by naming the chapters resource, but it never explicitly contrasts itself with the nearest sibling (icd11_hierarchy), so it stops short of a 5.
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:' block gives three concrete scenarios (overview of structure, mapping a body system to a chapter, navigating to categories), which is clear context for selection. It provides no exclusions or explicit alternatives, so the guidance is directional but not exhaustive.
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
Name the entity by code (a leaf code like "5A11", or a block range like "5A10-5A2Y" — blocks come back from 'parents' with an empty code and a code_range) or by uri (the URI any previous answer returned). Direction 'parents' returns ancestor categories, 'children' returns subcategories. ICD-10 codes (like "E11") are not ICD-11 codes: convert them first with map_icd10_to_icd11.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | Entity URI as returned by icd11_lookup, icd11_search or a previous icd11_hierarchy call | |
| code | No | ICD-11 code (e.g., "BA00", "5A11") or block range (e.g., "5A10-5A2Y") | |
| 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 |
| 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 readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds genuinely new behavior: block entities come back from 'parents' with an empty code and a code_range, and language returns official translations rather than 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?
Front-loaded with the one-line purpose, then a tight bulleted use-case list, then the naming/direction rules. Every sentence earns its place, including the ICD-10 caveat.
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?
An output schema exists, so return values need no explanation. With annotations carrying the safety profile, the description fully covers identification, direction semantics, input naming, and the cross-terminology boundary.
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 goes beyond the schema by explaining that a block range can be passed as a code, that blocks surface with an empty code plus code_range, and that uri means any URI from a previous answer — all details the schema does not spell out.
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 (navigate) and resource (ICD-11 hierarchy) and pins the exact scope: parent and child entities. It is clearly distinguishable from siblings like icd11_lookup and icd11_search, which resolve entities rather than traverse relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases (broader parents, specific children, understanding classification structure), defines what each direction value returns, and pre-empts the common mistake that ICD-10 codes are not ICD-11 codes by routing to map_icd10_to_icd11.
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 non-destructive, so the safety profile is fully covered. The description adds the useful note that content is never machine-translated, but says nothing about rate limits, error behavior for invalid codes, or response shape. Given annotations carry the safety burden, a 3 is fair.
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?
Front-loaded opening sentence, then a tight bulleted list of use cases, plus a compact note on the language parameter. 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?
Output schema exists, so return values need not be described. For a read-only lookup with 100% schema coverage, the description is nearly complete; only a note on invalid-code handling or the uri-vs-code precedence would make it fully self-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 coverage is 100% and each param is documented in the schema, including enums and defaults. The description reinforces the code/URI choice and adds a concrete language example, but adds little semantic detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
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 (get) and resource (detailed information about a specific ICD-11 entity), and the by-code-or-URI mechanism clearly separates it from siblings like icd11_search or icd11_hierarchy.
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 concrete retrieval scenarios (definition, coding notes/exclusions, title/synonyms), which orients usage well. However, it never explicitly says when NOT to use it or names siblings like icd11_search as the alternative for fuzzy lookup.
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, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description's help. The description adds only domain framing (severity, laterality, anatomy) and says nothing about authorization, rate limits, or error behavior, so it clears the lowered bar but adds modest value.
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 and the bullets are scannable. The trailing "Postcoordination allows adding..." line is somewhat illustrative padding, keeping it just short of ideal.
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, the description is not obligated to explain return values, and it adequately conveys what the tool produces and why. It is complete enough for a single-parameter lookup tool, though a one-line distinction from icd11_lookup would close the remaining 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?
Schema description coverage is 100% and there is a single required "code" parameter whose schema description already documents it. The description adds no format or syntax detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get postcoordination information for an ICD-11 code") plus a domain gloss on what postcoordination means. An agent can identify the tool's function, though it never explicitly contrasts itself with the heavily-overlapping icd11_lookup/icd11_hierarchy siblings.
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 concrete contexts (find composite-code axes, check required vs optional postcoordination, understand extension possibilities). Clear usage context, but no explicit when-not or named alternative among the sibling ICD-11 tools.
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 readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: results are official WHO translations and 'never machine-translated', with a concrete pt-BR example, which affects how an agent should trust and present labels.
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?
Front-loaded with the core verb+resource, then a scannable bullet list, then a behavior note. It is appropriately sized, with only mild redundancy in restating the official-translation point that the schema also carries.
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?
An output schema exists so the description needn't explain return values, and annotations cover the safety profile; params are fully schema-documented. The remaining description content (language translation behavior, search scope) rounds out what an agent needs to call this 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 query, language, and max_results are already documented in the schema, including the official-translation note. The description largely restates the schema's language semantics rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search for medical conditions, diseases, and health problems in ICD-11') plus the full expansion of the acronym, so the agent immediately knows what it does. It does not, however, differentiate itself from siblings like icd11_lookup or cid10_search, so an agent still has to infer which is exact-match versus keyword 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 'Use this tool to' bullets give clear positive context: find codes for diagnoses, search by name/keyword, and look up conditions in multiple languages. There is no explicit when-not guidance or named alternative (e.g. 'use icd11_lookup for a known code'), so it stops short of full routing.
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 readOnly, idempotent, openWorld, and non-destructive behavior, so the safety profile is covered. The description adds the applicability constraint, which is genuinely useful, but says nothing about what happens for a code with no answer list (empty result vs. error) or any rate/format behavior. With annotations carrying the main burden, this is adequate but thin.
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 purpose and constraint are front-loaded and the whole thing is short, but the three bullets are largely restatements of one another ('find valid response options', 'get answer codes', 'look up answer lists') and could collapse into a single sentence without losing meaning.
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 with a full output schema, the description covers purpose, use cases, and the key applicability constraint, so an agent has enough to call it correctly. The only gap is failure/empty-result behavior, which is minor given the output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter and schema description coverage is 100% — the schema documents loinc_num, its pattern, and an example. The description adds no format or semantics beyond that, 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 opening sentence gives a specific verb (Get) and resource (list of valid answers) scoped to a LOINC questionnaire item, which clearly separates it from siblings like loinc_details or loinc_panels. The closing constraint ('Only applicable to LOINC codes that represent questions with defined answer sets') further narrows scope, though no sibling is named explicitly.
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 concrete scenarios (survey response options, data-entry validation, standardized answer lists), and the final sentence supplies a when-not condition (codes without defined answer sets). It lacks explicit routing to alternatives such as loinc_details, 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.
loinc_detailsLOINC Code DetailsBRead-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, idempotentHint, openWorldHint, and destructiveHint=false, so safety and repeatability are covered. The description adds only that an exact code format is required; it says nothing about behavior on an unknown code (error vs empty) or the provenance of the returned data, which is the useful behavior gap here.
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?
Front-loaded with the core action in the first sentence, followed by a short bulleted enumerations of outputs and the required input format. Well sized for a single-parameter lookup, though the bullets restate fields the output schema likely already carries.
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-only lookup with an output schema present, the description covers purpose, inputs, and returned field categories. The only real gap is routing relative to sibling LOINC tools, which is arguably a usage-guideline omission rather than a completeness one.
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 loinc_num with a regex pattern and an example. The description repeats the format 'XXXXX-X' and gives the same '2339-0' example, adding no meaning beyond the schema, so the 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?
States a specific verb and resource: 'Get detailed information about a specific LOINC code', then enumerates the fields returned (name, component, property, timing, system, scale, method). Clear purpose, but it does not distinguish itself from siblings like loinc_search, loinc_panels, or loinc_answers beyond the code-vs-query distinction, which the agent must infer.
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 describes what the tool returns, not when to pick it over loinc_search or loinc_panels. There is no explicit when-to-use/when-not or alternative routing, so the agent must infer that this is the detail-by-exact-code tool rather than the search 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?
The annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety and idempotency profile is clear. The description adds that it returns a list of LOINC codes, which is helpful, but doesn't mention any behavioral aspects like rate limits or potential errors. With annotations covering most, a 3 is appropriate.
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 structured with a clear opening sentence, followed by a bulleted list of use cases, and a closing sentence about returns. It's concise and front-loaded, though the bulleted list could be seen as slightly verbose for the amount of information conveyed.
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 there is an output schema, the description needn't explain return values in detail, but it does summarize that it returns a list of LOINC codes. The description covers the purpose, usage examples, and return summary, making it largely complete for an agent to use. It could benefit from noting that the output schema provides further details, but that's implicit.
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 loinc_num parameter is fully documented in the schema with pattern and example. The description doesn't add any parameter-specific details beyond what's in the schema. Baseline 3 is correct when the schema does the heavy lifting.
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: 'Get the structure of a LOINC panel or form.' This clearly distinguishes it from siblings like loinc_details or loinc_search, which retrieve details or search for codes. However, it doesn't explicitly differentiate from loinc_answers, which might also relate to LOINC code groupings, leaving a small ambiguity.
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 examples of when to use it: seeing tests in a panel, understanding assessment form structure, and finding related observations. It doesn't state when not to use it or which alternative tools to consider for similar tasks (e.g., loinc_details for specific code info).
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=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so safety and repeatability are covered. The description adds only that results include names, components, and properties, and implies partial-code matching; it discloses nothing about breadth limits, ranking, or rate considerations beyond the schema's max_results cap.
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 short and front-loaded, leading with scope before the example list. Minor redundancy: 'laboratory tests' and 'lab tests' cover the same ground in the opening sentence and 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?
An output schema exists, so return-value explanation is unnecessary and correctly omitted. The schema covers all parameters and the annotations cover the safety profile; the only material gap is routing among the many LOINC-category siblings, which is exactly where an agent is most likely to misfire.
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 both 'query' (test name, keyword, or partial LOINC code) and 'max_results' (1-100, default 25) fully documented in the schema. The description adds no syntax, matching-behavior, or formatting detail beyond what the schema already states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') on a specific resource (LOINC codes for lab tests, clinical observations, measurements) and lists concrete query examples like 'glucose' and 'hemoglobin'. It does not, however, explicitly differentiate itself from LOINC siblings such as loinc_details, loinc_panels, or loinc_answers, so an agent must infer the boundary.
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 positive scenarios (finding codes for lab tests, measurements, vital signs, diagnostic observations), which is better than nothing. But there is no when-not guidance and no mention of the LOINC alternatives (loinc_details for a known code, loinc_panels for panel structure), leaving the selection boundary implied.
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?
Beyond the readOnly/idempotent annotations, it discloses that mappings may be 1:1 or split into multiple candidates, what fields come back (code, title, chapter, Foundation/Linearization URI), the 11,243-category coverage and its exclusion of blocks like 'A00-A09', and the explicit 'no mapping' outcome instead of a fuzzy fallback.
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?
Front-loaded with purpose and source, then progressively adds return shape, use cases, coverage limits, and examples. Every sentence carries information, though the separate 'returns...' and 'coverage...' statements could be tightened slightly.
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 a one-parameter tool with full schema coverage, an output schema, and rich annotations, the description covers everything an agent needs: usage scope, accepted input formats, coverage boundaries, and fallback behavior.
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 single parameter is self-describing, so the baseline is 3; the description adds value by stating that both dotted ('A07.8') and undotted ('A078') forms are accepted and by giving worked examples with known behavior.
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+resource ('ICD-10 → ICD-11 mapping') with the source of truth (WHO transition tables, release 2025-01). It also distinguishes itself from text-search siblings ('rather than text-search candidates'), so an agent can route correctly without opening schemas.
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?
Explicitly names use cases (clinical coding, billing migration, retrospective analysis) and contrasts with the text-search alternative. It does not name the specific sibling (icd11_search / find_equivalent) that would be the fallback, leaving that routing to inference.
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 declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered; the description goes further and discloses the crucial behavioral trait that it returns guidance rather than a mapping, plus the licensing/auth constraints (UTS license, Regenstrief authenticated download) behind the alternatives. 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?
Front-loads the key limitation and then routes to alternatives; the license/dependency paragraph is somewhat dense but each sentence carries decision-relevant information. Slightly longer than strictly necessary for a one-parameter lookup.
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?
An output schema exists, so return values need no explanation, and the description fully covers the unusual semantics (guidance, not mapping), the reason for the limitation, and all workable alternatives. Nothing an agent needs to call this 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 description coverage is 100% and the single parameter already documents its pattern and example, so the baseline is 3. The description adds a second realistic example ('718-7' Hemoglobin) but no format or validation semantics beyond what the schema states.
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+resource ('looks up a LOINC code in NLM Clinical Tables') and immediately bounds the scope with 'It does not perform the mapping.' That negative statement cleanly separates it from mapping siblings like map_icd10_to_icd11 and from loinc_details/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?
Explicit when-to-use routing: programmatic mapping -> UMLS or LOINC Expression Association files; interactive lookup -> institutional SNOMED CT browser or RELMA. It also states why the tool exists (direct mappings are not freely available via API), which is exactly the context an agent needs to avoid mis-selecting it.
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 declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds useful behavioral context beyond that: it enumerates what is returned (scope note, tree numbers, related concepts/synonyms) and clarifies the non-obvious language rule that content is never machine-translated and only official NLM translations 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?
Front-loaded one-line purpose followed by a tight, scannable bullet list of retrievable fields, then a compact note on ID and language. Minor redundancy with the language parameter already documented in the schema, but no wasted prose.
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, the description needn't explain return values, yet it helpfully summarizes the key ones. The one real gap is sibling disambiguation among mesh_search/mesh_tree/mesh_qualifiers, but coverage of inputs and behavior is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the ID pattern/example and the 'official translation, never machine-translated' caveat. The description's parameter text (example ID, language example) largely restates the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get detailed info about a MeSH descriptor) and pins it to lookup-by-ID, which is genuinely distinct from a search tool. However, it never names the obvious siblings (mesh_search, mesh_tree, mesh_qualifiers), so an agent must infer the boundary between this and mesh_tree (which also surfaces tree numbers).
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 bullet list of what you can retrieve implies the usage context (when you already have a Descriptor ID), but there is no explicit when-to-use/when-not guidance and no alternative tool is named. An agent can infer it, but nothing routes it away from mesh_search or mesh_tree.
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, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds domain context (that qualifiers refine descriptors, with an example) but no behavioral traits beyond annotations such as coverage or response characteristics. With annotations doing the heavy lifting, a 3 is appropriate.
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?
Front-loaded with the core action, then a compact bulleted list of use cases, and a clarifying example sentence. Every element earns its place, though the bullets are slightly 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?
An output schema exists, so return values need not be explained, and the single required parameter is fully documented in the schema. Annotations cover the safety profile. The description is complete enough for correct invocation, missing only sibling routing guidance.
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 there is a single parameter (mesh_id) with a documented pattern and examples. The description implies the input is a MeSH descriptor but adds no format or syntax detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get allowed qualifiers (subheadings) for a MeSH descriptor.' The parenthetical and the example ('Diabetes Mellitus/drug therapy') make the concept unambiguous. It does not explicitly differentiate itself from siblings like mesh_descriptor or mesh_tree, but the resource is narrow 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 'Use this tool to' list gives three concrete scenarios (finding combinable qualifiers, building search queries, understanding specifiable aspects). That is clear usage context, but no explicit exclusions or named alternatives (e.g., when to use mesh_descriptor instead) are provided.
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 declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely useful behavioral context the annotations cannot convey: language requests return only NLM's official translations and content is never machine-translated, which sets a real expectation about result quality and coverage.
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?
Front-loaded with the core purpose, then a tight bulleted use-case list, then the language caveat. Every element is short and scannable, though the language paragraph and the closing returns-line partially duplicate the schema and could be trimmed.
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, the description needn't explain return values, and it doesn't over-explain. Combined with rich annotations and 100% schema coverage, the definition gives an agent everything needed to invoke it correctly; only explicit sibling routing is absent.
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 match/query/language/max_results are already fully documented in the schema. The description's language note largely restates the schema's own language description rather than adding new syntax or format guidance, so the 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?
States a specific verb+resource ("Search for MeSH descriptors") and enumerates three concrete use cases (indexing, PubMed subject headings, controlled vocabulary). It is clearly distinguishable from lookup-style siblings like mesh_descriptor, mesh_tree, and mesh_qualifiers, though it never names them explicitly.
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" block gives clear task-oriented context for when this search is appropriate. It stops short of stating exclusions or naming alternatives (e.g., mesh_descriptor for ID-based lookup), so the agent must infer the boundary itself.
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, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds a useful tree-number format example (C14.280.647), but says nothing about pagination, missing descriptors, or error behavior beyond what annotations 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?
Front-loaded with the core purpose, then a short scannable bullet list and one clarifying example. Slightly list-heavy for a one-parameter tool, but nothing is padded and the key information leads.
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?
An output schema exists, so return values need not be described, and the description covers purpose, use cases, and tree-number format. For a simple read-only lookup this is essentially complete, with only minor gaps in edge-case behavior.
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 single mesh_id parameter is documented with its pattern and descriptor-ID examples. The description does not elaborate on the parameter at all, so baseline 3 is appropriate for a one-parameter tool whose schema does the work.
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 first sentence states a specific verb and resource ('Get the tree hierarchy location(s) for a MeSH descriptor'), which clearly separates it from mesh_search or mesh_descriptor. It never names those siblings explicitly, so an agent must infer the boundary, but the scope ('tree hierarchy locations') is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The bullet list gives concrete use cases (find hierarchy position, broader/narrower relationships, related terms in the same branch), which is clear when-to-use guidance. It stops short of naming alternatives or exclusions, so the agent gets context but no routing rules.
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 the full safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the description need not restate safety. It does add a return-content hint ('class IDs, names, and classification sources'), but since an output schema exists, this is modest added value. No auth, rate-limit, or edge-case context is given.
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 purpose is front-loaded in one sentence, followed by a short scannable bullet list and a returns line. It is appropriately sized, though the bullets largely restate the opening sentence rather than adding new 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?
With an output schema present and annotations covering safety, the description needs only to establish purpose and basic return shape, which it does. The main gap is the absence of any sibling disambiguation against the ATC classification tools, but nothing essential for a correct single-param call 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% with a single, fully described parameter (rxcui with a numeric pattern), so the schema carries the semantic load. The description adds nothing about what the rxcui represents or where to obtain it, which is the correct baseline of 3 when the schema already documents the parameter.
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 first sentence gives a specific verb+resource ('Get therapeutic and pharmacologic classes for a drug') that an agent can act on. The bulleted examples reinforce the concept with concrete instances (Beta-blockers, NSAIDs). However, it does not distinguish itself from close siblings like atc_classify/atc_members, which are also drug-classification tools.
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 describes what the tool can find, not when to choose it over alternatives. There is no explicit when-not guidance and no sibling is named, even though ATC class tools overlap heavily. Usage is implied by the capability list rather than contrasted against alternatives.
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?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds the scope note that a valid RxCUI identifier is required, but discloses nothing about rate limits, status semantics (what 'remapped' means for follow-up calls), or failure behavior for unknown RxCUIs. With annotations carrying the core profile, this is adequate but thin.
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?
Reasonably short and front-loaded: the first sentence states the core action and the parameter. The bulleted 'Use this tool to' block is useful but slightly redundant with the intro sentence. No wasted 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?
With a 2-parameter schema at full coverage, an output schema present, and annotations covering safety, the description needs only to orient the agent, which it does. Its only notable gap is routing guidance versus sibling lookup/search tools, which matters given the large sibling set.
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 parameters are already documented in the schema. The description restates the RxCUI requirement and gives an example value ('161'), which adds a concrete format example beyond the regex pattern, but does not explain include_related semantics beyond what the schema already says. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (Get detailed information) and resource (a specific RxNorm concept by RxCUI), and the bullet list of what it returns (name/synonyms, status, related concepts) adds concrete scope. It doesn't explicitly distinguish itself from siblings like rxnorm_search or rxnorm_ingredients, but the 'by RxCUI' framing implies lookup-by-identifier versus 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?
Usage is implied by the list of things you can do ('Use this tool to: ...'), but there is no explicit when-to-use guidance and no named alternatives. An agent can infer this is for direct identifier lookup rather than search, but the description never says to prefer rxnorm_search when you lack an RxCUI.
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, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds the return payload form ('ingredient RxCUIs and names') but discloses nothing about rate limits, auth, or behavior for invalid/unknown RxCUIs. With annotations carrying the safety burden, a 3 is appropriate.
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 action is front-loaded in the first sentence, followed by a short scannable bullet list and a one-line return note. It is tight, though the bullets largely restate the purpose and could be trimmed.
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 fully documented single parameter, rich annotations, and an existing output schema, the definition supplies enough for an agent to call it correctly. The only modest gap is the lack of routing to sibling tools for obtaining the input RxCUI.
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 a single required 'rxcui' parameter that already documents its pattern. The description only restates 'by RxCUI' and adds no syntax, format, or edge-case 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 states a specific verb and resource ('Get active ingredients for a drug by RxCUI') and names the required identifier, making the operation unambiguous. It does not explicitly differentiate itself from siblings like rxnorm_concept or rxnorm_search, so it stops short of a 5.
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 three concrete scenarios (finding ingredients, single vs. multi-ingredient checks, generic components of brands), which implies when the tool applies. However, it never names an alternative or states when NOT to use it (e.g., use rxnorm_search first to obtain the RxCUI), so guidance is only partially fulfilled.
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 readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, fully covering the safety profile. The description adds no behavioral context beyond the input/output mapping, and with an output schema present, return-value details are not needed.
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?
Front-loaded with the core mapping purpose and followed by bulleted use cases and a concise input directive. No wasted words, though the bullet list slightly repeats the mapping concept.
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?
Complete for a read-only mapping tool: purpose, usage, and parameter semantics are all clear. Annotations and output schema cover safety and return values, so the description need not repeat them.
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 parameters are documented in the schema. The description reinforces their roles ('RxCUI to get NDC codes for' and 'NDC code to look up RxCUI'), adding the explicit directional semantics and mutual exclusivity beyond the schema's basic 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?
States a specific bidirectional transformation: mapping RxNorm concepts (RxCUI) to NDC codes and back. The bulleted use cases distinguish it from sibling tools like rxnorm_concept or rxnorm_search, which focus on concept metadata or searching rather than NDC cross-referencing.
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?
Explicitly says 'Provide either an RxCUI to get NDCs, or an NDC to get the RxCUI', telling the agent exactly which input drives which direction. The mutual exclusivity is clear, though it doesn't name a sibling alternative, but no sibling overlaps this function.
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, idempotentHint, openWorldHint, and destructiveHint=false, so the safety and idempotency profile is fully covered by structured data. The description adds that results include RxCUI, names and term types, but no mention of matching semantics (prefix vs fuzzy), result ranking, or open-world behavior from a live terminology service.
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?
Front-loaded with the core action, then a scannable bullet list of use cases and a return-value line. Slightly over-listed for such a simple tool but no wasted sentences.
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 safety/idempotency, the description is largely complete: it says what to search, why, and what comes back. Missing only how the search matches (exact vs partial) and pagination behavior, which are minor for this complexity.
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 parameters are already fully documented with type, default, and range. The description adds no syntax, format, or matching details beyond what the schema provides; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: search drugs in RxNorm, with the expansion of the acronym. Distinguishes from rxnorm_concept/rxnorm_ingredients implicitly by being the name-search entry point. Sibling differentiation is not explicit but the scope is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides three concrete when-to-use scenarios (find by brand/generic, look up for prescribing, search formulations). No explicit when-not-to-use or named alternatives among the many rxnorm_* siblings, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchDeep Research SearchARead-onlyIdempotentInspect
Searches the medical terminologies (CID-10 categories and chapters, ICD-11, LOINC, RxNorm, MeSH, terminology version records) catalog and returns up to 10 matching documents as { id, title, url }, ordered by relevance (an empty list means nothing matched).
This tool exists for the OpenAI Deep Research contract: ChatGPT deep research, company knowledge and research workflows over the Responses API require exactly the tools search and fetch. Pass one of the returned ids to fetch to read the document.
For direct questions and for data (values, series, rankings) prefer the terminology tools (icd11_*, cid10_*, loinc_*, rxnorm_*, mesh_*, atc_*, map_*, find_equivalent, validate_codes), which return the actual data with provenance — this is a catalog index, not a data query.
Query: natural language or keywords, Portuguese or English; accents and case are ignored.
Behavior: read-only and idempotent — the catalog comes from the public source and is cached in memory.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search terms, natural language or keywords (accents and case are ignored) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Matching documents, in relevance order |
| 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) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses meaningful behavioral details: it returns at most 10 documents ordered by relevance, uses an empty list for no matches, works in Portuguese or English, ignores accents and case, and is backed by an in-memory cache of a public source. These details help an agent predict results accurately.
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 capability and then provides routing context, query guidance, and behavior in separate sections. It is somewhat dense and repeats the read-only/idempotent hints already present in annotations, but every paragraph earns its place by helping agents choose and use the tool.
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 one optional-free parameter, an output schema present, and clear return-shape details in the description, there is no missing information needed to invoke the tool correctly. The description even covers the no-match case and the follow-up `fetch` step, making it 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?
The input schema already covers the single `query` parameter at 100%, so the baseline is 3. The description adds value by specifying Portuguese or English as accepted languages and clarifying that natural language or keywords are both valid, slightly extending what the schema says.
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: it searches the medical terminologies catalog and returns matching documents with an explicit shape and limit. It also distinguishes itself from the terminology data tools by clarifying it is a catalog index, not a data query, which prevents confusion with sibling `*_search` tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when this tool is required — the OpenAI Deep Research contract requires `search` and `fetch` — and explicitly routes direct data questions to the terminology tools (`icd11_*`, `cid10_*`, etc.). It also tells the agent to pass returned ids to `fetch`, giving clear workflow guidance.
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?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds substantial context beyond them: the server ships no historical snapshots, bundled_versions exposes what is on hand, and the ICD-10 path returns counts of 1:1 vs split mappings and average alternatives. This is real behavioral disclosure not present in structured fields.
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?
Well front-loaded with the general case first, then the ICD-10 exception, then inputs, then a scope caveat. Slightly long, and the Inputs block partially restates schema properties, but each section carries distinct 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?
Output schema exists, so return values don't need spelling out, yet the description still characterizes the ICD-10 summary payload. For a tool whose behavior varies sharply by terminology, the definition covers both modes and the fallback guidance adequately.
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, but the description adds genuine meaning: it explains the default behavior of from_version (currently-bundled version) and to_version (publisher's latest known release) and the special ICD-10 invocation with terminology only. It goes beyond the schema's terse per-property text.
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 (report) and resource (diff data between two terminology versions) and immediately frames itself as a metadata/guidance layer rather than a diff engine, cleanly separating it from map_icd10_to_icd11 and terminology_versions. An agent can tell what this returns without opening the schema.
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?
Explicitly distinguishes the general case (guidance only, use the publisher changelog for SNOMED/LOINC/RxNorm/MeSH) from the one case with real data (ICD-10→ICD-11), and gives the exact invocation shape for it. It even names the authoritative alternative for frequent-change terminologies.
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 cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real behavioral context beyond them: the ICD-10→ICD-11 entry reads live from the bundled dataset while the rest is static release metadata, plus the fact that the full set of 8 is returned by default.
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?
Front-loaded with the core purpose, then a scannable bullet list of use cases, then the parameter note and provenance caveat. Every sentence carries information; nothing is redundant 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?
An output schema exists so return values need no explanation. Between the purpose, use cases, parameter default behavior, and data-freshness caveat, an agent has everything needed 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 coverage is 100% and the single enum parameter is fully documented in the schema, including the 'omit to return all 8' behavior. The description restates the same filter/default behavior without adding format or usage nuance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and a precise resource (version, release date, publisher, source URL, update cadence of every terminology), which no sibling covers. It never explicitly names a sibling it is not (e.g., terminology_diff or validate_codes), so it falls just short of a 5.
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 concrete when-to-use contexts via the 'pipeline maintainers who need to' list: pre-batch release confirmation, verifying the frozen CID-10/transition tables, and citing versions in research. No explicit alternatives or when-not-to-use conditions are given, keeping it at a 4.
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?
With annotations already covering the safety profile, the description adds substantial operational context: the 50-code hard cap, parallel execution via per-terminology clients, worst-case ~10 s latency tied to upstream rate limits, and precise error semantics distinguishing 'not found' (valid:false, error:null) from 'couldn't validate' (error set).
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?
Front-loads purpose, then structures return-field semantics as a scannable bullet list, ending with operational limits. Some return-value detail is verbose given an output schema exists, but nearly every sentence carries meaning for a batch tool with unusual null/error semantics.
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 a batch mutation-free validator with nested input items, an output schema, and per-terminology nuances, the description covers scope, field semantics, null behavior, error distinction, accepted terminologies, cap, and latency. Nothing an agent needs to invoke it 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% and the enum values, per-item structure, minLength, and maxItems are already documented in the schema. The description reinforces why terminology is required per code (category codes like 'A00' collide across ICD-10/CID-10) but adds little beyond what the schema already states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Validate a mixed batch of medical codes against their source terminologies') plus a concrete use case (retrospective analysis of legacy databases). The batch/mixed-terminology framing implicitly separates it from single-terminology siblings like icd10_lookup or loinc_details, but no sibling is named explicitly.
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?
Usage is implied through 'retrospective analysis of legacy databases' and the flagging/replacement features, which suggests when it is valuable. However, it never states when to prefer this over alternatives such as map_icd10_to_icd11, find_equivalent, or terminology_diff, nor any explicit exclusions.
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.
33 tool updates
v1.11.0- Changed
atc_classify1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
atc_lookup1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
atc_members1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cid10_chapter1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cid10_chapters1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cid10_lookup1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
cid10_search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
fetch - Changed
find_equivalent1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
icd11_chapters1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
icd11_hierarchy5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / code / descriptionPrevious value: -"ICD-11 code to get hierarchy for"New value: +"ICD-11 code (e.g., \"BA00\", \"5A11\") or block range (e.g., \"5A10-5A2Y\")" - added
Input schema / properties / languageAdded value: +{ + "default": "en", + "description": "Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated.", + "enum": [ + "en", + "es", + "pt", + "fr", + "de", + "it", + "zh", + "ja", + "ar", + "ru" + ], + "type": "string" +} - added
Input schema / properties / uriAdded value: +{ + "description": "Entity URI as returned by icd11_lookup, icd11_search or a previous icd11_hierarchy call", + "format": "uri", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "code", - "direction" -]New value: +[ + "direction" +]
- Changed
icd11_lookup1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
icd11_postcoordination1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
icd11_search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
loinc_answers1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
loinc_details1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
loinc_panels1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
loinc_search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
map_icd10_to_icd111 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
map_loinc_to_snomed1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mesh_descriptor1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mesh_qualifiers1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mesh_search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
mesh_tree1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
rxnorm_classes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
rxnorm_concept1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
rxnorm_ingredients1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
rxnorm_ndc1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
rxnorm_search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
search - Changed
terminology_diff1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
terminology_versions1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
validate_codes1 field changed- added
Input schema / additionalPropertiesAdded value: +false
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
Scored across 33 tools
Each tool targets a distinct resource and operation—search, lookup, hierarchy, mapping, validation—across six terminologies plus general utilities. No two tools appear to do the same thing; even within a terminology, search vs lookup vs details are clearly separated. The generic search/fetch pair is explicitly distinguished from data-query tools.
Tool names follow a consistent snake_case pattern with a terminology prefix followed by an action (e.g., cid10_lookup, icd11_search, loinc_details, rxnorm_ingredients, mesh_tree). Even standalone tools like validate_codes, find_equivalent, and terminology_versions use clear, predictable naming. The pattern is uniform and intuitive.
With 33 tools, the server exceeds the 25+ threshold that indicates too many. While the broad scope of covering six terminologies plus mapping/validation justifies many operations, the count is heavy and may overwhelm agents. Some tools could be consolidated (e.g., cid10_chapters vs cid10_chapter, separate chapter tools), but the size is still excessive for typical use.
The tool set is exceptionally complete for its domain: it covers search, lookup, hierarchy navigation, chapters, postcoordination, panel structures, ingredient/class details, NDC mapping, qualifiers, tree positions, classification, cross-terminology mapping (ICD10→ICD11, LOINC→SNOMED guidance), batch validation, equivalence search, and version/diff metadata. There are no obvious dead ends or missing operations for a read-only medical terminology server.
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.-
- AlicenseBqualityDmaintenanceAn MCP server that provides comprehensive medical information by querying multiple authoritative medical APIs including FDA, WHO, PubMed, Google Scholar, and RxNorm.191162 npm112MIT
- 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.62 npm3MIT
- 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