protogrid

Search / io.github.Nimistu/lahend-mcp

lahend.ee — Estonian court decisions

R0· no sign-in

Estonian court decisions: full-text case-law search, each ruling linked to its companies. Free.

v1.0.0 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality85good
Trust90of 100
Uptime, 30 days97%
Latency p50608 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "lahend-mcp": {
      "type": "http",
      "url": "https://lahend.ee/api/lahend-mcp/mcp"
    }
  }
}
claude mcp add --transport http lahend-mcp https://lahend.ee/api/lahend-mcp/mcp
[mcp_servers.lahend-mcp]
url = "https://lahend.ee/api/lahend-mcp/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lahend-mcp": {
      "type": "remote",
      "url": "https://lahend.ee/api/lahend-mcp/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "lahend-mcp": {
      "type": "http",
      "url": "https://lahend.ee/api/lahend-mcp/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=lahend-mcp&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbGFoZW5kLmVlL2FwaS9sYWhlbmQtbWNwL21jcCJ9"
}
{
  "servers": {
    "lahend-mcp": {
      "type": "http",
      "url": "https://lahend.ee/api/lahend-mcp/mcp"
    }
  }
}
{
  "mcpServers": {
    "lahend-mcp": {
      "httpUrl": "https://lahend.ee/api/lahend-mcp/mcp"
    }
  }
}
extensions:
  "lahend-mcp":
    enabled: true
    name: "lahend-mcp"
    type: streamable_http
    uri: "https://lahend.ee/api/lahend-mcp/mcp"
    timeout: 300

Quality 85 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations20 of 20 tools declare readOnlyHint or destructiveHint
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search (destructiveHint, idempotentHint); get_law_section (destructiveHint, idempotentHint); law_versions (destructiveHint, idempotentHint); …
  • pass
    tools.token_costabout 3,380 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

20 tools, about 3,380 tokens to load them all · tool set 89a6e256383b · checked 2026-10-20 11:08 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 90 / 100

provenance90
liveness99
freshness65
hygiene100

+repository +namespace-matches-repo +website +reachable +uptime-97% ~updated-92d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://lahend.ee/api/lahend-mcp/mcp streamable-httpnoneyes97%608 ms2025-11-252026-10-20
https://lahend.ee/api/lahend-mcp/sse sseunknownno (13 failures)0%–––

Tools (20)

authority_documents_for_rulingread-onlyGiven 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.
estonian_rulings_citing_eu_lawread-onlyGiven 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.
eu_actread-onlyFetch 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.
eu_law_cited_by_rulingread-onlyGiven 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.
eu_law_searchread-onlySearch 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.
fetchread-onlyRetrieve 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.
get_law_sectionread-onlyReturn 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.
law_versionsread-onlyList 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.
list_categoriesread-onlyAll 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.
list_courtsread-onlyAll Estonian courts that have published decisions, each with its ruling count. Use a court name as the `court` filter in `search_rulings`.
most_cited_eu_lawread-onlyRanked 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.
most_cited_sectionsread-onlyThe 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.
recent_rulingsread-onlyThe newest published rulings (by decision date), across all courts and areas of law.
rulings_by_companyread-onlyGiven 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.
rulings_citing_sectionread-onlyGiven 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.
searchread-onlyFull-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.
search_lawsread-onlyFind 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.
search_law_sectionsread-onlyFull-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`.
search_rulingsread-onlyFull-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.
sections_cited_by_rulingread-onlyGiven 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.

Schemas: list_tools.

Similar MCP servers

More from io.github.Nimistu

Official server.json
{
  "name": "io.github.Nimistu/lahend-mcp",
  "title": "lahend.ee — Estonian court decisions",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://lahend.ee/api/lahend-mcp/mcp",
      "type": "streamable-http"
    },
    {
      "url": "https://lahend.ee/api/lahend-mcp/sse",
      "type": "sse"
    }
  ],
  "version": "1.0.0",
  "repository": {
    "url": "https://github.com/Nimistu/lahend-mcp",
    "source": "github"
  },
  "websiteUrl": "https://lahend.ee",
  "description": "Estonian court decisions: full-text case-law search, each ruling linked to its companies. Free."
}