Medical Terminologies MCP
This server gives you programmatic access to major medical terminologies (ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10) with search, lookup, crosswalk, validation, and harmonization tools, all carrying provenance.
Search & look up codes in ICD-11 (
icd11_search,icd11_lookup,icd11_hierarchy,icd11_chapters,icd11_postcoordination), LOINC (loinc_search,loinc_details,loinc_answers,loinc_panels), RxNorm (rxnorm_search,rxnorm_concept,rxnorm_ingredients,rxnorm_classes,rxnorm_ndc), MeSH (mesh_search,mesh_descriptor,mesh_tree,mesh_qualifiers), and ATC (atc_classify,atc_lookup,atc_members).Query Brazilian CID-10 in Portuguese (
cid10_searchwith diacritic-insensitive and everyday-word expansion,cid10_lookup,cid10_chapters,cid10_chapter).Map across terminologies: authoritative ICD-10 → ICD-11 via bundled WHO transition tables (
map_icd10_to_icd11), ranked equivalents across sources (find_equivalent), free-text harmonization (harmonize_terms), and batch code validation (validate_codes).Get official multilingual content — pass
language: "pt"(or es/fr/de/it/zh/ja/ar/ru) for WHO/NLM official translations; never machine-translated.Track versions and provenance (
terminology_versions,terminology_diff) — every result includes source URL, vintage, retrieval instant, citation, and license; multi-source calls return one block per source.Use with ChatGPT Deep Research via the OpenAI-contract
searchandfetchtools, which return citable canonical URLs.Deploy flexibly — stdio locally (Claude Desktop, IDEs) or the hosted Streamable HTTP endpoint; no credentials needed on the hosted instance, and CID-10 plus the ICD-10→ICD-11 tables are answered in-process with no network call.
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)
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 tools: 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 |
What this server is not intended for — and what leaves your machine
It is not intended for clinical decision support. It retrieves what the official sources publish. It does not diagnose, recommend treatment or dose.
It is not designed to run offline. ICD-11, LOINC, RxNorm, MeSH and ATC are answered live by the public WHO and NLM APIs. Every query string you send is forwarded to those services. De-identify term lists before running them: no patient names, free-text notes or record identifiers. Two datasets are bundled and answered in-process, with no network call: CID-10 (DataSUS V2008) and the WHO ICD-10 → ICD-11 transition tables (
map_icd10_to_icd11).Credentials are not required on the hosted endpoint.
https://medical.sidneybissoli.com/mcphas WHO credentials configured.WHO_CLIENT_ID/WHO_CLIENT_SECRETare needed only when you run the server yourself, and only for the 5 ICD-11 tools.SNOMED CT is not served. It was retired in 2.0.0: no public Snowstorm host remains, SNOMED content needs a per-country license, and the off-by-default tools confused every catalog that listed this server. See SNOMED CT (retired in 2.0.0).
It is not OMOP-shaped. Results carry the source's own codes, not OMOP
concept_ids, and there is noconcept_ancestortraversal. If your output has to join against an OMOP CDM, use an OMOP vocabulary service; use this server for general terminology work.Search is lexical, not semantic.
find_equivalentand the*_searchtools match words, not meanings (no embeddings).Large batches are paced by the upstream rate limits (see API Rate Limits). Thousands of distinct terms take minutes to tens of minutes.
Reproducibility: which version answered
A crosswalk or a coded dataset is only meaningful against a stated vocabulary version. Two things record it:
terminology_versionslists the release each terminology is queried against. Call it at the start of a batch run and keep the output with your results. The ICD-11 release is pinned (default2026-01, override withWHO_ICD11_RELEASE_ID), so a self-hosted run is repeatable until you change it.The provenance block on every response (
structuredContent.provenance) carriesretrieved_at(the real extraction instant; a cache hit keeps the original fetch time), the source URL, the citation and the license. Itsdata_vintagefield carries the version when the source exposes one:Source
data_vintagein each responseICD-11
the pinned WHO release (e.g.
2026-01)ICD-10 → ICD-11 tables
the bundled WHO release (e.g.
2025-01)CID-10
V2008LOINC, RxNorm, MeSH, ATC
null, because these APIs do not state a release per response. Recordterminology_versions+retrieved_atinstead
Minimal batch log: one terminology_versions call at the start, plus the provenance of each result (source, data_vintage, retrieved_at).
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 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 | pino log level ( |
¹ Required for ICD-11 tools. Get credentials at: https://icd.who.int/icdapi.
LOINC, RxNorm, MeSH, ATC and CID-10 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. 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)
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.
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 |
|
| Answer list of a questionnaire item: LA code, text, order and score (PHQ-9 items: 0-3); empty for codes without a list, "not found" for unknown codes |
|
| Panel/form structure: member items in form order |
|
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 |
|
Crosswalk Tools (4)
Tool | Description | Example |
| Authoritative ICD-10 → ICD-11 mapping via bundled WHO transition tables; returns primary code + chapter + URIs and any WHO-documented alternatives |
|
| Batch-validate up to 50 codes across ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10; returns per-code valid/invalid + display name |
|
| Ranked unified search across terminologies: server-computed |
|
| Batch-map up to 50 free-text terms to standard codes: diagnosis → ICD-11, drug → RxNorm (+ ATC classes), lab → LOINC. Per term: ranked candidates with |
|
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, AND between words; everyday words resolved to CID-10 wording, and the response says so) |
|
| Code → official Portuguese name |
|
| List the 22 CID-10 chapters | - |
| Chapter detail with constituent groups |
|
Ask in your words, not the CID-10's. The CID-10 is worded in clinical Portuguese, and cid10_search matched your words against the code title as one verbatim phrase — so the everyday word returned nothing at all. Measured over the 14,496 categories and subcategories of the bundled V2008 dataset (2026-09-16), fixed since 1.12.0: every word must match (AND), and the everyday word is expanded to the CID-10's own (src/clients/cid10-vocabulary.ts, measured pairs only) — the response says so in vocabulary_notes, and zero results come with a way out.
you ask | hits before | the CID-10 writes | hits |
| 0 | neoplasia maligna (da mama) | 497, 12 |
| 0 | infarto | 42 |
| 0 | acidente vascular cerebral | 11 |
| 0 | hipertensão | 44 |
| 0 | cefaleia | 10 |
| 0 | lesão autoprovocada | 167 |
| 0 | pedestre traumatizado | 97 |
| 0 | doença pelo HIV | 45 |
| 0 | calculose, convulsões, fumo, canabinóides, cocaína, obesidade, provocado por cão | 19, 41, 17, 12, 13, 6, 11 |
What the V2008 dataset does not carry stays out and still returns zero — covid (U07.1 is from 2020), zika — because an alias for a code that does not exist promises what the source does not have. The same table feeds the Deep Research search index.
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.Harmonize a column of free-text terms:
terminology_versionsonce at the start →harmonize_termsin batches of up to 50 (each term with its domain) → acceptexact, spot-checkstrong, sendneeds_reviewto a person → keep each row'sprovenancewith the crosswalk. Write lab terms with specimen and property ("glucose serum"): a bare "glucose" matches over a thousand LOINC codes.Cross-terminology scaffolding:
find_equivalentwith a clinical term searches ICD-11, LOINC, RxNorm and MeSH in one call. Use it to bootstrap mappings; the pairwisemap_*tools refine them.ICD-10 → ICD-11 (authoritative):
map_icd10_to_icd11reads the bundled WHO transition tables. It returns the primary ICD-11 code plus any WHO-documented alternatives, andnull(never a guess) when the ICD-10 category is not in the table.
SNOMED CT (retired in 2.0.0)
Until 1.18.x this server shipped five SNOMED CT tools (snomed_search, snomed_concept, snomed_hierarchy, snomed_descriptions, snomed_ecl) plus map_snomed_to_icd10, all off by default behind ENABLE_SNOMED_TOOLS, and map_loinc_to_snomed (guidance only). Version 2.0.0 removed all seven, the Snowstorm client and the flag, and snomed is no longer an accepted value of find_equivalent, validate_codes, terminology_versions or terminology_diff (a request naming it gets a validation error listing the accepted values).
Why: the public IHTSDO Snowstorm host behind the tools has returned HTTP 410 since 2026-05; SNOMED CT content needs a license that depends on the user's country; usage was zero; and the half-present terminology misled every third-party catalog that described this server.
If you need SNOMED CT: pacharanero/sct serves it locally from your own licensed release, and FHIR terminology servers (e.g. tx.fhir.org, a public HL7 test server; CSIRO Ontoserver) expose $lookup/$expand — under your own SNOMED license.
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.
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 |
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
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.
Input is a drug NAME (brand or generic, English/US naming as in RxNorm). A name RxNorm does not recognize, or a drug without an ATC mapping, returns an empty matches list with an explanatory note — not an error; try the generic name, or resolve the name first with rxnorm_search.
Which ATC tool: start here when you have a drug name; use atc_lookup when you already have a class code (level 1-4, e.g. "A10BA") and want its name; use atc_members to list the drugs inside a class.
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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/openWorld/idempotent/non-destructive, so safety is covered. The description adds meaningful behavioral context beyond that: the empty-matches-not-error semantics, the combination-product multiplicity behavior, and the RxNorm naming expectation. It does not discuss rate limits or latency, but those are minor.
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 structured into use-cases, return semantics, and tool-routing. Slightly verbose across four paragraphs for a 1-param tool, but every section carries distinct value and there is 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?
Although an output schema exists (so return structure needn't be explained), the description still clarifies the most important semantic detail: one entry per ATC code, with combination products yielding multiple. Combined with naming expectations, failure semantics, and sibling routing, an agent has everything needed 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 coverage is 100% and the schema already documents drug_name as brand or generic with an example. The description reinforces the naming convention (English/US as in RxNorm) and adds the fallback attempt behavior on failure, which goes slightly beyond the schema. Baseline 3 would apply without that extra nuance.
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 precise verb+resource: look up WHO ATC classification(s) for a drug by name, with a concrete example (metformin → A10BA02). It also explicitly distinguishes itself from the sibling tools atc_lookup and atc_members by naming the input type each expects.
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 routing rule: start here when you have a drug name, use atc_lookup when you have a class code, and use atc_members to list drugs inside a class. It also handles the failure case (unrecognized name → empty list, try generic name or rxnorm_search), which is exactly the guidance an agent needs.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 safe, read-only, idempotent, open-world profile, so the description needn't restate safety. It adds real behavioral context: what is returned (name + hierarchy level) and the endpoint's limitation that substance-level codes are not exposed. It does not cover error behavior or pagination, but those are minor for a single-code lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Opens with the core action, then a scannable bulleted list of use cases, then the code-length explanation and the boundary note. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values needn't be explained, and the single required parameter is fully documented. Combined with the explicit sibling routing and level taxonomy, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond the schema by mapping each length to a semantic level (A=anatomical, A10=therapeutic, A10B=pharmacological, A10BA=chemical), giving the agent meaning for the allowed pattern rather than just its shape.
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 (look up) and resource (ATC code) and the output (name and hierarchy level). It explicitly distinguishes itself from the sibling atc_classify by scoping to levels 1-4 and routing substance-level codes elsewhere.
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?
Lists three concrete use cases (resolve to class name, confirm existence, identify level) and names the alternative atc_classify along with the exact condition (7-char substance codes) that selects it. Nothing is left to inference.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 safety (readOnly, idempotent, non-destructive, openWorld), so the description earns credit for adding non-obvious context: that each member carries a substance-level source_atc_code for disambiguation, and that RxNorm's catalog is US-centric while ATC names/codes are international. It does not mention result volume or pagination for large classes, which would be the next useful disclosure.
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 scannable bullet list and a closing caveat sentence; nearly every line earns its place. Slight redundancy between 'enumerate all members' and 'explore an ATC subtree at any level', which overlap conceptually.
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 tool with an output schema present, the description supplies purpose, usage contexts, parameter levels, an output field note, and a data-provenance caveat - enough to call it correctly. What is missing is only operational detail such as result size for high-level classes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already states the level 1-4 vs level-5 return behavior, so the baseline is 3. The description reinforces this with the 'A10BA' example but adds little syntax or format detail the schema does not already carry.
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 + resource ('List the drugs (substances) that belong to an ATC class') with a concrete example ('A10BA' -> metformin, phenformin). The subtree/level framing implicitly separates it from atc_classify (drug -> class) and atc_lookup (code -> meaning), so an agent can route 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?
The 'Use this tool to:' block gives three clear contexts (enumerate class members, build mechanism-shared drug lists, explore a subtree). It does not name any sibling as the alternative or state when NOT to use it, so routing against atc_lookup/atc_classify is left to inference.
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 (code ranges with Portuguese titles)
Build hierarchical browsers
Find which group contains a code range
Provide the chapter number num as an integer 1-22 (chapter I = 1, IX = 9). Numbers outside 1-22 are rejected with a validation error. Returns the chapter (title and code range) plus ALL its groups in one response — no pagination; the 22 chapters hold 275 groups in total. Answered locally from the bundled CID-10 V2008; no network call.
Which CID-10 tool: use cid10_chapters first if you do not know the chapter number (it lists all 22 with code ranges); use cid10_lookup for one specific code and cid10_search to find codes by Portuguese text. For the international ICD-11, use icd11_chapters.
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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), and the description usefully adds that all groups return in one response with no pagination and that the 275 groups come from a bundled local dataset. However, 'Answered locally from the bundled CID-10 V2008; no network call' directly conflicts with the openWorldHint=true annotation, which asserts interaction with an open world of external entities — the description describes a closed, offline data source.
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 and scope, then organized into use-case bullets and a routing paragraph. Slightly verbose (the embedded Portuguese example runs long), but every section carries information and nothing is padded.
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 an output schema present (so return values need no explanation), the description still covers scope, all 22 chapters/275 groups volume, no-pagination behavior, data source, error behavior, and sibling routing. Nothing an agent needs to call 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% (baseline 3), and the description still adds real meaning beyond the schema: the Roman-numeral mapping (chapter I = 1, IX = 9) and the rejection behavior for numbers outside 1-22. These go beyond the bare 'integer 1-22' in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get one CID-10 chapter and its constituent groups') and concretely distinguishes itself from siblings by naming cid10_chapters, cid10_lookup, cid10_search and icd11_chapters with the conditions that select each. An agent can route correctly without opening any 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?
Explicit when-to-use bullets (drill from chapter into groups, build hierarchical browsers, find which group contains a range) plus explicit alternatives: use cid10_chapters when the chapter number is unknown, cid10_lookup for a single code, cid10_search for Portuguese text, icd11_chapters for ICD-11. When/when-not and alternatives are all present.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, so the bar is lower. The description adds genuinely useful context beyond them: the fixed 22-entry result size and the caveat that CID-10 V2008 has not been updated since 2008, which signals a static dataset. 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-loaded with the core purpose, then a scannable bulleted use-case list, then return caveats. The 'Build a navigable table of contents for downstream tooling' bullet is the vaguest line but is short and does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema already defining the return shape, the description supplies everything an agent needs: what it returns, how many entries, the static-version caveat, and the main use cases.
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 there is no parameter semantics to document. Baseline of 4 applies; the description does not need to compensate for anything.
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 (the 22 chapters of CID-10), plus exactly what each entry contains (code ranges and Portuguese titles). The count '22' and the sample entries make the scope 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 three concrete scenarios (structure overview, code-to-chapter mapping, building a table of contents). It does not explicitly name the obvious alternative siblings (cid10_chapter for a single chapter, cid10_lookup/cid10_search for codes), so the differentiation is implied by 'top-level structure' rather than stated.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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, so safety is covered. The description adds genuine behavioral context beyond that: both dotted and undotted inputs are accepted, the canonical display form is returned, and gender/cause-of-death flags may be present. Output formatting is partly covered by the output schema, which caps this at a 4.
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 bulleted breakdown and a closing note on input formats. Some content (dotted vs undotted forms) repeats the schema description, which is minor redundancy but not bloat.
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 an output schema and full annotation coverage, the description supplies everything needed: what it returns, accepted input forms, and use cases. 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?
With a single parameter at 100% schema description coverage, the schema already documents the code field, its pattern, and its dotted/undotted acceptance. The description largely restates that same dotted/undotted flexibility, adding little new parameter-level 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 ('Look up a specific CID-10 code') and scopes it to an exact-code resolution with an example ('I21' → 'Infarto agudo do miocárdio'), which implicitly separates it from the search-oriented sibling cid10_search. It never names that sibling explicitly, so differentiation must be inferred.
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 triggering scenarios (resolve a code, confirm a category/subcategory exists, retrieve restriction flags), which is clear positive guidance. It stops short of stating when NOT to use it or naming cid10_search / cid10_chapter as the alternative for fuzzy or hierarchical lookups.
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". Every word must match (AND), and everyday Portuguese is resolved to the CID-10's own wording (câncer→neoplasia maligna, AVC→acidente vascular cerebral, pressão alta→hipertensão, suicídio→lesão autoprovocada, aids→HIV); when that happens the response says so in vocabulary_notes. 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 terms in Portuguese, AND between words (e.g., "diabetes", "infarto", "câncer de mama"); accents ignored, everyday words resolved to CID-10 wording | |
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| shown_count | Yes | |
| total_count | Yes | |
| vocabulary_notes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds genuinely non-obvious behavior: diacritic-insensitivity, AND-between-words matching, and the vocabulary-normalization layer (câncer→neoplasia maligna, AVC→acidente vascular cerebral) surfaced via vocabulary_notes in the response. It also states the return granularity (3-char categories and/or 4-char subcategories).
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 what the tool is, then bullets for usage, then matching semantics, then the sibling alternative. Every sentence carries information, though the parenthetical expansion of the CID-10 acronym and the example list make it longer than strictly necessary.
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 needn't be explained, annotations carry the safety profile, and all three parameters are documented. The description supplies the domain-specific matching rules that are the real risk of misuse, leaving nothing an agent needs 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, but the description adds meaning beyond the schema by explaining what 'categories' and 'subcategories' mean in practice (3-char vs 4-char) and elaborating the query normalization behavior. It adds little on max_results, which the schema already bounds.
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 (search) and resource (Brazilian CID-10), including the language constraint (Portuguese text). It explicitly contrasts itself with icd11_search, so an agent can route between them without opening either 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?
The 'Use this tool to:' bullets give concrete usage contexts (SUS/ANVISA, CBCD/USP translation, billing/epidemiology) and name icd11_search as the alternative for the international revision. It does not, however, distinguish itself from cid10_lookup or cid10_chapter, which are equally plausible siblings for code-level or chapter-level lookups.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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/openWorld/idempotent/destructive=false, so the description legitimately adds value by disclosing that unknown ids return an error and that it performs a live GET against the public source (latency/freshness implication). It stops short of describing pagination or caching behavior, so not a full 5.
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 contract (what is returned) before the routing/companion context, and each sentence carries information. The paragraph on terminology tools is slightly repetitive given the sibling list, but overall it is tight and well ordered.
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 explained, yet the description still names the key fields usefully. Combined with annotations covering the safety profile and the description covering provenance, error behavior, and source, nothing an agent needs to invoke 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?
Single parameter with 100% schema description coverage; the schema already says 'Identifier of a document returned by `search`.' The description restates the same provenance constraint rather than adding new semantics such as id format or handling of malformed ids, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Returns the full document for an id obtained from `search`,' and enumerates the return shape (id, title, text, url, metadata). It also explicitly distinguishes itself from the terminology siblings, which 'remain the tools for data queries.'
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 an explicit precondition ('Only ids returned by `search` are valid') and an explicit exclusion ('The terminology tools ... remain the tools for data queries'). The agent knows both when to call this and which siblings not to call.
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, 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.1; licenses are never merged; each block carries the origin diagnostics of ITS source) |
| 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, openWorld, non-destructive), yet the description adds substantial context: limit is a cap not a page, match_score/rank are server-computed, groups clustering is a same-concept signal and its absence is NOT proof of non-equivalence, and searches are 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 purpose, then a bulleted use-case list, then scope/parameter behavior, then language guidance. Dense but every sentence carries actionable information and it is easy to skim.
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 formats needn't be spelled out, yet the description still explains the key output fields (match_score, rank, groups). For a 4-param cross-terminology fan-out tool, nothing an agent needs to call 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%, so the baseline is 3, but the description consolidates the interaction rule ('source is subtracted from targets') and the limit cap semantics in prose, aiding correct invocation. It largely mirrors the schema wording rather than adding syntax beyond it, so it stays below 5.
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 (find/rank) and resource (equivalent terms across medical terminologies) with explicit scope (ICD-11, LOINC, RxNorm, MeSH). It implicitly separates itself from single-terminology siblings like icd11_search, loinc_search and rxnorm_search, and explicitly routes pt-BR needs to icd11_search/mesh_search/cid10_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?
Provides a 'Use this tool to' list of concrete scenarios (find same concept in other systems, compare representations, support mapping/integration). It also gives explicit exclusions and alternatives: set target_terminologies to narrow, source_terminology to exclude, and use dedicated tools for pt-BR.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
harmonize_termsHarmonize Free-Text Terms to Standard CodesARead-onlyIdempotentInspect
Map a LIST of free-text clinical terms to standard codes in one call, with ranked candidates and a confidence label for each — the building block of a reviewable crosswalk.
Use this tool to:
Harmonize a column of diagnoses, drugs or lab names from a dataset to ICD-11 / RxNorm (+ ATC) / LOINC
Triage which terms map cleanly (exact / strong) and which need a person (needs_review)
Build a crosswalk you can audit: every row keeps its candidates, scores and sources
Give each term its domain: diagnosis → ICD-11; drug → RxNorm concepts (ingredients first) plus the ATC classes of the term; lab → LOINC. Up to 50 terms per call — a longer list is refused with a validation error: split it into batches of 50. Repeated term+domain pairs are looked up once. max_candidates keeps 1-5 per term (default 3).
Every candidate carries match_score (lexical, 0-1, the find_equivalent formula) and match_type: exact = same words after normalization; strong = every term word is in the title (or the matched synonym) and score ≥ 0.85; needs_review = anything else. A one-word term is exact or needs_review, never strong ("Tylenol" vs "Tylenol PM" is a different product). Synonyms, abbreviations ("MI", "HbA1c") and misspellings land in needs_review or no_candidates — the label errs toward asking a person. Candidates sharing no word with the term are dropped, as are LOINC codes named "Deprecated". For diagnoses, a candidate is also scored against the synonyms WHO matched (e.g. "hypertension NOS" for Essential hypertension), reported in matched_label; postcoordinated clusters (codes with "/" or "&") are left out — build those with icd11_postcoordination. Lab names are ambiguous without specimen and property: "glucose" matches over a thousand LOINC codes, so write "glucose serum" or expect needs_review. One failed lookup does not fail the batch: that row comes back with status "error".
Terms are searched in English and sent to the WHO and NLM APIs — de-identify the list first. For Brazilian Portuguese diagnoses use cid10_search; to check codes you already have, use validate_codes; for one term across every terminology, use find_equivalent. Record the vocabulary versions with the provenance blocks (one per source) and terminology_versions.
| Name | Required | Description | Default |
|---|---|---|---|
| terms | Yes | Terms to harmonize, each with its domain. Up to 50 per call; repeated term+domain pairs are looked up once. | |
| max_candidates | No | Candidates kept per term, best first (1-5, default 3). |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Terms submitted. |
| counts | Yes | |
| ranking | Yes | |
| results | Yes | One entry per submitted term, in request order. |
| provenance | Yes | One provenance block per upstream source that contributed to this response (contract v1.1; licenses are never merged; each block carries the origin diagnostics of ITS source) |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| unique_lookups | Yes | Distinct term+domain pairs actually looked up. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world and non-destructive, but the description adds substantial behavior beyond them: 50-term hard limit with a validation error, dedup of repeated term+domain pairs, per-row error isolation ('one failed lookup does not fail the batch'), needs_review bias, dropped deprecated LOINC codes, and a de-identification requirement before hitting WHO/NLM APIs.
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 a one-line summary, then structured bullets for usage, then behavioral rules. Dense but nearly every sentence carries a rule; minor redundancy in restating the 50-term cap twice and the domain mapping already in 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?
Given the complexity, nested term objects, and presence of an output schema, the description covers everything an agent needs: batch limits, error semantics, match_type scoring rules, why 'glucose' alone fails, and pointer to provenance tools (terminology_versions, per-source provenance blocks). Return values are correctly left to the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description mostly restates the domain enum mapping that the schema already documents. It does add value on the terms parameter (batching at 50, dedup behavior, English-only search) and on max_candidates (default 3, best-first ordering), but this is elaboration rather than information the schema lacks.
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 (harmonize/map) plus resource (list of free-text clinical terms) plus output shape (ranked candidates with confidence labels). It explicitly positions itself as the batch/building-block counterpart to find_equivalent, so an agent can distinguish it from siblings without opening any 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?
Has an explicit 'Use this tool to' list covering the three concrete scenarios (column harmonization, triage, auditable crosswalk), and names when to use alternatives instead: cid10_search for pt-BR diagnoses, validate_codes for existing codes, find_equivalent for one term across all terminologies.
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) of the pinned WHO release.
Use this tool to:
Get an overview of ICD-11 structure
Find which chapter covers a body system or condition type
Get chapter URIs to drill down with icd11_hierarchy (direction 'children')
Returns 28 entries in one response, no pagination — chapters 01-26 plus the supplementary sections V (functioning) and X (extension codes) — each with number, code, title and URI. Each chapter is fetched separately from WHO; if one fetch fails, that entry keeps its URI and carries an error instead of a title, and the rest still come back. Set language for WHO's official translations (e.g. language: "pt"); the result is cached, so repeated calls are cheap.
When NOT to use: to find a specific disease, use icd11_search; for the Brazilian CID-10 (ICD-10) chapters, use cid10_chapters.
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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?
Goes well beyond annotations: exact result size (28 entries, no pagination), composition (01-26 plus V and X), per-chapter fetch semantics with partial-failure behavior (entry keeps URI and carries an `error`), caching behavior, and official-translation-only guarantee. These are non-obvious operational traits an agent needs.
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 bulleted use cases, return shape, and exclusions. Every sentence carries distinct information; nothing is 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?
With an output schema present, return values need not be re-explained, yet the description still covers count, failure modes, and caching. 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 coverage is 100% and the schema already documents the language enum, default, and the no-machine-translation rule. The description's `language: "pt"` example and caching note add only marginal value over 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+resource ('List all ICD-11 chapters (top-level categories) of the pinned WHO release') and immediately scopes it against siblings. An agent can distinguish it from icd11_search, icd11_hierarchy, and cid10_chapters without opening any 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 enumerates three use cases (overview, chapter discovery, URI retrieval for drill-down) and a 'When NOT to use' block naming the correct alternatives (icd11_search for diseases, cid10_chapters for CID-10). Routing is fully specified.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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). The description adds genuine behavioral context beyond that: blocks return with an empty code and a code_range, and translations return the source's official translation and are never machine-translated. It does not need to explain return shape further since an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then a scannable bullet list of uses, then a dense but relevant paragraph on code/uri semantics. Every sentence contributes, though the parameter paragraph is somewhat packed.
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 (no need to describe returns) and annotations carrying the safety profile, the description covers purpose, direction semantics, entity identification, language behavior, and the ICD-10 redirect. 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%, so baseline is 3, but the description adds meaning beyond the schema by clarifying that code may be a leaf code or a block range and that blocks arrive as empty-code results with a code_range. The relationship between uri provenance and prior tool calls is also made explicit.
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 ('Navigate the ICD-11 hierarchy to find parent or child entities') and separates itself from siblings like icd11_lookup, icd11_search, and icd11_chapters. An agent can tell immediately this is a traversal tool, not a search or lookup tool.
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 three-bullet 'Use this tool to' list gives explicit contexts (find parents, find children, understand classification structure), and it routes ICD-10 codes away to map_icd10_to_icd11. It stops short of stating when a sibling such as icd11_lookup would be preferable, so it is clear context without explicit exclusions.
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 ONE ICD-11 entity you already have a code or URI for.
Use this tool to:
Get the full definition of a disease
Retrieve coding notes, inclusions and exclusions
Get the official title and index terms (synonyms)
Provide code (e.g., "BA00") or uri (any URI a previous answer returned) — at least one is required; calling with neither returns a validation error naming both. Set language for WHO's official translations (e.g. language: "pt" for official Portuguese).
Returns a single entity (no pagination). A code WHO does not know comes back as a "not found" error, never an empty record.
When NOT to use: to find a code from a disease name, use icd11_search first; to walk parents/children, use icd11_hierarchy; for an ICD-10 code (like "E11"), convert it with map_icd10_to_icd11 — ICD-10 codes are not ICD-11 codes.
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 readOnly/idempotent/openWorld/non-destructive, so the description rightly spends its words elsewhere: it discloses that the result is a single entity with no pagination, that an unknown code returns a 'not found' error rather than an empty record, that omitting both code and uri yields a validation error naming both, and that translations are WHO-official and never machine-translated. These are real behavioral facts an agent cannot get from 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 single-sentence purpose, then bulleted capabilities, then parameter rules, then exclusions. Every sentence carries distinct information; there is no filler or repetition of the annotations.
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 structure need not be described, yet the description still supplies the cardinality ('single entity, no pagination') and the error contract. Combined with full parameter coverage and the sibling routing, an agent has everything needed to call this correctly on the first attempt.
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, but the description adds a genuine cross-parameter constraint the schema does not express (required is 0): 'at least one is required; calling with neither returns a validation error naming both.' It also clarifies that `uri` may be 'any URI a previous answer returned.' The code example and the official-translation wording largely restate the schema descriptions, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource+cardinality: 'Get detailed information about ONE ICD-11 entity you already have a code or URI for.' That last clause alone distinguishes it from icd11_search and icd11_hierarchy, which the description then names 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?
Provides an explicit 'Use this tool to' list (definitions, coding notes, inclusions/exclusions, titles/synonyms) and a dedicated 'When NOT to use' section that routes three distinct cases to icd11_search, icd11_hierarchy, and map_icd10_to_icd11 with the reason why. Nothing is left to inference.
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
List the postcoordination axes WHO allows for one ICD-11 stem code (MMS linearization, pinned release).
Postcoordination means attaching extra detail to a stem code — severity, laterality, anatomy, causing agent, etc. — to build a composite (cluster) code.
Use this tool to:
See which axes a stem code accepts before building a composite code
Check which axes are REQUIRED vs optional
See whether an axis takes one or several values, and how many values it offers
Provide an ICD-11 code (e.g., "BA00"). Returns one entry per axis with axis_name, required, allow_multiple and value_count — the count of allowed values, not the values themselves. A code with no postcoordination, or one WHO does not know, returns an empty axes list (not an error), so check the code with icd11_lookup if the list is unexpectedly empty.
When NOT to use: this does not build or validate a composite code, and it does not list the allowed values; to get a code from a disease name, use icd11_search.
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior: an empty axes list is not an error, and it clarifies that value_count is a count rather than the values. It does not add much beyond what the output schema likely shows.
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 definition of the term followed by bulleted use cases and a clear negative clause. Every sentence earns its place and the structure is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still summarizes the returned fields and the empty-list edge case. Combined with annotations and full schema coverage, an agent has everything needed to 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% for the single parameter, so the baseline is 3. The description adds a concrete format example ("BA00") and confirms the parameter is the ICD-11 stem code, which marginally improves on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (postcoordination axes) scoped to one ICD-11 stem code in a named linearization/release. It clearly differentiates from siblings by noting it does not build/validate composites or list values, unlike icd11_lookup/icd11_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases (check accepted axes, required vs optional, single/multi-value counts) plus an explicit 'When NOT to use' section naming alternatives (icd11_search for disease name, icd11_lookup when the list is empty). Nothing is left to inference.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: results come from WHO official translations and are explicitly 'never machine-translated,' plus a note on the return shape (codes, titles, relevance scores).
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, then scannable bullets, then return info – a sensible structure. Minor redundancy in restating the language/translation behavior that the schema already carries, but nothing is bloated.
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 full annotation coverage, the description need not detail return values or safety. It covers purpose, use cases, language semantics, and a brief return summary; the only real gap is the absence of sibling routing for a namespace dense with search/lookup alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters well. The description's explanation of `language` (official Portuguese labels instead of machine translation) largely repeats the schema's own description, adding only the concrete pt-BR example.
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... in ICD-11') with an expansion of the acronym. It does not, however, differentiate itself from close siblings like icd11_lookup, icd11_hierarchy, or cid10_search, so an agent must infer the distinction from the name 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?
The 'Use this tool to' bullets sketch intended scenarios (find codes, search by name/keyword, multi-language lookup), which implies usage. But there is no when-not guidance and no explicit routing versus icd11_lookup or the CID-10/Loinc search siblings, leaving selection to inference.
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 (LA…) for data entry validation
Get the item scores of scored instruments (e.g. PHQ-9: "Not at all" = 0 … "Nearly every day" = 3)
Returns each answer with its LOINC answer code (LA…), text, display order and score (null when the list has none). A valid LOINC code without a defined answer list (e.g. a numeric lab such as 2339-0) returns an empty list; a code LOINC does not know returns a "not found" error.
Only applicable to LOINC codes that represent questions with defined answer sets. For the questions of a whole questionnaire, use loinc_panels; to find a code by name, use loinc_search.
| 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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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/non-destructive/openWorld, so the safety profile is covered. The description adds genuinely useful behavior beyond that: it discloses that a valid code with no answer list returns an empty list while an unknown code returns a 'not found' error, plus the score semantics for instruments. It does not discuss rate limits or auth, but those are less critical 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 purpose, then scannable bullets, then edge-case and routing notes. Slightly redundant between the bullet list and the prose, but every sentence carries information and none is 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 one required parameter, full schema coverage, an output schema, and annotations covering safety, the remaining burden is edge-case and routing disclosure — both handled (empty list vs not-found error, sibling alternatives). Nothing an agent needs to invoke 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 loinc_num parameter is fully documented in the schema, so the baseline is 3. The description adds a domain constraint (only codes representing questions with defined answer sets), which is meaningful but really usage guidance rather than parameter syntax.
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 the list of valid answers for a LOINC questionnaire item.' It clearly delineates the scope (question-level answer sets) and names the siblings it is not (loinc_panels, loinc_search), so an agent can select it 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?
Explicit 'Use this tool to' bullets give positive conditions, and the closing sentence gives exclusions plus alternatives: 'Only applicable to LOINC codes that represent questions with defined answer sets. For the questions of a whole questionnaire, use loinc_panels; to find a code by name, use loinc_search.' This is textbook when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
loinc_detailsLOINC Code DetailsARead-onlyIdempotentInspect
Get detailed information about a specific LOINC code.
Use this tool to:
Get the full name and description of a LOINC code
Find the component, property, timing, and system
Check the scale type and method
Provide a LOINC number in format "XXXXX-X" (e.g., "2339-0" for Glucose).
| Name | Required | Description | Default |
|---|---|---|---|
| loinc_num | Yes | LOINC number (e.g., "2339-0") |
Output Schema
| Name | Required | Description |
|---|---|---|
| class | Yes | |
| status | Yes | |
| system | Yes | |
| property | Yes | |
| component | Yes | |
| loinc_num | Yes | |
| provenance | Yes | Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, 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/destructiveHint, fully covering the safety profile, so the bar is lower. The description adds only return-content context, which the existing output schema also supplies, and says nothing about pagination, auth, or error cases.
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 in the first sentence and overall tight. The three-bullet list of returned fields partly duplicates what the output schema already declares, which is mild redundancy rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, fully-annotated read tool with an output schema, the description is complete enough to call correctly. The only gap is routing guidance against the many sibling lookup tools, which is small given how simple invocation is.
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 lone parameter already carries its own description and a regex pattern. The description restates the same format ('XXXXX-X') and example, adding no 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+resource ('Get detailed information about a specific LOINC code') and enumerates the returned fields, which distinguishes it from the search/list family. It never names the sibling it complements (e.g. loinc_search, loinc_answers), so sibling differentiation is implied rather than explicit.
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 describes what you get, not when to choose it over loinc_search or the other LOINC tools. There is no when-not guidance or named alternative, so usage is only implied by the word 'specific'.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 the return type (list of LOINC codes) but doesn't disclose behavior for unknown/invalid loinc_num or error handling. Adequate, not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a compact bulleted list of use cases, then the return value. Efficient and well-structured; the bullet list is slightly redundant with the opening line but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, annotations, and full schema coverage, the description provides enough to call it correctly. Missing only edge-case behavior and explicit sibling routing, which are minor given the rich structured context.
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 includes a pattern and example, so the schema fully documents it. The description doesn't add format or constraint 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: retrieves the structure of a LOINC panel/form and returns its constituent codes. It is distinguishable from siblings like loinc_details and loinc_search, though it doesn't explicitly name a competing sibling. Solid but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use this tool to' list gives concrete contexts: viewing tests in a panel (CBC, metabolic panel), getting form structure, and finding grouped observations. Clear usage context, but no explicit exclusions or named alternatives.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 fully covered. The description's only added behavioral note is the shape of the return ('names, components, and properties'), which duplicates information better served by the output schema. Adds little beyond 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 a one-sentence definition, then scannable bullets, then the return summary. Sized appropriately, with only minor redundancy between the intro sentence's enumeration and the bullet list.
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 safety and an output schema covering the return shape, the description needs only to establish purpose and context, which it does. The remaining gap is disambiguation from sibling LOINC tools, which matters given this tool set's density.
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 both parameters (query, max_results) are fully documented in the schema with types, bounds, and defaults. The description adds no syntax, format, or matching-rule detail (e.g., partial vs exact matching), 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 (Search) and resource (LOINC lab tests/clinical observations/measurements), which is unambiguous on its own. However, it never differentiates itself from the many LOINC siblings (loinc_details, loinc_answers, loinc_panels, map_loinc_to_snomed), so an agent must infer which LOINC tool fits.
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 contexts (finding codes for lab tests, vital signs, diagnostic observations). There are no exclusions or named alternatives despite several overlapping LOINC siblings, so it stops short of the when-not guidance a 5 requires.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| alternatives | Yes | Additional ICD-11 candidates WHO documents for this ICD-10 code. Empty when the primary is the only documented mapping (or when found=false). 1,461 of the 11,243 indexed codes have non-empty alternatives. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safe read-only, idempotent, open-world profile; the description adds substantial behavior beyond that: bundled WHO release version, primary 1:1 vs alternative mappings, returned fields, 11,243-category coverage, excluded chapter/block codes, accepted dotted and undotted formats, and the honest 'no mapping' failure mode. 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 what the tool does, then explains return behavior, usage, coverage limits, input formats, and failure behavior. Each sentence adds distinct operational value with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with an output schema and safety annotations, the description supplies complete invocation context: scope, data source, coverage boundaries, accepted input formats, and what happens when no mapping exists. Nothing an agent needs to call 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 description coverage is 100%, so the parameter is already documented with examples. The description adds useful semantic detail beyond the schema: both dotted and undotted code forms are accepted, and examples carry clinical labels such as 'E11' for Type 2 diabetes and 'A07.8' having four alternatives.
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: mapping ICD-10 codes to ICD-11 using authoritative WHO transition tables. It explicitly contrasts itself with fuzzy text-search candidates and defines coverage boundaries, so an agent can distinguish it from search/lookup 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?
Gives clear use cases (clinical coding, billing migration, retrospective analysis) and the key alternative class: authoritative mapping rather than text-search candidates. It does not explicitly name a specific sibling tool or spell out when-not conditions, so it falls just 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.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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, openWorld and non-destructive, so the safety profile is covered. The description adds a genuinely useful behavior: translations are NLM's official ones and content is never machine-translated, which an agent could not infer from 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 purpose followed by a compact bullet list; the bullets overlap somewhat with what the schema already conveys, but overall it is short and scannable.
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 safety and an output schema covering return shape, the description supplies the remaining essentials: the required ID pattern, the language option, and the translation guarantee. Adequate for a two-parameter lookup 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% and both parameters are documented there, so baseline 3 applies. The description echoes the mesh_id example and language code example without adding syntax or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about a MeSH descriptor by ID'), which distinguishes it from the search-oriented siblings. It does not explicitly contrast itself with mesh_search or mesh_tree, so an agent must infer that this is the by-ID detail lookup.
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 describes what the tool returns (scope note, tree numbers, related concepts) rather than when to choose it over mesh_search/mesh_tree/mesh_qualifiers. The ID format example is helpful context but is not conditional guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_qualifiersMeSH Allowable QualifiersARead-onlyIdempotentInspect
Get allowed qualifiers (subheadings) for a MeSH descriptor.
Use this tool to:
Find which qualifiers can be combined with a descriptor
Build precise MeSH search queries
Understand aspects that can be specified
Qualifiers refine descriptors (e.g., "Diabetes Mellitus/drug therapy").
| Name | Required | Description | Default |
|---|---|---|---|
| mesh_id | Yes | MeSH Descriptor ID (e.g., D015242, D003920) |
Output Schema
| Name | Required | Description |
|---|---|---|
| mesh_id | Yes | |
| provenance | Yes | Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 by structured data. The description adds only the domain nuance that qualifiers refine descriptors, plus the 'Descriptor/qualifier' notation example; it says nothing about behavior on an invalid or non-existent mesh_id. With annotations carrying the behavioral burden, 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?
Well front-loaded: the core purpose is the first sentence, followed by scannable bullets and a concrete example. It is slightly redundant, since 'Find which qualifiers can be combined with a descriptor' restates the opening sentence, which keeps it off 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?
An output schema exists, so return values need not be described. For a single-parameter read-only lookup, the description covers purpose, use cases, and the notation semantics; nothing essential is missing, though an explicit pointer to mesh_descriptor for the descriptor itself would complete the routing story.
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 mesh_id parameter is fully documented in the schema with a pattern and examples. The description adds no syntax, format, or validation detail beyond that, 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?
The opening sentence states a specific verb and resource: 'Get allowed qualifiers (subheadings) for a MeSH descriptor.' That is unambiguous and distinguishes it from the descriptor/lookup siblings. It stops short of naming an alternative (e.g., mesh_descriptor) to route the agent, so it lands at 4 rather than 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 concrete contexts (combining qualifiers with a descriptor, building precise queries, enumerating specifiable aspects), which is clear when-to-use guidance. There are no exclusions or named alternatives for cases like 'I just want the descriptor itself', so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mesh_searchSearch MeSHARead-onlyIdempotentInspect
Search for MeSH (Medical Subject Headings) descriptors.
Use this tool to:
Find MeSH terms for indexing medical literature
Look up subject headings for PubMed searches
Find controlled vocabulary terms
Set language to request NLM's official translations where they exist (e.g. language: "pt" for Portuguese labels); content is never machine-translated.
Returns matching descriptors with MeSH IDs and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| match | No | Match type: exact, contains, or startswith. Default: contains | contains |
| query | Yes | Search term (e.g., "diabetes", "heart failure") | |
| language | No | Language code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated. | en |
| max_results | No | Maximum number of results (1-100). Default: 25 |
Output Schema
| Name | Required | Description |
|---|---|---|
| match | Yes | |
| query | Yes | |
| provenance | Yes | Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 cover read-only/idempotent/open-world, so the bar is lower; the description adds a real behavioral fact beyond them – that language returns NLM's official translations and content is never machine-translated. It also states the return shape (descriptors with MeSH IDs and 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 purpose sentence followed by a compact bullet list and a single sentence on language behavior and return values. Efficient overall, with only minor overlap between the prose language note and the identical schema text.
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 search tool whose annotations cover the safety profile and whose output schema exists, the definition supplies purpose, use cases, the non-obvious translation caveat, and the return shape. Nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the match enum, language enum, and max_results bounds, so the baseline is 3. The description's language explanation with a 'pt' example largely restates what the schema already documents, adding little beyond 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+resource ("Search for MeSH descriptors") and enumerates concrete use cases (indexing, PubMed subject headings, controlled vocabulary), which clearly separate it from lookup siblings like mesh_descriptor. It never names a sibling explicitly, so differentiation is functional rather than direct.
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 retrieval contexts (indexing terms, PubMed subject headings, controlled vocabulary), so when-to-use is well established. It stops short of exclusions or naming alternatives such as mesh_descriptor or mesh_tree for ID/tree navigation.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 non-destructive behavior, so the safety profile is covered. The description adds genuinely useful return context by showing the tree-number format (e.g., C14.280.647 for Myocardial Infarction), which is not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then scannable bullets, then a concrete example. Slight redundancy between the opening line and the first bullet ('where a term fits in the MeSH hierarchy'), but nothing is wasted.
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 documentation is not required, and the safety profile is carried by annotations. The description covers purpose, use cases, and tree-number format, leaving only trivial gaps for a simple one-parameter lookup.
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 documented mesh_id parameter including its pattern and an example. The description adds nothing beyond the schema about the parameter, 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 the tree hierarchy location(s) for a MeSH descriptor') and the bullet list narrows the scope to hierarchy/branch relationships. This is clearly distinguishable from siblings like mesh_descriptor, mesh_search, and mesh_qualifiers.
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 context: seeing hierarchical fit, understanding broader/narrower relationships, finding related terms in the same branch. There is no explicit when-not-to-use or named alternative, 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.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds the return shape (class IDs, names, classification sources), which is mildly useful, but an output schema already exists and no auth or rate-limit 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?
Front-loaded with the core action, then a short scannable bullet list, then the return summary. There is some redundancy between the header sentence and the bullets, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with full annotations and an output schema, the definition covers what the tool does and what it returns. It lacks only sibling routing guidance, a minor gap given the crowded RxNorm toolset.
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?
Single parameter rxcui has 100% schema description coverage, so the schema carries the semantics. The description adds nothing about the identifier's source or format beyond what the schema documents, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get therapeutic and pharmacologic classes for a drug') with concrete examples (Beta-blockers, NSAIDs). It does not differentiate itself from siblings like rxnorm_concept or rxnorm_ingredients, which also serve the RxNorm space.
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 implies when to use it, but the items largely restate the purpose rather than giving conditions or naming alternatives. No when-not guidance or prerequisite (e.g., needing a resolved RxCUI) is provided.
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" — as a string of digits or as an integer.
| Name | Required | Description | Default |
|---|---|---|---|
| rxcui | Yes | RxNorm Concept Unique Identifier (string of digits or integer, e.g. "161" or 161) | |
| include_related | No | Include related concepts (ingredients, brands, dose forms). Default false; true/false, also accepted as the strings "true"/"false" |
Output Schema
| Name | Required | Description |
|---|---|---|
| tty | Yes | |
| name | Yes | |
| found | Yes | false when RxNorm has no concept with this RxCUI (the lookup answered; the fields below are null) |
| rxcui | Yes | |
| status | Yes | |
| synonym | Yes | |
| umlscui | Yes | |
| language | Yes | |
| suppress | Yes | |
| provenance | Yes | Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, 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, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds modest value by noting what data types are returned (status values such as active/remapped, related concepts), but says nothing about the data source, caching, or field completeness.
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?
Purpose is front-loaded in the opening sentence and the bullet list is scannable without redundancy. It is slightly longer than strictly needed given the schema carries the parameter detail, but nothing is wasted.
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 annotations cover the safety/idempotency profile. For a two-parameter read-only lookup the description is largely sufficient; the only gap is the absence of sibling routing.
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 (rxcui and include_related) are already fully documented in the schema, including the string-or-integer format and the boolean/string acceptance. The description only repeats the RxCUI example, adding no meaning beyond the structured fields, 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 gives a specific verb (Get) plus resource (detailed information about a specific RxNorm concept) and the key (by RxCUI), with concrete examples of what you retrieve (name/synonyms, status, related concepts). It clearly reads as an ID-based lookup, implicitly distinguishing it from sibling rxnorm_search, but never names a sibling 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' list gives positive use cases but no when-not guidance or named alternatives. It overlaps with siblings like rxnorm_ingredients (for 'ingredients') and rxnorm_search without clarifying which to pick, leaving the routing decision implied.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license |
| attribution | Yes | Canonical source URLs of this response (attribution list) |
| ingredients | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side-effect profile. The description adds that it returns ingredient RxCUIs and names, which is useful output context, though it doesn't describe error behavior or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core action, followed by a bulleted list of use cases. There is no wasted text, though the bullet points could be slightly more 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 one required parameter, 100% schema coverage, and a declared output schema, the description provides enough context to invoke the tool correctly. It could mention sibling alternatives for broader use-case routing, but it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the single 'rxcui' parameter with its type and pattern. The description does not add any syntax or format details beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get active ingredients for a drug by RxCUI.' It distinguishes the tool from sibling rxnorm_concept and rxnorm_search by focusing on ingredient-level lookup, and the bullet list clarifies the exact use cases.
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' bullet list provides clear context for when to call it: finding active ingredients, checking single vs. multiple ingredients, and identifying generic components of brand drugs. It does not explicitly name when not to use it or mention the alternative tools in the rxnorm family.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description still adds value by spelling out the either/or input mode (RxCUI -> NDCs or NDC -> RxCUI), which is a behavioral constraint beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose followed by a short bulleted usage list; well sized. The usage bullets partially restate the opening line, but the redundancy is minor and it stays easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations carry the safety profile. The description covers the input modes adequately; only minor details (e.g., behavior if both parameters are omitted or supplied) are unaddressed.
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 two parameters are already documented as alternatives. The description restates the either/or relationship but adds no format, validation, or edge-case detail 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 (map) and both resources (RxNorm concepts / RxCUI and NDC codes), and makes the bidirectional nature explicit. An agent can distinguish this lookup/mapping tool from sibling search or concept tools without opening either 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?
It gives clear, enumerated usage cases: get NDCs for a drug by RxCUI, find the RxCUI for an NDC, or cross-reference systems. However, it names no alternatives or exclusions relative to siblings like rxnorm_concept or rxnorm_search, so a small inference gap remains.
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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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. The description adds only that results include RxCUI identifiers, names, and term types, which is largely redundant given the output schema exists. No auth needs, rate limits, or partial-match behavior are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the bullet list is scannable and free of filler. Slightly more text than necessary for a two-parameter search tool, but nothing is wasted or duplicated.
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 fully described schema, and an output schema covering return values, the description needs only to convey purpose and scope, which it does. It falls short of 5 only because it leaves the boundary with sibling RxNorm tools (concept, ingredients, NDC) 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%, with both query and max_results fully documented (including range and default), so the baseline is 3. The description adds no extra meaning such as accepted query syntax, partial matching, or how brand vs generic matching behaves.
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 drugs in RxNorm, with the acronym expansion clarifying what RxNorm is. It also enumerates concrete use cases (brand/generic names, prescribing, formulations). It does not, however, distinguish itself from siblings like rxnorm_concept, rxnorm_ingredients, or rxnorm_ndc, 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 bulleted use cases imply when the tool applies (finding concepts, prescribing lookups, formulation search), which is more than nothing. But there is no explicit when-not guidance and no named alternative (e.g. use rxnorm_concept once you have an RxCUI), so the agent must decide on its own among a dense set of RxNorm siblings.
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.1; licenses are never merged; each block carries the origin diagnostics of ITS source) |
| 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 destructive=false, and the description reinforces this ('read-only and idempotent') while adding traits annotations cannot express: a 10-document result cap, relevance ordering, empty-list-means-no-match semantics, in-memory caching from the public source, and query language tolerance (Portuguese/English, accents and case ignored). These are exactly the operational details an agent needs and cannot infer.
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, return shape and result cap, followed by clearly separated routing, query and behavior notes. It is longer than strictly necessary — the OpenAI contract paragraph could be tighter — and the accents/case detail is restated in the schema, but every section carries routing or behavioral value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter search tool with an output schema and full annotations, nothing needed to call it correctly is missing: source coverage, result cap, ordering, query language handling, the search→fetch handoff, and the reason to prefer sibling data tools are all present.
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?
With a single parameter at 100% schema coverage, the baseline is 3, but the description adds real meaning beyond the schema: the query accepts natural language or keywords and works in Portuguese or English. It does not add syntax or escaping rules, so it sits just above baseline rather than at the top.
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 ('Searches the medical terminologies ... catalog'), names the sources (CID-10, ICD-11, LOINC, RxNorm, MeSH, version records), and specifies the return shape and cap ({ id, title, url }, up to 10, relevance-ordered). It explicitly contrasts itself with the data-returning siblings, so an agent can distinguish it without opening any 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?
It gives unambiguous when-to-use (the OpenAI Deep Research contract requires exactly `search` and `fetch`, then pass the id to `fetch`) and an explicit when-not-to-use, listing the concrete alternatives (`icd11_*`, `cid10_*`, `loinc_*`, `rxnorm_*`, `mesh_*`, `atc_*`, `map_*`, `find_equivalent`, `validate_codes`) for direct questions and actual data. Routing is fully resolved in the description.
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 (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.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds substantial non-obvious context beyond them: the server lacks historical snapshots, `bundled_versions` reflects what is actually on hand, and frequent-change terminologies defer to the publisher's changelog. This is exactly the behavioral disclosure annotations cannot 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 first sentence and clear Inputs section, sized appropriately for a genuinely nuanced tool. Slightly redundant, repeating 'guidance only' and the publisher's-changelog point, which costs it the top score.
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 an output schema exists, return values need not be explained, and the description covers the branching behavior (guidance vs real ICD-10/ICD-11 summary), the bundled-version concept, and the authority hierarchy. Nothing needed 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%, so the baseline is 3, but the description adds real semantics the schema lacks: omitting `from_version` reports against the bundled version, omitting `to_version` reports against the publisher's latest known release, and the icd10+no-to_version combination triggers the cross-revision summary. It does not, however, explain the enum members themselves.
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 versions of a terminology) and immediately carves out what it is not: 'a metadata + guidance layer, not a diff engine.' This distinguishes it from siblings like map_icd10_to_icd11 (real mapping) and terminology_versions (version listing).
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 guidance: for most terminologies it is guidance only and the publisher's changelog is authoritative, while for ICD-10 vs ICD-11 it surfaces a real summary. It even names the exact invocation (`terminology: "icd10"` with no `to_version`), leaving nothing to inference.
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 / 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 7 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 7. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| generated | Yes | Date this snapshot was generated. |
| provenance | Yes | Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, 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 declare readOnly/idempotent/openWorld, and the description adds provenance detail: the full set of 7 is returned by default, the ICD-10 → ICD-11 version reads live from the bundled dataset while everything else is release-maintained metadata. This live-vs-static distinction is useful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the returned fields, then a scannable bullet list of use cases, then the parameter behavior. The bullets are slightly verbose but each carries real information; nothing is wasted.
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, yet the description even enumerates the returned fields. It covers filtering, default behavior, data provenance, and the one-parameter surface, leaving no gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum already documents the filter values and the omit-to-return-all behavior. The description restates the same filtering semantics, adding little 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 (List) and resource (version, release date, publisher, source URL, update cadence of every terminology) with a clear scope. This is instantly distinguishable from every sibling, which are all code-lookup/search tools, so an agent can tell it apart without opening a 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 concrete when-to-use scenarios (confirm release before a batch run, verify bundled tables, cite data version in research). It gives clear positive guidance but does not explicitly name alternatives or exclusions, though the meta purpose has no meaningful sibling overlap.
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; LOINC returns 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, upstream outage, 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, 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.1; licenses are never merged; each block carries the origin diagnostics of ITS source) |
| 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?
Adds rich behavioral context beyond annotations: the 50-code hard cap, parallel validation with wall-time scaling, the null semantics of 'active' per terminology, and the precise valid/error truth table for distinguishing 'not found' from 'couldn't validate'.
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, then a clean bulleted return-value contract, then constraints. Dense but every sentence carries load; 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?
Despite an output schema existing, the description fills the remaining gaps an agent needs: v / error semantics, per-terminology 'active' behavior, replacement-mapping coverage, and throughput/latency limits.
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 meaning beyond the schema: explains why terminology is required (A00 ambiguity), enumerates the accepted values, and documents the batch cap and latency implications.
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 (validate) and a specific resource (mixed batch of medical codes against their source terminologies), and clarifies the scope as batch/multi-terminology, distinguishing it from all the per-terminology lookup/search 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?
Gives clear usage context ('retrospective analysis of legacy databases', flag dead codes, surface ICD-10 → ICD-11 replacements) and implicitly differentiates from single-code lookup siblings, but does not explicitly name an alternative tool or state 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.
8 tool updates
v2.0.0- Changed
find_equivalent7 fields changed- changed
Input schema / properties / source_terminology / enumPrevious value: -[ - "icd11", - "snomed", - "loinc", - "rxnorm", - "mesh" -]New value: +[ + "icd11", + "loinc", + "rxnorm", + "mesh" +] - changed
Input schema / properties / target_terminologies / items / enumPrevious value: -[ - "icd11", - "snomed", - "loinc", - "rxnorm", - "mesh" -]New value: +[ + "icd11", + "loinc", + "rxnorm", + "mesh" +] - changed
Output schema / properties / groups / items / properties / members / items / properties / terminology / enumPrevious value: -[ - "icd11", - "snomed", - "loinc", - "rxnorm", - "mesh" -]New value: +[ + "icd11", + "loinc", + "rxnorm", + "mesh" +] - changed
Output schema / properties / groups / items / properties / terminologies / items / enumPrevious value: -[ - "icd11", - "snomed", - "loinc", - "rxnorm", - "mesh" -]New value: +[ + "icd11", + "loinc", + "rxnorm", + "mesh" +] - removed
Output schema / properties / results / properties / snomedRemoved value: -{ - "additionalProperties": false, - "properties": { - "error": { - "type": [ - "string", - "null" - ] - }, - "found": { - "type": "boolean" - }, - "items": { - "items": { - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "match_score": { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - "rank": { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - }, - "title": { - "type": "string" - }, - "uri": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "code", - "title", - "uri", - "match_score", - "rank" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "found", - "error", - "items" - ], - "type": "object" -} - changed
Output schema / properties / searched_terminologies / items / enumPrevious value: -[ - "icd11", - "snomed", - "loinc", - "rxnorm", - "mesh" -]New value: +[ + "icd11", + "loinc", + "rxnorm", + "mesh" +] - changed
Output schema / properties / source_terminology / anyOfPrevious value: -[ - { - "enum": [ - "icd11", - "snomed", - "loinc", - "rxnorm", - "mesh" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "icd11", + "loinc", + "rxnorm", + "mesh" + ], + "type": "string" + }, + { + "type": "null" + } +]
- Added
harmonize_terms - Changed
loinc_answers4 fields changed- added
Output schema / properties / answers / items / properties / answer_code / descriptionAdded value: +"LOINC answer code (LA…), e.g. \"LA18976-3\"." - added
Output schema / properties / answers / items / properties / scoreAdded value: +{ + "description": "Numeric score for scored instruments (PHQ-9 items: 0-3); null when the answer list carries none.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / answers / items / properties / sequence / descriptionAdded value: +"Display order in the answer list (1-based)." - changed
Output schema / properties / answers / items / requiredPrevious value: -[ - "sequence", - "answer_code", - "answer_string" -]New value: +[ + "sequence", + "answer_code", + "answer_string", + "score" +]
- Changed
loinc_panels1 field changed- 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": { - "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" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": false, + "properties": { + "loinc_num": { + "type": "string" + }, + "name": { + "type": "string" + }, + "required": { + "description": "Whether the item is required; null when the source form definition does not state it (the case for every panel the API serves today).", + "type": [ + "boolean", + "null" + ] + }, + "sequence": { + "description": "Position in the form (1-based), i.e. display order.", + "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" + } +]
- Removed
map_loinc_to_snomed - Changed
terminology_diff2 fields changed- changed
Input schema / properties / terminology / enumPrevious value: -[ - "icd11", - "icd10", - "snomed", - "loinc", - "rxnorm", - "mesh", - "atc", - "cid10" -]New value: +[ + "icd11", + "icd10", + "loinc", + "rxnorm", + "mesh", + "atc", + "cid10" +] - changed
Output schema / properties / terminology / enumPrevious value: -[ - "icd11", - "icd10", - "snomed", - "loinc", - "rxnorm", - "mesh", - "atc", - "cid10" -]New value: +[ + "icd11", + "icd10", + "loinc", + "rxnorm", + "mesh", + "atc", + "cid10" +]
- Changed
terminology_versions3 fields changed- changed
Input schema / properties / terminology / descriptionPrevious value: -"Filter to a single terminology. Omit to return all 8."New value: +"Filter to a single terminology. Omit to return all 7." - changed
Input schema / properties / terminology / enumPrevious value: -[ - "icd11", - "icd10", - "snomed", - "loinc", - "rxnorm", - "mesh", - "atc", - "cid10" -]New value: +[ + "icd11", + "icd10", + "loinc", + "rxnorm", + "mesh", + "atc", + "cid10" +] - changed
Output schema / properties / terminologies / items / properties / code / enumPrevious value: -[ - "icd11", - "icd10", - "snomed", - "loinc", - "rxnorm", - "mesh", - "atc", - "cid10" -]New value: +[ + "icd11", + "icd10", + "loinc", + "rxnorm", + "mesh", + "atc", + "cid10" +]
- Changed
validate_codes2 fields changed- changed
Input schema / properties / codes / items / properties / terminology / enumPrevious value: -[ - "icd11", - "icd10", - "snomed", - "loinc", - "rxnorm", - "mesh", - "atc", - "cid10" -]New value: +[ + "icd11", + "icd10", + "loinc", + "rxnorm", + "mesh", + "atc", + "cid10" +] - changed
Output schema / properties / results / items / properties / terminology / enumPrevious value: -[ - "icd11", - "icd10", - "snomed", - "loinc", - "rxnorm", - "mesh", - "atc", - "cid10" -]New value: +[ + "icd11", + "icd10", + "loinc", + "rxnorm", + "mesh", + "atc", + "cid10" +]
2 tool updates
v1.17.1- Changed
fetch1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
search1 field changed- added
Input schema / additionalPropertiesAdded value: +false
4 tool updates
v1.16.0- Changed
rxnorm_classes3 fields changed- added
Input schema / properties / rxcui / anyOfAdded value: +[ + { + "pattern": "^\\d+$", + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } +] - removed
Input schema / properties / rxcui / patternRemoved value: -"^\\d+$" - removed
Input schema / properties / rxcui / typeRemoved value: -"string"
- Changed
rxnorm_concept17 fields changed- added
Input schema / properties / include_related / anyOfAdded value: +[ + { + "type": "boolean" + }, + { + "enum": [ + "true", + "false" + ], + "type": "string" + } +] - removed
Input schema / properties / include_related / defaultRemoved value: -false - changed
Input schema / properties / include_related / descriptionPrevious value: -"Include related concepts (ingredients, brands, dose forms)"New value: +"Include related concepts (ingredients, brands, dose forms). Default false; true/false, also accepted as the strings \"true\"/\"false\"" - removed
Input schema / properties / include_related / typeRemoved value: -"boolean" - added
Input schema / properties / rxcui / anyOfAdded value: +[ + { + "pattern": "^\\d+$", + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } +] - changed
Input schema / properties / rxcui / descriptionPrevious value: -"RxNorm Concept Unique Identifier"New value: +"RxNorm Concept Unique Identifier (string of digits or integer, e.g. \"161\" or 161)" - removed
Input schema / properties / rxcui / patternRemoved value: -"^\\d+$" - removed
Input schema / properties / rxcui / typeRemoved value: -"string" - added
Output schema / properties / foundAdded value: +{ + "description": "false when RxNorm has no concept with this RxCUI (the lookup answered; the fields below are null)", + "type": "boolean" +} - changed
Output schema / properties / language / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / name / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / status / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / suppress / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / synonym / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / tty / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / properties / umlscui / typePrevious value: -"string"New value: +[ + "string", + "null" +] - changed
Output schema / requiredPrevious value: -[ - "rxcui", - "name", - "synonym", - "tty", - "language", - "suppress", - "umlscui", - "status", - "remapped_to", - "related_groups", - "provenance", - "attribution" -]New value: +[ + "rxcui", + "found", + "name", + "synonym", + "tty", + "language", + "suppress", + "umlscui", + "status", + "remapped_to", + "related_groups", + "provenance", + "attribution" +]
- Changed
rxnorm_ingredients3 fields changed- added
Input schema / properties / rxcui / anyOfAdded value: +[ + { + "pattern": "^\\d+$", + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } +] - removed
Input schema / properties / rxcui / patternRemoved value: -"^\\d+$" - removed
Input schema / properties / rxcui / typeRemoved value: -"string"
- Changed
rxnorm_ndc3 fields changed- added
Input schema / properties / rxcui / anyOfAdded value: +[ + { + "pattern": "^\\d+$", + "type": "string" + }, + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + } +] - removed
Input schema / properties / rxcui / patternRemoved value: -"^\\d+$" - removed
Input schema / properties / rxcui / typeRemoved value: -"string"
33 tool updates
v1.15.0- Changed
atc_classify3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
atc_lookup3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
atc_members3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
cid10_chapter3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
cid10_chapters3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
cid10_lookup3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
cid10_search3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
fetch3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
find_equivalent4 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)"New value: +"One provenance block per upstream source that contributed to this response (contract v1.1; licenses are never merged; each block carries the origin diagnostics of ITS source)" - added
Output schema / properties / provenance / items / descriptionAdded value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
icd11_chapters3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
icd11_hierarchy3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
icd11_lookup3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
icd11_postcoordination3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
icd11_search3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
loinc_answers3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
loinc_details3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
loinc_panels3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
loinc_search3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
map_icd10_to_icd113 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
map_loinc_to_snomed3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
mesh_descriptor3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
mesh_qualifiers3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
mesh_search3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
mesh_tree3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
rxnorm_classes3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
rxnorm_concept3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
rxnorm_ingredients3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
rxnorm_ndc3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
rxnorm_search3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
search4 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)"New value: +"One provenance block per upstream source that contributed to this response (contract v1.1; licenses are never merged; each block carries the origin diagnostics of ITS source)" - added
Output schema / properties / provenance / items / descriptionAdded value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
terminology_diff3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
terminology_versions3 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"Provenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license"New value: +"Provenance block (contract v1.1): source, URL, data vintage, extraction instant, origin diagnostics, citation, license" - added
Output schema / properties / provenance / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
- Changed
validate_codes4 fields changed- changed
Output schema / properties / provenance / descriptionPrevious value: -"One provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)"New value: +"One provenance block per upstream source that contributed to this response (contract v1.1; licenses are never merged; each block carries the origin diagnostics of ITS source)" - added
Output schema / properties / provenance / items / descriptionAdded value: +"Bloco de proveniência (contrato v1.1): fonte, URL, competência, extração, diagnóstico de origem, citação e licença" - added
Output schema / properties / provenance / items / properties / retrievalAdded value: +{ + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "anomalies": { + "description": "Anomalias superadas até o sucesso, somadas por classe, em ordem fixa; [] se nenhuma", + "items": { + "additionalProperties": false, + "properties": { + "count": { + "description": "Ocorrências desta classe na chamada", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "kind": { + "description": "Classe da anomalia (vocabulário fechado do contrato)", + "enum": [ + "timeout", + "network", + "http_4xx", + "http_5xx", + "rate_limited", + "malformed_body" + ], + "type": "string" + } + }, + "required": [ + "kind", + "count" + ], + "type": "object" + }, + "type": "array" + }, + "attempts": { + "description": "Tentativas somadas, incluindo as repetidas (>= requests)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "requests": { + "description": "Idas distintas à origem que compõem esta resposta (fatias, páginas)", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + }, + "unstable": { + "description": "true se houve repetição (attempts > requests) ou alguma anomalia", + "type": "boolean" + } + }, + "required": [ + "requests", + "attempts", + "anomalies", + "unstable" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "Origin diagnostics of THIS source in this call (contract v1.1): requests made to the upstream, attempts summed across retries, anomalies worked around (kind + count); unstable=true when any anomaly happened. null when nothing was measured (bundled dataset, or response served entirely from cache)" +} - changed
Output schema / properties / provenance / items / requiredPrevious value: -[ - "source", - "source_url", - "data_vintage", - "retrieved_at", - "citation", - "license" -]New value: +[ + "source", + "source_url", + "data_vintage", + "retrieved_at", + "retrieval", + "citation", + "license" +]
1 tool update
v1.12.1- Changed
cid10_search2 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Search term in Portuguese (e.g., \"diabetes\", \"infarto\", \"tuberculose\")"New value: +"Search terms in Portuguese, AND between words (e.g., \"diabetes\", \"infarto\", \"câncer de mama\"); accents ignored, everyday words resolved to CID-10 wording" - added
Output schema / properties / vocabulary_notesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +}
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
Tools are well-partitioned by terminology prefix (icd11_*, cid10_*, loinc_*, rxnorm_*, mesh_*, atc_*), and descriptions explicitly add 'when NOT to use' notes. Minor overlap remains between atc_classify/rxnorm_classes (both describe drug classes) and among the cross-terminology search trio (search, find_equivalent, harmonize_terms), plus the easy-to-swap cid10_chapter vs cid10_chapters pair.
Dominant pattern is {terminology}_{action} (icd11_search, loinc_details, rxnorm_concept, mesh_tree) which is highly predictable. Deviations are the bare 'search'/'fetch' pair and the cross-terminology verbs (find_equivalent, harmonize_terms, validate_codes) that lack a namespace prefix, but overall conventions are coherent.
33 tools is on the heavy side, but the scope spans seven vocabularies plus mapping utilities, and each terminology carries a proportionate 3-5 tool surface (search/lookup/detail/hierarchy). The bolted-on search/fetch pair for the Deep Research contract adds two tools that aren't domain-specific.
Coverage is broad and lifecycle-complete for each terminology (search, lookup, details, hierarchy), plus mapping (map_icd10_to_icd11), validation, harmonization, and cross-terminology equivalence. Minor gaps: no reverse ICD-11→ICD-10 mapping and no standalone international ICD-10 lookup distinct from the Brazilian CID-10 surface.
Maintenance
Related MCP Connectors
MCP server for medicaid-intelligence
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.
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.111162 npm114MIT
- 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