adr-agreement-mcp-server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@adr-agreement-mcp-serverWhat is the proper shipping name for UN 1098?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
adr-agreement-mcp-server
MCP server for handling ADR Agreement provisions for AI models / Serwer MCP do obsługi przepisów Umowy ADR dla modeli AI
FOR ENGLISH - GO HERE
Asystent ADR przez MCP
Serwer MCP (Model Context Protocol), który podłącza asystentów AI (Claude, ChatGPT i inne wspierające MCP) do bazy danych towarów niebezpiecznych ADR i do deterministycznego silnika obliczeniowego, który sam interpretuje przepisy Umowy ADR — bez zgadywania przez model językowy.
Projekt open source, licencja AGPL-3.0.
Zasada działania
Dane — narzędzia pobierają aktualne dane z api.kocie.mba (Tabela A Umowy ADR i wszystkie powiązane informacje: LQ/EQ, kody cystern, przepisy szczególne, numery Kemlera, itd.).
Obliczenia — wynik nie trafia do modelu jako surowy tekst do zinterpretowania. Silnik reguł (
src/rules/) sam liczy odpowiedź (np. czy przesyłka mieści się w wyłączeniu 1.1.3.6, czy dwa towary można pakować razem, jak rozłożyć kod cysterny) i zwraca gotowy wynik. Model AI jedynie przekazuje pytanie i formułuje odpowiedź w naturalnym języku — nie interpretuje przepisu samodzielnie.
Related MCP server: customs-mcp-server
Narzędzia (MCP tools)
Narzędzie | Co robi |
| Zwraca pełny rekord Tabeli A dla numeru UN |
| Wyszukuje towar po nazwie (PL/EN) lub fragmencie numeru UN |
| Buduje prawidłową nazwę przewozową (PSN) wraz z listą dostępnych modyfikatorów |
| Zwraca limity ilości ograniczonych (LQ) i wyłączonych (EQ) |
| Liczy, czy zestaw towarów mieści się w wyłączeniu 1.1.3.6 |
| Sprawdza, czy dwa towary można pakować razem w jednej sztuce przesyłki |
| Rozkłada kod cysterny (np. |
| Sprawdza, czy jedna cysterna może zastąpić drugą wg reguły hierarchii (4.3.3) |
| Wyjaśnia numer rozpoznawczy zagrożenia (numer Kemlera) |
| Wyjaśnia kod klasyfikacyjny towaru w kontekście jego klasy |
Wszystkie narzędzia działają w dwóch wersjach językowych danych (PL/EN) — patrz konfiguracja niżej.
Wymagania
Node.js w wersji 18 lub nowszej
Claude Desktop, ChatGPT (Developer mode / Connectors) lub inny klient obsługujący MCP
Instalacja
git clone https://github.com/kociembadamian/adr-agreement-mcp-server.git
cd adr-agreement-mcp-server
npm installSkopiuj plik konfiguracyjny:
cp .env.example .envDomyślny .env jest gotowy do użycia od razu (plug and play) — korzysta ze wspólnego tokena demo. Jeśli chcesz wyższy limit zapytań, skontaktuj się z nami pisząc na damian@kocie.mba i wklej go do ADR_API_TOKEN (patrz sekcja Limity niżej).
Podłączenie w Claude Desktop
Otwórz plik konfiguracyjny Claude Desktop:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Dodaj wpis (podmień ścieżkę na pełną, absolutną ścieżkę do repo na Twoim dysku):
{
"mcpServers": {
"adr-agreement-mcp-server": {
"command": "node",
"args": ["/pelna/sciezka/do/adr-agreement-mcp-server/src/index.js"],
"env": {
"ADR_API_URL": "https://api.kocie.mba",
"ADR_API_TOKEN": "DEMO-ADR-2026-PUBLIC",
"ADR_DATA_LANG": "pl"
}
}
}
}Zapisz plik i uruchom ponownie Claude Desktop.
W nowej rozmowie sprawdź ikonę narzędzi (młotek) — powinieneś zobaczyć 10 narzędzi ADR.
Podłączenie w ChatGPT
Obsługa lokalnych serwerów MCP w ChatGPT (tryb deweloperski / Connectors) zmienia się dość szybko po stronie OpenAI, więc przed konfiguracją warto sprawdzić aktualną dokumentację: platform.openai.com — Model Context Protocol. Zasada konfiguracji jest analogiczna jak w Claude Desktop: wskazujesz komendę uruchamiającą serwer (node src/index.js) oraz zmienne środowiskowe z sekcji .env powyżej.
Przykładowe zapytania
Po podłączeniu możesz zapytać asystenta wprost, np.:
„Sprawdź numer UN 1098 i podaj prawidłową nazwę przewozową"
„Czy 15 kg UN 1098 i 3 kg innego towaru kategorii transportowej 2 mieszczą się w wyłączeniu 1.1.3.6?"
„Czy towar z kodem cysterny L4BH i towar z kodem L10CN mogą być przewożone tą samą cysterną?"
„Co oznacza numer Kemlera 336?"
Asystent sam dobierze odpowiednie narzędzie i zwróci już policzoną odpowiedź.
Limity zapytań
Domyślny token w .env.example (DEMO-ADR-2026-PUBLIC) jest współdzielony przez wszystkich użytkowników plug-and-play: 35 zapytań/dobę oraz 15 zapytań/godzinę na adres IP. To wystarcza do testów i codziennego użytku pojedynczej osoby, ale przy pracy zespołowej lub częstszym użyciu warto wygenerować własny token — napisz na damian@kocie.mba.
Architektura
Model AI (Claude / ChatGPT)
│ MCP (stdio)
▼
adr-agreement-mcp-server (ten projekt)
├── src/index.js ← rejestracja narzędzi MCP
├── src/api.js ← klient api.kocie.mba
└── src/rules/ ← deterministyczny silnik obliczeniowy
│ HTTPS
▼
api.kocie.mba (Tabela A Umowy ADR i tabele powiązane)Dane referencyjne (data/pl/, data/en/) są dołączone do repo i wykorzystywane lokalnie przez silnik reguł — zapytania do api.kocie.mba dotyczą tylko rekordów konkretnych numerów UN.
ADR, NIS2 i nasza decyzja o otwartoźródłowości (open source)
Firmy z sektora transportu towarów niebezpiecznych coraz częściej podlegają też wymogom dyrektywy NIS2 dotyczącej cyberbezpieczeństwa i zarządzania ryzykiem w łańcuchu dostaw — w tym ryzykiem związanym z wykorzystaniem systemów AI w procesach mających wpływ na bezpieczeństwo. Ten projekt jest zamierzenie w pełni jawny i sprawdzalny: kod, dane referencyjne i logika obliczeniowa są publicznie dostępne, a odpowiedzi dotyczące przepisów ADR nie powstają w wyniku "zgadywania" przez model, tylko w wyniku deterministycznych, możliwych do prześledzenia obliczeń. Nie zwalnia to z własnej oceny ryzyka i zgodności w Twojej organizacji — ale ułatwia audyt tego, skąd bierze się dana odpowiedź.
Licencja
AGPL-3.0. Jeśli zmodyfikujesz lub rozwiniesz ten projekt — również w wersji hostowanej jako usługa sieciowa — masz obowiązek opublikować swoje zmiany na tej samej licencji.
Kontakt
Damian Kociemba — damian@kocie.mba
Available Tools
10 toolsbuild_proper_shipping_nameZbuduj prawidłową nazwę przewozową (PSN)A
Buduje bazową prawidłową nazwę przewozową dla numeru UN z api.kocie.mba i zwraca listę modyfikatorów (ODPAD, GORĄCY, STABILIZOWANY itd.) z warunkiem zastosowania każdego — o tym, czy dany modyfikator pasuje, decyduje kontekst przewozu podany przez użytkownika, nie to narzędzie.
| Name | Required | Description | Default |
|---|---|---|---|
| unNumber | Yes | Numer UN, np. "1098" | |
| packingGroup | No | Opcjonalnie: grupa pakowania do doprecyzowania, jeśli numer UN zwraca kilka pozycji |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It openly states that the tool does not decide whether a modifier applies, names the external API source, and describes the returned data. It could add more detail about failure modes or exact response structure, but the key behavioral caveat is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single dense sentence that front-loads the core purpose and output. It contains no filler, though the long em-dash construction makes it slightly harder to parse than a short opener followed by a separate caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter lookup tool with no output schema, the description gives enough to select and call it correctly, including the important modifier-context behavior. It could be more complete by explicitly noting the optional packingGroup parameter and describing the exact return shape, but the schema covers the parameter and the behavior is well explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces that unNumber drives the lookup and that context, not an input parameter, decides modifier fit, but it adds little detail about packingGroup beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (builds a base proper shipping name) for a specific resource (UN number from api.kocie.mba) and clearly explains the output (list of modifiers with conditions). This distinguishes it from sibling lookup/search tools even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear the tool is for constructing a PSN and that modifier selection depends on user-provided shipping context. However, it does not explicitly say when to choose this tool over related siblings such as lookup_un or search_adr, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_1136Oblicz wyłączenie 1.1.3.6A
Liczy, czy zestaw towarów na jednej jednostce transportowej mieści się w wyłączeniu 1.1.3.6 (drobne ilości). Każda pozycja wymaga transportCategory (pobranej wcześniej np. przez lookup_un) i ilości (kg lub litry, zgodnie z regułami 1.1.3.6.3).
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Lista towarów na jednostce transportowej |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It communicates that the tool 'calculates whether' goods fit the exemption and imposes unit constraints, but it does not state the return value shape or behavior on invalid/empty input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero redundancy. The core purpose is front-loaded, and the input requirements are compressed into the second sentence without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers scope, required inputs, and the relevant unit rules. However, with no output schema and no annotations, it should more explicitly state what the tool returns (e.g. a boolean verdict or a detailed result object), leaving this as the main completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds practical workflow meaning: transportCategory is meant to be obtained earlier via lookup_un, and quantities follow the rules of 1.1.3.6.3. This helps an agent prepare items beyond what the schema literally states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Liczy' and clearly identifies the exact resource: exemption 1.1.3.6 for a set of goods on one transport unit. This is precise enough to distinguish the tool from sibling lookup/decoding tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the prerequisite workflow: transportCategory must been obtained beforehand, e.g. via lookup_un, and quantities must be in kg or litres per rule 1.1.3.6.3. It gives clear context for when to use the tool but does not explicitly list alternatives or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_mixed_packingSprawdź pakowanie razem dwóch towarówA
Sprawdza, czy dwa towary (po kodach mixedPacking, np. "MP15") mogą być pakowane razem w jednej sztuce przesyłki. Dla jednoznacznych kodów zwraca twardy werdykt, dla pozostałych oba opisy do interpretacji.
| Name | Required | Description | Default |
|---|---|---|---|
| codeA | Yes | Kod mixedPacking pierwszego towaru, np. "MP15" | |
| codeB | Yes | Kod mixedPacking drugiego towaru | |
| sameUnNumber | No | Czy oba towary mają ten sam numer UN (istotne dla kodów MP20-24, klasa 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosing behavior. It does so by explaining that unambiguous codes yield a hard verdict, while ambiguous codes return both descriptions for interpretation. This is valuable behavioral nuance beyond a simple 'checks compatibility' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: one sentence states the purpose, and one sentence adds the important behavioral nuance about verdict types. It contains no filler and is easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema and no annotations, the description covers the core behavior and the output ambiguity aspect. It could mention exact return formats or edge cases, but the provided information is sufficient for an agent to use the tool in the intended context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context about mixedPacking code format and example values, but parameter meaning is already fully covered by the schema. No significant additional parameter semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (checks whether two goods can be packed together) with a specific resource (mixedPacking codes) and gives a concrete example. It is clearly distinct from the sibling tools, none of which address mixed-packing compatibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It is clear that this tool is for deciding whether two goods with mixedPacking codes can share a shipment item. No explicit alternatives or when-not-to-use conditions are given, but the context is specific enough that an agent can infer when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_tank_codesPorównaj kody cystern wg reguły hierarchiiA
Sprawdza regułę hierarchii ADR 4.3.3: czy cysterna offeredCode może być użyta zamiast wymaganej requiredCode. Nie uwzględnia przepisów szczególnych 4.3.5 ani pozycji z obowiązkowym indywidualnym przypisaniem kodu.
| Name | Required | Description | Default |
|---|---|---|---|
| offeredCode | Yes | Kod cysterny, który chcesz sprawdzić jako alternatywę | |
| requiredCode | Yes | Wymagany kod cysterny dla danego towaru |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It does disclose the core limitation of the rule scope, which is important. However, it does not state the return value (e.g., boolean), how invalid codes are handled, or any side effects, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence front-loads the main purpose, and the second delivers the critical limitation. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter comparison tool without an output schema, the description covers the purpose, the regulatory basis, and the key exclusions. It does not explicitly state the return type, but the comparison semantics are inferable from the wording, making it largely sufficient for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with 100% coverage, so the baseline is 3. The description merely rephrases the parameters ('alternatywa', 'wymaganej') without adding new semantic details such as format, allowed values, or examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Sprawdza'), the exact rule (ADR 4.3.3 hierarchy), and the precise relationship between 'offeredCode' and 'requiredCode'. It also distinguishes itself by explicitly excluding special provisions 4.3.5 and mandatory individual code assignment, separating it from generic ADR tools like search_adr.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly tells the agent when not to use the tool by listing exclusions (special provisions 4.3.5, mandatory individual assignment). It does not name an alternative sibling to route to, but the scope boundary is explicit and actionable enough for an agent to decide if this tool fits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_classification_codeZdekoduj kod klasyfikacyjnyA
Wyjaśnia kod klasyfikacyjny towaru (pole classificationCode, np. "FT1" albo dla klasy 1: "1.1D") w kontekście jego klasy zagrożenia.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Kod klasyfikacyjny, np. "FT1" albo "1.1D" | |
| hazardClass | Yes | Klasa zagrożenia, np. "3", "6.1", "1" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The verb 'Wyjaśnia' signals an informational, non-mutating operation, and 'w kontekście jego klasy zagrożenia' adds useful context about the hazardClass dependency. However, it does not describe what the explanation returns or any error/side-effect behavior, though that is less critical for a simple explainer tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence with no filler. It front-loads the core purpose, gives two concrete examples, and clarifies the hazard-class relationship, all without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description is practically complete: the schema fully documents both parameters, and the description supplies the domain context and examples. There is no output schema, and the description could go further by stating what the explanation looks like, but the low complexity and clear purpose make this a strong, usable definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even without additional parameter detail in the description. The description adds the domain field name 'classificationCode' and repeats examples already present in the schema, which provides marginal value but not significant new semantic meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Wyjaśnia') and resource (kod klasyfikacyjny towaru / classificationCode), and gives concrete examples ('FT1', '1.1D') along with the hazard-class context. This clearly differentiates it from sibling decoding tools like decode_tank_code and decode_hazard_id by naming the target field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: use this tool when you need to explain a goods classification code in relation to its hazard class. It does not explicitly name alternatives or state exclusions, so it falls short of a 5, but the context is specific enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_hazard_idZdekoduj numer KemleraA
Wyjaśnia numer rozpoznawczy zagrożenia (numer Kemlera, np. "336" albo "X462") — znaczenie cyfr i prefiksu "X" (reakcja z wodą).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Numer Kemlera, np. "336" albo "X462" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It correctly communicates that the tool is a read-only decoder that produces an explanation of digits and the X prefix. However, it does not mention the output format, error behavior for invalid codes, or edge cases like unknown code patterns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence contains the verb, resource, examples, and a key semantic detail. There is no filler or repetition; every part of the sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only decoder with no output schema, the description is mostly complete. It gives the input format and the kind of explanation produced. The only missing piece is a clearer statement of the return value shape, but that is less critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the single parameter with the same examples. The description adds semantic value by explaining that the X prefix relates to water reactivity, which is relevant input interpretation knowledge beyond a bare schema description. This is a small but real addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Wyjaśnia' / explains) tied to a specific resource: the Kemler hazard identification number, with concrete examples ('336', 'X462'). It also mentions the exact elements of the explanation (digit meanings and the X prefix), which clearly differentiates it from siblings like decode_tank_code and decode_classification_code.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for Kemler numbers and not for tank codes or classification codes, but it never explicitly states when to use it instead of a sibling. There is no 'use X for tank codes' style guidance. An agent must infer the usage boundary from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_tank_codeZdekoduj kod cysterny ADRA
Rozkłada kod cysterny (np. "L4BH") na 4 znaczące części: typ, ciśnienie obliczeniowe, otwory, zawory/urządzenia bezpieczeństwa.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Kod cysterny, np. "L4BH" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of explaining behavior. It does disclose the core decomposition behavior and the four semantic parts, which is useful. However, it does not describe what happens on invalid input, whether the code is validated, or the exact output format, leaving behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It immediately states the verb and resource, then provides the output breakdown. Every word contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, but the description lacks usage guidance and does not specify the response structure (e.g., field names for the four parts). Since there is no output schema, the description should clarify what the agent can expect back. It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the single parameter, including an example, so the baseline is 3. The description repeats the example but adds no new constraints, format rules, or normalization behavior beyond the schema. It adds marginal context by linking the parameter to the four output parts, but nothing essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Rozkłada' – decomposes) and identifies the exact resource (tank code like 'L4BH'), then enumerates the four output components. This clearly differentiates it from sibling decoders such as decode_hazard_id or decode_classification_code, which target different code types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention compare_tank_codes, decode_hazard_id, or any condition that would route an agent to this tool. The intended use is only implied by the resource name, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_unWyszukaj numer UNA
Zwraca surowy rekord Tabeli A Umowy ADR dla podanego numeru UN z api.kocie.mba. Jeden numer UN może zwrócić więcej niż jedną pozycję (np. różne grupy pakowania) — jeśli tak się stanie, doprecyzuj przez packingGroup.
| Name | Required | Description | Default |
|---|---|---|---|
| unNumber | Yes | Numer UN, np. "1098" | |
| packingGroup | No | Opcjonalnie: grupa pakowania (I/II/III) do doprecyzowania wyniku, jeśli numer UN zwraca kilka pozycji |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the non-obvious behavior that one UN number may return multiple rows and explains the disambiguation mechanism. However, it does not explicitly state the operation is read-only, describe the raw record format, or mention error/network behavior, leaving gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise Polish sentences with no filler. The first sentence front-loads the core function, and the second addresses the only ambiguity handling needed. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter lookup tool with no output schema, the description covers the primary behavior and the important multi-result edge case. It lacks explicit alternatives and read-only confirmation, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description repeats the packingGroup disambiguation logic that already appears in the schema's property description, adding no new meaning beyond what the structured data provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Zwraca' – returns), a precise resource ('surowy rekord Tabeli A Umowy ADR'), an explicit source (api.kocie.mba), and the key parameter (numer UN). This clearly distinguishes it from sibling tools like search_adr or decode_* that perform different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear conditional usage instruction: if a UN number returns multiple entries, refine using packingGroup. It does not explicitly name alternatives or state when not to use the tool, but the exact-UN-number scope is implied strongly enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_lq_eqSprawdź LQ/EQ dla numeru UNA
Zwraca limity ilości ograniczonych (LQ) i wyłączonych (EQ) dla numeru UN, na podstawie pól limitedQuantity/exceptedQuantity z api.kocie.mba.
| Name | Required | Description | Default |
|---|---|---|---|
| unNumber | Yes | Numer UN, np. "1098" | |
| packingGroup | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the transparency burden. It discloses the data source and that the tool returns values, making the read-only nature inferable, but it does not describe edge cases, response format, or behavior when no LQ/EQ data exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It communicates the action, the target resource, and the data source efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description is the only source of contextual detail, yet it omits the packingGroup parameter's role and any output or failure behavior. An agent calling this tool would still need additional schema or external knowledge to use all parameters meaningfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: unNumber is documented in the schema, but packingGroup has no description. The tool description mentions only the UN number and does not clarify the meaning or effect of the optional packingGroup parameter, so it does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Zwraca' / returns) and a precise resource: LQ and EQ limits for a UN number, sourced from specific fields. This clearly differentiates it from broader siblings like lookup_un or search_adr by naming the exact output domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use this when you need limited/excepted quantity limits for a UN number. However, it does not explicitly mention when not to use it or which alternative tool to prefer for other lookups, leaving routing decisions mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_adrSzukaj towaru po nazwieA
Wyszukuje towary niebezpieczne po nazwie (PL/EN) lub fragmencie numeru UN w api.kocie.mba. Zwraca skróconą listę dopasowań (numer UN, nazwa, klasa) — po znalezieniu właściwej pozycji użyj lookup_un po pełne dane.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Fragment nazwy lub numeru UN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns a shortened list of matches (UN number, name, class) and that full data requires a subsequent lookup_un call. This goes beyond a generic 'search' statement and sets expectations about the output and workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The main purpose is front-loaded, and the guidance to use lookup_un for full data is placed efficiently. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter search tool with no output schema, the description is complete: it identifies the target, the accepted query types, the abbreviated return fields, and the next step in the workflow. No critical information for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the only parameter, query, as 'Fragment nazwy lub numeru UN'. The description adds that the search is PL/EN and matches names or UN fragments, but it does not provide additional syntax, formatting, or example values beyond what the schema already says. Baseline 3 is appropriate since schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Wyszukuje' — searches), a specific resource ('towary niebezpieczne' — dangerous goods), and search criteria (name PL/EN or UN number fragment). It also differentiates itself from the sibling lookup_un by noting it returns a shortened list rather than full data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use lookup_un after finding the right position, giving a sequential workflow. It does not explicitly state when not to use this tool (e.g., when an exact UN number is already known, lookup_un might be more direct), but the context is clear enough for an agent.
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. Dates show when Glama detected each change.
10 tool updates
v0.1.0- First observed
build_proper_shipping_name - First observed
calculate_1136 - First observed
check_mixed_packing - First observed
compare_tank_codes - First observed
decode_classification_code - First observed
decode_hazard_id - First observed
decode_tank_code - First observed
lookup_un - First observed
resolve_lq_eq - First observed
search_adr
TDQS
Each tool targets a clearly distinct ADR sub-task: search/lookup, shipping-name construction, LQ/EQ limits, 1.1.3.6 calculation, mixed packing, tank-code handling, and code decoding. The explicit cross-references between search_adr and lookup_un further reduce misselection risk.
All tool names use lowercase snake_case with an imperative verb-noun pattern (search_, lookup_, build_, resolve_, calculate_, check_, decode_, compare_). Acronyms and rule numbers like UN, LQ_EQ, and 1136 are used predictably and do not break the naming convention.
Ten tools is a well-scoped size for an ADR dangerous-goods assistant. Each tool addresses a distinct regulatory calculation or lookup without overlap or bloat, supporting both low-level data retrieval and higher-level compliance decisions.
The core ADR workflows are well covered: search/lookup, proper shipping names, LQ/EQ limits, 1.1.3.6 exemption, mixed packing, tank codes, hazard IDs, and classification codes. Some adjacent areas such as tunnel restrictions or special provisions are not directly decoded, though raw lookup data can partially compensate.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Let AI agents query data and act across all your business apps via MCP.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Furgonetka MCP Server is an extension for LLMs (such as Claude) that integrates AI assistants with Poland's most popular courier brokerage platform. The server enables models to interact directly with services from various couriers (including InPost, DPD, DHL, UPS, and Poczta Polska) through a single, unified interface. With this integration, your AI stops just "writing about logistics" and starts actually managing it.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseAqualityAmaintenanceAI agent access to 11 freight calculation and reference tools — LDM, CBM, chargeable weight, pallet fitting, ADR dangerous goods (2,939 entries), airline codes (6,352), HS codes (6,940), INCOTERMS, container specs, unit converter, and ADR 1.1.3.6 exemption calculator.252914MIT
- AlicenseNot gradedqualityCmaintenanceProvides 14 customs and trade operations as MCP tools, enabling AI agents to query tariff, track declarations, screen dual-use items, and generate AI-powered declarations.242MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to look up and validate hazardous materials shipping descriptions using public 49 CFR citations, providing structured JSON with proper shipping names, hazard classes, labels, and regulatory references.691MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage logistics operations including orders, shipments, tracking, and warehouse management through standardized MCP tools.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kociembadamian/adr-agreement-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server