_ registry / mcp http-sse · checked 2h ago

lahend

https://lahend.ee

Registry code: d4d4fda11dbca538

api record

lahend.ee is a free, ad-free search engine for Estonian court decisions (kohtulahendid), indexing the full published civil, administrative and criminal case law from Riigi Teataja. Every ruling is full-text searchable and linked to the companies named in it (via the Estonian Business Register / nimistu.ee).

Use this server to: search case law by legal terms, a case number or a party name (inflection-tolerant; "quote" a phrase for an exact match); read a decision's full text; list every ruling involving a given company by its 8-digit registry code (registrikood) — a company↔case-law join unique…

endpoint
https://lahend.ee/api/lahend-mcp/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is lahend live?
Yes — it answered the hub's last check (checked 2h ago). It answered 99% of checks over the last 30 days.
Is lahend free to use?
Yes — the hub reached it with no key and no payment.
What tools does lahend have?
20 tools: get_law_section, law_versions, fetch, search_law_sections, eu_act, search_laws, authority_documents_for_ruling, eu_law_search, ….
Is lahend safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99%

90 days 98.9%· all time 98.9%

latency
336ms

last good check

priced tools
0

of 20 tools

_ answered our checks, 90 days 448 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • search estonian court decisions
  • read a law section
  • list rulings involving a company
  • find rulings citing eu law
  • read a ruling in full
takes → gives
text → text, data
tools
20 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 20 tools
6 open 14 never probed 6 of 20 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • list_courts reads open 8h ago

    All Estonian courts that have published decisions, each with its ruling count. Use a court name as the `court` filter in `search_rulings`.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • recent_rulings reads open 12h ago

    The newest published rulings (by decision date), across all courts and areas of law.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1
        }
      },
      "additionalProperties": false
    }
    arguments 12 lines
  • most_cited_sections reads open 12h ago

    The statute paragraphs cited by the most court decisions, ranked. A map of where Estonian litigation actually happens, and a good starting point when exploring an unfamiliar area.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1,
          "description": "How many (default 20)."
        }
      },
      "additionalProperties": false
    }
    arguments 13 lines
  • search_rulings reads open 12h ago

    Full-text ruling search with optional filters: court name, case type (civil/administrative/criminal), area of law (asja_kategooria) and a decision-date range. Returns a page of rulings with a total count. Use `list_courts` / `list_categories` to discover valid filter values. Two coverage limits worth knowing, because both are silent: - `companies` is populated on about 19% of rulings. Parties are extracted from the decision text by registry code, and many judgments name a company without ever stating its code. An EMPTY array means no code was found in the text, NOT that no company was involved. - About 26% of rulings carry no `asja_kategooria` at all, so filtering by `category` silently excludes them. Omit the filter to search the whole corpus.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "court": {
          "type": "string",
          "description": "Exact court name, e.g. 'Harju Maakohus Tallinna kohtumaja'."
        },
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1
        },
        "query": {
          "type": "string",
          "description": "Free text (or \"quoted phrase\"); omit to browse by filters alone."
        },
        "offset": {
          "type": "integer",
          "minimum": 0
        },
        "date_to": {
          "type": "string",
          "description": "YYYY-MM-DD upper bound (decision date)."
        },
        "category": {
          "type": "string",
          "description": "Exact area of law, e.g. 'Võlaõigus'."
        },
        "case_type": {
          "enum": [
            "civil",
            "administrative",
            "criminal"
          ],
          "type": "string"
        },
        "date_from": {
          "type": "string",
          "description": "YYYY-MM-DD lower bound (decision date)."
        }
      },
      "additionalProperties": false
    }
    arguments 44 lines
  • list_categories reads open 8h ago

    All areas of law (asja_kategooria) present in the corpus, each with its ruling count. Use a category as the `category` filter in `search_rulings`. These counts do NOT sum to the corpus size: about 26% of rulings carry no category, so they appear in `list_courts` totals and in unfiltered search but in no category here. Filtering by category silently excludes them.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {}
    }
    arguments 5 lines
  • most_cited_eu_law reads open 8h ago

    Ranked by how many Estonian decisions cite them. A good starting point for 'which EU law actually matters in Estonian practice' - the answer is concentrated in consumer protection, jurisdiction, asylum and agriculture rather than spread evenly.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        }
      },
      "additionalProperties": false
    }
    arguments 12 lines
  • get_law_section reads unknown 2h ago

    Return a single § of an Estonian act, addressed the way lawyers cite it: an abbreviation and a number, e.g. abbrev='KarS', paragrahv='199', or abbrev='TsMS', paragrahv='430'. This is the precise way to answer a legal question - pulling a whole act costs thousands of tokens and buries the answer. Text comes from the act's current redaktsioon.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "abbrev",
        "paragrahv"
      ],
      "properties": {
        "abbrev": {
          "type": "string",
          "description": "Act abbreviation as cited: KarS, TsMS, VÕS, PankrS, RahaPTS…"
        },
        "paragrahv": {
          "type": "string",
          "description": "Paragraph number, e.g. '199'. Superscript sections are addressed as '43-1' or '43¹' (§ 43¹) - these are DIFFERENT provisions from § 43. A full citation like '§ 430 lg 1' is also accepted; the lõige is ignored. A bare second number ('43 1') is rejected as ambiguous rather than silently read as § 43."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • law_versions reads unknown 2h ago

    List an act's redaktsioonid (consolidated versions) with their validity ranges, newest first. Use this to answer 'what did this say on date X' - Estonian law is amended constantly and the current text is often not the one that applied to the facts.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "abbrev"
      ],
      "properties": {
        "abbrev": {
          "type": "string",
          "description": "Act abbreviation, e.g. 'TsMS'."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • fetch reads unknown 5h ago

    Retrieve the full text + metadata for any `id` returned by `search`. Handles all three kinds: `ruling:<n>` (a court decision with its linked companies), `law:<n>` (an act in its current redaktsioon, all paragraphs) and `section:<n>:<par>` (a single paragraph - prefer this over pulling a whole act). Returns Markdown plus the canonical lahend.ee URL.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Typed id from `search`: 'ruling:1279503', 'law:12345' or 'section:12345:199'."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • search_law_sections reads unknown 30h ago

    Full-text search across the paragraphs of every in-force Estonian act (4M+ sections). Answers 'which provision governs X' directly, returning the paragraphs themselves rather than acts you then have to read. Each hit carries a `section:` id for `fetch`.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Max results (default 8)."
        },
        "query": {
          "type": "string",
          "description": "A legal term or phrase, e.g. 'pankrotiavaldus', 'ehitusluba', 'töölepingu ülesütlemine'."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • eu_act reads unknown 33h ago

    Fetch an EU regulation or directive by CELEX (e.g. '32016R0679' for the GDPR), article by article, in Estonian. Also reports how many Estonian court decisions cite it and which articles they lean on - the part EUR-Lex cannot answer.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "celex"
      ],
      "properties": {
        "celex": {
          "type": "string",
          "description": "CELEX number, e.g. '32016R0679'. Sector 3 acts only."
        },
        "article": {
          "type": "string",
          "description": "Return only this article, e.g. '5'."
        }
      },
      "additionalProperties": false
    }
    arguments 18 lines
  • search_laws reads unknown 33h ago

    Find Estonian acts by title or abbreviation (KarS, TsMS, VÕS…). Returns each act with a `law:` id for `fetch`, its type, issuer and whether it is still in force. Use get_law_section when you already know the paragraph you want.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Max results (default 10)."
        },
        "query": {
          "type": "string",
          "description": "Title fragment or abbreviation."
        },
        "inForceOnly": {
          "type": "boolean",
          "description": "Only acts currently in force (default true)."
        }
      },
      "additionalProperties": false
    }
    arguments 24 lines
  • authority_documents_for_ruling reads unknown 5h ago

    Given a ruling id, return documents from Estonian public-authority document registers that name the same companies - procurement files, licences, correspondence, inspections. A court dispute and an authority's file about the same company are the two halves nobody normally sees together. Sourced from dokumendiregister.ee. This depends on the ruling having a company linked to it, which holds for about 19% of the corpus: parties are extracted from the decision text by registry code, and a judgment that names a company without its code yields no link. An empty list therefore means either no linked company or no matching documents - it is not evidence that no authority holds a file.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ruling id, e.g. 'ruling:1279503'."
        },
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Max documents (default 8)."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
  • eu_law_search reads unknown 5h ago

    Search EU regulations and directives, and Court of Justice / European Court of Human Rights judgments, by Estonian title or case number. The corpus is Estonian-language throughout: 94% of the Court of Justice's output is translated into Estonian, and essentially nothing indexes it in Estonian. Returns ids usable with eu_law_fetch.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 30,
          "minimum": 1
        },
        "query": {
          "type": "string",
          "description": "Estonian title words, or a case number such as 'C-362/14'."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • rulings_by_company reads unknown 41h ago

    Given an 8-digit Estonian registry code (registrikood), return every court decision that names that company, with its role (claimant/defendant/etc.) and the other parties. This company↔case-law join is unique to lahend.ee. Find a registry code via nimistu.ee or the nimistu MCP.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "reg_code"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        "reg_code": {
          "type": "string",
          "description": "8-digit Estonian company registry code, e.g. '16887028'."
        }
      },
      "additionalProperties": false
    }
    arguments 19 lines
  • rulings_citing_section reads unknown 41h ago

    Given an act abbreviation and a §, return the court decisions that actually cite it, newest first, with a total count. Built from 3.05M citations extracted from the decision texts themselves. This answers 'how have the courts applied KarS § 199' - the question statute text alone cannot answer, and the reason to use lahend.ee over reading Riigi Teataja.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "abbrev",
        "paragrahv"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Max rulings returned (default 10)."
        },
        "abbrev": {
          "type": "string",
          "description": "Act abbreviation as cited: KarS, TsMS, VÕS, PankrS…"
        },
        "paragrahv": {
          "type": "string",
          "description": "Paragraph number, e.g. '199'. A full citation is accepted; the lõige is ignored."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • eu_law_cited_by_ruling reads unknown 30h ago

    Given an Estonian ruling id (from `search`), list the EU instruments it cites - regulations, directives and Court of Justice judgments - with the articles named where the decision names them.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ruling id, e.g. 'ruling:1279503'."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • sections_cited_by_ruling reads unknown 30h ago

    Given a ruling id (from `search`), list the statute paragraphs it cites, with the lõiked named and each § resolved to its act. Use it to see the legal basis of a decision without reading the whole judgment, then `fetch` a `section:` id for the provision text.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Ruling id, e.g. 'ruling:1279503'."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • estonian_rulings_citing_eu_law reads unknown 2h ago

    Given a CELEX (an act like '32016R0679', or a Court of Justice judgment like '62014CJ0362'), return the Estonian court decisions that cite it. This is the join no other source publishes: EUR-Lex knows the EU instrument, Riigi Teataja knows the Estonian decision, and nobody connects them.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "celex"
      ],
      "properties": {
        "celex": {
          "type": "string",
          "description": "CELEX of an EU act or judgment."
        },
        "limit": {
          "type": "integer",
          "maximum": 50,
          "minimum": 1
        },
        "article": {
          "type": "string",
          "description": "Only decisions citing this article of the act."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
  • search reads unknown 33h ago

    Full-text search across Estonian LAW - both court decisions (civil, administrative and criminal rulings) and legislation (acts and their individual paragraphs), from Riigi Teataja, indexed by lahend.ee. Inflection-tolerant; wrap a phrase in "quotes" for an exact match. Every result carries a stable typed `id` - `ruling:<n>`, `law:<n>` or `section:<n>:<par>` - which `fetch` resolves. Use this when you need the legal position on something and do not yet know whether the answer is in a statute or in case law.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "maximum": 25,
          "minimum": 1,
          "description": "Max results (default 10)."
        },
        "query": {
          "type": "string",
          "description": "Legal terms, a case number, a party/company name, or a \"quoted phrase\"."
        }
      },
      "additionalProperties": false
    }
    arguments 20 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id d4d4fda11dbca538.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/d4d4fda11dbca538/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/d4d4fda11dbca538/badge.svg)](https://brick.blue/agent/d4d4fda11dbca538?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.