Skip to main content
Glama

Merit — Ukrainian Law & Registers

Server Details

50+ Ukrainian legal sources, 120+ tools: laws on any date, case law, courts, companies, sanctions.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 43 tools

Disambiguation4/5

Namespace prefixes cleanly separate roughly 17 distinct data sources, and overlapping pairs are explicitly distinguished (ua_debtors vs ua_enforcement_proceedings, get_unit vs get_unit_fulltext, lookup vs search vs lookup_fop). Residual ambiguity comes from four near-identical sanctions search tools and the nine-tool ua_law family, where correct selection depends on reading long descriptions.

Naming Consistency4/5

The namespace__snake_case pattern is applied consistently throughout (ua_law__get_unit_fulltext, ua_edr_companies__search_fop, ua_vs_digest__document). Minor deviations exist where retrieval tools are noun-only (ua_lpd__position, ua_nbu_rate__rate, ua_legal_indicators__get, ua_vs_digest__document), breaking the verb-first convention.

Tool Count3/5

43 tools is well above the 3-15 band; each of the many registers arguably needs its own surface, and the catalog__ meta tools mitigate discovery of off-list tools. Still, the nine-tool ua_law family and four parallel sanctions searches make the surface heavy and slow to scan.

Completeness4/5

Coverage spans legislation, case law, company/ФОП registers, enforcement, bankruptcy, corruption, sanctions, legal indicators, CPI, exchange rates and holidays, with search-plus-detail pairs for most domains. Gaps are minor: sanctions lists are search-only (no get-by-id), and a few registers have a single entry point, but those tools return full records so agents are not blocked.

Available Tools

43 tools
catalog__callCall Catalog ToolA
Read-onlyIdempotent
Inspect

Run a catalog tool with its arguments. It is validated, limited, billed and answered exactly as a listed tool would be.

NameRequiredDescriptionDefault
toolYesTool name, from catalog__search.
argumentsNoThat tool's arguments, per catalog__describe.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description does add real context beyond them: the call is validated, limited (quota/rate implied), billed, and returned identically to a direct tool call. It does not say what happens on an invalid or unknown tool name, or how validation failures are surfaced.

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?

Two short sentences, front-loaded with the action and followed by the behavioral contract. The phrase 'answered exactly as a listed tool would be' is slightly vague but carries the important equivalence guarantee, so no sentence is wasted.

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

Completeness3/5

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

For a generic dispatcher with a free-form nested arguments object, no output schema, and open-world behavior, the description covers the execution model and billing but omits error/validation failure behavior and any guidance on tool-name resolution. Adequate to call it, incomplete for handling failures.

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 both parameters are documented in-schema, including the crucial pointers to catalog__search and catalog__describe. The description adds only 'with its arguments', which slightly reinforces the nested-object pass-through but contributes little beyond the schema. Baseline would be 3, nudged to 4 because the schema's cross-references are genuinely load-bearing and the description's 'validated' wording implies the arguments are checked against the target tool's contract.

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: run a catalog tool with its arguments. It implicitly distinguishes itself from catalog__search and catalog__describe by being the execution step, but it never names those siblings explicitly, so the agent has to infer the dispatch role from the schema's parameter descriptions.

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 only implied through the schema references ('Tool name, from catalog__search', 'per catalog__describe'), which does sketch a discovery-to-execution workflow. It never says when to prefer catalog__call over invoking a concrete sibling like ua_law__search directly, nor when not to use it, which is the central ambiguity for a meta-dispatch tool.

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

catalog__describeDescribe Catalog ToolB
Read-onlyIdempotent
Inspect

A catalog tool's full description and input schema, as tools/list would publish it.

NameRequiredDescriptionDefault
toolYesTool name, from catalog__search.

TDQS

B3.2/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=false, so the safety and idempotency profile is covered structurally. The description adds the useful behavioral fact that it returns metadata as tools/list would publish it, but says nothing about what happens for an unknown tool name or the exact response shape.

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?

One front-loaded sentence that states the return payload immediately, with no filler. It is appropriately sized for a simple one-parameter lookup, though it could have paired the payload statement with a routing cue at no extra length cost.

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

Completeness3/5

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

With no output schema, the description must carry the return-value burden, and it does so only in outline ('full description and input schema'). For an introspection tool with a single required parameter and a documented source (catalog__search), this is adequate but leaves the response format and error behavior unspecified.

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 is already documented as 'Tool name, from catalog__search.', which supplies the provenance constraint. The description adds no further meaning beyond what the schema provides, 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 names the resource (a catalog tool) and states the concrete payload: its full description and input schema as tools/list would publish it. An agent can distinguish it from catalog__search (which finds tools) and catalog__call (which invokes them), though the verb phrasing is nominal rather than an explicit action.

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?

There is no explicit when-to-use or when-not-to-use guidance: nothing says to call this after catalog__search and before catalog__call, or that it is a metadata lookup rather than an invocation. The only hint is the schema note that the tool name comes from catalog__search.

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

ua_bankruptcy__get_caseGet Bankruptcy CaseA
Read-onlyIdempotent
Inspect

One bankruptcy case's announcement history and current procedural stage, newest first.

current_stage is the most recent announcement's type. The registry publishes no case-level status record, so the latest publication is the only statement of where the case stands, and debtor_code, debtor_name and court_name are read off that same announcement.

Check mirror.ready to tell "no proceedings published" apart from an unsynced mirror.

NameRequiredDescriptionDefault
limitNo
case_numberYesExact case number, slashes included.

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses non-obvious data provenance: the registry keeps no case-level status record, so `current_stage` and the debtor/court fields are all derived from the single most recent announcement. It also flags the mirror-sync ambiguity — exactly the interpretive caveats an agent cannot get from structured fields.

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

Conciseness5/5

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

Three tight blocks: what it returns, how the derived fields work, and the one caveat that changes interpretation. Front-loaded and free of filler; every sentence carries information the schema does not.

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 no output schema, the description does carry the return-shape burden and mostly meets it by naming the fields surfaced (debtor_code, debtor_name, court_name, current_stage). It stops short of describing pagination behavior or what an empty announcement history looks like structurally.

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 50%: `case_number` is documented in-schema, but `limit` (default 20, max 200) has no description anywhere. The 'newest first' ordering hints at result truncation but the description never explains the page size or how to widen it, so it does not compensate for the gap.

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: one bankruptcy case's announcement history plus current procedural stage, ordered newest first. The singular framing implicitly separates it from ua_bankruptcy__search, but no sibling is named outright, so the differentiation is inferred rather than stated.

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?

There is real guidance on interpreting results (check `mirror.ready` to separate 'no proceedings published' from an unsynced mirror), which is a genuine when-to-trust-this condition. However, nothing tells the agent how to obtain the required exact case number with slashes, nor directs it to ua_bankruptcy__search when only a name is known.

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

ua_cpi_inflation__lookupLook Up Consumer Price IndexA
Read-onlyIdempotent
Inspect

One consumer price index figure by period.

base_period defaults to the month-on-month series, which is what Article 625(2) of the Civil Code is computed from. This is Derzhstat's consumer price index, not a producer price index and not the NBU's mixed series.

A period the mirror does not hold returns found: false rather than an error. Check source.latest_period and source.mirror_ready to tell "not published" from "not synced".

NameRequiredDescriptionDefault
freqNo'M' monthly or 'A' annual.M
periodYesISO period: 2026-07 or 2025.
base_periodNoDerzhstat BASE_PERIOD code, e.g. PREV_MONTH.PREV_MONTH

TDQS

A4.3/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, closed-world), and the description adds genuinely non-obvious behavior: a missing period returns `found: false` rather than erroring, and `source.latest_period` / `source.mirror_ready` distinguish "not published" from "not synced." It stops short of describing the returned figure itself — whether the value is an index level or a percent change, and in what units — which matters with no output schema.

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 operation, then escalating to disambiguation and edge-case behavior in a logical order with no filler. A few sentences are telegraphic to the point of compression (the found/mirror sentence), but nothing is wasted.

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-figure lookup with three parameters, the description covers identity, default semantics, not-found behavior, and mirror-state diagnosis — the main things an agent could get wrong. The one remaining gap is the shape and units of the returned figure, which is the primary payload and is only inferable.

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 would be 3, but the description adds real meaning beyond the schema: it explains what `base_period` defaults to and why that default is legally meaningful, information absent from the schema's bare "Derzhstat BASE_PERIOD code, e.g. PREV_MONTH." It adds nothing further about `freq` or the `period` format, which the schema already handles.

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 first line gives a specific verb and resource ("One consumer price index figure by period"), and the second paragraph explicitly delimits which index this is — Derzhstat's CPI, not a producer price index, not the NBU's mixed series — which separates it from siblings like ua_nbu_rate__rate and ua_legal_indicators__get. An agent can select or reject this tool 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 Guidelines4/5

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

It gives a concrete use condition by tying the default `base_period` to the month-on-month series used for Civil Code Article 625(2) computations, which tells an agent when the default is the right call and when to override it. It does not explicitly name a sibling alternative to route to, but the "not a PPI / not the NBU series" framing performs the exclusion function in practice.

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

ua_debtors__lookupLook Up Debtors by ProceedingA
Read-onlyIdempotent
Inspect

Every debtor listed under one enforcement-proceeding number.

Always a list: one proceeding can be enforced against several debtors, so a number legitimately has several answers.

NameRequiredDescriptionDefault
proceeding_numberYesEnforcement-proceeding number, e.g. 71234567.

TDQS

A3.8/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, closed-world), so the description's added value is the cardinality warning: the result is always a list and may legitimately contain several debtors. That is a non-obvious behavioral trait an agent would otherwise mishandle by assuming a single record; only a description of the record fields is missing.

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?

Two short sentences, zero waste, with the scope stated first and the list-cardinality caveat immediately after. Both sentences carry information the agent needs.

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 no output schema, the definition covers input, scope, and result shape (always a list, possibly multiple entries). It could go one step further and say what a debtor entry contains, but nothing essential for calling it correctly is absent.

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 sole parameter is documented with an example format in the schema. The description adds no format, validation, or normalization guidance beyond it, which is the expected baseline here.

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?

"Every debtor listed under one enforcement-proceeding number" names the resource (debtors) and the exact key (proceeding number), and the lookup-by-key framing is distinguishable from ua_debtors__search. It stops short of explicitly naming that sibling, so the differentiator is implied rather than stated.

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: use this when you already hold a proceeding number. There is no explicit statement of when to prefer this over ua_debtors__search or how it pairs with ua_enforcement_proceedings__lookup, and no mention of what to do if the number is unknown.

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

ua_echr__get_caseGet ECHR Document (HUDOC)A
Read-onlyIdempotent
Inspect

One HUDOC document by itemid, adding cited Strasbourg case law, domestic law at issue, judges.

NameRequiredDescriptionDefault
itemidYesHUDOC item id from a search hit, e.g. '001-219403'.

TDQS

A3.6/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 safety is covered. The description still adds real value by disclosing what the response enriches beyond the raw document: cited Strasbourg case law, domestic law at issue, and judges. It stops short of stating failure behavior or whether full text is 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?

A single front-loaded clause with zero filler and the selector named immediately. It is mildly telegraphic ('One HUDOC document') and lacks a verb, but nothing is wasted and nothing is padded.

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

Completeness3/5

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

For a one-parameter read tool with no output schema, the main open question an agent would have is what exactly comes back (full text vs. metadata plus the listed enrichments) and how misses are signalled. The description hints at the enrichment but leaves that gap, which is acceptable yet not 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 description coverage is 100%, and the schema itself supplies the id format example ('001-219403') and provenance ('from a search hit'). The description only restates that the call is keyed on `itemid`, adding no syntax or constraint 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?

Names a specific resource (a single HUDOC/ECHR document) and the exact selector (`itemid`), and distinguishes itself implicitly from the sibling `ua_echr__search` by being the single-document fetch. The verb is elided ("One HUDOC document") rather than stated, so it is clear but not maximally explicit.

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 only implied: 'by `itemid`' plus the schema note that the id comes from a search hit tells an agent this is the follow-up call to `ua_echr__search`. There is no explicit when-to-use, no statement that a search must precede it, and no mention of what happens with an unknown or stale id.

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

ua_edr_companies__lookupLook Up Company (EDR)A
Read-onlyIdempotent
Inspect

One legal entity by ЄДРПОУ code or record, with its people.

people: founders, beneficial owners, signers and board members; the head is the latest appointment. company adds termination, bankruptcy, succession, branches and tax registration.

history: changes per weekly release since tracking began; on_date: people then. Earlier history: paid НАІС extract only.

A code shared by several subjects returns the live one, the rest in other_subjects.

No address or КВЕД codes upstream.

NameRequiredDescriptionDefault
edrpouNoЄДРПОУ code, e.g. 00032129.
recordNoЄДР subject id, from a hit.
historyNoAdd the change log.
on_dateNoAdd people as of this date.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: the collision case where a code maps to several subjects (live one returned, rest in other_subjects), the weekly-release cadence of history, and the upstream data gap (no address or КВЕД codes).

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 action, then organized by payload section using backticked field names. Telegraphic style but every clause carries information; no filler sentences.

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 no output schema, the description does the work of explaining the return shape (people, company, history, on_date, other_subjects) and the upstream data limits. A brief note on how to choose between edrpou and record, or on error/null behavior for an unknown code, would make it complete.

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 would be 3, but the description adds real meaning: history is not just a flag but 'changes per weekly release since tracking began', on_date returns people as they stood at that date, and record is a subject id obtainable from a search hit. That goes beyond the terse schema strings.

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: fetch one legal entity by ЄДРПОУ code or record id, including its people. The word 'one' implicitly contrasts with the sibling search tools (ua_edr_companies__search, search_fop) that return many hits, and the payload sections (people, company, history) make the scope concrete.

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 rather than stated: the agent can infer this is the detail fetch after a search hit (record = 'from a hit'), and it learns that history beyond the tracked window requires a paid НАІС extract. However, there is no explicit when-to-use vs ua_edr_companies__search or lookup_fop, and no note that at least one of edrpou/record should be supplied.

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

ua_edr_companies__lookup_fopLook Up Sole Trader (EDR)B
Read-onlyIdempotent
Inspect

One ФОП by record: termination entry and reason, annulled termination, farm-household flag, property manager, tax/ЄСВ registration.

NameRequiredDescriptionDefault
recordYesЄДР subject id, from a search_fop hit.
historyNoAdd the change log.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful return-content context (termination entry and reason, annulled termination, farm-household flag, property manager, tax/ЄСВ registration), which matters because there is no output schema. It says nothing about the `history` toggle's cost or volume, or about behavior when the record id does not exist.

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?

It is a single compact line that front-loads the resource and key, with no filler. The telegraphic, verbless style and untranslated "ФОП" cost some readability, but nothing is wasted.

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

Completeness3/5

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

With only two fully documented parameters and no output schema, most of the calling mechanics are covered by the schema, and the description partially compensates by enumerating returned fields. It still leaves the `history` flag and failure behavior unaddressed, so the definition is workable but not 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 description coverage is 100%, so the baseline is 3. The description mentions `record` exists but adds no meaning beyond the schema's "ЄДР subject id, from a search_fop hit," and it never mentions the optional `history` parameter at all.

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?

"One ФОП by `record`" identifies the resource (a single sole trader) and the key that selects it, which separates it from the sibling search_fop that produces the record id. It stops short of a clean verb-first statement of purpose, relying on the title and the field list to convey that this is a detail lookup.

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 description gives no when-to-use or when-not guidance: it never says to call this only when you already hold an EDR subject id, nor does it name search_fop as the prerequisite path. The only provenance hint ("from a search_fop hit") lives in the schema's `record` description, not in the tool description.

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

ua_edr_companies__search_fopSearch Sole Traders (EDR)A
Read-onlyIdempotent
Inspect

ФОП (фізичні особи-підприємці) in the open ЄДР extract, by name (ПІБ), status and registration/termination date. Ordered by the filtered date, else record.

No РНОКПП, address or КВЕД upstream: namesakes cannot be told apart, so a name hit alone does not identify a person.

NameRequiredDescriptionDefault
qNoWords of the ПІБ; each a prefix, all required.
limitNo
offsetNo
statusNoCanonical registration status.
registered_toNo
terminated_toNo
registered_fromNoYYYY-MM-DD, inclusive.
terminated_fromNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description's added value here is upstream data limits: no РНОКПП, address or КВЕД, meaning namesakes cannot be disambiguated. It also discloses ordering ('filtered date, else record'), which affects how paged results should be read. Missing only result shape/pagination behaviour.

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 what is searched, then the identity caveat — good ordering with no filler. Dense but each clause carries information; the Ukrainian/Latin term mixing is justified by the domain.

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

Completeness3/5

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

For an 8-parameter tool with no output schema and partial schema coverage, the definition covers the crucial identity-ambiguity risk but says nothing about returned fields, pagination limits, or what an empty result implies. Adequate to call correctly, incomplete for interpreting results.

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 low (38% of 8 params), and the description only maps the broad facets (name, status, registration/termination dates) without explaining status vocabulary or which date boundary pairs go together. It does add useful semantics for the date filters via the ordering rule, but leaves q's prefix-and-AND semantics to the schema.

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?

Opens with a specific verb and resource — ФОП (sole traders) in the open ЄДР extract — and names the searchable facets (name/ПІБ, status, registration and termination dates). It is clearly separable from ua_edr_companies__lookup_fop (an exact lookup) even though it does not say so 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 by 'search ... by name ... date', but there is no explicit when-to-use / when-not guidance and no pointer to lookup_fop for exact identification or to ua_edr_companies__search for legal entities. The one real steer is the warning that a name hit does not identify a person, which implicitly tells the agent when to escalate.

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

ua_edrsr__get_court_practiceCourt Practice on a Statute ArticleA
Read-onlyIdempotent
Inspect

Court practice on one statute article: which cases cite it, by court and year, ranked highest authority first.

Spellings of one code answer alike ('ККУ', 'КК України') and mean the code in force; repealed_excluded lists repealed namesakes' nregs.

index_coverage.status says what total_cases means (a real zero, or unresolved citations); under index_unavailable it is null, not a count.

NameRequiredDescriptionDefault
limitNoMax rows to return (0-200); 0 returns the count alone.
facet_sizeNoMax facet buckets to return (1-1000).
abbreviationYesCode abbreviation (ККУ), or act nreg or title.
article_numberYesArticle number as written, e.g. 185.
clause_componentNoЧастина/пункт; narrows to clause-depth citations.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely non-obvious behavior: code spellings collapse to the in-force code, repealed namesakes surface via `repealed_excluded`, and `total_cases` must be interpreted through `index_coverage.status`, including a null under `index_unavailable`. Since there is no output schema, it would ideally also describe the court/year facet structure produced by `facet_size`, which is left unexplained.

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, then two short paragraphs of non-obvious semantics; there is no filler. The final paragraph is terse to the point of ambiguity, introducing `index_coverage.status` and `index_unavailable` without saying they are response fields, which slightly hurts first-read clarity.

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 read-only, 5-parameter tool with no output schema and full schema coverage, the description supplies the key interpretive rules an agent needs to not misreport a zero-case result. It stops short of describing the ranked/faceted return payload, which matters because the ranking promise is central to the tool's value.

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 all five parameters are already documented with ranges and defaults. The description only indirectly enriches `abbreviation` by explaining that different spellings of one code resolve identically and that act nregs or titles are also accepted; it adds nothing on `article_number` vs `clause_component` or on the interaction of `limit` with facet output. 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 first clause names a specific resource and verb ('Court practice on one statute article') and immediately defines the output shape ('which cases cite it, by court and year, ranked highest authority first'). This clearly separates it from text-retrieval siblings like ua_law__get_unit and from case-search siblings like ua_edrsr__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 purpose: call this when you need citation-to-case mapping for a specific article. However, the description never states when to prefer a sibling (e.g. ua_edrsr__search for keyword case search, ua_law__get_unit for article text) or prerequisites such as needing a resolvable abbreviation. The spelling-alias note is a correctness aid, not routing guidance.

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

ua_edrsr__get_documentGet Court Decision (EDRSR)A
Read-onlyIdempotent
Inspect

One decision: its text, its citations, its structural parts.

Text is windowed, never dumped whole. text_window says what came back and how to get the rest. Citations cover that window only, with *_outside_window counting the rest; repeats of one case roll up into occurrences.

Citations carry what was written and what it resolved to, so an unresolved one stays visible. Join on resolved_cause_num, not the written number.

NameRequiredDescriptionDefault
doc_idYesDocument id.
offsetNoCharacters to skip, for paging.
sectionNoParts to return text for: preamble, reasoning (what the court found), operative (what it ordered). Omit for all.
max_charsNoCap on returned text characters; text_window.next_offset continues.
include_htmlNoAlso return canonical HTML (tables, emphasis, superscripts the text flattens). Always whole: the window cuts text, which offsets index.

TDQS

A4/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, the description discloses windowed text, continuation through text_window, window-scoped citations with outside-window counts, and occurrence rollups. It also explains that unresolved citations remain visible and warns to join on resolved_cause_num rather than the written number, preventing a subtle usage error.

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?

The description is compact, front-loads the purpose, and then organizes the important text-window and citation behaviors into short paragraphs. Each sentence supplies a useful operational detail without repetition or 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 no output schema, the description usefully covers the most important response semantics, while the input schema and annotations support correct invocation. It remains incomplete on the surrounding workflow, particularly where doc_id comes from and how this tool differs from nearby EDRSR retrieval tools.

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 explains doc_id, offset, section selection, max_chars, and include_html in detail. The description reinforces the windowing model but adds little parameter-specific meaning beyond that structured documentation.

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 clearly identifies the resource and result: one court decision with its text, citations, and structural parts. It does not explicitly distinguish this retrieval tool from siblings such as ua_edrsr__search, ua_edrsr__lookup_case, or ua_edrsr__get_court_practice.

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?

Single-decision retrieval and paginated reading are implied by 'One decision' and the windowing guidance. There is no explicit workflow guidance on obtaining doc_id or when to use this tool instead of a search or case-lookup sibling.

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

ua_edrsr__lookup_caseLook Up Court Case (EDRSR)A
Read-onlyIdempotent
Inspect

One case by document id or case number, with the cases related to it. Give exactly one of doc_id or cause_num.

Highest instance first, judgments before rulings, newest first.

related_cases is citation-graph overlap, never semantic similarity or a judgement on merits, and may repeat a decision from matches. score weights each shared anchor and case by rarity, so boilerplate ranks near nothing. departures/departed_by: Supreme Court departures read from the texts.

NameRequiredDescriptionDefault
doc_idNoDocument id.
offsetNo
cause_numNoCase number. Cyrillic case variants all match.
max_charsNoCap on response characters; related-case evidence fits it.
match_limitNoMax decisions per case to return (1-25).
related_limitNoMax rows to return (0-200); 0 returns the count alone.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already cover read-only, idempotent, closed-world safety, yet the description adds substantive behavior: result ordering (highest instance first, judgments before rulings, newest first), the citation-graph basis of `related_cases` with an explicit denial of semantic similarity, the rarity-weighted `score`, and the textual source of departures. The overlap warning that `related_cases` may repeat entries from `matches` is exactly the kind of non-obvious behavior an agent needs.

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

Conciseness4/5

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

Front-loaded with the identifying rule, then ordering, then return semantics — a sensible progression with no filler sentences. Some phrasing is telegraphic ('Highest instance first, judgments before rulings, newest first') but it remains parseable and every line carries 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 no output schema, the description steps in to explain the main return fields (`matches`, `related_cases`, `score`, `departures`/`departed_by`), which is the right call. Minor gaps remain around pagination behavior via `offset` and how `max_chars` truncation interacts with the nested evidence, but those are documented in the schema.

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 already 83%, so the baseline is 3. The description adds the mutual-exclusivity rule between `doc_id` and `cause_num`, which the schema does not encode since neither is required — genuine meaning beyond the structured data, though the remaining parameters are left entirely to the schema.

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 concrete verb and resource ('One case by document id or case number, with the cases related to it'), which tells an agent this is a single-record fetch rather than a listing. It never names ua_edrsr__search or ua_edrsr__get_document explicitly, so differentiation from siblings is implied by 'one case' rather than spelled out.

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?

'Give exactly one of `doc_id` or `cause_num`' is a real usage constraint, and a valuable one since the schema marks zero parameters as required. However, it gives no guidance on when to choose this tool over the sibling search tools or when a related-case lookup is appropriate versus a full document retrieval.

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

ua_enforcement_proceedings__lookupLook Up Enforcement ProceedingA
Read-onlyIdempotent
Inspect

Every row published under one enforcement-proceeding number.

Always a list: a proceeding with several debtors is published as one row per debtor. matches is capped at 200.

NameRequiredDescriptionDefault
vp_numYesProceeding number, e.g. 71234567.

TDQS

A3.8/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, closed-world), so the description correctly spends its words elsewhere: it discloses that the result is always a list, that multi-debtor proceedings fan out into multiple rows, and that `matches` truncates at 200. The cap is genuinely valuable caller-side information not present in the annotations or schema, though it doesn't say whether truncation is signalled or paginated.

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?

Three short sentences, zero filler, and the core fact (all rows for one number) is front-loaded before the fan-out and cap details. Sentence fragments are used deliberately and read cleanly.

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 no output schema, the description carries the burden of describing the return, and it does partially: it names the `matches` field, states that rows fan out per debtor, and gives the 200 cap. It stops short of describing the row fields themselves or how to detect truncation, which matters for a tool whose only input is an opaque identifier.

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 already documents itself as a proceeding number with an example, so the baseline of 3 applies. The phrase 'one enforcement-proceeding number' reinforces exact-match semantics over fuzzy lookup, which is a small addition beyond the schema but nothing about format validation or failure behavior on an unknown number.

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 precisely what comes back: every row published under a single enforcement-proceeding number, with one row per debtor. It distinguishes itself implicitly from ua_enforcement_proceedings__search by being number-scoped, but it never names that sibling or says explicitly that this is a by-identifier lookup.

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 only implied: the agent can infer 'call this when you already have a proceeding number,' but the description never states that condition, nor does it tell the agent to use ua_enforcement_proceedings__search first when only a name or party is known. No exclusions or prerequisites are given.

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

ua_holidays__check_dateCheck Ukrainian HolidayA
Read-onlyIdempotent
Inspect

Whether one date is a public holiday or non-working day in Ukraine.

is_holiday is true, false, or null -- null when covered is false, i.e. the mirror has not computed that year. Null is not "no": a deadline calculation must be able to tell "this is a working day" from "this source cannot say".

matches carries the day with its name and verbatim statute line; a list, as a movable feast and a dated holiday can coincide.

is_holiday means ст. 73 lists the day. During martial law ст. 73 does not apply: see martial_law.suspends_holidays, null past the decreed end.

NameRequiredDescriptionDefault
dateYesISO date, YYYY-MM-DD.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly, idempotent, closed-world), and the description adds substantially beyond that: a tri-state is_holiday (true/false/null) tied to a `covered` flag, a `matches` list because a movable feast and a dated holiday can coincide, and a martial-law caveat where ст. 73 is suspended. Without an output schema, this is exactly the kind of return-value semantics the agent needs.

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

Conciseness4/5

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

The core answer is front-loaded in the first line, and the follow-on paragraphs each address a distinct return-value nuance rather than padding. It is dense with backticked field names but no sentence is redundant; the martial-law note could arguably be tightened.

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 lookup with no output schema, the description covers the two things that would otherwise be guesses: the null-versus-false distinction and the shape of `matches`. An agent can call it and interpret the response without further documentation.

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 `date` parameter is documented as ISO YYYY-MM-DD in the schema itself. The description adds no format, range, or timezone detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

The opening sentence gives a specific verb-and-resource pairing: decide whether a given date is a public holiday or non-working day in Ukraine. No sibling tool covers holiday calendars, so there is no ambiguity to resolve, and an agent can select this tool from the name plus first line 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?

The description supplies clear usage context by framing the tool around deadline calculations and by warning that null must not be read as 'no'. It does not state any when-not conditions or name alternatives, but no sibling overlaps this domain, so the practical gap is small.

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

ua_law__get_documentGet Legal Act CardA
Read-onlyIdempotent
Inspect

One act's card, by registration number. No text: use get_document_toc then get_unit_fulltext.

urn_current_edition is null unless an edition is in force today -- a repealed act has none; urn_latest_edition is the newest text in effect today whatever the status; urn_next_edition, text scheduled to take effect later.

Editions '30000101' and up await a date not yet fixed (e.g. end of martial law) and are none of these.

NameRequiredDescriptionDefault
nregYesRegistration number, e.g. 168/97-вр.
offsetNo
relationNoA `relation_counts` name: list those acts, 50 a page.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, non-open-world, so safety behavior is fully covered. The description's real contribution is the semantics of the three urn output fields and the '30000101'+ pending-edition convention, which is genuinely useful since no output schema exists. However it says nothing about pagination for `relation` or what else the card contains.

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 in the first clause, and the second sentence routes the agent to the right siblings. The urn paragraph is dense and telegraphic ("are none of these") but every line carries non-obvious 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 no output schema, the description appropriately spends its space explaining return-value semantics (current vs latest vs next edition, repealed-act null behavior, future-dated editions). What is missing is any coverage of the `relation` traversal mode and paging, which is a real usability gap for a 3-parameter tool.

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

Parameters2/5

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

Schema description coverage is 67% and the description adds no parameter-level meaning at all: `nreg`, `relation` and `offset` are never mentioned. In particular the `relation` parameter's reference to a `relation_counts` name and the 50-per-page paging behavior are left unexplained by the description, so it does not compensate for the coverage gap.

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 resource and scope: "One act's card, by registration number", making the lookup-by-nreg nature unmistakable. The explicit "No text" distinguishes it from the fulltext siblings, though the word "card" is jargon whose actual contents (metadata fields) are never enumerated.

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 a direct routing rule for the main ambiguity: if you want text, use `get_document_toc` then `get_unit_fulltext`. It does not say when to prefer this over `ua_law__get_unit`, `get_unit_editions`, or `search`, nor what to do if the registration number is unknown.

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

ua_law__get_document_tocGet Legal Act ContentsA
Read-onlyIdempotent
Inspect

One document's units in reading order -- and the article resolver: kind='article' with number='626' returns that article alone, urn included.

Structure only. Each entry carries the urn get_unit_fulltext takes and a heading, or for a clause its opening paragraph as lead_text with text_chars for the provision's full length.

Filter, do not page: the Civil Code is 5,431 units, 1,329 of them articles.

NameRequiredDescriptionDefault
kindNoOne unit kind: annex, article, chapter, clause, document, par_group, part, sub_clause, sub_point, subpart.
nregYesRegistration number, e.g. 168/97-вр.
limitNo
numberNoUnit's printed number, e.g. 626.
offsetNo
edition_dateNoEdition id from a URN's @suffix. Omit for current.

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the read-only and idempotent annotations, it discloses single-article filtering, entry contents, clause preview behavior through lead_text and text_chars, and the scale of large acts. It does not explain truncation or how the default result limit interacts with the advice not to paginate.

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?

Three compact paragraphs front-load the purpose and resolver example, then cover output structure and large-document usage. The wording is dense but every sentence supplies actionable 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?

For a six-parameter read tool without an output schema, it covers ordering, important returned fields, article lookup, downstream URN usage, and a strategy for large documents. The main remaining gaps are how to obtain nreg and precise limit, truncation, and paging 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?

The description adds meaningful semantics beyond the schema by showing how kind and number combine to resolve one article. Its filtering advice also contextualizes limit and offset, although those two schema-undescribed parameters and their truncation behavior remain unexplained.

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 identifies the resource and result ordering—one document's units in reading order—and also defines an exact article-resolution mode. "Structure only" and the reference to get_unit_fulltext distinguish it from full-text retrieval siblings.

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 gives an executable example using kind='article' and number='626', explains how returned URNs feed get_unit_fulltext, and explicitly advises "Filter, do not page." These details provide concrete guidance on both invocation and the downstream workflow.

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

ua_law__get_unitGet Legal Provision MetadataA
Read-onlyIdempotent
Inspect

Metadata for one structural unit, addressed by its URN.

urn is 'urn:ua:law:{nreg}:{path}@{YYYYMMDD}'. Drop '@{YYYYMMDD}' for today's edition; drop the path too for the whole document. Take one from a filtered get_document_toc rather than building it.

A URN resolving to no unit answers 'not_found' with the nearest real units either side and same_segment -- real paths ending in the segment asked for, the hint when the right article was guessed under a wrong ancestor.

NameRequiredDescriptionDefault
urnYesUnit URN, from get_document_toc.

TDQS

A3.8/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=false, so the safety profile is covered. The description adds genuinely non-obvious behavior on the error path: a miss returns 'not_found' with nearest real units either side plus `same_segment` hints for paths ending in the asked-for segment. The gap is that it never says what metadata fields come back, which matters since there is no output schema.

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 the URN construction rule, then the error semantics — a sensible order. The second paragraph is dense but every clause carries information; nothing reads as filler.

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

Completeness3/5

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 about return shape, the description should say what 'metadata' comprises (title, type, dates, in-force status?). That omission is the main incompleteness. Everything needed to construct a valid call and interpret a miss is covered.

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 says the URN comes from get_document_toc, so the baseline is 3. The description does add the template `urn:ua:law:{nreg}:{path}@{YYYYMMDD}` and the truncation rules, which is real meaning beyond the schema, but it stays at the level of how to construct rather than what each segment means.

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?

Opens with a specific resource and scope: 'Metadata for one structural unit, addressed by its URN.' The word 'Metadata' distinguishes it in spirit from the sibling get_unit_fulltext / get_unit_editions / get_unit_in_force, but the description never names those siblings, so the differentiation is implicit rather than stated.

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 routes the agent to a filtered `get_document_toc` to source the URN 'rather than building it,' which is clear when-to-use guidance. It also explains the two URN truncation variants (drop the date for today's edition, drop the path for the whole document). It stops short of saying when to prefer get_unit_fulltext or get_unit_editions instead.

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

ua_law__get_unit_editionsList Provision EditionsA
Read-onlyIdempotent
Inspect

The editions on which one unit's text changed, and what changed it.

Each entry is a version: its dated urn, how many editions kept it, and amended_by, the acts behind the change ('unit_notes': cited by the unit's notes; 'edition_basis': the edition's basis). removed: the unit disappears; moved_from: its address changed (text_changed false if only that). A baseline opens the list: the first text, or with from_date the text in force that day. Edition '30000101' and up (edition_date null) takes effect on a date not yet fixed.

complete: false means limit cut older entries.

NameRequiredDescriptionDefault
urnYesUnit URN, from get_document_toc.
limitNoEditions to read text for, newest first.
to_dateNoLatest edition, inclusive.
from_dateNoEarliest edition, inclusive.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare a safe, idempotent, closed-world read, and the description adds real behavior beyond that: entries carry amended_by with its two provenance sources, 'removed'/'moved_from' flags, and the special meaning of edition '30000101' (not-yet-fixed effective date). It also exposes the truncation signal (`complete: false` means limit cut older entries), which an agent cannot infer from annotations alone.

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 and then field-by-field explanation; no filler sentences. The telegraphic fragments ("`removed`: the unit disappears") are compressed almost to the point of ambiguity, which slightly hurts parseability but not economy.

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

Completeness3/5

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

There is no output schema, so the description must carry the return shape, which it does for urn, amended_by, removed, moved_from, baseline, and complete. However, the type and format of `urn`, how many editions exist, and the meaning of 'how many editions kept it' remain underspecified for a tool whose whole output is these entries.

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, but the description adds meaning the schema does not: from_date changes the baseline to the text in force that day, and limit's truncation is surfaced through `complete`. It does not explain to_date's interaction with the baseline or date format, so it stops short of full compensation.

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 resource and scope: the editions on which one unit's text changed, plus what changed it, keyed by a unit URN. It is clearly distinct from get_unit (current text) and get_document_toc (structure), though it never names those siblings to route the agent 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 rather than stated: from_date/to_date select a range, and the baseline entry is defined as the text in force on from_date. There is no explicit 'use this instead of X' guidance or stated prerequisite beyond the schema note that urn comes from get_document_toc.

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

ua_law__get_unit_fulltextGet Legal Provision TextA
Read-onlyIdempotent
Inspect

Unit text, paged.

Past max_chars it is truncated: pass next_cursor as cursor for more. Pages end after a paragraph, else after a space, else mid-word (a tiny max_chars). Only page 1 lists parts, sub-units with their own urn, unless parts_offset is passed.

text: null with status 'edition_text_unavailable' (edition not stored) or 'extraction_failed' (unit not cut out) is a unit that DOES exist -- not a repeal. No unit at that address answers 'not_found'.

NameRequiredDescriptionDefault
urnYesUnit URN, from get_document_toc.
cursorNoA `next_cursor`.
max_charsNoPage size; 0: `parts` only.
parts_offsetNoStart of `parts`.

TDQS

A4/5.0
Behavior5/5

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

Given readOnly/idempotent annotations, the description goes well beyond them: it discloses truncation at max_chars, the next_cursor-to-cursor continuation protocol, exact page-break rules (paragraph, then space, then mid-word for tiny max_chars), and that parts are listed only on page 1 unless parts_offset is supplied. It also disambiguates failure states by name ('edition_text_unavailable', 'extraction_failed', 'not_found') and warns that null text is NOT a repeal signal — a genuinely non-obvious behavioral caveat.

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 essential fact ("Unit text, paged") before the operational detail, and no sentence is filler. The telegraphic, backtick-heavy style is dense but reads as compact spec rather than padding; a slightly more explicit opening sentence about siblings would cost little.

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 no output schema, the description carries the burden of explaining the response, and it does: text, truncated flag, next_cursor, parts, and status strings are all accounted for. The only gap is what a part object contains beyond its urn, which the agent must discover at runtime.

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, but the description adds real meaning: it clarifies that cursor should receive a previously returned next_cursor, that truncation triggers when max_chars is exceeded, and that parts_offset controls which page surfaces sub-units. Only max_chars=0 semantics are left entirely to the schema.

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?

"Unit text, paged" names the verb (retrieve text) and resource (a single legal unit), and the remaining text makes clear it returns the full provision body in pages. It is clear enough to distinguish from metadata-style siblings like ua_law__get_unit, but it never explicitly says how it differs from ua_law__get_units_fulltext (plural), which is the closest alternative.

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 only implied: the agent infers it should call this after obtaining a URN from get_document_toc (the urn parameter says so). There is no explicit statement of when to pick this over ua_law__get_unit or ua_law__get_units_fulltext, and no prerequisites are spelled out beyond the schema note.

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

ua_law__get_unit_in_forceCheck Provision In Force on DateA
Read-onlyIdempotent
Inspect

Whether one unit was legally in force on a given date.

in_force is true, false, or null when the corpus cannot tell. outcome 'deterministic' is from the portal's own events or edition history, anything else from AI review of the text.

An undated URN asks about the provision; a dated one about that version of its text: false once replaced (scope 'version', version_in_force_urn).

decided_for_provision false: the answer is the act's, possibly wrong for an article inserted or deleted mid-life.

source: 'no_force_event': none ever recorded -- read document_status_name.

NameRequiredDescriptionDefault
urnYesUnit URN, from get_document_toc.
dateYesDay to test.

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, so the bar is lower, and the description clears it by disclosing provenance and reliability: deterministic vs AI-reviewed outcomes, null when the corpus cannot tell, and an explicit warning that decided_for_provision=false may be wrong for articles inserted or deleted mid-life. It does not cover latency, result shape stability, or what to do on errors, which keeps it short of a 5.

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 question, then progressive detail about edge cases; no filler sentences. The telegraphic, backtick-heavy fragments ("`source: 'no_force_event'`: none ever recorded -- read `document_status_name`.") are efficient but read like notes rather than prose, slightly raising parse cost.

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 no output schema, the description carries the return-value burden and does name the key fields (in_force, outcome, scope, version_in_force_urn, decided_for_provision, source, document_status_name) along with their interpretation. It stops short of enumerating all possible `outcome` values or the full `source` set, leaving some guesswork for a tool whose output is otherwise undocumented.

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% for both parameters, so the baseline is 3. The description does add real meaning to `urn` by explaining that an undated URN asks about the provision while a dated one asks about that version of its text, but it says nothing about the `date` parameter's format, timezone, or boundary behavior.

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 pair: testing whether one legal unit was in force on a given date. An agent can distinguish this from get_unit (content) and get_unit_editions (history) without opening the schema, though the description never names those siblings 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 only implied by the first sentence; there is no explicit when-to-use / when-not guidance versus get_unit_editions or get_unit_fulltext. The undated-vs-dated URN rule is useful routing guidance for choosing the urn form, but it addresses parameter selection rather than tool selection.

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

ua_law__get_units_fulltextGet Several Legal Provisions' TextA
Read-onlyIdempotent
Inspect

Several units' text in one call: a norm and what it relies on.

units answers each URN in order as get_unit_fulltext would, sharing one max_chars: a unit that does not fit is truncated with a next_cursor, and units past the budget come back with no text. A URN matching nothing is its own 'not_found' entry.

NameRequiredDescriptionDefault
urnsYesUnit URNs, answered in this order.
max_charsNoPage size; 0: `parts` only.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare this a read-only, idempotent, non-destructive operation, so the bar is low, and the description still adds substantial behavior: a single `max_chars` budget shared across all units, ordered answering, truncation signaled by `truncated` plus a `next_cursor`, over-budget units returning no text, and per-URN 'not_found' entries that do not fail the whole call. That partial-success semantics is exactly what an agent needs and is unavailable anywhere else.

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?

Four short sentences, front-loaded with the batch purpose followed by the budget/truncation contract. Minor friction from the elliptical opening fragment and reliance on backticked identifiers, but nothing is redundant.

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 no output schema and only two parameters, the description carries the burden of explaining the return contract, and it does so for the edge cases (truncated, next_cursor, empty text past budget, not_found). What a normal successful entry contains beyond text is only implied, which is the one gap.

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 per-parameter meanings are already documented. The description still adds non-obvious semantics by stating that `max_chars` is one shared budget across all `urns` rather than a per-unit limit, which changes how an agent should size requests. It leaves 'parts' (mentioned only in the schema) unexplained, so it is not fully additive.

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 opens with a specific verb and resource: fetch several units' fulltext in one call, framed by the concrete use case 'a norm and what it relies on.' It explicitly positions itself against the singular sibling by saying each URN is answered 'as `get_unit_fulltext` would,' so an agent can distinguish batch from single-unit retrieval without opening a schema.

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

Usage Guidelines4/5

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

The use case ('a norm and what it relies on') tells an agent when batching pays off, and the reference to `get_unit_fulltext` implies the single-URN alternative. It stops short of an explicit rule such as preferring this over repeated singular calls past a certain count, and names no when-not-to-use condition.

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

ua_law__search_unitsSearch Legislation Provisions by TextA
Read-onlyIdempotent
Inspect

Find provisions by their text: which articles, points or clauses say X.

Every word of text must appear (quote it for an exact phrase). Searches the text as published on on_date (default today); nreg limits it to acts. Each hit is the smallest unit holding it, with that day's urn. ⟦ ⟧ in excerpt mark matches, not the law's text. amending_act hits restate other acts. search finds acts by title.

NameRequiredDescriptionDefault
nregNoOnly these acts.
textYesWords to find.
limitNo
offsetNo
on_dateNoText as published that day.
per_actNoHits per act, 0: all (default 3; 1 act: all).
amending_actsNoFalse: no amending laws.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's added value is about result semantics — each hit is the smallest unit containing the match, carrying that day's urn, and ⟦ ⟧ in `excerpt` marks matches rather than law text. That is genuinely useful disclosure with no output schema to lean on. However, it says nothing about result ordering, what a hit looks like beyond `urn`/`excerpt`, or how pagination truncation manifests in the response.

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 clause and every subsequent sentence adds distinct information — matching rule, date semantics, hit granularity, excerpt notation, amending-act caveat, sibling routing. The telegraphic register and the '⟦ ⟧' glyph are slightly opaque on first read, but no sentence is 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 seven parameters and no output schema, the description carries the burden of explaining the return shape, and it does — hit granularity, urn, excerpt markers, amending-act hits. Missing pieces are pagination/limit behavior and result ordering, which matter for a search tool that caps at 50 results.

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?

Well above the 71% schema baseline for the parameters it touches: `text` gains AND-semantics plus quoting for exact phrases (the schema only says 'Words to find'), `on_date` gains 'default today' and published-text semantics, `nreg` gains 'limits it to acts', and the amending-act parameter gains an explanation of what such hits mean. `limit`, `offset`, and `per_act` are left entirely to the schema, which keeps it from a 5.

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 and resource — 'Find provisions by their text: which articles, points or clauses say X' — and explicitly separates itself from the sibling `search` ('finds acts by title') and by implication from the get_unit* tools. An agent knows exactly which tool to pick for a text-search versus a title-search.

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?

It draws the boundary against the closest alternative ('`search` finds acts by title') and explains the matching rule that governs when this tool will return results (every word must appear; quote for an exact phrase). It does not state when-not-to-use or mention the get_unit tools for retrieving a full provision once found, so a bit of routing context is left implicit.

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

ua_lpd__positionGet Supreme Court Legal PositionA
Read-onlyIdempotent
Inspect

One legal position, with its text and published markup.

Pass a search hit's position_id. text is plain, text_html as published.

norm_refs dates each statute quoted to the ua_law edition then in force, with a urn ua_law__get_unit_fulltext takes, to compare with today's text.

departs_from/departed_in link departures, read from position texts; history has the detail. approved_at is NOT a publication date: its absence says nothing about whether a position is current.

NameRequiredDescriptionDefault
position_idYesFrom a search result.

TDQS

A4.1/5.0
Behavior5/5

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

With no output schema, the description carries the return-shape burden and does it well: it separates `text` from `text_html`, explains that `norm_refs` dates statutes to the `ua_law` edition in force and yields a `urn` usable downstream, and flags that `approved_at` is not a publication date and its absence implies nothing about currency. That last caveat preempts a real misinterpretation an agent would otherwise make.

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 resource, then field-level notes in short paragraphs; nearly every sentence carries distinct information. The fragmentary, backtick-heavy style borders on cryptic (e.g. 'read from position texts') but nothing is padding.

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 one-parameter read tool with no output schema, the key returned fields and their pitfalls are covered, including how to use `norm_refs` downstream. Minor gaps remain: no mention of error behavior for a bad id or whether any other fields exist beyond those named.

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 both the schema and description say the id comes from a search result, so the description adds little new meaning for the sole parameter. Baseline 3 applies when the schema already documents the input.

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 the resource precisely — a single Supreme Court legal position — and enumerates what it carries (text, published markup). An agent can distinguish it from ua_lpd__search, which returns hits. It never uses an explicit retrieval verb, relying on 'Pass a search hit's `position_id`' to convey the fetch semantics.

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 prerequisite is clear: the id must come from a search result, which implicitly positions ua_lpd__search as the entry path. It also names ua_law__get_unit_fulltext as the follow-up for comparing statute text. No explicit when-not or exclusion guidance is given.

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

ua_nbu_rate__rateGet NBU Exchange RateA
Read-onlyIdempotent
Inspect

Look up the National Bank of Ukraine's official exchange rate (UAH per unit) for a currency, as of a given date or today if none is given. Supports historical dates for ЦК §533 п.2-style currency-conversion calculations, not only the current rate. Returns available: false with a null rate, rather than an error, when NBU has nothing published for the requested currency or date.

NameRequiredDescriptionDefault
dateNoYYYY-MM-DD. Defaults to today (Kyiv) when omitted.
currencyYesISO 4217 alphabetic code, e.g. USD.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and open-world traits, so the bar is lower, yet the description adds a genuinely non-obvious behavior: missing data yields `available: false` with a null rate rather than an error. That materially changes how an agent should handle the response. It stops short of describing auth, rate limits, or the full response shape beyond that flag.

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?

Three front-loaded sentences: purpose and direction first, then the historical/default date behavior, then the failure mode. Every sentence carries information, though the "ЦК §533 п.2-style" citation is jargon that adds length for agents without that legal context.

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 two-parameter lookup with no output schema, the description covers purpose, date resolution, rate direction, and the null-data case, which is the main thing an agent must handle. It could go slightly further on what the successful response contains (e.g. the published rate date), which is why it isn't a 5.

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 both parameters are documented with format hints (YYYY-MM-DD, ISO 4217) plus the Kyiv-timezone default, so the schema does the heavy lifting. The description adds the interpretive detail that the returned figure is UAH per unit, but that describes the result rather than the parameters, so 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?

States a specific verb and resource ("Look up the National Bank of Ukraine's official exchange rate") and pins down the direction of the quote ("UAH per unit"). No sibling tool in the list provides FX rates, and the description makes that scope 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?

Explicitly states the default ("today if none is given") and the historical case ("Supports historical dates for ЦК §533 п.2-style currency-conversion calculations"). No exclusion or named-alternative guidance is needed here because no sibling competes for this task, but it also never says when a different tool would be preferable.

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

ua_vs_digest__documentGet Supreme Court Practice ReviewA
Read-onlyIdempotent
Inspect

One Supreme Court publication's extracted text, document_url, cited case numbers and linked ЄДРСР edrsr_ids -- only this tool returns them.

These are analytical reports, not judgments, averaging ~128,000 characters, so a window from the start is usually cover page and contents. Pass text_query to open it at the passage you want. char_count is the full length; has_more whether more follows.

extract_status says why there is no text: empty is a scan with no OCR layer, one in nine; failed errored; unsupported is not a PDF.

NameRequiredDescriptionDefault
text_limitNoCharacters to return. Pass 1 for metadata and `case_refs` without the text.
text_queryNoOpen the window at this term, searching from `text_offset`; pass the last window's end for the next hit.
document_idYesFrom a search result.
text_offsetNo0-based character offset into the text.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, it discloses the typical document length, windowing behavior, and the meanings of `char_count` and `has_more`. It also explains all three no-text conditions through `extract_status`, including that `empty` commonly means a scan without OCR.

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?

The description is compact and front-loaded with the tool's unique value, then moves logically into long-document navigation and extraction failures. Nearly every phrase supplies actionable information, with no generic filler.

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?

Despite having no output schema, the definition covers the distinctive returned fields, large-text navigation, continuation indicators, and reasons text may be unavailable. Together with the fully documented input schema, this provides enough context for correct selection and invocation.

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 already 100%, but the description adds useful operational context for `text_query`: starting at the beginning usually exposes front matter, so a query can target the desired passage. The remaining parameter mechanics are primarily handled by the schema.

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 identifies a single Supreme Court publication and its distinctive outputs: extracted text, `document_url`, cited case numbers, and linked ЄДРСР `edrsr_ids`. It also distinguishes the content as analytical reports rather than judgments and states that only this tool returns the linked identifiers.

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?

It gives practical retrieval guidance: use `text_query` to avoid opening a long report at its cover page and contents, and do not treat these publications as judgments. However, it does not explicitly direct agents to `ua_vs_digest__search` for discovery or name the appropriate judgment-retrieval alternative.

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. 43 tool updates
    • First observedcatalog__call
    • First observedcatalog__describe
    • First observedcatalog__search
    • First observedeu_sanctions__search
    • First observedofac_sanctions__search
    • First observedua_bankruptcy__get_case
    • First observedua_bankruptcy__search
    • First observedua_corruption_registry__search
    • First observedua_court_hearings__search
    • First observedua_cpi_inflation__lookup
    • First observedua_debtors__lookup
    • First observedua_debtors__search
    • First observedua_echr__get_case
    • First observedua_echr__search
    • First observedua_edr_companies__lookup
    • First observedua_edr_companies__lookup_fop
    • First observedua_edr_companies__search
    • First observedua_edr_companies__search_fop
    • First observedua_edrsr__get_court_practice
    • First observedua_edrsr__get_document
    • First observedua_edrsr__lookup_case
    • First observedua_edrsr__search
    • First observedua_enforcement_proceedings__lookup
    • First observedua_enforcement_proceedings__search
    • First observedua_holidays__check_date
    • First observedua_law__get_document
    • First observedua_law__get_document_toc
    • First observedua_law__get_unit
    • First observedua_law__get_unit_editions
    • First observedua_law__get_unit_fulltext
    • First observedua_law__get_unit_in_force
    • First observedua_law__get_units_fulltext
    • First observedua_law__search
    • First observedua_law__search_units
    • First observedua_legal_indicators__court_fee
    • First observedua_legal_indicators__get
    • First observedua_lpd__position
    • First observedua_lpd__search
    • First observedua_nbu_rate__rate
    • First observedua_vs_digest__document
    • First observedua_vs_digest__search
    • First observeduk_sanctions__search
    • First observedun_sanctions__search

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables models to retrieve Ukrainian and EU legislation, ECHR and CJEU case law, ICJ case cards, and Ukrainian public registries, and to check any legal quote against the official source text, flagging verbatim matches, normalised matches, or mismatches with the differences marked. It also reports which operations have been tested per source, so drafted legal statements can be anchored to quoted articles and their versions rather than recalled from memory.
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables querying, searching, and validating 1,997 Bulgarian statutes and 17,103 provisions, with EU law integration and daily freshness checks.
    47 npm
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources