Skip to main content
Glama

mcp-nsa

Installation (one command)

Published on npm + the MCP Registry (io.github.matematicsolutions/mcp-nsa). Run without cloning:

npx -y @matematicsolutions/mcp-nsa

MCP client configuration (stdio):

{ "mcpServers": { "mcp-nsa": { "command": "npx", "args": ["-y", "@matematicsolutions/mcp-nsa"] } } }

(Building from source - below.)

MCP License: MIT Node

MCP server for the case law of the Polish administrative courts - Naczelny Sad Administracyjny / NSA (Supreme Administrative Court) + 16 Wojewodzkie Sady Administracyjne / WSA (regional administrative courts) - via CBOSA (Centralna Baza Orzeczen Sadow Administracyjnych - the administrative courts' central case-law database) (orzeczenia.nsa.gov.pl).

Related MCP server: mcp-isap

Why

SAOS (the common-courts case-law analysis system) does not index the administrative courts. Yet that is exactly where the substantive case law lives:

  • GDPR / data protection - decisions of the President of UODO appealed to the WSA, cassation appeals to the NSA

  • Taxes - individual tax rulings, decisions of tax authorities

  • Customs and excise

  • Administrative permits, concessions

  • Review of public-administration activity

mcp-nsa closes this gap. Coverage: 2,390,000+ rulings (verified live 2026-07-08 across the full date range), from 1981 to today.

Tools

  • search(query, caseNumber?, court?, dateFrom?, dateTo?, pageNumber?)

    • search by keyword, case number, court, date. Fetches the top 5 full rulings (case number, court, date, panel, keywords, legal basis, excerpt).

  • get_judgment(doc_id) - full ruling by 10-character hex doc_id (from the CBOSA URL, e.g. 7E50984BB7).

  • search_by_case(caseNumber) - shortcut: search by case number (e.g. III OSK 1377/23, I SA/Gl 659/22).

Every response contains structuredContent.citations with the fields: title, url (CBOSA), case_number, court, judgment_date, decision_type, snippet, doc_id. Patron reads this field automatically and surfaces it in the UI panel as the section "Rulings from CBOSA (NSA / WSA - administrative courts)".

Stack

  • Node 18+

  • @modelcontextprotocol/sdk

  • Stdio transport

  • https + regex HTML parser (zero external deps beyond the SDK)

  • 500 ms throttle between requests (2 req/s)

  • SSL: rejectUnauthorized: false - the CBOSA chain is sometimes incomplete on some machines; public rulings, no PII, MITM risk negligible against the benefit. See: LDH issue #167.

Build + run

npm install
npm run build
node dist/index.js   # starts the server on stdio

Wiring into Patron

In patron/backend/mcp-servers.json (alongside mcp-saos and mcp-eu-sparql):

{
  "name": "nsa",
  "transport": "stdio",
  "command": "node",
  "args": ["C:/Users/<YOUR-USERNAME>/mcp-nsa/dist/index.js"],
  "enabled": true
}

Smoke test

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"s","version":"0"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search","arguments":{"query":"RODO art 6"}}}' \
  | node dist/index.js

Should return ~1500 hits + the top 5 with Polish NSA/WSA case numbers + CBOSA URLs

  • structuredContent.citations.

Lineage

Implementation rewritten in TypeScript on the basis of the HTTP/HTML contract from legal-data-hunter/sources/PL/NSA (Python + BeautifulSoup, MIT). It does not import the source code - it reproduces the query pattern and HTML parsing.

License

MIT.

Part of MateMatic

This connector queries its source live. It is one of the Polish and EU source connectors bundled in PATRON and works with any MCP client.

mcp-saos, mcp-nsa, mcp-isap, mcp-krs and mcp-eu-sparql share one structuredContent.citations contract: each tool returns an array of {title, url, snippet?, ...metadata} that legal agents can render directly in their citation panel.

See matematicsolutions/.github for the full org profile.

Available Tools

3 tools
get_judgmentA
Read-onlyIdempotent

Pobiera pelne orzeczenie z CBOSA po jego doc_id (10-znakowy hex). Zwraca metadane (sygnatura, sad, data, sklad, hasla tematyczne, podstawe prawna, typ orzeczenia) + pierwsze 2000 znakow tresci (sentencja + uzasadnienie). doc_id pochodzi z wynikow narzedzia 'search'.

Inputs: doc_id (required).

search_by_caseA
Read-onlyIdempotent

Skrot: szuka orzeczenia po sygnaturze. Odpowiednik search z parametrem caseNumber. Jesli orzeczenie nie znajdzie sie - sygnatura moze byc z sadu powszechnego/SN/TK/KIO (uzyj wtedy saos__search_by_case).

Inputs: caseNumber (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 3 tools

    Disambiguation4/5

    Tools are mostly distinct: search for general queries, search_by_case for case number lookup, and get_judgment for full retrieval by ID. The only minor overlap is that search_by_case is described as a shortcut for search with a case number, which could cause slight confusion but is clearly documented.

    Naming Consistency5/5

    All tool names use a consistent snake_case pattern with verbs (get, search) followed by nouns or qualifiers. The naming is uniform and predictable across the set.

    Tool Count4/5

    With 3 tools covering search, retrieval, and case-specific lookup, the set is minimal but reasonable for a focused legal database. The scope is narrow (administrative courts), so no heavy tool count is needed.

    Completeness3/5

    The tools cover basic search and retrieval, but notable gaps exist: lack of filtering by date, court level, or other metadata in search, and get_judgment only returns the first 2000 characters, limiting full-text access. Agents may need workarounds for deeper queries.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers