Minos Health dla agentów AI

Serwer MCP daje agentom i modelom językowym to samo, co strona: wyszukiwanie ICD-10, ICD-9, ICD-11 i grup JGP, karty kodów i grup, mapy WHO ICD-10/ICD-11 oraz Gruper dla zanonimizowanego pobytu. Bezpłatnie, bez klucza, tylko do odczytu.

Adres

https://minoshealth.pl/mcp

Protokół MCP przez Streamable HTTP, bezstanowo, odpowiedzi JSON. 12 narzędzi, 2 zasoby (minos://about, minos://releases) i 2 szablony promptów (code-hospital-stay, explain-jgp-group).

Jak połączyć

Claude Code:

claude mcp add --transport http minos-health https://minoshealth.pl/mcp

Claude.ai i Claude Desktop: Ustawienia, Konektory, „Dodaj własny konektor” i adres powyżej. ChatGPT: Ustawienia, Aplikacje i konektory, tryb dewelopera, nowy konektor z tym adresem.

Cursor, VS Code i inne klienty z plikiem konfiguracji:

{"mcpServers": {"minos-health": {"url": "https://minoshealth.pl/mcp"}}}

Klienty korzystające z oficjalnego MCP Registry znajdą serwer pod nazwą pl.minoshealth/mcp.

Zasady

  • Narzędzia tylko odczytują dane. Nie zapisujemy niczego, co wysyła agent; logi zawierają nazwę trasy, status i czas, nigdy argumentów.
  • Do Grupera wysyłaj wyłącznie zanonimizowane fakty kliniczne: wiek, daty, kody i kody oddziałów. Nie wpisuj imion, nazwisk, numeru PESEL ani adresów. Dane przechodzą też przez dostawcę Twojego modelu.
  • Wyniki to treść referencyjna z oficjalnych źródeł, nie porada medyczna ani wiążąca decyzja NFZ. Wartości JGP to punkty z katalogu, nie złotówki. Koduj wyłącznie udokumentowaną opiekę.
  • ICD-11 PL to wersja przedostateczna: nie obowiązuje i nie służy do rozliczeń NFZ. Mapy ICD-10/ICD-11 to tabele WHO bez zmian.
  • Limity: 60 zapytań na minutę na klienta (z rezerwą 30 zapytań); powyżej serwer odpowiada HTTP 429. Wynik ma do 256 KiB. Przy przeciążeniu narzędzie zwraca BUSY; spróbuj ponownie po chwili. Serwer przyjmuje tylko POST (bez strumienia SSE).
  • Licencje jak na stronie: ICD-10 PL CC BY-NC-SA 3.0 IGO (niekomercyjnie), ICD-11 PL CC BY-ND 4.0 i WHO CC BY-ND 3.0 IGO, materiały NFZ w opublikowanej postaci. Każdy wynik podaje wydanie i źródło. Korzystanie z serwera podlega regulaminowi i polityce prywatności.

Narzędzia (tool reference)

Opisy, argumenty i pola wyników poniżej pochodzą wprost z listy narzędzi serwera (tools/list), dlatego są po angielsku, tak jak widzi je agent.

Service and releases get_service_info

Get the releases Minos serves: ICD-10 PL, ICD-9 PL and ICD-11 PL versions, validity and licences, JGP grouping availability and knowledge horizon, and the disclaimer. Call it first to learn which service dates are covered; use get_source_status to see what publishers released since.

No arguments.

Returns: notice, dataset_id, releases, grouping, tools, documentation; answers from the HTTP API may add fields.

Example call:

{
  "name": "get_service_info",
  "arguments": {}
}

Search codes search_codes

Search ICD-10 PL diagnoses, ICD-9 PL procedures, JGP groups and, when asked, pre-released ICD-11 PL by code or Polish words (diacritics optional). Each hit has its code, title, path and JGP group count; JGP groups are always searched in today's catalog. Open a hit with get_code or get_jgp_group; walk a hierarchy with browse_codes.

ArgumentTypeRequiredDefaultConstraints
queryA code or Polish words, e.g. J18.9 or zapalenie płuc.stringyesmin length 1, max length 120
systemsDictionaries to search; add icd11-pl only when asked.array of "icd10-pl" | "icd9-pl" | "icd11-pl" | "jgp"no["icd10-pl", "icd9-pl", "jgp"]min items 1, max items 4
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland.date (YYYY-MM-DD) or nullnonull
limitHits per dictionary.integerno10min 1, max 20

Returns: notice, query, systems; answers from the HTTP API may add fields.

Example call:

{
  "name": "search_codes",
  "arguments": {
    "query": "zapalenie płuc",
    "systems": [
      "icd10-pl",
      "jgp"
    ]
  }
}

Code details get_code

Get one ICD-10 PL, ICD-9 PL or ICD-11 PL code as its page shows it: title, hierarchy, children, notes, attributes, ICD-9 rank, WHO map rows and, for ICD-10 and ICD-9, the JGP groups whose attachment 9 lists name it on service_date. Find the code with search_codes first; open a listed group with get_jgp_group.

ArgumentTypeRequiredDefaultConstraints
system"icd10-pl" | "icd9-pl" | "icd11-pl"yes
codestringyespattern ^[A-Za-z0-9][A-Za-z0-9.\-]{0,15}$
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland.date (YYYY-MM-DD) or nullnonull

Returns: notice, system, code, release, title, path, children, children_truncated, notes, attributes, procedure_rank, who_map_rows, jgp_lists; answers from the HTTP API may add fields.

Example call:

{
  "name": "get_code",
  "arguments": {
    "system": "icd10-pl",
    "code": "J18.9",
    "service_date": "2026-10-22"
  }
}

Browse a classification browse_codes

List one level of ICD-10 PL, ICD-9 PL or ICD-11 PL: the chapters when parent and node are omitted, else the children of parent or of a node id from an earlier listing (ICD-11 blocks have a node id, no code). Levels stop at 400 entries with truncated=true. Use search_codes for words, get_code for one code's details.

ArgumentTypeRequiredDefaultConstraints
system"icd10-pl" | "icd9-pl" | "icd11-pl"yes
parentCode whose children to list.string or nullnonullpattern ^[A-Za-z0-9][A-Za-z0-9.\-]{0,15}$
nodeNode id from an earlier listing, for ICD-11 blocks without a code.integer or nullnonullmin 1, max 10000000

Returns: notice, system, release_id, parent, children, truncated; answers from the HTTP API may add fields.

Example call:

{
  "name": "browse_codes",
  "arguments": {
    "system": "icd11-pl",
    "parent": "11"
  }
}

WHO ICD-10 and ICD-11 map map_icd10_icd11

Read the WHO ICD-10/ICD-11 mapping rows for one code, verbatim: to_icd11 for a Polish ICD-10 code, to_icd10 for an ICD-11 code. WHO states no match type, its ICD-10 side is the 2019 edition, not Polish 2008, and ICD-11 is not in force in Poland: treat a row as a lead and confirm the target with get_code.

ArgumentTypeRequiredDefaultConstraints
codestringyespattern ^[A-Za-z0-9][A-Za-z0-9.\-]{0,15}$
directionWhich WHO tables to read."to_icd11" | "to_icd10"yes

Returns: notice, code, direction, map_release_id, rows; answers from the HTTP API may add fields.

Example call:

{
  "name": "map_icd10_icd11",
  "arguments": {
    "code": "I10",
    "direction": "to_icd11"
  }
}

JGP group get_jgp_group

Get one JGP group from the catalog in force on service_date: name, product code, base points per column, scopes, the act and release, the knowledge horizon and its grouping conditions with the directional lists they name. Pass a named list's id and catalog to get_jgp_list for its codes; use compare_jgp_group for changes between dates.

ArgumentTypeRequiredDefaultConstraints
codestringyespattern ^[A-Z][A-Z0-9]{1,5}$
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland.date (YYYY-MM-DD) or nullnonull

Returns: notice; answers from the HTTP API may add fields.

Example call:

{
  "name": "get_jgp_group",
  "arguments": {
    "code": "F72",
    "service_date": "2026-10-22"
  }
}

JGP list get_jgp_list

List the codes of one directional diagnosis or procedure list from JGP attachment 9, one page at a time. Take list_id from conditions.lists[].id and catalog from group.catalog of a get_jgp_group answer, with the same service_date. For the groups that name a given code, use get_code instead.

ArgumentTypeRequiredDefaultConstraints
list_idList id that get_jgp_group names.integeryesmin 1, max 100000
catalog"1a" | "1ae"no
pagePage, from 1.integerno1min 1, max 20
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland.date (YYYY-MM-DD) or nullnonull

Returns: notice; answers from the HTTP API may add fields.

Example call:

{
  "name": "get_jgp_list",
  "arguments": {
    "list_id": 1,
    "catalog": "1a",
    "page": 1
  }
}

Browse the JGP catalog browse_jgp_catalog

Browse the JGP catalog in force on service_date: without catalog and section, the sections of catalogs 1a and 1ae with group counts; with both, that section's groups and base points. Find a group by words with search_codes; open one with get_jgp_group.

ArgumentTypeRequiredDefaultConstraints
catalogCatalog of the section; omit with section for the index."1a" | "1ae" or nullnonull
sectionSection number from the index.integer or nullnonullmin 1, max 200
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland.date (YYYY-MM-DD) or nullnonull

Returns: notice; answers from the HTTP API may add fields.

Example call:

{
  "name": "browse_jgp_catalog",
  "arguments": {
    "catalog": "1a",
    "section": 1
  }
}

Compare a JGP group between dates compare_jgp_group

Compare one JGP group between the catalogs in force on two service dates: act, release, name, base points, scopes and condition list names on each side, plus the fields that changed. Use get_jgp_group for the full conditions on one date.

ArgumentTypeRequiredDefaultConstraints
codestringyespattern ^[A-Z][A-Z0-9]{1,5}$
before_dateEarlier day of care, YYYY-MM-DD.date (YYYY-MM-DD)yes
after_dateLater day of care, YYYY-MM-DD.date (YYYY-MM-DD)yes

Returns: notice, code, before, after, changed; answers from the HTTP API may add fields.

Example call:

{
  "name": "compare_jgp_group",
  "arguments": {
    "code": "A01",
    "before_date": "2026-05-15",
    "after_date": "2026-10-22"
  }
}

Hospital stay dictionaries get_case_dictionaries

List the values a group_case stay needs: ward specialty codes (part VIII of a department code; hospital wards 4000-4951, or every section with wards="all") and discharge modes, each with its legal act, plus hospitalization types and product reporting values. Call it before building the case for group_case.

ArgumentTypeRequiredDefaultConstraints
wardshospital: ward codes 4000-4951; all: every section."hospital" | "all"no"hospital"

Returns: notice, specialties, discharge_modes, hospitalization_types, product_reporting; answers from the HTTP API may add fields.

Example call:

{
  "name": "get_case_dictionaries",
  "arguments": {}
}

Group a hospital stay group_case

Group one anonymised hospital stay with the Minos Gruper (JGP SZP, supported rule subset): candidate groups with reasons, ranking, base and final points, preparation and limitations. Build case from get_case_dictionaries and codes confirmed with get_code. Send clinical facts only, never names, PESEL or addresses; nothing is stored. Reference, not an NFZ decision.

ArgumentTypeRequiredDefaultConstraints
caseThe anonymised stay; get_case_dictionaries lists accepted values.object (see the stay fields below)yes
service_dateDay of care for the catalog, YYYY-MM-DD. Default the discharge day.date (YYYY-MM-DD) or nullnonull
reporting_monthReporting month, YYYY-MM-DD (day ignored). Default the service month.date (YYYY-MM-DD) or nullnonull
declared_modifiersTariff modifier symbols the provider declares; unapplied ones are listed.array of stringno[]max items 64
detailtrace adds the full routing trace."summary" | "trace"no"summary"

Stay fields (case):

  • admitted_on (required): date (YYYY-MM-DD)
  • discharged_on (required): date (YYYY-MM-DD)
  • hospitalization_type (required): "hospitalization" | "planned" | "one_day"
  • principal_diagnosis (required): object
  • stays (required): array of object
  • secondary_diagnoses: array of object
  • procedures: array of object
  • birth_date: date (YYYY-MM-DD) or null
  • age_completed_years: integer or null
  • discharge_mode: integer or null
  • settlement_products: array of object
  • product_reporting: "unknown" | "complete"

Returns: notice; answers from the HTTP API may add fields.

Example call:

{
  "name": "group_case",
  "arguments": {
    "case": {
      "admitted_on": "2026-09-28",
      "discharged_on": "2026-10-02",
      "hospitalization_type": "hospitalization",
      "age_completed_years": 51,
      "principal_diagnosis": {
        "code": "K40.9",
        "hospitalization_level": true
      },
      "stays": [
        {
          "identifier": "surgery",
          "department": "4500",
          "admitted_on": "2026-09-28",
          "discharged_on": "2026-10-02"
        }
      ],
      "procedures": [
        {
          "code": "53.03",
          "performed_on": "2026-10-01",
          "stay_id": "surgery"
        }
      ],
      "product_reporting": "complete"
    }
  }
}

Source status get_source_status

Show what a watched publisher lists now, as Minos last observed it: RSK resources and files, BAW NFZ orders and attachments, or NFZ dictionaries and notices, with versions and dates. Reads Minos's last snapshot and never calls the publisher. Compare with get_service_info to see whether Minos serves the newest release.

ArgumentTypeRequiredDefaultConstraints
sourcersk: RSK resources; baw: NFZ orders; nfz: NFZ dictionaries and notices."rsk" | "baw" | "nfz"yes

Returns: notice, source, observed_at, items, truncated; answers from the HTTP API may add fields.

Example call:

{
  "name": "get_source_status",
  "arguments": {
    "source": "rsk"
  }
}

Error codes

Failures return isError: true and {"error": {"code": "…"}}, never input or exception text.

CodeMeaning
INVALID_INPUTArguments do not match the input schema or the API refused them.
NOT_FOUNDNo such code, group, list or release.
NO_RELEASE_FOR_DATENo catalog or dictionary release covers the service date.
NOT_COVEREDThe sources cannot answer this date or comparison unambiguously.
BUSYThe service is at capacity; retry after a short pause.
TIMEOUTThe bounded query ran out of time; this is not an empty answer.
LIMITThe result would exceed 256 KiB; ask for a narrower answer.
UNAVAILABLEA data source is temporarily unreadable.
INTERNAL_ERRORAn unexpected failure; no details are returned.