Skip to main content
Glama
README.md
# sk-eli-mcp

<!-- mcp-name: io.github.matematicsolutions/sk-eli-mcp -->

An MCP server for the Slovak **Collection of Laws** (Zbierka zákonov) via **static.slov-lex.sk**,
the JavaScript-free static mirror of the Slov-lex portal. It fetches Slovak legislation and its
consolidated versions, 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, HR and LT. Same citation contract, Slov-lex source. Slovakia implements ELI (Pillar I).

> **Scope.** This MVP lists an act's consolidated versions, returns metadata, and fetches the full
> text of a version. Acts are addressed by year + number; the portal is path-based, not keyword
> search. Coverage 1918-present. Language: Slovak. Every response carries a `dataset_note`.
>
> **ELI is national (Pillar I), not data.europa.eu.** The static pages carry no machine-readable
> ELI metadata, so `eli_uri` is the canonical Slov-lex URL
> (`slov-lex.sk/pravne-predpisy/SK/ZZ/{year}/{number}`), the stable national identifier. Full text
> is served from the `static.slov-lex.sk` mirror (`source_url`). Every response carries an
> `eli_note`.
>
> **Text is extracted from the official HTML.** Slov-lex serves the consolidated text as HTML;
> `sk_get_text` extracts the plain text from the act container.

## The tools

| Tool | What it does |
|---|---|
| `sk_get_versions` | List an act's consolidated versions (effective dates, amending act). |
| `sk_get_act` | Metadata for an act by year + number, plus the current in-force version. |
| `sk_get_text` | Full text of an act version (default: the current in-force version). |
| `sk_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 Slov-lex URL, e.g.
`https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/2018/18/`), `human_readable_citation`
(e.g. `č. 18/2018 Z. z.`), and `source_url`.

## Install

As a Claude plugin (Claude Code or the desktop app, needs [uv](https://docs.astral.sh/uv/));
see [plugin/README.md](plugin/README.md) for what it sends and stores:

```
/plugin marketplace add matematicsolutions/sk-eli-mcp
/plugin install sk-eli-mcp@sk-eli-mcp
```

As a standalone server, from PyPI:

```bash
uvx sk-eli-mcp
```

Or from source:

```bash
cd sk-eli-mcp
pip install -e .
```

## Configure (Claude Code / any MCP client)

```json
{
  "mcpServers": {
    "sk-eli-mcp": { "command": "sk-eli-mcp" }
  }
}
```

### Windows 11 with Smart App Control

Smart App Control blocks unsigned executables, which covers `uvx.exe`, `pip.exe`
and the `sk-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:

```bash
python -m pip install sk-eli-mcp
python -m sk_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 sk_eli_mcp`.

```json
{ "mcpServers": { "sk-eli-mcp": { "command": "python", "args": ["-m", "sk_eli_mcp"] } } }
```

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

Environment:

- `SK_ELI_BASE_URL` - default `https://static.slov-lex.sk`
- `SK_ELI_CACHE_DIR` - default `~/.matematic/cache/sk-eli`
- `SK_ELI_AUDIT_DIR` - default `~/.matematic/audit`

No API key. The Slov-lex static mirror is keyless.

## Governance

- **Public data only** - read-only against Slov-lex; no client data leaves the machine.
- **Audit log** - every tool call appends one JSON line to `~/.matematic/audit/sk-eli-mcp.jsonl`.
- **Network** - the server talks to `static.slov-lex.sk` and the local filesystem. Once, on
  first use, it also fetches a small configuration file (`sk-runtime.json.gz`, updated source
  addresses) from this repository's GitHub Releases. That request carries no query content;
  GitHub's download counter for the file is the only usage signal we see.
  `SK_ELI_RUNTIME_URL=""` turns it off; the Claude plugin ships with it off. No LLM provider,
  no other telemetry.
- **Verifiable citations** - every response is independently checkable via `source_url`.

See `CONSTITUTION.md` and `DISCOVERY.md`.

## Tests

```bash
pip install -e ".[dev]"
pytest tests/test_instructions_drift.py tests/test_parse.py -v   # offline
pytest tests/test_smoke.py -v                                    # hits live Slov-lex
```

## Licence

Apache-2.0. © Matematic Solutions / Wieslaw Mazur.

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing versions, fetching metadata, retrieving text, and declaring coverage gaps. There is no meaningful overlap or ambiguity between the four tools.

Naming Consistency4/5

Three tools follow a consistent sk_get_* verb pattern, and all share the sk_ prefix. sk_coverage breaks the pattern by using a noun instead of a verb, making the set slightly less uniform.

Tool Count5/5

Four tools is well-scoped for a focused Slovak legal act retrieval connector. Each tool serves a distinct need without redundancy or unnecessary bloat.

Completeness5/5

The tool set covers the core lifecycle of accessing Slovak acts: retrieve act metadata, list consolidated versions, fetch full text, and know exactly what the connector does not cover. The explicit coverage tool fills potential gaps rather than leaving agents stranded.

Maintenance

ActivityNo data
ResponsivenessUnresponsive