Skip to content

Merit — Ukrainian Law & Registers

legal.merit/lawmerit.legalstreamable-httpv1.0.3Scanned

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

43 tools: 6 change things and 37 only read.

Tools: 0 delete, 0 irreversible, 6 write, 37 read.
  • Reads private data · 5
  • Reads text others write · 4
  • Can send data out · 0
  • 1 finding

Anlyon alternative

6 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

43 tools

Changes things 6Claude Code: ask
  • catalog__callRun a catalog tool with its arguments.Reads text others write1 finding

    Why it is in this group

    • The name "catalog__call" says "call": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.

    Findings

    • Warn

      The server marks "catalog__call" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "catalog__call" says "call": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Run a catalog tool with its arguments. It is validated, limited, billed and answered exactly as a listed tool would be.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Call Catalog Tool
  • ua_holidays__check_dateWhether one date is a public holiday or non-working day in Ukraine.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Check Ukrainian Holiday
  • ua_lpd__positionOne legal position, with its text and published markup.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Supreme Court Legal Position
  • ua_nbu_rate__rateLook 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.Reads text others writeNo findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Get NBU Exchange Rate
  • ua_vs_digest__documentOne Supreme Court publication's extracted text, `document_url`, cited case numbers and linked ЄДРСР `edrsr_ids` -- only this tool returns them.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Supreme Court Practice Review
Only reads 37Show 37 read-only tools
  • catalog__describeA catalog tool's full description and input schema, as tools/list would publish it.No findings

    Why it is in this group

    • The name "catalog__describe" says "describe": a word for reading.
    Description, as the server wrote it
    A catalog tool's full description and input schema, as tools/list would publish it.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Describe Catalog Tool
  • ua_bankruptcy__get_caseOne bankruptcy case's announcement history and current procedural stage, newest first.No findings

    Why it is in this group

    • The name "ua_bankruptcy__get_case" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Bankruptcy Case
  • ua_cpi_inflation__lookupOne consumer price index figure by period.No findings

    Why it is in this group

    • The name "ua_cpi_inflation__lookup" says "lookup": a word for reading.
    Description, as the server wrote it
    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".

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Look Up Consumer Price Index
  • ua_debtors__lookupEvery debtor listed under one enforcement-proceeding number.No findings

    Why it is in this group

    • The name "ua_debtors__lookup" says "lookup": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Look Up Debtors by Proceeding
  • ua_echr__get_caseOne HUDOC document by `itemid`, adding cited Strasbourg case law, domestic law at issue, judges.Reads private dataReads text others writeNo findings

    Why it is in this group

    • The name "ua_echr__get_case" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "document": it reads documents.
    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • untrusted-inputThe description's first sentence says "issue": it reads issues, which other people can write.
    Description, as the server wrote it
    One HUDOC document by `itemid`, adding cited Strasbourg case law, domestic law at issue, judges.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • readOnlyHint: true
    • title: Get ECHR Document (HUDOC)
  • ua_edr_companies__lookupOne legal entity by ЄДРПОУ code or `record`, with its people.No findings

    Why it is in this group

    • The name "ua_edr_companies__lookup" says "lookup": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Look Up Company (EDR)
  • ua_edr_companies__lookup_fopOne ФОП by `record`: termination entry and reason, annulled termination, farm-household flag, property manager, tax/ЄСВ registration.No findings

    Why it is in this group

    • The name "ua_edr_companies__lookup_fop" says "lookup": a word for reading.
    Description, as the server wrote it
    One ФОП by `record`: termination entry and reason, annulled termination, farm-household flag, property manager, tax/ЄСВ registration.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Look Up Sole Trader (EDR)
  • ua_edr_companies__search_fopФОП (фізичні особи-підприємці) in the open ЄДР extract, by name (ПІБ), status and registration/termination date.No findings

    Why it is in this group

    • The name "ua_edr_companies__search_fop" says "search": a word for reading.
    Description, as the server wrote it
    ФОП (фізичні особи-підприємці) 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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Search Sole Traders (EDR)
  • ua_edrsr__get_court_practiceCourt practice on one statute article: which cases cite it, by court and year, ranked highest authority first.No findings

    Why it is in this group

    • The name "ua_edrsr__get_court_practice" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Court Practice on a Statute Article
  • ua_edrsr__get_documentOne decision: its text, its citations, its structural parts.Reads private dataNo findings

    Why it is in this group

    • The name "ua_edrsr__get_document" says "get": a word for reading.

    What it can reach

    • private-dataThe name "ua_edrsr__get_document" says "get" and "document": it reads documents.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Court Decision (EDRSR)
  • ua_edrsr__lookup_caseOne case by document id or case number, with the cases related to it.Reads private dataNo findings

    Why it is in this group

    • The name "ua_edrsr__lookup_case" says "lookup": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "document": it reads documents.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Look Up Court Case (EDRSR)
  • ua_enforcement_proceedings__lookupEvery row published under one enforcement-proceeding number.No findings

    Why it is in this group

    • The name "ua_enforcement_proceedings__lookup" says "lookup": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Look Up Enforcement Proceeding
  • ua_law__get_documentOne act's card, by registration number.Reads private dataNo findings

    Why it is in this group

    • The name "ua_law__get_document" says "get": a word for reading.

    What it can reach

    • private-dataThe name "ua_law__get_document" says "get" and "document": it reads documents.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Legal Act Card
  • ua_law__get_document_tocOne document's units in reading order -- and the article resolver: `kind='article'` with `number='626'` returns that article alone, `urn` included.Reads private dataNo findings

    Why it is in this group

    • The name "ua_law__get_document_toc" says "get": a word for reading.

    What it can reach

    • private-dataThe name "ua_law__get_document_toc" says "get" and "document": it reads documents.
    • private-dataThe description's first sentence says "document": it reads documents.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Legal Act Contents
  • ua_law__get_unitMetadata for one structural unit, addressed by its URN.No findings

    Why it is in this group

    • The name "ua_law__get_unit" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Legal Provision Metadata
  • ua_law__get_unit_editionsThe editions on which one unit's text changed, and what changed it.No findings

    Why it is in this group

    • The name "ua_law__get_unit_editions" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: List Provision Editions
  • ua_law__get_unit_fulltextUnit text, paged.No findings

    Why it is in this group

    • The name "ua_law__get_unit_fulltext" says "get": a word for reading.
    Description, as the server wrote it
    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'.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Legal Provision Text
  • ua_law__get_unit_in_forceWhether one unit was legally in force on a given date.No findings

    Why it is in this group

    • The name "ua_law__get_unit_in_force" says "get": a word for reading.
    Description, as the server wrote it
    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`.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Check Provision In Force on Date
  • ua_law__get_units_fulltextSeveral units' text in one call: a norm and what it relies on.No findings

    Why it is in this group

    • The name "ua_law__get_units_fulltext" says "get": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Get Several Legal Provisions' Text
  • ua_law__search_unitsFind provisions by their text: which articles, points or clauses say X.No findings

    Why it is in this group

    • The name "ua_law__search_units" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • readOnlyHint: true
    • title: Search Legislation Provisions by Text

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data5
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write4
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "catalog__call" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "catalog__call" says "call": a word for a change.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 1.0.3. Values in angle brackets are yours to fill in.

claude mcp add --transport http law https://law.merit.legal/mcp
claude mcp add --transport http law https://law.merit.legal/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__law__eu_sanctions__search",
      "mcp__law__ua_law__search",
      "mcp__law__ua_law__search_units",
      "mcp__law__ua_law__get_document",
      "mcp__law__ua_law__get_unit",
      "mcp__law__ua_law__get_unit_in_force",
      "mcp__law__ua_law__get_unit_fulltext",
      "mcp__law__ua_law__get_units_fulltext",
      "mcp__law__ua_law__get_unit_editions",
      "mcp__law__ua_law__get_document_toc",
      "mcp__law__ua_edrsr__search",
      "mcp__law__ua_edrsr__get_document",
      "mcp__law__ua_edrsr__get_court_practice",
      "mcp__law__ua_edrsr__lookup_case",
      "mcp__law__ua_bankruptcy__search",
      "mcp__law__ua_bankruptcy__get_case",
      "mcp__law__ua_cpi_inflation__lookup",
      "mcp__law__ua_debtors__search",
      "mcp__law__ua_debtors__lookup",
      "mcp__law__ua_edr_companies__search",
      "mcp__law__ua_edr_companies__lookup",
      "mcp__law__ua_edr_companies__search_fop",
      "mcp__law__ua_edr_companies__lookup_fop",
      "mcp__law__ua_enforcement_proceedings__search",
      "mcp__law__ua_enforcement_proceedings__lookup",
      "mcp__law__ofac_sanctions__search",
      "mcp__law__un_sanctions__search",
      "mcp__law__uk_sanctions__search",
      "mcp__law__ua_echr__search",
      "mcp__law__ua_echr__get_case",
      "mcp__law__ua_corruption_registry__search",
      "mcp__law__ua_court_hearings__search",
      "mcp__law__ua_vs_digest__search",
      "mcp__law__ua_lpd__search",
      "mcp__law__ua_legal_indicators__get",
      "mcp__law__catalog__search",
      "mcp__law__catalog__describe"
    ],
    "ask": [
      "mcp__law__ua_nbu_rate__rate",
      "mcp__law__ua_vs_digest__document",
      "mcp__law__ua_holidays__check_date",
      "mcp__law__ua_lpd__position",
      "mcp__law__ua_legal_indicators__court_fee",
      "mcp__law__catalog__call"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as law. Review it before you use it.

Capability tags behind 8 rules
  • mcp__law__ua_law__get_document private-data
  • mcp__law__ua_law__get_document_toc private-data
  • mcp__law__ua_edrsr__get_document private-data
  • mcp__law__ua_edrsr__lookup_case private-data
  • mcp__law__ua_echr__search untrusted-input
  • mcp__law__ua_echr__get_case private-data, untrusted-input
  • mcp__law__ua_nbu_rate__rate untrusted-input
  • mcp__law__catalog__call untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/legal.merit/law/verify?hash=74471b0922cca4110e1d2df33207423dfbe80bee1137575d7d4bf5694b28eb64" | jq -e '.changed == false'

Pinned hash 74471b0922cc, from Nov 3, 2026, 14:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/legal.merit/law/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for legal.merit/law
[![anlyon.dev](https://anlyon.dev/badge/legal.merit/law.svg)](https://anlyon.dev/servers/legal.merit/law)

Source: MCP Registry. Synced Nov 3, 2026, 14:18 UTC.