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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
queryA code or Polish words, e.g. J18.9 or zapalenie płuc. | string | yes | min 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 null | no | null | |
limitHits per dictionary. | integer | no | 10 | min 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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
system | "icd10-pl" | "icd9-pl" | "icd11-pl" | yes | ||
code | string | yes | pattern ^[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 null | no | null |
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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
system | "icd10-pl" | "icd9-pl" | "icd11-pl" | yes | ||
parentCode whose children to list. | string or null | no | null | pattern ^[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 null | no | null | min 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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
code | string | yes | pattern ^[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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
code | string | yes | pattern ^[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 null | no | null |
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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
list_idList id that get_jgp_group names. | integer | yes | min 1, max 100000 | |
catalog | "1a" | "1ae" | no | ||
pagePage, from 1. | integer | no | 1 | min 1, max 20 |
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland. | date (YYYY-MM-DD) or null | no | null |
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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
catalogCatalog of the section; omit with section for the index. | "1a" | "1ae" or null | no | null | |
sectionSection number from the index. | integer or null | no | null | min 1, max 200 |
service_dateDay of care, YYYY-MM-DD; picks the release in force. Default today in Poland. | date (YYYY-MM-DD) or null | no | null |
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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
code | string | yes | pattern ^[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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
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 null | no | null | |
reporting_monthReporting month, YYYY-MM-DD (day ignored). Default the service month. | date (YYYY-MM-DD) or null | no | null | |
declared_modifiersTariff modifier symbols the provider declares; unapplied ones are listed. | array of string | no | [] | 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): objectstays(required): array of objectsecondary_diagnoses: array of objectprocedures: array of objectbirth_date: date (YYYY-MM-DD) or nullage_completed_years: integer or nulldischarge_mode: integer or nullsettlement_products: array of objectproduct_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.
| Argument | Type | Required | Default | Constraints |
|---|---|---|---|---|
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.
| Code | Meaning |
|---|---|
INVALID_INPUT | Arguments do not match the input schema or the API refused them. |
NOT_FOUND | No such code, group, list or release. |
NO_RELEASE_FOR_DATE | No catalog or dictionary release covers the service date. |
NOT_COVERED | The sources cannot answer this date or comparison unambiguously. |
BUSY | The service is at capacity; retry after a short pause. |
TIMEOUT | The bounded query ran out of time; this is not an empty answer. |
LIMIT | The result would exceed 256 KiB; ask for a narrower answer. |
UNAVAILABLE | A data source is temporarily unreadable. |
INTERNAL_ERROR | An unexpected failure; no details are returned. |