Skip to main content
Glama

lt-eli-mcp

An MCP server for the Lithuanian Register of Legal Acts (TAR) via the data.gov.lt open-data API. It searches Lithuanian legislation by title and fetches full text, with verifiable citations.

Part of the MateMatic eu-legal-mcp production line - after PL, DE, AT, ES, FI, IE, NL, SE, FR, LU, DK, CZ and HR. Same citation contract, TAR source. This connector reads a REST-JSON open-data API (the data.gov.lt Spinta endpoint).

Scope. This MVP searches acts by title substring, returns metadata, and fetches the full Lithuanian text. ~CC BY 4.0 open data; acts are addressed by their TAR code (tar_kodas). Language: Lithuanian. Every response carries a dataset_note.

ELI is national, not data.europa.eu. Lithuania has no data.europa.eu ELI for the TAR dataset. eli_uri carries the canonical e-tar.lt legalAct URL (the stable national identifier), which is also the source_url. Every response carries an eli_note saying so.

The tools

Tool

What it does

lt_search

Find acts whose title contains a substring (optionally by type).

lt_get_act

Metadata for an act by its TAR code.

lt_get_text

Full Lithuanian text of an act by its TAR code.

lt_coverage

Declare what this connector covers, when each family was captured, and - explicitly - what it does NOT cover. Every gap carries a fallback.

Every response carries the contract: eli_uri (the e-tar.lt URL, e.g. https://e-tar.lt/portal/lt/legalAct/...), human_readable_citation (title + official number), and source_url.

Related MCP server: Estonian Law MCP Server

Install

Run it with no install step (once published to PyPI):

uvx lt-eli-mcp

Or from source:

cd lt-eli-mcp
pip install -e .

Configure (Claude Code / any MCP client)

{
  "mcpServers": {
    "lt-eli-mcp": { "command": "lt-eli-mcp" }
  }
}

Windows 11 with Smart App Control

Smart App Control blocks unsigned executables, which covers uvx.exe, pip.exe and the lt-eli-mcp.exe launcher that pip writes at install time. The python.exe and py.exe from the python.org installer are signed by the Python Software Foundation, so running the module through the interpreter works:

python -m pip install lt-eli-mcp
python -m lt_eli_mcp

pip.exe is blocked for the same reason, so install with python -m pip, not pip install. If python is not on PATH, use the Windows launcher: py -3 -m lt_eli_mcp.

{ "mcpServers": { "lt-eli-mcp": { "command": "python", "args": ["-m", "lt_eli_mcp"] } } }

Do not turn Smart App Control off to work around this - it cannot be re-enabled without reinstalling Windows.

Environment:

  • LT_ELI_BASE_URL - default https://get.data.gov.lt

  • LT_ELI_CACHE_DIR - default ~/.matematic/cache/lt-eli

  • LT_ELI_AUDIT_DIR - default ~/.matematic/audit

No API key. The data.gov.lt open-data API is keyless.

Governance

  • Public data only - read-only against data.gov.lt; no client data leaves the machine.

  • Audit log - every tool call appends one JSON line to ~/.matematic/audit/lt-eli-mcp.jsonl.

  • Vendor-neutral - talks only to get.data.gov.lt; no LLM provider, no telemetry.

  • Verifiable citations - every response is independently checkable via source_url.

See CONSTITUTION.md and DISCOVERY.md.

Tests

pip install -e ".[dev]"
pytest tests/test_instructions_drift.py tests/test_parse.py -v   # offline
pytest tests/test_smoke.py -v                                    # hits live data.gov.lt

Licence

Apache-2.0. © Matematic Solutions / Wieslaw Mazur. TAR data is CC BY 4.0; relayed with attribution and a source_url.

Available Tools

4 tools
lt_coverageA
Read-onlyIdempotent

Declare what this connector covers, how it is sourced, and what it does NOT cover.

Call this before telling a user that the law "does not contain" something, and whenever a search comes back empty: the absence may be a gap in this connector rather than in the law. Every gap carries a fallback saying where to look instead.

Returns: Coverage with families, an as-of note, and a non-empty list of known gaps.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNo
familiesNo
as_of_noteYesStates what the dates mean, and what they do not promise.
known_gapsNoNever empty. An empty list would mean 'not checked', not 'no gaps'.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool read-only, idempotent, and open-world; the description adds meaningful context about sourcing, known gaps, and the fact that empty results may reflect connector gaps rather than the law. No contradiction with annotations.

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 blocks: what it does, when to call it, and what it returns. Every sentence earns its place and the usage trigger is front-loaded before the return format.

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 zero-parameter tool with rich annotations and an output schema, the description covers purpose, timing, gap behavior, fallback, and return shape. Nothing essential is missing for an agent to select and invoke it correctly.

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 tool has zero parameters and the schema is fully covered, so there are no parameter semantics to explain. The description's references to families, as-of note, and gaps are return-value details, not parameters. Baseline 4 for a 0-param tool.

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 states a specific purpose: declare what the connector covers, how it is sourced, and what it does not cover. It distinguishes itself from sibling search/retrieval tools by focusing on coverage gaps and fallbacks, not legal content.

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 explicit when-to-use guidance: call before telling a user the law 'does not contain' something and whenever a search comes back empty. It does not name sibling alternatives or explicit when-not-to-use conditions, so it stops short of a 5.

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

lt_get_actA
Read-onlyIdempotent

Fetch Lithuanian act metadata by its TAR code.

ParametersJSON Schema
NameRequiredDescriptionDefault
tar_kodasYese.g. ``"2014-21296"`` (from ``lt_search``).

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleNo
numberNo
eli_uriNo
eli_noteNo
validityNo
tar_kodasNo
source_urlNo
dataset_noteNo
date_adoptedNo
document_typeNo
date_publishedNo
human_readable_citationNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive. The description adds the boundary that it fetches 'metadata' (not full text), which is useful, but does not disclose any additional behavioral traits like output format, rate limits, or error conditions. Consistent with annotations, no contradiction.

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?

A single, front-loaded sentence conveys the core purpose without filler. Every word contributes, making it highly concise and well-structured.

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?

Given the simple one-parameter schema, strong annotations, and presence of an output schema, the description is adequate. It communicates the essential scope (metadata by TAR code) and the structured fields cover the rest, forming a complete picture for this tool.

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% with a well-described parameter (tar_kodas) including an example and origin from lt_search. The description mentions the TAR code but adds no semantic detail beyond the schema, so 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 description uses a specific verb ('Fetch') and resource ('Lithuanian act metadata') and highlights the key ('TAR code'). It clearly distinguishes from siblings like lt_search and lt_get_text by focusing on metadata retrieval by identifier.

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?

No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, exclusions, or relationship to sibling tools. The schema's parameter description hints at lt_search but the main description lacks explicit usage direction.

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

lt_get_textA
Read-onlyIdempotent

Fetch the full Lithuanian text of an act by its TAR code.

ParametersJSON Schema
NameRequiredDescriptionDefault
tar_kodasYese.g. ``"2014-21296"``.

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleNo
formatNo
contentNo
eli_uriNo
eli_noteNo
byte_sizeNo
tar_kodasNo
source_urlNo
dataset_noteNo
human_readable_citationNo

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context by specifying that it fetches the 'full Lithuanian text' (not a summary), which helps set expectations. It doesn't contradict annotations.

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 a single, complete sentence that is front-loaded with the action ('Fetch') and resource. No filler or redundant words. It is concise and well-structured.

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 simple, single-parameter tool with comprehensive annotations and an output schema, the description provides sufficient context. It clearly states what the tool does and what input is needed. The output schema handles return-value details, so no further explanation is required.

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 parameter 'tar_kodas' is documented with an example. The description mentions 'by its TAR code', which aligns with the schema but does not add extra semantic meaning beyond what the schema already provides. 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 description uses the specific verb 'Fetch' with a clear resource ('full Lithuanian text of an act') and the key identifier ('by its TAR code'). This clearly distinguishes it from siblings like lt_search (searching) and lt_get_act (retrieving an act, likely metadata).

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?

The description implies the use case: when you need the full text of an act given a TAR code. However, it does not explicitly state when to prefer this over lt_get_act or lt_search, nor does it mention any exclusions or alternatives. The guidance is implied rather than explicit.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 1 tool updatev0.3.3
    • Addedlt_coverage
  2. 3 tool updatesv0.2.1
    • First observedlt_get_act
    • First observedlt_get_text
    • First observedlt_search

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct function: search by title, fetch metadata by TAR code, fetch full text by TAR code, and declare coverage. There is no overlap or ambiguity between them.

Naming Consistency4/5

All tools share the lt_ prefix, and three follow a verb_noun pattern (lt_search, lt_get_act, lt_get_text). However, lt_coverage breaks the pattern by being a noun, making the naming slightly inconsistent.

Tool Count5/5

Four tools is well-scoped for a focused legal retrieval server. Each tool covers a distinct and necessary part of the workflow without unnecessary bloat.

Completeness5/5

The set provides a complete retrieval lifecycle: search to find acts, fetch metadata, fetch full text, and a coverage tool that explicitly documents gaps with fallbacks. No obvious dead ends or missing core operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/matematicsolutions/lt-eli-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server