Skip to main content
Glama

Medical Terminologies MCP Server

npm version npm downloads node MCP Registry LobeHub Glama MCP server Available on CodeGuilds GitHub stars GitHub Sponsors tool calls MCP License: MIT

A Model Context Protocol (MCP) server providing unified access to major global medical terminologies:

  • ICD-11 - International Classification of Diseases (WHO)

  • SNOMED CT - Systematized Nomenclature of Medicine (opt-in; requires self-hosted Snowstorm)

  • LOINC - Logical Observation Identifiers Names and Codes

  • RxNorm - Normalized names for clinical drugs (NIH)

  • MeSH - Medical Subject Headings (NLM)

  • ATC - Anatomical Therapeutic Chemical classification (WHO Collaborating Centre, served via NLM RxClass)

  • CID-10 - Brazilian Portuguese translation of ICD-10 (DataSUS V2008, bundled)

🇧🇷 Leia em Português

See it in action

Ask your assistant:

  • "What's the ICD-11 code for type 2 diabetes?"icd11_search

  • "Map ICD-10 code E11 to ICD-11."map_icd10_to_icd11

  • "What does LOINC 2339-0 measure?"loinc_details

  • "Qual o código CID-10 para infarto agudo do miocárdio?"cid10_search

The answers come from authoritative sources (WHO, NLM, NIH, DataSUS) — real codes and mappings, not guesses from training data.

Related MCP server: medical-mcp

Features

  • 33 default tools (39 with SNOMED enabled): 31 terminology tools plus search/fetch for ChatGPT Deep Research

  • 3 MCP Prompts that orchestrate tool calls into named workflows (find-medical-code, drug-info, cid10-portuguese-lookup) — clients render these as one-click user actions

  • 4 MCP Resources for in-process reference content (info://server, info://cid10/chapters, info://licenses, info://stats) — sub-millisecond reads (except info://stats which 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 _meta under com.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 derived

  • Built-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 of worker/)

📖 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_search, mesh_descriptor, mesh_tree

MeSH is PubMed's indexing vocabulary; tree numbers let you traverse the controlled hierarchy programmatically

Public-health analyst (Brazil / SUS)

cid10_search, cid10_chapters, atc_classify

CID-10 V2008 is the Brazilian operational standard; ATC pairs cleanly with DataSUS prescription data

Public-health analyst (international)

icd11_search, icd11_lookup, icd11_chapters

WHO ICD-11 is the current international revision; chapters and hierarchy support pipeline classification

Clinical-informatics developer

loinc_search, loinc_details, find_equivalent

LOINC for lab/observation interoperability; cross-terminology search to scaffold new mappings

Educator / curriculum author

mesh_descriptor, icd11_lookup, rxnorm_search

Authoritative definitions, tree numbers, and drug term-types you can drop into self-checked exercises

Try the hosted instance (no install)

A public Cloudflare Workers deployment runs at:

https://medical.sidneybissoli.com/mcp

Connect via the MCP Inspector or any Streamable HTTP MCP client:

npx @modelcontextprotocol/inspector --transport streamable-http \
  --server-url https://medical.sidneybissoli.com/mcp

Or install via Smithery, which proxies the same endpoint through their gateway:

npx -y smithery mcp add sidneybissoli/medical-terminologies-mcp

The hosted instance has WHO credentials configured, so all 33 default tools work without any setup on your side. For your own deployment (e.g. corporate network, different region, custom WHO credentials), see the Installation and Hosted on Cloudflare Workers sections below.

Installation

npm install -g medical-terminologies-mcp

Local Installation

npm install medical-terminologies-mcp

Configuration

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

WHO_CLIENT_ID

Yes¹

WHO ICD API Client ID

WHO_CLIENT_SECRET

Yes¹

WHO ICD API Client Secret

WHO_ICD11_RELEASE_ID

No

ICD-11 release to query (e.g. 2025-01, 2026-01). Default 2026-01.

ENABLE_SNOMED_TOOLS

No²

Set to true to register the 6 SNOMED-dependent tools. Default off.

SNOMED_BASE_URL

No²

Base URL for a Snowstorm instance, e.g. https://my-snowstorm.example.com/snowstorm/snomed-ct.

SNOMED_LANGUAGE

No²

Accept-Language tag(s) for SNOMED responses, e.g. pt, pt-BR, es. Default en. Single-tag values are pass-through reliably; composite values with q-weights (e.g. pt-BR,en;q=0.8) depend on your Snowstorm instance's Accept-Language handling — fallback semantics may vary. Test against your specific deployment if relying on weighted fallback.

LOG_LEVEL

No

pino log level (debug, info, warn, error, fatal). Default info.

¹ Required for ICD-11 tools. Get credentials at: https://icd.who.int/icdapi.

² See SNOMED CT setup (advanced) below. LOINC, RxNorm, and MeSH need no configuration.

HTTP transport (hosted)

The server runs over stdio by default — that's what Claude Desktop and IDE clients expect. The Streamable HTTP transport is served by the Cloudflare Worker in worker/ (an instance of the maintainer's Fase 0 hosting template). The --http flag of the Node entry was removed in v1.6.0 — if you need a local HTTP endpoint, run the Worker locally:

npm ci && cd worker && npm ci
npm run dev     # wrangler dev on http://localhost:8787
# Inspector via HTTP
npx @modelcontextprotocol/inspector --transport streamable-http --server-url http://localhost:8787/mcp

Hosted 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 /stats and GET /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/mcp

search ranks the query across the bundled CID-10 (categories, subcategories, chapters), the terminology version records and a live fan-out to ICD-11, LOINC, RxNorm and MeSH (the same fan-out find_equivalent does; a source that fails is skipped) and returns { id, title, url }; fetch renders the document through the terminology's own lookup tool (cid10_lookup, icd11_lookup, loinc_details, rxnorm_concept, mesh_descriptor, terminology_versions) as readable Markdown with the canonical public page (WHO ICD browsers, loinc.org, RxNav, MeSH Browser), which is what ChatGPT cites. Both carry the same provenance block as every other tool — search one block per source that answered, like find_equivalent. SNOMED is not part of the corpus (its public browser retired, so there is no page to cite). In ChatGPT's developer mode (Settings → Security and login → Developer mode) any tool is callable — the terminology tools remain the ones to use for data.

Hosted on Cloudflare Workers (primary)

The production deployment is the Cloudflare Worker in worker/, config in worker/wrangler.jsonc, CI deploy in .github/workflows/deploy-worker.yml (auto-runs on every push to main).

To deploy your own instance:

npm ci && npm run build:worker-lib
cd worker && npm ci
npx wrangler login         # one-time, browser flow
npx wrangler deploy        # publishes to <name>.<account>.workers.dev
# Set ICD-11 secrets so those 5 tools work:
npx wrangler secret put WHO_CLIENT_ID
npx wrangler secret put WHO_CLIENT_SECRET

Note: 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:

  1. Visit https://smithery.aiPublish → MCP (or https://smithery.ai/new).

  2. Pick the URL submission path (Smithery deprecated container hosting in 2024 — URL is the supported flow now).

  3. Paste https://<your-worker>.workers.dev/mcp. Smithery's gateway scans for compliance and proxies traffic.

Available Tools (33 by default, 39 with SNOMED enabled)

Official Portuguese (pt-BR) content

The server never machine-translates terminology content — but several sources publish official translations, and the tools expose them:

  • CID-10 is natively Portuguese: cid10_search / cid10_lookup / cid10_chapter(s) serve the DataSUS V2008 dataset (the CID-10 the Brazilian SUS uses operationally).

  • ICD-11 in official Portuguese: pass language: "pt" to icd11_search / icd11_lookup to search and read WHO's official pt-BR linearization labels.

  • MeSH: pass language: "pt" to mesh_search / mesh_descriptor to request NLM's official translations where they exist.

  • SNOMED CT (when enabled): language requests the descriptions loaded in your Snowstorm edition (e.g. a national extension's pt-BR refset).

If a source has no official translation for an entry, you get the source language back — never a machine translation.

ICD-11 Tools (5)

Tool

Description

Example

icd11_search

Search ICD-11 by term

query: "diabetes mellitus"

icd11_lookup

Get entity details by code/URI

code: "5A11"

icd11_hierarchy

Navigate parent/child relationships

code: "5A11"

icd11_chapters

List all ICD-11 chapters

-

icd11_postcoordination

Get postcoordination axes

code: "5A11"

LOINC Tools (4)

Tool

Description

Example

loinc_search

Search lab tests and observations

query: "glucose"

loinc_details

Get full LOINC code details

loinc_num: "2339-0"

loinc_answers

Get answer list for surveys

loinc_num: "44249-1"

loinc_panels

Get panel/form structure

loinc_num: "24331-1"

RxNorm Tools (5)

Tool

Description

Example

rxnorm_search

Search drugs by name

query: "metformin"

rxnorm_concept

Get drug concept details

rxcui: "6809"

rxnorm_ingredients

Get active ingredients

rxcui: "6809"

rxnorm_classes

Get therapeutic classes

rxcui: "6809"

rxnorm_ndc

Map between RxCUI and NDC

rxcui: "6809"

MeSH Tools (4)

Tool

Description

Example

mesh_search

Search MeSH descriptors

query: "hypertension"

mesh_descriptor

Get descriptor details

mesh_id: "D006973"

mesh_tree

Get tree hierarchy location

mesh_id: "D006973"

mesh_qualifiers

Get allowed qualifiers

mesh_id: "D006973"

SNOMED CT Tools (5, disabled by default)

These are only registered when ENABLE_SNOMED_TOOLS=true. See SNOMED CT setup (advanced).

Tool

Description

Example

snomed_search

Search concepts by term

query: "myocardial infarction"

snomed_concept

Get concept details by SCTID

sctid: "22298006"

snomed_hierarchy

Get parent/child concepts

sctid: "22298006"

snomed_descriptions

Get all descriptions

sctid: "22298006"

snomed_ecl

Execute ECL queries

ecl: "<< 73211009"

Crosswalk Tools (5 — map_snomed_to_icd10 requires SNOMED)

Tool

Description

Example

map_icd10_to_icd11

Authoritative ICD-10 → ICD-11 mapping via bundled WHO transition tables; returns primary code + chapter + URIs and any WHO-documented alternatives

icd10_code: "E11"

map_snomed_to_icd10

SNOMED CT → ICD-10 guidance (only when ENABLE_SNOMED_TOOLS=true)

sctid: "73211009"

map_loinc_to_snomed

LOINC ↔ SNOMED guidance

loinc_code: "2339-0"

validate_codes

Batch-validate up to 100 codes across ICD-11, LOINC, RxNorm, MeSH, ATC, CID-10 (and SNOMED when enabled); returns per-code valid/invalid + display name

codes: [{terminology:"icd11",code:"5A11"}, …]

find_equivalent

Ranked unified search across terminologies: server-computed match_score/rank per candidate plus cross-terminology groups of lexically identical titles; SNOMED branch is skipped when SNOMED tools are disabled

term: "diabetes"

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

atc_classify

Drug name → ATC code(s)

drug_name: "metformin"

atc_lookup

ATC code (level 1-4) → name + level type

atc_code: "A10BA"

atc_members

ATC class → member drugs

atc_code: "A10BA"

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

cid10_search

Portuguese text search (diacritic-insensitive)

query: "diabetes"

cid10_lookup

Code → official Portuguese name

code: "I21" or "A00.1"

cid10_chapters

List the 22 CID-10 chapters

-

cid10_chapter

Chapter detail with constituent groups

num: 9

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

terminology_versions

List all 8 supported terminologies with current version, release date, publisher, source URL, and update cadence

-

terminology_diff

Report what diff data is available between two versions of a terminology (real cross-revision stats for ICD-10 → ICD-11; guidance otherwise)

terminology: "icd10-icd11"

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

search

Searches the catalog (CID-10, ICD-11, LOINC, RxNorm, MeSH, terminology versions) and returns { id, title, url } ranked by relevance

query: "myocardial infarction"

fetch

Returns the full document of an id from search ({ id, title, text, url, metadata }), rendered by the terminology's lookup tool

id: "cid10:I21.0"

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 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: Calculated

total_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_search with a clinical term → pick the result → icd11_lookup with the code for full details, or icd11_hierarchy to walk parents/children.

  • Drug pipeline: rxnorm_search for a brand or generic name → rxnorm_concept for the canonical record → rxnorm_ingredients and rxnorm_classes for downstream analysis.

  • Cross-terminology scaffolding: find_equivalent with a clinical term searches ICD-11, LOINC, RxNorm, MeSH, and (when enabled) SNOMED in one call. Use it to bootstrap mappings; the pairwise map_* tools refine them.

  • ICD-10 → ICD-11 (text search, not authoritative): map_icd10_to_icd11 does honest text search against WHO ICD-11. Real WHO transition tables are tracked in PROGRESS.md Phase 13.1.

SNOMED CT setup (advanced)

The 5 SNOMED tools (snomed_search, snomed_concept, snomed_hierarchy, snomed_descriptions, snomed_ecl) plus the SNOMED-dependent crosswalk tool (map_snomed_to_icd10) are disabled by default. With them disabled, the server registers 33 tools instead of 39; find_equivalent still works and skips the SNOMED branch with an explanatory note.

The reason: as of 2026-05-08, the public IHTSDO Snowstorm endpoint that this project historically called (https://browser.ihtsdotools.org/snowstorm/snomed-ct/...) returns HTTP 410 Gone for every path. Without a working backend, registering these tools surfaces 6 guaranteed-broken tools to every client.

To enable the SNOMED tools:

  1. Confirm your SNOMED CT license. SNOMED CT use requires an SNOMED International (IHTSDO) license. Member country residents typically have one through their national release center; non-members can obtain an Affiliate license. See https://www.snomed.org/snomed-ct/get-snomed.

  2. Run a Snowstorm instance. SNOMED International publishes Snowstorm as open source (IHTSDO/snowstorm) and as a Docker image (snomedinternational/snowstorm). Self-hosting requires importing an RF2 release file (provided to license holders).

  3. Configure this server:

    {
      "mcpServers": {
        "medical-terminologies": {
          "command": "npx",
          "args": ["-y", "medical-terminologies-mcp"],
          "env": {
            "WHO_CLIENT_ID": "...",
            "WHO_CLIENT_SECRET": "...",
            "ENABLE_SNOMED_TOOLS": "true",
            "SNOMED_BASE_URL": "https://my-snowstorm.example.com/snowstorm/snomed-ct",
            "SNOMED_LANGUAGE": "en"
          }
        }
      }
    }

    SNOMED_BASE_URL should point at the base under which Snowstorm exposes its /MAIN/concepts and related endpoints. SNOMED_LANGUAGE accepts standard Accept-Language tags (e.g. pt, es, pt-BR,en;q=0.8) — Snowstorm returns localized terms when the branch has them and falls back to English otherwise.

  4. Restart the MCP client so the server picks up the env vars.

If you set ENABLE_SNOMED_TOOLS=true without configuring a working Snowstorm, the SNOMED tools will register but every call will fail at the network layer.

Terminology Licenses

The MIT license covers the server code and server-maintained metadata only — not the terminology content served through it, and not the two bundled datasets (cid10.json, icd10-to-icd11.json), which remain under their own terms. The consolidated notice ships with the package as NOTICE.md; every tool response carries a per-source provenance block with the applicable license.

ICD-11 (WHO)

ICD-11 content is provided under the Creative Commons Attribution-NoDerivatives 3.0 IGO license (CC BY-ND 3.0 IGO), per the ICD-11 Terms of Use and License Agreement.

  • Required citation: "International Classification of Diseases, Eleventh Revision (ICD-11), World Health Organization (WHO) 2019 https://icd.who.int/browse11. Licensed under the Creative Commons Attribution-NoDerivatives 3.0 IGO licence (CC BY-ND 3.0 IGO)."

  • This server always serves ICD-11 codes and titles together with their URIs, verbatim; non-English labels are WHO's own official translations (never machine-translated)

  • WHO may terminate the license at any time by notice (§4.7)

  • API access requires registration at https://icd.who.int/icdapi

WHO ICD-10 → ICD-11 transition tables (bundled)

Format conversion (TSV → JSON, content unaltered) of the tables WHO publishes within the ICD-11 release. © World Health Organization, under the ICD-11 Terms of Use — not under this project's MIT license. WHO's guidance: the tables show correspondence between revisions and "are not intended for directly converting data from one revision to the other."

CID-10 V2008 (DataSUS / CBCD, bundled)

© World Health Organization; Brazilian Portuguese translation © CBCD / Faculdade de Saúde Pública da USP; electronic files published by DataSUS (Ministério da Saúde do Brasil). DataSUS/CBCD permission: developers may use the files with due credit and at no charge — this server serves them free with credit in every response. Not under this project's MIT license.

SNOMED CT

SNOMED CT use requires an IHTSDO (SNOMED International) license. The SNOMED tools in this server are disabled by default and only enabled by operators with a valid license and a self-hosted Snowstorm instance — see SNOMED CT setup (advanced).

LOINC

This material contains content from LOINC (http://loinc.org). LOINC is copyright © Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee and is available at no cost under the license at http://loinc.org/license. LOINC® is a registered United States trademark of Regenstrief Institute, Inc.

  • Served via the free NLM Clinical Tables API; every code comes with its official display name

  • Terms with third-party copyright are served with their notice passed through verbatim

RxNorm

RxNorm is produced by the U.S. National Library of Medicine; the RxNav APIs serve non-proprietary, public-domain RxNorm content free of charge.

This product uses publicly available data from the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services; NLM is not responsible for the product and does not endorse or recommend this or any other product.

ATC (via NLM RxClass)

ATC classification © WHO Collaborating Centre for Drug Statistics Methodology (https://atcddd.fhi.no/), retrieved via NLM RxClass and served verbatim. This server never redistributes the WHOCC ATC/DDD index.

MeSH

MeSH is a U.S. government work served under the NLM Terms and Conditions. Courtesy of the U.S. National Library of Medicine.

API Rate Limits

This server implements rate limiting to respect API providers:

API

Rate Limit

WHO ICD-11

5 requests/second

NLM (LOINC, MeSH)

10 requests/second

RxNorm

20 requests/second

SNOMED CT (Snowstorm)

10 requests/second

Development

Building from source

git clone https://github.com/SidneyBissoli/medical-terminologies-mcp.git
cd medical-terminologies-mcp
npm install
npm run build

Running locally

npm start

Testing with MCP Inspector

npx @modelcontextprotocol/inspector node dist/index.js

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository

  2. Create your feature branch (git checkout -b feature/AmazingFeature)

  3. Commit your changes (git commit -m 'Add some AmazingFeature')

  4. Push to the branch (git push origin feature/AmazingFeature)

  5. Open a Pull Request

Author

Sidney Bissoli

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

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 tools
atc_classifyATC Classification for a DrugA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
drug_nameYesDrug name to classify (brand or generic, e.g., "metformin")

Output Schema

ParametersJSON Schema
NameRequiredDescription
matchesYes
drug_nameYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower; the description still adds useful behavior – return cardinality ('one entry per ATC code'), the single-ingredient vs combination-product distinction, and the NLM RxClass source. This is meaningful context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then a tight bulleted list, then return-shape notes. Structure is clean and scannable; the bullets border on restating the purpose but remain compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations carrying safety hints and an output schema handling the return shape, the description supplies the remaining essentials: cardinality of results and the combination-product caveat. An agent has enough to call it correctly, though the missing sibling differentiation with atc_lookup is a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema itself documents drug_name as brand or generic with an example. The description repeats an example ('metformin') but adds no syntax, format, or edge-case semantics beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Look up the WHO ATC classification(s) for a drug by name', with a concrete example mapping ("metformin" → A10BA02). It does not differentiate itself from the sibling atc_lookup, which appears to address the same domain, leaving the agent to guess which to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to' bullets give context (finding ATC codes, class hierarchy, cross-referencing), but they largely restate the purpose rather than stating when this tool is preferred over atc_lookup or atc_members. No exclusions or alternative routing is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atc_lookupATC Code DetailsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
atc_codeYesATC 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

ParametersJSON Schema
NameRequiredDescription
foundYes
detailsYes
atc_codeYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds real scope context: the endpoint does not expose substance-level 7-char codes and maps code length to hierarchy level, which is behavior an agent needs. It stops short of covering error handling on invalid codes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose followed by a bulleted use-case list and a param note; every element earns its place. Minor redundancy: the substance-level caveat is repeated verbatim in both the description and the schema property.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single fully-documented parameter and an output schema that carries return values, the description supplies everything needed to invoke correctly, including the level semantics and the boundary against the sibling that handles substance codes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description goes further by mapping each code length to a semantic level ('A' anatomical, 'A10' therapeutic, 'A10B' pharmacological, 'A10BA' chemical), which interprets the pattern rather than just restating it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (look up an ATC code to get its name and hierarchy level) and pins the scope to levels 1-4. It also distinguishes itself from the sibling atc_classify, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit 'Use this tool to' list (resolve, confirm existence, identify level) and names an alternative plus the condition that selects it: substance-level 7-char codes are not exposed, use atc_classify instead. Both the when and the when-not are present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

atc_membersATC Class MembersA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
atc_codeYesATC code at any level. Higher levels (1-4) return all member substances; level 5 returns the single substance.

Output Schema

ParametersJSON Schema
NameRequiredDescription
membersYes
atc_codeYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description rightly focuses on other behavior: each member carries source_atc_code for disambiguation, class levels 1-4 return all substances while 5 returns one, and RxNorm's catalog is US-centric while ATC codes are international. That is genuine added context beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose in a single sentence, then uses a compact bulleted list for usage variants. Slightly repetitive (the level-1-4/level-5 behavior appears in both schema and prose), which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the description still adds the source_atc_code field note and the US-centric vs international caveat. It omits any mention of result size, ordering, or pagination for potentially large classes, a minor gap for a subtree-expansion tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the atc_code regex and the level-1-4 vs level-5 behavior that the description restates. The description adds no syntax or format detail the schema lacks, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'List the drugs (substances) that belong to an ATC class.' The scope is unmistakable and an agent can distinguish it from classification/lookup siblings like atc_classify or atc_lookup based on the phrasing alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides three concrete use cases (enumerate class members, build mechanism-based lists, explore a subtree at any level) with a worked example ('A10BA' → metformin, phenformin). It does not name exclusions or the sibling tools that would be chosen instead, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cid10_chapterCapítulo da CID-10A
Read-onlyIdempotent
Inspect

Get one CID-10 chapter and its constituent groups (e.g., "Chapter IX → I00-I02 Febre reumática aguda, I05-I09 Doenças reumáticas crônicas do coração, ...").

Use this tool to:

  • Drill from a chapter into its groups

  • Build hierarchical browsers

  • Find which group contains a code range

Provide a chapter number (1-22).

ParametersJSON Schema
NameRequiredDescriptionDefault
numYesChapter number (1-22). CID-10 V2008 has 22 chapters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
numYes
foundYes
groupsYes
chapterYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, and an output schema exists, so the safety/return profile is largely covered before the description speaks. The description contributes little beyond that — no note on what happens with an out-of-range chapter number, no mention of a fixed CID-10 V2008 dataset, and no pagination or cardinality remarks (how many groups per chapter).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core statement, then scannable bullets and the input requirement. Slightly verbose: the long inline example occupies most of the first sentence, but it earns its place by showing the real 'chapter → groups with code ranges' payload.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only lookup with a rich annotation set and an output schema, the definition supplies purpose, usage scenarios and the input contract, so an agent can call it correctly. The only real gap is how it relates to sibling entry points (cid10_chapters, cid10_lookup) in a workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'num' parameter already documents the 1-22 bound and the V2008 basis. The description only restates 'Provide a chapter number (1-22)', adding nothing about numbering conventions or whether the argument is a sequence index versus an official chapter designation, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus a precisely scoped resource ('one CID-10 chapter and its constituent groups'), and the embedded example ("Chapter IX → I00-I02 Febre reumática aguda, I05-I09 ...") makes the returned shape unambiguous. The singular 'one chapter' cleanly separates it from the sibling cid10_chapters, which enumerates the chapter list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Three explicit 'Use this tool to' bullets give concrete scenarios: drilling from a chapter into its groups, building hierarchical browsers, and resolving which group contains a code range. It states when to use it but never names an alternative or exclusion (e.g., use cid10_chapters first to discover valid chapter numbers, or cid10_lookup for a single code).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cid10_chaptersCapítulos da CID-10A
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
chaptersYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context: the exact result size (22 entries) and the staleness caveat that CID-10 V2008 has not been updated since 2008, which an agent needs to reason about data currency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded opening sentence defines the tool, followed by a compact bulleted usage block and a one-line return note. Efficient, though the bullets restate part of the opening sentence (chapters I-XXII) rather than adding entirely new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, full annotation coverage and an output schema handling return structure, the description supplies everything else an agent needs: result cardinality, an example of the returned data, and a version/currency caveat. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond confirming this is a parameterless listing call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource with explicit scope: 'List the 22 chapters of CID-10 with their code ranges and Portuguese titles.' The word 'chapters' (top-level, 22 entries) clearly separates it from the singular sibling 'cid10_chapter' and from 'icd11_chapters' by naming the specific terminology.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to:' block gives three concrete scenarios (view top-level structure, map codes to chapters, build a table of contents), which is clear contextual guidance. It does not, however, state when to prefer the singular 'cid10_chapter' or 'cid10_lookup' instead, so exclusion/routing guidance is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cid10_lookupConsultar Código CID-10A
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesCID-10 code (e.g., "A00", "A00.1", "A001", "I21"). Dotted and undotted forms both accepted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitYes
codeYes
foundYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: it normalizes both dotted and undotted forms and returns the canonical display, plus it discloses that gender / cause-of-death restriction flags may be surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line summary followed by a tight, scannable bullet list of use cases and a closing normalization note. No filler sentences; every line carries usable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering the safety profile and an output schema covering the return shape, the description needs only to explain purpose, usage, and input normalization — all of which it does. Nothing required to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description already documents the dotted/undotted examples and the regex pattern. The description's acceptance note and canonical-return statement largely restate the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ("look up a specific CID-10 code") plus the concrete output ("return its Portuguese name"). The word "specific" implicitly contrasts with a search-style sibling, but it never names cid10_search or cid10_chapter, so sibling differentiation is only inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Three explicit use cases are enumerated (resolve a code to its description, confirm existence of a 3/4-char category, retrieve restriction flags), which gives clear context for when to reach for this tool. However, it never states when NOT to use it or points to the alternative (e.g., cid10_search) for partial/name-based queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchDeep Research DocumentA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesIdentifier of a document returned by `search`

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique identifier of the document on this server; what `fetch` takes
urlYesCanonical public URL of the document — ChatGPT's citation depends on it
textYesFull readable content of the document (Markdown)
titleYesHuman-readable title of the document
metadataNoAdditional key/value pairs about the document (kind, source, period…)
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive hints. The description adds useful behavioral context: unknown ids return an error, the operation is a live GET against the public source when needed, and the return payload has a defined shape. This goes beyond annotation-only information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loads the return contract, then context, then behavior. It is a bit longer than strictly necessary because it restates some annotation-backed properties, but every paragraph adds useful orientation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with a rich output schema and complete annotations, the description covers return shape, valid input source, error behavior, positioning relative to siblings, and safety semantics. Nothing critical is missing for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes `id` as 'Identifier of a document returned by `search`' at 100% coverage. The description reinforces this by explaining the id must come from `search`, but it does not add new format or syntax details. With full schema coverage, the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Returns') with a clear resource (the full document for an id from `search`) and specifies the exact output shape. It also separates itself from the terminology data-query tools, so an agent can distinguish it from siblings without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states that `fetch` is the companion of `search`, that only ids returned by `search` are valid, and that terminology tools should be used for data queries instead. This gives clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_equivalentFind Equivalents Across TerminologiesA
Read-onlyIdempotent
Inspect

Ranked unified search for equivalent terms across multiple medical terminologies.

Use this tool to:

  • Find the same concept in different coding systems

  • Compare how terminologies represent a concept

  • Support terminology mapping and data integration

Searches across: ICD-11, SNOMED CT, LOINC, RxNorm, and MeSH. Set target_terminologies to limit which are searched, or set source_terminology to exclude one (e.g. when you already have a code from that terminology and want equivalents elsewhere). The two combine: source is subtracted from targets. limit caps candidates per terminology (default 5, max 10).

Every candidate carries match_score (lexical similarity to the search term, 0-1) and rank (global position across all searched terminologies) — both computed by this server, since upstreams don't expose comparable relevance scores. Candidates from different terminologies whose titles are lexically identical are clustered in groups — a strong same-concept signal (absence of a group is NOT evidence of non-equivalence).

Searches upstreams in English. For official pt-BR content, use the dedicated tools: icd11_search/mesh_search accept language: "pt", and cid10_search is natively Portuguese.

ParametersJSON Schema
NameRequiredDescriptionDefault
termYesMedical term to search (e.g., "diabetes", "aspirin")
limitNoMaximum 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_terminologyNoIf 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_terminologiesNoLimit the search to these terminologies. If omitted, all five are searched.

Output Schema

ParametersJSON Schema
NameRequiredDescription
termYes
groupsYes
rankingYes
resultsYes
provenanceYesOne provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)
attributionYesCanonical source URLs of this response (attribution list)
source_terminologyYes
searched_terminologiesYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), but the description adds substantial non-obvious behavior: match_score/rank are server-computed because upstreams lack comparable scores, groups cluster lexically identical titles and their absence is explicitly NOT evidence of non-equivalence, and the search is English-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a scannable bullet list, then parameter behavior, then the alternative tools — good ordering with no filler. It loses a point for mild redundancy, since the source/target combination rule and terminology list are stated in both prose and the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, a full schema, and an output schema present, the description still covers the one thing the schema cannot: how to interpret the returned match_score/rank/groups and why paging is not an option. Nothing an agent needs to call or interpret this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds meaning by clarifying that limit is a per-terminology cap rather than a page cursor and by restating the subtraction rule for source_terminology. It stops short of adding anything new for term or target_terminologies that the schema does not already say.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('ranked unified search for equivalent terms') and immediately bounds the scope to cross-terminology search over five named systems. It is clearly distinguishable from the per-terminology siblings (icd11_search, loinc_search, mesh_search), which it explicitly routes away from for pt-BR.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives three concrete use cases, explains exactly how source_terminology and target_terminologies interact ('source is subtracted from targets'), and names alternatives with their conditions (icd11_search/mesh_search with language 'pt', cid10_search for natively Portuguese content). Explicit when-to-use and when-to-use-something-else.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

icd11_chaptersList ICD-11 ChaptersA
Read-onlyIdempotent
Inspect

List all ICD-11 chapters (top-level categories).

Use this tool to:

  • Get an overview of ICD-11 structure

  • Find which chapter covers a body system or condition type

  • Navigate to specific disease categories

ICD-11 has 28 chapters covering all areas of medicine.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoLanguage 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

ParametersJSON Schema
NameRequiredDescription
chaptersYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is fully covered without prose. The description adds only the incidental fact that ICD-11 has 28 chapters; it says nothing about translation behavior (which lives in the schema) or result shape. This meets the reduced bar for an annotated tool but adds little beyond it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core definition in the first line, then uses a short bulleted list and a closing fact. No sentence is wasted, though the final '28 chapters covering all areas of medicine' line is mild filler rather than essential routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the single optional parameter is handled by the schema. The description covers purpose and use cases adequately for a simple read-only listing tool, with only sibling differentiation and any pagination/size hints left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single 'language' enum parameter is fully documented in the schema including the note about official translations vs. machine translation. The description does not mention the parameter at all, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (ICD-11 chapters), with the parenthetical '(top-level categories)' clarifying what a chapter is. It is distinguishable from siblings like icd11_search, icd11_lookup, and icd11_hierarchy by naming the chapters resource, but it never explicitly contrasts itself with the nearest sibling (icd11_hierarchy), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to:' block gives three concrete scenarios (overview of structure, mapping a body system to a chapter, navigating to categories), which is clear context for selection. It provides no exclusions or explicit alternatives, so the guidance is directional but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

icd11_hierarchyBrowse ICD-11 HierarchyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoEntity URI as returned by icd11_lookup, icd11_search or a previous icd11_hierarchy call
codeNoICD-11 code (e.g., "BA00", "5A11") or block range (e.g., "5A10-5A2Y")
languageNoLanguage code (default: en). Returns the source's OFFICIAL translation when it exists (e.g. 'pt' for official Portuguese); content is never machine-translated.en
directionYesDirection: "parents" for ancestors, "children" for subtypes

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeYes
entitiesYes
directionYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description adds genuinely new behavior: block entities come back from 'parents' with an empty code and a code_range, and language returns official translations rather than machine-translated content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then a tight bulleted use-case list, then the naming/direction rules. Every sentence earns its place, including the ICD-10 caveat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. With annotations carrying the safety profile, the description fully covers identification, direction semantics, input naming, and the cross-terminology boundary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining that a block range can be passed as a code, that blocks surface with an empty code plus code_range, and that uri means any URI from a previous answer — all details the schema does not spell out.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (navigate) and resource (ICD-11 hierarchy) and pins the exact scope: parent and child entities. It is clearly distinguishable from siblings like icd11_lookup and icd11_search, which resolve entities rather than traverse relationships.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases (broader parents, specific children, understanding classification structure), defines what each direction value returns, and pre-empts the common mistake that ICD-10 codes are not ICD-11 codes by routing to map_icd10_to_icd11.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

icd11_lookupICD-11 Entity DetailsA
Read-onlyIdempotent
Inspect

Get detailed information about a specific ICD-11 entity by code or URI.

Use this tool to:

  • Get the full definition of a disease

  • Retrieve coding notes and exclusions

  • Get the official title and synonyms

Provide either an ICD-11 code (e.g., "BA00") or a full foundation URI. Set language for WHO's official translations (e.g. language: "pt" for official Portuguese).

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoFull ICD-11 foundation URI
codeNoICD-11 code (e.g., "BA00", "1A00")
languageNoLanguage 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

ParametersJSON Schema
NameRequiredDescription
uriYes
codeYes
titleYes
block_idYes
class_kindYes
code_rangeYes
definitionYes
exclusionsYes
inclusionsYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
browser_urlYes
coding_noteYes
index_termsYes
long_definitionYes
diagnostic_criteriaYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive, so the safety profile is fully covered. The description adds the useful note that content is never machine-translated, but says nothing about rate limits, error behavior for invalid codes, or response shape. Given annotations carry the safety burden, a 3 is fair.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded opening sentence, then a tight bulleted list of use cases, plus a compact note on the language parameter. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be described. For a read-only lookup with 100% schema coverage, the description is nearly complete; only a note on invalid-code handling or the uri-vs-code precedence would make it fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each param is documented in the schema, including enums and defaults. The description reinforces the code/URI choice and adds a concrete language example, but adds little semantic detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (detailed information about a specific ICD-11 entity), and the by-code-or-URI mechanism clearly separates it from siblings like icd11_search or icd11_hierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The bulleted 'Use this tool to' list gives concrete retrieval scenarios (definition, coding notes/exclusions, title/synonyms), which orients usage well. However, it never explicitly says when NOT to use it or names siblings like icd11_search as the alternative for fuzzy lookup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

icd11_postcoordinationICD-11 Postcoordination OptionsA
Read-onlyIdempotent
Inspect

Get postcoordination information for an ICD-11 code.

Use this tool to:

  • Find available axes for building composite codes

  • Check required vs optional postcoordination

  • Understand code extension possibilities

Postcoordination allows adding severity, laterality, anatomy, etc.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesICD-11 code to get postcoordination info for

Output Schema

ParametersJSON Schema
NameRequiredDescription
axesYes
codeYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description's help. The description adds only domain framing (severity, laterality, anatomy) and says nothing about authorization, rate limits, or error behavior, so it clears the lowered bar but adds modest value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence and the bullets are scannable. The trailing "Postcoordination allows adding..." line is somewhat illustrative padding, keeping it just short of ideal.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description is not obligated to explain return values, and it adequately conveys what the tool produces and why. It is complete enough for a single-parameter lookup tool, though a one-line distinction from icd11_lookup would close the remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single required "code" parameter whose schema description already documents it. The description adds no format or syntax detail beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get postcoordination information for an ICD-11 code") plus a domain gloss on what postcoordination means. An agent can identify the tool's function, though it never explicitly contrasts itself with the heavily-overlapping icd11_lookup/icd11_hierarchy siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "Use this tool to:" bullets give concrete contexts (find composite-code axes, check required vs optional postcoordination, understand extension possibilities). Clear usage context, but no explicit when-not or named alternative among the sibling ICD-11 tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loinc_answersLOINC Answer ListsA
Read-onlyIdempotent
Inspect

Get the list of valid answers for a LOINC questionnaire item.

Use this tool to:

  • Find valid response options for survey questions

  • Get answer codes for data entry validation

  • Look up standardized answer lists

Only applicable to LOINC codes that represent questions with defined answer sets.

ParametersJSON Schema
NameRequiredDescriptionDefault
loinc_numYesLOINC number (e.g., "2339-0")

Output Schema

ParametersJSON Schema
NameRequiredDescription
answersYes
loinc_numYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior, so the safety profile is covered. The description adds the applicability constraint, which is genuinely useful, but says nothing about what happens for a code with no answer list (empty result vs. error) or any rate/format behavior. With annotations carrying the main burden, this is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and constraint are front-loaded and the whole thing is short, but the three bullets are largely restatements of one another ('find valid response options', 'get answer codes', 'look up answer lists') and could collapse into a single sentence without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter lookup with a full output schema, the description covers purpose, use cases, and the key applicability constraint, so an agent has enough to call it correctly. The only gap is failure/empty-result behavior, which is minor given the output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema description coverage is 100% — the schema documents loinc_num, its pattern, and an example. The description adds no format or semantics beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence gives a specific verb (Get) and resource (list of valid answers) scoped to a LOINC questionnaire item, which clearly separates it from siblings like loinc_details or loinc_panels. The closing constraint ('Only applicable to LOINC codes that represent questions with defined answer sets') further narrows scope, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to:' bullets give concrete scenarios (survey response options, data-entry validation, standardized answer lists), and the final sentence supplies a when-not condition (codes without defined answer sets). It lacks explicit routing to alternatives such as loinc_details, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loinc_detailsLOINC Code DetailsB
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
loinc_numYesLOINC number (e.g., "2339-0")

Output Schema

ParametersJSON Schema
NameRequiredDescription
classYes
statusYes
systemYes
propertyYes
componentYes
loinc_numYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
scale_typeYes
short_nameYes
attributionYesCanonical source URLs of this response (attribution list)
method_typeYes
time_aspectYes
long_common_nameYes
external_copyright_noticeYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety and repeatability are covered. The description adds only that an exact code format is required; it says nothing about behavior on an unknown code (error vs empty) or the provenance of the returned data, which is the useful behavior gap here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action in the first sentence, followed by a short bulleted enumerations of outputs and the required input format. Well sized for a single-parameter lookup, though the bullets restate fields the output schema likely already carries.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only lookup with an output schema present, the description covers purpose, inputs, and returned field categories. The only real gap is routing relative to sibling LOINC tools, which is arguably a usage-guideline omission rather than a completeness one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents loinc_num with a regex pattern and an example. The description repeats the format 'XXXXX-X' and gives the same '2339-0' example, adding no meaning beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get detailed information about a specific LOINC code', then enumerates the fields returned (name, component, property, timing, system, scale, method). Clear purpose, but it does not distinguish itself from siblings like loinc_search, loinc_panels, or loinc_answers beyond the code-vs-query distinction, which the agent must infer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to' list describes what the tool returns, not when to pick it over loinc_search or loinc_panels. There is no explicit when-to-use/when-not or alternative routing, so the agent must infer that this is the detail-by-exact-code tool rather than the search tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loinc_panelsLOINC Panel StructureA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
loinc_numYesLOINC number (e.g., "2339-0")

Output Schema

ParametersJSON Schema
NameRequiredDescription
panelYes
loinc_numYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety and idempotency profile is clear. The description adds that it returns a list of LOINC codes, which is helpful, but doesn't mention any behavioral aspects like rate limits or potential errors. With annotations covering most, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with a clear opening sentence, followed by a bulleted list of use cases, and a closing sentence about returns. It's concise and front-loaded, though the bulleted list could be seen as slightly verbose for the amount of information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is an output schema, the description needn't explain return values in detail, but it does summarize that it returns a list of LOINC codes. The description covers the purpose, usage examples, and return summary, making it largely complete for an agent to use. It could benefit from noting that the output schema provides further details, but that's implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the loinc_num parameter is fully documented in the schema with pattern and example. The description doesn't add any parameter-specific details beyond what's in the schema. Baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get the structure of a LOINC panel or form.' This clearly distinguishes it from siblings like loinc_details or loinc_search, which retrieve details or search for codes. However, it doesn't explicitly differentiate from loinc_answers, which might also relate to LOINC code groupings, leaving a small ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to' section provides clear examples of when to use it: seeing tests in a panel, understanding assessment form structure, and finding related observations. It doesn't state when not to use it or which alternative tools to consider for similar tasks (e.g., loinc_details for specific code info).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_icd10_to_icd11Map ICD-10 to ICD-11A
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
icd10_codeYesICD-10 code to query in the ICD-11 search index (e.g., E11, I21.0, J18.9)

Output Schema

ParametersJSON Schema
NameRequiredDescription
foundYesWhether the code is in the WHO ICD-10 → ICD-11 transition table.
icd10YesSource ICD-10 entry from the WHO table. Null when found=false.
queryYesThe ICD-10 code as submitted (raw, before normalization).
sourceYes
primaryYesPrimary 1:1 ICD-11 mapping. Null when found=false.
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
alternativesYesAdditional 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

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, it discloses that mappings may be 1:1 or split into multiple candidates, what fields come back (code, title, chapter, Foundation/Linearization URI), the 11,243-category coverage and its exclusion of blocks like 'A00-A09', and the explicit 'no mapping' outcome instead of a fuzzy fallback.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and source, then progressively adds return shape, use cases, coverage limits, and examples. Every sentence carries information, though the separate 'returns...' and 'coverage...' statements could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a one-parameter tool with full schema coverage, an output schema, and rich annotations, the description covers everything an agent needs: usage scope, accepted input formats, coverage boundaries, and fallback behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is self-describing, so the baseline is 3; the description adds value by stating that both dotted ('A07.8') and undotted ('A078') forms are accepted and by giving worked examples with known behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('ICD-10 → ICD-11 mapping') with the source of truth (WHO transition tables, release 2025-01). It also distinguishes itself from text-search siblings ('rather than text-search candidates'), so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names use cases (clinical coding, billing migration, retrospective analysis) and contrasts with the text-search alternative. It does not name the specific sibling (icd11_search / find_equivalent) that would be the fallback, leaving that routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

map_loinc_to_snomedMap LOINC to SNOMED CT (Guidance)A
Read-onlyIdempotent
Inspect

This tool looks up a LOINC code in NLM Clinical Tables and returns guidance on where to obtain a LOINC → SNOMED CT mapping. It does not perform the mapping.

Direct LOINC → SNOMED CT mappings are not freely available via API. UMLS Metathesaurus contains the relationships but requires an individual UMLS Terminology Services license; the LOINC SNOMED CT Expression Association is published by Regenstrief Institute as part of the LOINC release and requires authenticated download from loinc.org under the LOINC license.

For programmatic LOINC → SNOMED mapping, use UMLS or the LOINC Expression Association files. For interactive lookup, use the SNOMED CT browser available to your organization or the Regenstrief RELMA desktop tool.

Provide a LOINC code like "2339-0" (Glucose) or "718-7" (Hemoglobin).

ParametersJSON Schema
NameRequiredDescriptionDefault
loinc_codeYesLOINC code (e.g., 2339-0 for Glucose)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesAlways "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.
guidanceYesShort human-readable explanation of why this tool returns guidance instead of a mapping.
loinc_codeYesThe LOINC code as submitted.
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
loinc_detailsYesNLM Clinical Tables details for the LOINC code (component, system, property, etc.). Null when the code was not found upstream.
mapping_sourcesYesStructured list of authoritative LOINC → SNOMED CT mapping sources (UMLS Metathesaurus, LOINC SNOMED CT Expression Association, Regenstrief RELMA).

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered; the description goes further and discloses the crucial behavioral trait that it returns guidance rather than a mapping, plus the licensing/auth constraints (UTS license, Regenstrief authenticated download) behind the alternatives. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the key limitation and then routes to alternatives; the license/dependency paragraph is somewhat dense but each sentence carries decision-relevant information. Slightly longer than strictly necessary for a one-parameter lookup.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description fully covers the unusual semantics (guidance, not mapping), the reason for the limitation, and all workable alternatives. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter already documents its pattern and example, so the baseline is 3. The description adds a second realistic example ('718-7' Hemoglobin) but no format or validation semantics beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('looks up a LOINC code in NLM Clinical Tables') and immediately bounds the scope with 'It does not perform the mapping.' That negative statement cleanly separates it from mapping siblings like map_icd10_to_icd11 and from loinc_details/loinc_search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use routing: programmatic mapping -> UMLS or LOINC Expression Association files; interactive lookup -> institutional SNOMED CT browser or RELMA. It also states why the tool exists (direct mappings are not freely available via API), which is exactly the context an agent needs to avoid mis-selecting it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mesh_descriptorMeSH Descriptor DetailsA
Read-onlyIdempotent
Inspect

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").

ParametersJSON Schema
NameRequiredDescriptionDefault
mesh_idYesMeSH Descriptor ID (e.g., D015242, D003920)
languageNoLanguage 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

ParametersJSON Schema
NameRequiredDescription
idYes
uriYes
labelYes
conceptsYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
qualifiersYes
scope_noteYes
attributionYesCanonical source URLs of this response (attribution list)
tree_numbersYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds useful behavioral context beyond that: it enumerates what is returned (scope note, tree numbers, related concepts/synonyms) and clarifies the non-obvious language rule that content is never machine-translated and only official NLM translations are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded one-line purpose followed by a tight, scannable bullet list of retrievable fields, then a compact note on ID and language. Minor redundancy with the language parameter already documented in the schema, but no wasted prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, yet it helpfully summarizes the key ones. The one real gap is sibling disambiguation among mesh_search/mesh_tree/mesh_qualifiers, but coverage of inputs and behavior is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the ID pattern/example and the 'official translation, never machine-translated' caveat. The description's parameter text (example ID, language example) largely restates the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (get detailed info about a MeSH descriptor) and pins it to lookup-by-ID, which is genuinely distinct from a search tool. However, it never names the obvious siblings (mesh_search, mesh_tree, mesh_qualifiers), so an agent must infer the boundary between this and mesh_tree (which also surfaces tree numbers).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The bullet list of what you can retrieve implies the usage context (when you already have a Descriptor ID), but there is no explicit when-to-use/when-not guidance and no alternative tool is named. An agent can infer it, but nothing routes it away from mesh_search or mesh_tree.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mesh_qualifiersMeSH Allowable QualifiersA
Read-onlyIdempotent
Inspect

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").

ParametersJSON Schema
NameRequiredDescriptionDefault
mesh_idYesMeSH Descriptor ID (e.g., D015242, D003920)

Output Schema

ParametersJSON Schema
NameRequiredDescription
mesh_idYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
qualifiersYes
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered without the description. The description adds domain context (that qualifiers refine descriptors, with an example) but no behavioral traits beyond annotations such as coverage or response characteristics. With annotations doing the heavy lifting, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then a compact bulleted list of use cases, and a clarifying example sentence. Every element earns its place, though the bullets are slightly repetitive with the opening sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the single required parameter is fully documented in the schema. Annotations cover the safety profile. The description is complete enough for correct invocation, missing only sibling routing guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and there is a single parameter (mesh_id) with a documented pattern and examples. The description implies the input is a MeSH descriptor but adds no format or syntax detail beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Get allowed qualifiers (subheadings) for a MeSH descriptor.' The parenthetical and the example ('Diabetes Mellitus/drug therapy') make the concept unambiguous. It does not explicitly differentiate itself from siblings like mesh_descriptor or mesh_tree, but the resource is narrow enough to distinguish it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to' list gives three concrete scenarios (finding combinable qualifiers, building search queries, understanding specifiable aspects). That is clear usage context, but no explicit exclusions or named alternatives (e.g., when to use mesh_descriptor instead) are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mesh_treeMeSH Tree LocationsA
Read-onlyIdempotent
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
mesh_idYesMeSH Descriptor ID (e.g., D015242, D003920)

Output Schema

ParametersJSON Schema
NameRequiredDescription
mesh_idYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
tree_numbersYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds a useful tree-number format example (C14.280.647), but says nothing about pagination, missing descriptors, or error behavior beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then a short scannable bullet list and one clarifying example. Slightly list-heavy for a one-parameter tool, but nothing is padded and the key information leads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers purpose, use cases, and tree-number format. For a simple read-only lookup this is essentially complete, with only minor gaps in edge-case behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: the single mesh_id parameter is documented with its pattern and descriptor-ID examples. The description does not elaborate on the parameter at all, so baseline 3 is appropriate for a one-parameter tool whose schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource ('Get the tree hierarchy location(s) for a MeSH descriptor'), which clearly separates it from mesh_search or mesh_descriptor. It never names those siblings explicitly, so an agent must infer the boundary, but the scope ('tree hierarchy locations') is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The bullet list gives concrete use cases (find hierarchy position, broader/narrower relationships, related terms in the same branch), which is clear when-to-use guidance. It stops short of naming alternatives or exclusions, so the agent gets context but no routing rules.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rxnorm_classesRxNorm Drug ClassesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rxcuiYesRxCUI of the drug

Output Schema

ParametersJSON Schema
NameRequiredDescription
rxcuiYes
classesYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the description need not restate safety. It does add a return-content hint ('class IDs, names, and classification sources'), but since an output schema exists, this is modest added value. No auth, rate-limit, or edge-case context is given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in one sentence, followed by a short scannable bullet list and a returns line. It is appropriately sized, though the bullets largely restate the opening sentence rather than adding new information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description needs only to establish purpose and basic return shape, which it does. The main gap is the absence of any sibling disambiguation against the ATC classification tools, but nothing essential for a correct single-param call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single, fully described parameter (rxcui with a numeric pattern), so the schema carries the semantic load. The description adds nothing about what the rxcui represents or where to obtain it, which is the correct baseline of 3 when the schema already documents the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb+resource ('Get therapeutic and pharmacologic classes for a drug') that an agent can act on. The bulleted examples reinforce the concept with concrete instances (Beta-blockers, NSAIDs). However, it does not distinguish itself from close siblings like atc_classify/atc_members, which are also drug-classification tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to' list describes what the tool can find, not when to choose it over alternatives. There is no explicit when-not guidance and no sibling is named, even though ATC class tools overlap heavily. Usage is implied by the capability list rather than contrasted against alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rxnorm_conceptRxNorm Concept DetailsA
Read-onlyIdempotent
Inspect

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".

ParametersJSON Schema
NameRequiredDescriptionDefault
rxcuiYesRxNorm Concept Unique Identifier
include_relatedNoInclude related concepts (ingredients, brands, dose forms)

Output Schema

ParametersJSON Schema
NameRequiredDescription
ttyYes
nameYes
rxcuiYes
statusYes
synonymYes
umlscuiYes
languageYes
suppressYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
remapped_toYes
related_groupsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description adds the scope note that a valid RxCUI identifier is required, but discloses nothing about rate limits, status semantics (what 'remapped' means for follow-up calls), or failure behavior for unknown RxCUIs. With annotations carrying the core profile, this is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Reasonably short and front-loaded: the first sentence states the core action and the parameter. The bulleted 'Use this tool to' block is useful but slightly redundant with the intro sentence. No wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a 2-parameter schema at full coverage, an output schema present, and annotations covering safety, the description needs only to orient the agent, which it does. Its only notable gap is routing guidance versus sibling lookup/search tools, which matters given the large sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description restates the RxCUI requirement and gives an example value ('161'), which adds a concrete format example beyond the regex pattern, but does not explain include_related semantics beyond what the schema already says. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb (Get detailed information) and resource (a specific RxNorm concept by RxCUI), and the bullet list of what it returns (name/synonyms, status, related concepts) adds concrete scope. It doesn't explicitly distinguish itself from siblings like rxnorm_search or rxnorm_ingredients, but the 'by RxCUI' framing implies lookup-by-identifier versus search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the list of things you can do ('Use this tool to: ...'), but there is no explicit when-to-use guidance and no named alternatives. An agent can infer this is for direct identifier lookup rather than search, but the description never says to prefer rxnorm_search when you lack an RxCUI.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rxnorm_ingredientsRxNorm Drug IngredientsA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rxcuiYesRxCUI of the drug

Output Schema

ParametersJSON Schema
NameRequiredDescription
rxcuiYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
ingredientsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds the return payload form ('ingredient RxCUIs and names') but discloses nothing about rate limits, auth, or behavior for invalid/unknown RxCUIs. With annotations carrying the safety burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence, followed by a short scannable bullet list and a one-line return note. It is tight, though the bullets largely restate the purpose and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully documented single parameter, rich annotations, and an existing output schema, the definition supplies enough for an agent to call it correctly. The only modest gap is the lack of routing to sibling tools for obtaining the input RxCUI.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single required 'rxcui' parameter that already documents its pattern. The description only restates 'by RxCUI' and adds no syntax, format, or edge-case meaning beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get active ingredients for a drug by RxCUI') and names the required identifier, making the operation unambiguous. It does not explicitly differentiate itself from siblings like rxnorm_concept or rxnorm_search, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool to:' bullets give three concrete scenarios (finding ingredients, single vs. multi-ingredient checks, generic components of brands), which implies when the tool applies. However, it never names an alternative or states when NOT to use it (e.g., use rxnorm_search first to obtain the RxCUI), so guidance is only partially fulfilled.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rxnorm_ndcRxNorm / NDC MappingA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ndcNoNDC code to look up RxCUI (alternative to rxcui)
rxcuiNoRxCUI to get NDC codes for

Output Schema

ParametersJSON Schema
NameRequiredDescription
ndcYes
ndcsYes
rxcuiYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
query_modeYes
attributionYesCanonical source URLs of this response (attribution list)

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, fully covering the safety profile. The description adds no behavioral context beyond the input/output mapping, and with an output schema present, return-value details are not needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core mapping purpose and followed by bulleted use cases and a concise input directive. No wasted words, though the bullet list slightly repeats the mapping concept.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a read-only mapping tool: purpose, usage, and parameter semantics are all clear. Annotations and output schema cover safety and return values, so the description need not repeat them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are documented in the schema. The description reinforces their roles ('RxCUI to get NDC codes for' and 'NDC code to look up RxCUI'), adding the explicit directional semantics and mutual exclusivity beyond the schema's basic descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific bidirectional transformation: mapping RxNorm concepts (RxCUI) to NDC codes and back. The bulleted use cases distinguish it from sibling tools like rxnorm_concept or rxnorm_search, which focus on concept metadata or searching rather than NDC cross-referencing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Provide either an RxCUI to get NDCs, or an NDC to get the RxCUI', telling the agent exactly which input drives which direction. The mutual exclusivity is clear, though it doesn't name a sibling alternative, but no sibling overlaps this function.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminology_diffTerminology Version DiffA
Read-onlyIdempotent
Inspect

Report what diff data is available between two versions of a terminology.

For most terminologies this is guidance only — the server doesn't ship historical snapshots, so the tool points at the publisher's official changelog and explains the cadence. bundled_versions lists the version(s) this server actually has on hand.

For ICD-10 vs ICD-11 specifically, the tool surfaces a real cross-revision summary from the bundled WHO transition tables (the ICD-10 → ICD-11 case is a structural diff between two WHO revisions). Use terminology: "icd10" with no to_version to get the cross-revision summary: total mapped ICD-10 categories, how many are 1:1 vs split into multiple ICD-11 codes, and the average number of alternatives when split.

Inputs:

  • terminology (required): which terminology to report on.

  • from_version (optional): the version you have data from. If omitted, the tool reports against the currently-bundled version.

  • to_version (optional): the version you want to compare to. If omitted, the tool reports against the publisher's latest known release.

This tool is intentionally a metadata + guidance layer, not a diff engine — for terminologies that change frequently (SNOMED, LOINC, RxNorm, MeSH), the publisher's official changelog is the authoritative source.

ParametersJSON Schema
NameRequiredDescriptionDefault
to_versionNoVersion you want to compare to. Optional.
terminologyYesWhich terminology to report on.
from_versionNoVersion you have data from. Optional; behavior depends on terminology.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYes
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
to_versionYes
attributionYesCanonical source URLs of this response (attribution list)
terminologyYes
from_versionYes
changelog_urlYes
diff_availableYesTrue when this server has the data to compute a real diff for the requested terminology. False = guidance-only response.
bundled_versionsYes
cross_revision_summaryYesPopulated 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

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), and the description adds substantial context beyond them: the server ships no historical snapshots, bundled_versions exposes what is on hand, and the ICD-10 path returns counts of 1:1 vs split mappings and average alternatives. This is real behavioral disclosure not present in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well front-loaded with the general case first, then the ICD-10 exception, then inputs, then a scope caveat. Slightly long, and the Inputs block partially restates schema properties, but each section carries distinct value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values don't need spelling out, yet the description still characterizes the ICD-10 summary payload. For a tool whose behavior varies sharply by terminology, the definition covers both modes and the fallback guidance adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: it explains the default behavior of from_version (currently-bundled version) and to_version (publisher's latest known release) and the special ICD-10 invocation with terminology only. It goes beyond the schema's terse per-property text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (report) and resource (diff data between two terminology versions) and immediately frames itself as a metadata/guidance layer rather than a diff engine, cleanly separating it from map_icd10_to_icd11 and terminology_versions. An agent can tell what this returns without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly distinguishes the general case (guidance only, use the publisher changelog for SNOMED/LOINC/RxNorm/MeSH) from the one case with real data (ICD-10→ICD-11), and gives the exact invocation shape for it. It even names the authoritative alternative for frequent-change terminologies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminology_versionsTerminology VersionsA
Read-onlyIdempotent
Inspect

List the current version, release date, publisher, source URL, and update cadence of every terminology this server queries against.

Useful for pipeline maintainers who need to:

  • Confirm which release of ICD-11 / SNOMED / LOINC / RxNorm / MeSH / ATC the server is querying before a batch run.

  • Verify the bundled CID-10 (frozen at V2008) and ICD-10 → ICD-11 transition tables (currently 2025-01) match expectations.

  • Cite the data version in research artifacts.

Pass terminology to filter to a single entry; otherwise the full set of 8 is returned. The ICD-10 → ICD-11 version reads live from the bundled dataset; everything else is metadata maintained alongside the project release.

ParametersJSON Schema
NameRequiredDescriptionDefault
terminologyNoFilter to a single terminology. Omit to return all 8.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
generatedYesDate this snapshot was generated.
provenanceYesProvenance block (contract v1.0): source, URL, data vintage, extraction instant, citation, license
attributionYesCanonical source URLs of this response (attribution list)
terminologiesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real behavioral context beyond them: the ICD-10→ICD-11 entry reads live from the bundled dataset while the rest is static release metadata, plus the fact that the full set of 8 is returned by default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then a scannable bullet list of use cases, then the parameter note and provenance caveat. Every sentence carries information; nothing is redundant padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation. Between the purpose, use cases, parameter default behavior, and data-freshness caveat, an agent has everything needed to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single enum parameter is fully documented in the schema, including the 'omit to return all 8' behavior. The description restates the same filter/default behavior without adding format or usage nuance, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and a precise resource (version, release date, publisher, source URL, update cadence of every terminology), which no sibling covers. It never explicitly names a sibling it is not (e.g., terminology_diff or validate_codes), so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use contexts via the 'pipeline maintainers who need to' list: pre-batch release confirmation, verifying the frozen CID-10/transition tables, and citing versions in research. No explicit alternatives or when-not-to-use conditions are given, keeping it at a 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_codesValidate Medical CodesA
Read-onlyIdempotent
Inspect

Validate a mixed batch of medical codes against their source terminologies. Useful for retrospective analysis of legacy databases — flag codes that no longer exist, surface ICD-10 → ICD-11 replacements, and grade activity status where the terminology exposes it.

For each input { code, terminology }, returns:

  • valid: whether the code exists in the source terminology.

  • active: whether the code is currently active. Null when the source doesn't expose an explicit active/inactive distinction at category level (CID-10, ATC, ICD-11, RxNorm, MeSH all return null today; SNOMED and LOINC return a real boolean).

  • title: the official label/name when available.

  • replaced_by: a successor code, populated today only for ICD-10 codes that have a primary ICD-11 mapping in the bundled WHO transition tables.

  • source: human-readable provenance of the validation (terminology + release/version).

  • error: non-null only when validation couldn't be performed (network error, SNOMED feature flag off, etc.). valid: false + error: null means "code not found"; valid: false + error: set means "couldn't validate".

Terminology is required per code — auto-detection isn't supported because category codes like "A00" exist in both ICD-10 and CID-10. Accepted values: icd11, icd10, snomed, loinc, rxnorm, mesh, atc, cid10.

Hard cap of 50 codes per call; codes are validated in parallel through their respective clients, so total wall time scales with the slowest upstream + its rate limit (worst case ~10 s for a full batch hitting ICD-11).

ParametersJSON Schema
NameRequiredDescriptionDefault
codesYesList 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

ParametersJSON Schema
NameRequiredDescription
totalYesNumber of codes submitted.
resultsYes
provenanceYesOne provenance block per upstream source that contributed to this response (contract v1.0; licenses are never merged)
attributionYesCanonical source URLs of this response (attribution list)
error_countYesHow many couldn't be validated due to upstream/network errors.
valid_countYesHow many were confirmed valid.
invalid_countYesHow many were not found.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already covering the safety profile, the description adds substantial operational context: the 50-code hard cap, parallel execution via per-terminology clients, worst-case ~10 s latency tied to upstream rate limits, and precise error semantics distinguishing 'not found' (valid:false, error:null) from 'couldn't validate' (error set).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then structures return-field semantics as a scannable bullet list, ending with operational limits. Some return-value detail is verbose given an output schema exists, but nearly every sentence carries meaning for a batch tool with unusual null/error semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a batch mutation-free validator with nested input items, an output schema, and per-terminology nuances, the description covers scope, field semantics, null behavior, error distinction, accepted terminologies, cap, and latency. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the enum values, per-item structure, minLength, and maxItems are already documented in the schema. The description reinforces why terminology is required per code (category codes like 'A00' collide across ICD-10/CID-10) but adds little beyond what the schema already states, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Validate a mixed batch of medical codes against their source terminologies') plus a concrete use case (retrospective analysis of legacy databases). The batch/mixed-terminology framing implicitly separates it from single-terminology siblings like icd10_lookup or loinc_details, but no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through 'retrospective analysis of legacy databases' and the flagging/replacement features, which suggests when it is valuable. However, it never states when to prefer this over alternatives such as map_icd10_to_icd11, find_equivalent, or terminology_diff, nor any explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 33 tool updatesv1.11.0
    • Changedatc_classify1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedatc_lookup1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedatc_members1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcid10_chapter1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcid10_chapters1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcid10_lookup1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcid10_search1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Addedfetch
    • Changedfind_equivalent1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedicd11_chapters1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedicd11_hierarchy5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / code / description
        Previous value: -"ICD-11 code to get hierarchy for"New value: +"ICD-11 code (e.g., \"BA00\", \"5A11\") or block range (e.g., \"5A10-5A2Y\")"
      • addedInput schema / properties / language
        Added 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"
        +}
      • addedInput schema / properties / uri
        Added value: +{
        +  "description": "Entity URI as returned by icd11_lookup, icd11_search or a previous icd11_hierarchy call",
        +  "format": "uri",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "code",
        -  "direction"
        -]New value: +[
        +  "direction"
        +]
    • Changedicd11_lookup1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedicd11_postcoordination1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedicd11_search1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedloinc_answers1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedloinc_details1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedloinc_panels1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedloinc_search1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmap_icd10_to_icd111 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmap_loinc_to_snomed1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmesh_descriptor1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmesh_qualifiers1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmesh_search1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmesh_tree1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrxnorm_classes1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrxnorm_concept1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrxnorm_ingredients1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrxnorm_ndc1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrxnorm_search1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Addedsearch
    • Changedterminology_diff1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedterminology_versions1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedvalidate_codes1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
  2. 31 tool updatesv1.9.1
    • Changedatc_classify4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedatc_lookup4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedatc_members4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedcid10_chapter4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedcid10_chapters4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedcid10_lookup5 fields changed
      • changedOutput schema / properties / hit / anyOf
        Previous 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"
        +  }
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedcid10_search6 fields changed
      • removedOutput schema / properties / hits / items / properties / group_range / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / hits / items / properties / group_range / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedfind_equivalent24 fields changed
      • removedOutput schema / properties / provenance / items / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / items / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / items / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / items / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / icd11 / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / icd11 / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / icd11 / properties / items / items / properties / uri / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / icd11 / properties / items / items / properties / uri / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / loinc / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / loinc / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / loinc / properties / items / items / properties / uri / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / loinc / properties / items / items / properties / uri / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / mesh / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / mesh / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / mesh / properties / items / items / properties / uri / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / mesh / properties / items / items / properties / uri / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / rxnorm / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / rxnorm / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / rxnorm / properties / items / items / properties / uri / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / rxnorm / properties / items / items / properties / uri / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / snomed / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / snomed / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / properties / snomed / properties / items / items / properties / uri / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / properties / snomed / properties / items / items / properties / uri / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedicd11_chapters12 fields changed
      • removedOutput schema / properties / chapters / items / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / chapters / items / properties / code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / chapters / items / properties / code_range / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / chapters / items / properties / code_range / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / chapters / items / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / chapters / items / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / chapters / items / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / chapters / items / properties / title / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedicd11_hierarchy8 fields changed
      • removedOutput schema / properties / entities / items / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / entities / items / properties / code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / entities / items / properties / code_range / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / entities / items / properties / code_range / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedicd11_lookup22 fields changed
      • removedOutput schema / properties / block_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / block_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / browser_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / browser_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / class_kind / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / class_kind / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / code_range / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / code_range / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / coding_note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / coding_note / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / definition / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / definition / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / diagnostic_criteria / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / diagnostic_criteria / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / long_definition / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / long_definition / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedicd11_postcoordination4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedicd11_search6 fields changed
      • removedOutput schema / properties / entities / items / properties / code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / entities / items / properties / code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedloinc_answers4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedloinc_details6 fields changed
      • removedOutput schema / properties / external_copyright_notice / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / external_copyright_notice / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedloinc_panels4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedloinc_search6 fields changed
      • removedOutput schema / properties / items / items / properties / external_copyright_notice / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / external_copyright_notice / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmap_icd10_to_icd114 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmap_loinc_to_snomed7 fields changed
      • changedOutput schema / properties / loinc_details / anyOf
        Previous 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"
        +  }
        +]
      • removedOutput schema / properties / mapping_sources / items / properties / url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / mapping_sources / items / properties / url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmesh_descriptor4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmesh_qualifiers4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmesh_search4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedmesh_tree4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedrxnorm_classes4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedrxnorm_concept4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedrxnorm_ingredients4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedrxnorm_ndc8 fields changed
      • removedOutput schema / properties / ndc / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / ndc / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / rxcui / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / rxcui / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedrxnorm_search4 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedterminology_diff10 fields changed
      • removedOutput schema / properties / changelog_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / changelog_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / from_version / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / from_version / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / to_version / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / to_version / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedterminology_versions8 fields changed
      • removedOutput schema / properties / provenance / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / terminologies / items / properties / changelog_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / terminologies / items / properties / changelog_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / terminologies / items / properties / notes / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / terminologies / items / properties / notes / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedvalidate_codes12 fields changed
      • removedOutput schema / properties / provenance / items / properties / data_vintage / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / items / properties / data_vintage / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / provenance / items / properties / license / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / provenance / items / properties / license / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / active / anyOf
        Removed value: -[
        -  {
        -    "type": "boolean"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / active / type
        Added value: +[
        +  "boolean",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / error / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / error / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / replaced_by / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / replaced_by / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / results / items / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / results / items / properties / title / type
        Added value: +[
        +  "string",
        +  "null"
        +]
  3. 31 tool updatesv1.8.0
    • Changedatc_classify3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "drug_name",
        -  "matches"
        -]New value: +[
        +  "drug_name",
        +  "matches",
        +  "provenance",
        +  "attribution"
        +]
    • Changedatc_lookup3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "atc_code",
        -  "found",
        -  "details"
        -]New value: +[
        +  "atc_code",
        +  "found",
        +  "details",
        +  "provenance",
        +  "attribution"
        +]
    • Changedatc_members3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "atc_code",
        -  "members"
        -]New value: +[
        +  "atc_code",
        +  "members",
        +  "provenance",
        +  "attribution"
        +]
    • Changedcid10_chapter3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "num",
        -  "found",
        -  "chapter",
        -  "groups"
        -]New value: +[
        +  "num",
        +  "found",
        +  "chapter",
        +  "groups",
        +  "provenance",
        +  "attribution"
        +]
    • Changedcid10_chapters3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "chapters"
        -]New value: +[
        +  "chapters",
        +  "provenance",
        +  "attribution"
        +]
    • Changedcid10_lookup3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "code",
        -  "found",
        -  "hit"
        -]New value: +[
        +  "code",
        +  "found",
        +  "hit",
        +  "provenance",
        +  "attribution"
        +]
    • Changedcid10_search3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "level",
        -  "total_count",
        -  "shown_count",
        -  "hits"
        -]New value: +[
        +  "query",
        +  "level",
        +  "total_count",
        +  "shown_count",
        +  "hits",
        +  "provenance",
        +  "attribution"
        +]
    • Changedfind_equivalent26 fields changed
      • addedInput schema / properties / limit
        Added 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"
        +}
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / groups
        Added 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"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • addedOutput schema / properties / ranking
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "method": {
        +      "const": "lexical",
        +      "type": "string"
        +    },
        +    "note": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "method",
        +    "note"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / properties / icd11 / properties / items / items / properties / match_score
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / properties / icd11 / properties / items / items / properties / rank
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / results / properties / icd11 / properties / items / items / properties / uri
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / properties / icd11 / properties / items / items / required
        Previous value: -[
        -  "code",
        -  "title"
        -]New value: +[
        +  "code",
        +  "title",
        +  "uri",
        +  "match_score",
        +  "rank"
        +]
      • addedOutput schema / properties / results / properties / loinc / properties / items / items / properties / match_score
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / properties / loinc / properties / items / items / properties / rank
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / results / properties / loinc / properties / items / items / properties / uri
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / properties / loinc / properties / items / items / required
        Previous value: -[
        -  "code",
        -  "title"
        -]New value: +[
        +  "code",
        +  "title",
        +  "uri",
        +  "match_score",
        +  "rank"
        +]
      • addedOutput schema / properties / results / properties / mesh / properties / items / items / properties / match_score
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / properties / mesh / properties / items / items / properties / rank
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / results / properties / mesh / properties / items / items / properties / uri
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / properties / mesh / properties / items / items / required
        Previous value: -[
        -  "code",
        -  "title"
        -]New value: +[
        +  "code",
        +  "title",
        +  "uri",
        +  "match_score",
        +  "rank"
        +]
      • addedOutput schema / properties / results / properties / rxnorm / properties / items / items / properties / match_score
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / properties / rxnorm / properties / items / items / properties / rank
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / results / properties / rxnorm / properties / items / items / properties / uri
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / properties / rxnorm / properties / items / items / required
        Previous value: -[
        -  "code",
        -  "title"
        -]New value: +[
        +  "code",
        +  "title",
        +  "uri",
        +  "match_score",
        +  "rank"
        +]
      • addedOutput schema / properties / results / properties / snomed / properties / items / items / properties / match_score
        Added value: +{
        +  "maximum": 1,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / properties / snomed / properties / items / items / properties / rank
        Added value: +{
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / results / properties / snomed / properties / items / items / properties / uri
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / results / properties / snomed / properties / items / items / required
        Previous value: -[
        -  "code",
        -  "title"
        -]New value: +[
        +  "code",
        +  "title",
        +  "uri",
        +  "match_score",
        +  "rank"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "term",
        -  "source_terminology",
        -  "searched_terminologies",
        -  "results"
        -]New value: +[
        +  "term",
        +  "source_terminology",
        +  "searched_terminologies",
        +  "results",
        +  "groups",
        +  "ranking",
        +  "provenance",
        +  "attribution"
        +]
    • Changedicd11_chapters4 fields changed
      • changedInput schema / properties / language / description
        Previous 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."
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "chapters"
        -]New value: +[
        +  "chapters",
        +  "provenance",
        +  "attribution"
        +]
    • Changedicd11_hierarchy3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "code",
        -  "direction",
        -  "entities"
        -]New value: +[
        +  "code",
        +  "direction",
        +  "entities",
        +  "provenance",
        +  "attribution"
        +]
    • Changedicd11_lookup4 fields changed
      • changedInput schema / properties / language / description
        Previous 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."
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous 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"
        +]
    • Changedicd11_postcoordination3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "code",
        -  "axes"
        -]New value: +[
        +  "code",
        +  "axes",
        +  "provenance",
        +  "attribution"
        +]
    • Changedicd11_search4 fields changed
      • changedInput schema / properties / language / description
        Previous 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."
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "total_count",
        -  "entities"
        -]New value: +[
        +  "query",
        +  "total_count",
        +  "entities",
        +  "provenance",
        +  "attribution"
        +]
    • Changedloinc_answers3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "loinc_num",
        -  "answers"
        -]New value: +[
        +  "loinc_num",
        +  "answers",
        +  "provenance",
        +  "attribution"
        +]
    • Changedloinc_details4 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / external_copyright_notice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous 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"
        +]
    • Changedloinc_panels3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "loinc_num",
        -  "panel"
        -]New value: +[
        +  "loinc_num",
        +  "panel",
        +  "provenance",
        +  "attribution"
        +]
    • Changedloinc_search5 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / items / items / properties / external_copyright_notice
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • changedOutput schema / properties / items / items / required
        Previous 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"
        +]
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "total_count",
        -  "shown_count",
        -  "items"
        -]New value: +[
        +  "query",
        +  "total_count",
        +  "shown_count",
        +  "items",
        +  "provenance",
        +  "attribution"
        +]
    • Changedmap_icd10_to_icd113 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "found",
        -  "icd10",
        -  "primary",
        -  "alternatives",
        -  "source"
        -]New value: +[
        +  "query",
        +  "found",
        +  "icd10",
        +  "primary",
        +  "alternatives",
        +  "source",
        +  "provenance",
        +  "attribution"
        +]
    • Changedmap_loinc_to_snomed3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "loinc_code",
        -  "loinc_details",
        -  "status",
        -  "guidance",
        -  "mapping_sources"
        -]New value: +[
        +  "loinc_code",
        +  "loinc_details",
        +  "status",
        +  "guidance",
        +  "mapping_sources",
        +  "provenance",
        +  "attribution"
        +]
    • Changedmesh_descriptor4 fields changed
      • changedInput schema / properties / language / description
        Previous 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."
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "id",
        -  "uri",
        -  "label",
        -  "scope_note",
        -  "tree_numbers",
        -  "concepts",
        -  "qualifiers"
        -]New value: +[
        +  "id",
        +  "uri",
        +  "label",
        +  "scope_note",
        +  "tree_numbers",
        +  "concepts",
        +  "qualifiers",
        +  "provenance",
        +  "attribution"
        +]
    • Changedmesh_qualifiers3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "mesh_id",
        -  "qualifiers"
        -]New value: +[
        +  "mesh_id",
        +  "qualifiers",
        +  "provenance",
        +  "attribution"
        +]
    • Changedmesh_search4 fields changed
      • changedInput schema / properties / language / description
        Previous 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."
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "match",
        -  "total_count",
        -  "descriptors"
        -]New value: +[
        +  "query",
        +  "match",
        +  "total_count",
        +  "descriptors",
        +  "provenance",
        +  "attribution"
        +]
    • Changedmesh_tree3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "mesh_id",
        -  "tree_numbers"
        -]New value: +[
        +  "mesh_id",
        +  "tree_numbers",
        +  "provenance",
        +  "attribution"
        +]
    • Changedrxnorm_classes3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "rxcui",
        -  "classes"
        -]New value: +[
        +  "rxcui",
        +  "classes",
        +  "provenance",
        +  "attribution"
        +]
    • Changedrxnorm_concept3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous 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"
        +]
    • Changedrxnorm_ingredients3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "rxcui",
        -  "ingredients"
        -]New value: +[
        +  "rxcui",
        +  "ingredients",
        +  "provenance",
        +  "attribution"
        +]
    • Changedrxnorm_ndc3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query_mode",
        -  "rxcui",
        -  "ndc",
        -  "ndcs"
        -]New value: +[
        +  "query_mode",
        +  "rxcui",
        +  "ndc",
        +  "ndcs",
        +  "provenance",
        +  "attribution"
        +]
    • Changedrxnorm_search3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "total_count",
        -  "drugs"
        -]New value: +[
        +  "query",
        +  "total_count",
        +  "drugs",
        +  "provenance",
        +  "attribution"
        +]
    • Changedterminology_diff3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous 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"
        +]
    • Changedterminology_versions3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "generated",
        -  "total",
        -  "terminologies"
        -]New value: +[
        +  "generated",
        +  "total",
        +  "terminologies",
        +  "provenance",
        +  "attribution"
        +]
    • Changedvalidate_codes3 fields changed
      • addedOutput schema / properties / attribution
        Added value: +{
        +  "description": "Canonical source URLs of this response (attribution list)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / provenance
        Added 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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "total",
        -  "valid_count",
        -  "invalid_count",
        -  "error_count",
        -  "results"
        -]New value: +[
        +  "total",
        +  "valid_count",
        +  "invalid_count",
        +  "error_count",
        +  "results",
        +  "provenance",
        +  "attribution"
        +]
  4. 31 tool updatesv1.5.7
    • Changedatc_classify1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedatc_lookup1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedatc_members1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedcid10_chapter4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / chapter / anyOf
        Previous 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"
        +  }
        +]
      • addedOutput schema / properties / num / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / num / minimum
        Added value: +-9007199254740991
    • Changedcid10_chapters3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / chapters / items / properties / num / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / chapters / items / properties / num / minimum
        Added value: +-9007199254740991
    • Changedcid10_lookup2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / hit / anyOf
        Previous 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"
        +  }
        +]
    • Changedcid10_search8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / hits / items / properties / chapter_num / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / hits / items / properties / group_range / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / hits / items / properties / group_range / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / shown_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / shown_count / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / total_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total_count / minimum
        Added value: +-9007199254740991
    • Changedfind_equivalent11 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / results / properties / icd11 / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / properties / icd11 / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / results / properties / loinc / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / properties / loinc / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / results / properties / mesh / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / properties / mesh / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / results / properties / rxnorm / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / properties / rxnorm / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / results / properties / snomed / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / properties / snomed / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedicd11_chapters11 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / chapters / items / properties / code / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / chapters / items / properties / code / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / chapters / items / properties / code_range / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / chapters / items / properties / code_range / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / chapters / items / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / chapters / items / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / chapters / items / properties / number / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / chapters / items / properties / number / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / chapters / items / properties / title / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / chapters / items / properties / title / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedicd11_hierarchy5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / entities / items / properties / code / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / entities / items / properties / code / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / entities / items / properties / code_range / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / entities / items / properties / code_range / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedicd11_lookup19 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / block_id / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / block_id / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / browser_url / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / browser_url / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / class_kind / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / class_kind / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / code / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / code / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / code_range / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / code_range / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / coding_note / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / coding_note / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / definition / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / definition / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / diagnostic_criteria / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / diagnostic_criteria / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / long_definition / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / long_definition / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedicd11_postcoordination2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / axes / items / properties / value_count / anyOf
        Previous value: -[
        -  {
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedicd11_search5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / entities / items / properties / code / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / entities / items / properties / code / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / total_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total_count / minimum
        Added value: +-9007199254740991
    • Changedloinc_answers3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / answers / items / properties / sequence / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / answers / items / properties / sequence / minimum
        Added value: +-9007199254740991
    • Changedloinc_details1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedloinc_panels2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / panel / anyOf
        Previous 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"
        +  }
        +]
    • Changedloinc_search5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / shown_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / shown_count / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / total_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total_count / minimum
        Added value: +-9007199254740991
    • Changedmap_icd10_to_icd115 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / alternatives / items / properties / depth / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / alternatives / items / properties / depth / minimum
        Added value: +-9007199254740991
      • changedOutput schema / properties / icd10 / anyOf
        Previous 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"
        +  }
        +]
      • changedOutput schema / properties / primary / anyOf
        Previous 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"
        +  }
        +]
    • Changedmap_loinc_to_snomed4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / loinc_details / anyOf
        Previous 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"
        +  }
        +]
      • addedOutput schema / properties / mapping_sources / items / properties / url / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / mapping_sources / items / properties / url / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedmesh_descriptor1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedmesh_qualifiers1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedmesh_search3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / total_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total_count / minimum
        Added value: +-9007199254740991
    • Changedmesh_tree1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedrxnorm_classes1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedrxnorm_concept1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedrxnorm_ingredients1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedrxnorm_ndc5 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / ndc / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / ndc / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / rxcui / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rxcui / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedrxnorm_search3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / total_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total_count / minimum
        Added value: +-9007199254740991
    • Changedterminology_diff8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / changelog_url / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / changelog_url / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • changedOutput schema / properties / cross_revision_summary / anyOf
        Previous 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"
        +  }
        +]
      • addedOutput schema / properties / from_version / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / from_version / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / to_version / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / to_version / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedterminology_versions7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / terminologies / items / properties / changelog_url / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / terminologies / items / properties / changelog_url / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / terminologies / items / properties / notes / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / terminologies / items / properties / notes / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / total / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total / minimum
        Added value: +-9007199254740991
    • Changedvalidate_codes18 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / codes / items / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / error_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / error_count / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / invalid_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / invalid_count / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / results / items / properties / active / anyOf
        Added value: +[
        +  {
        +    "type": "boolean"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / items / properties / active / type
        Removed value: -[
        -  "boolean",
        -  "null"
        -]
      • addedOutput schema / properties / results / items / properties / error / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / items / properties / error / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / results / items / properties / replaced_by / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / items / properties / replaced_by / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / results / items / properties / title / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / results / items / properties / title / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / total / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / total / minimum
        Added value: +-9007199254740991
      • addedOutput schema / properties / valid_count / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / valid_count / minimum
        Added value: +-9007199254740991
  5. 2 tool updatesv1.5.0
    • Changedmap_icd10_to_icd111 field changed
      • changedOutput 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"
        +}
    • Changedmap_loinc_to_snomed1 field changed
      • changedOutput 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"
        +}
  6. 5 tool updatesv1.4.0
    • Changedmesh_descriptor1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "description": "Language code (default: en)",
        +  "enum": [
        +    "en",
        +    "es",
        +    "pt",
        +    "fr",
        +    "de",
        +    "it",
        +    "zh",
        +    "ja",
        +    "ar",
        +    "ru"
        +  ],
        +  "type": "string"
        +}
    • Changedmesh_search1 field changed
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "en",
        +  "description": "Language code (default: en)",
        +  "enum": [
        +    "en",
        +    "es",
        +    "pt",
        +    "fr",
        +    "de",
        +    "it",
        +    "zh",
        +    "ja",
        +    "ar",
        +    "ru"
        +  ],
        +  "type": "string"
        +}
    • Addedterminology_diff
    • Addedterminology_versions
    • Addedvalidate_codes
  7. 28 tool updatesv1.2.1
    • First observedatc_classify
    • First observedatc_lookup
    • First observedatc_members
    • First observedcid10_chapter
    • First observedcid10_chapters
    • First observedcid10_lookup
    • First observedcid10_search
    • First observedfind_equivalent
    • First observedicd11_chapters
    • First observedicd11_hierarchy
    • First observedicd11_lookup
    • First observedicd11_postcoordination
    • First observedicd11_search
    • First observedloinc_answers
    • First observedloinc_details
    • First observedloinc_panels
    • First observedloinc_search
    • First observedmap_icd10_to_icd11
    • First observedmap_loinc_to_snomed
    • First observedmesh_descriptor
    • First observedmesh_qualifiers
    • First observedmesh_search
    • First observedmesh_tree
    • First observedrxnorm_classes
    • First observedrxnorm_concept
    • First observedrxnorm_ingredients
    • First observedrxnorm_ndc
    • First observedrxnorm_search

TDQS

A3.9/5.0

Scored across 33 tools

Disambiguation5/5

Each tool targets a distinct resource and operation—search, lookup, hierarchy, mapping, validation—across six terminologies plus general utilities. No two tools appear to do the same thing; even within a terminology, search vs lookup vs details are clearly separated. The generic search/fetch pair is explicitly distinguished from data-query tools.

Naming Consistency5/5

Tool names follow a consistent snake_case pattern with a terminology prefix followed by an action (e.g., cid10_lookup, icd11_search, loinc_details, rxnorm_ingredients, mesh_tree). Even standalone tools like validate_codes, find_equivalent, and terminology_versions use clear, predictable naming. The pattern is uniform and intuitive.

Tool Count2/5

With 33 tools, the server exceeds the 25+ threshold that indicates too many. While the broad scope of covering six terminologies plus mapping/validation justifies many operations, the count is heavy and may overwhelm agents. Some tools could be consolidated (e.g., cid10_chapters vs cid10_chapter, separate chapter tools), but the size is still excessive for typical use.

Completeness5/5

The tool set is exceptionally complete for its domain: it covers search, lookup, hierarchy navigation, chapters, postcoordination, panel structures, ingredient/class details, NDC mapping, qualifiers, tree positions, classification, cross-terminology mapping (ICD10→ICD11, LOINC→SNOMED guidance), batch validation, equivalence search, and version/diff metadata. There are no obvious dead ends or missing operations for a read-only medical terminology server.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A FastAPI backend service that connects to Azure's Managed Chat Project using GPT-4o to provide medical chatbot functionality through a simple HTML interface.
    -
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides 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 npm
    3
    MIT