mcp-nsa
This server provides access to 2,390,000+ rulings from Polish administrative courts (NSA + 16 WSA) via the CBOSA database (orzeczenia.nsa.gov.pl), covering case law from 1981 to today.
Search for rulings (
search) — query by keywords (e.g.,RODO art 6,tajemnica skarbowa), returning the top 5 results with metadata: case number, court, date, judicial panel, thematic keywords, legal basis, and a content excerpt.Filter searches — narrow results by court (NSA or any of the 16 regional WSA courts), date range (
dateFrom/dateTo), case number (caseNumber), or page for pagination.Retrieve a full judgment by document ID (
get_judgment) — fetch a complete ruling using its 10-character hexdoc_id, returning full metadata plus up to 2,000 characters of the ruling text.Search by case number (
search_by_case) — a shortcut to find a ruling directly by its case signature (e.g.,III OSK 1377/23,I SA/Gl 659/22).
Every response includes structured citations with fields (title, url, case_number, court, judgment_date, decision_type, snippet, doc_id) for easy integration. Key legal areas covered include GDPR/data protection, tax law, customs, administrative permits, and review of public administration activity.
mcp-nsa
Installation (one command)
Published on npm + the MCP Registry (io.github.matematicsolutions/mcp-nsa). Run without cloning:
npx -y @matematicsolutions/mcp-nsaMCP client configuration (stdio):
{ "mcpServers": { "mcp-nsa": { "command": "npx", "args": ["-y", "@matematicsolutions/mcp-nsa"] } } }(Building from source - below.)
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-saos
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/sdkStdio 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 stdioWiring 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.jsShould 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 the MateMatic legal stack
This server is one of five MCP connectors covering Polish jurisdiction + EU law, used by Patron (AGPL-3.0) and any other MCP-aware legal AI agent.
mcp-nsa (this repo) - NSA + 16 WSA administrative courts (CBOSA)
mcp-saos - common courts, SN, TK, KIO
mcp-isap - Polish legislation (Dz.U. + M.P.)
mcp-krs - Polish company registry (KRS)
mcp-eu-sparql - EU law + CJEU (EUR-Lex)
All five MCP servers share the same 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.
Maintenance
Tools
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mcp-nsa'
If you have feedback or need assistance with the MCP directory API, please join our Discord server