mcp-eureka
This server provides access to 550,000+ Polish tax practice documents from the Ministry of Finance's EUREKA system, enabling search and retrieval of tax interpretations and related documents.
search— Full-text search with flexible filters: keyword/phrase queries, document signature (full or prefix), category IDs, date range (date_from/date_to), and pagination. Results are sorted by issue date descending.get_interpretation— Retrieve a complete document by numeric ID, including metadata (signature, category, dates), legal thesis, and the first 3,000 characters of content (HTML stripped to plain text).search_by_signature— Shortcut to quickly find a document by its full or partial signature without using the full search interface.list_categories— Retrieve the dictionary of 28 document categories (id → name), covering individual interpretations (517,000+), general interpretations, tax explanations, WIS (binding rate information), WIA (binding excise information), and more — used as filters insearch.
Every response includes structured citation metadata (title, URL, signature, issue date) for traceability.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-eurekafind interpretation on VAT for software"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-eureka
An MCP (Model Context Protocol) server for the EUREKA system of the
Ministerstwo Finansow / MF (Ministry of Finance) (eureka.mf.gov.pl) -
550,000+ documents of Polish tax practice, including 517,000+ individual
interpretacje podatkowe (tax interpretations) of the Krajowa Informacja
Skarbowa / KIS (National Revenue Information), general interpretations, tax
explanations, and binding rate (WIS) and excise (WIA) information.
The largest single corpus of tax practice in Poland, available to Claude / Cursor / VS Code MCP agents with verifiable citations (signature + URL + date).
Status: v0.1.0 | License: MIT | Maintainer: MateMatic
Tax interpretations are not a source of law - they are the practice of authorities (art. 14a-14s of the Tax Ordinance). Legal protection applies to the applicant of a given individual interpretation.
Data source
The public JSON API of the EUREKA portal (Angular SPA backend, no key required), verified live on 2026-07-08:
POST /api/public/v1/wyszukiwarka/informacje/?size=N&page=N&sort=DT_WYD,desc- search (filters:SYG,KATEGORIA_INFORMACJIas an array of ids,DT_WYD_start/DT_WYD_end;searchQueryin the body). The trailing slash before?is mandatory - without it the backend returns HTTP 500.GET /api/public/v1/informacje/{id}- full document (metadata + HTML content).GET /api/public/v1/pozycje-slownika/wyszukiwarka?kodSlownika=KATEGORIA_INFORMACJI- category dictionary (28 entries).
Related MCP server: mcp-nsa
MCP tools
search(query?, full_phrase?, signature?, category_ids?, date_from?, date_to?, page?, page_size?)- search with filters; sorted by issue date descending.get_interpretation(id)- full document by ID_INFORMACJI (thesis + first 3000 characters of content).search_by_signature(signature)- shortcut: by signature, full (0112-KDIL3.4012.367.2026.2.AK) or prefix (0112-KDIL3).list_categories()- category dictionary (id -> name) forcategory_ids.
Every response includes structuredContent.citations (title, url, signature,
issue_date) - the contract consumed by Patron
and any MCP agent.
Quickstart
npm install
npm run build
npm start # stdio transport
npm run drift # consistency INSTRUCTIONS <-> TOOLS <-> ErrorCode
npm run test:parse # offline - fixtures from real API responses
npm run smoke # LIVE - eureka.mf.gov.pl (throttled 2 req/s)MCP client configuration (mcp-servers.json):
{
"mcpServers": {
"eureka": {
"command": "node",
"args": ["<path>/mcp-eureka/dist/index.js"]
}
}
}MateMatic Polish-law connectors
mcp-saos (common courts/SN/TK/KIO) ·
mcp-nsa (NSA + 16 WSA) ·
mcp-eureka (this one) ·
mcp-isap (Dz.U. + M.P.) ·
mcp-krs (KRS) ·
kio-orzeczenia-mcp (KIO)
Fleet convention: one connector = one source (single-source). Every call returns a citable source, zero content modification, stateless.
Disclaimer
The data comes from the public EUREKA system of the Ministry of Finance. The connector does not modify content, throttles requests (max 2 req/s), and identifies itself with a User-Agent carrying the repo address. Interpreting the law in a specific case requires your own individual interpretation or the opinion of a tax advisor.
License
MIT - see LICENSE.
Citation: MateMatic Solutions (2026), mcp-eureka - MCP server for Polish tax interpretations (EUREKA/KIS), https://github.com/matematicsolutions/mcp-eureka, MIT.
Available Tools
4 toolsget_interpretationARead-onlyIdempotent
Pobiera pelny dokument EUREKA po ID_INFORMACJI (z wynikow 'search'). Zwraca metadane (sygnatura, kategoria, daty), teze i pierwsze 3000 znakow pelnej tresci (HTML odarty do tekstu). Bledy: missing_arg (brak id), not_found (id poza baza), upstream_error.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Numeryczne ID_INFORMACJI, np. 698723 lub '698723'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds valuable behavioral details: it returns only the first 3000 characters of the full content (truncation), HTML is stripped to text, and error conditions are listed. This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and input, then details output and errors. Every sentence adds necessary information with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with one parameter and no output schema, the description covers the essential aspects: what it does, what input it expects, what it returns (including truncation), and possible errors. The absence of output schema is compensated by describing return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (one parameter with description). The description adds a format hint (numeric ID can be string or number) and ties it to the concept of ID_INFORMACJI from search results, but the schema already covers meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a full EUREKA document by ID, listing specific returned fields (metadata, thesis, first 3000 chars of content). It distinguishes itself from sibling tools (search returns summaries, not full documents) by specifying the input source (from search results).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states the tool is used after obtaining an ID from 'search' results, and lists three error types (missing_arg, not_found, upstream_error). It does not explicitly mention when not to use it, but context implies it's for full document retrieval after search, which is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesARead-onlyIdempotent
Zwraca slownik kategorii dokumentow EUREKA (id -> nazwa, 28 pozycji): interpretacje indywidualne/ogolne, objasnienia podatkowe, WIS, WIA, orzeczenia sadow itd. Uzyj id w parametrze category_ids narzedzia search. Bledy: upstream_error.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the annotations by specifying the return format (dictionary with 28 items) and potential error type ('upstream_error'). The annotations already cover read-only, idempotent, and non-destructive behavior, so the description complements them well.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence stating the purpose, usage hint, and error note. No superfluous information. It front-loads the key action and is well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description covers all essential information: what is returned (dictionary, size 28, content examples), how to use the result (in search), and error handling (upstream_error). It is fully complete for this tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so the description's explanation of the output (dictionary mapping IDs to names) and its purpose (feeding into search) adds meaning. With zero parameters, the baseline is 4, and the description fulfills this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns a dictionary of EUREKA document categories (id to name) with 28 items, listing examples. It specifies the verb 'returns' and the resource 'categories'. While it does not explicitly distinguish from sibling tools, it mentions usage in search, providing context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use the tool: to obtain category IDs for the search tool's category_ids parameter. This gives clear context. However, it does not mention when not to use it or provide alternatives, so it misses explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Przeszukuje EUREKA (eureka.mf.gov.pl) - 550 000+ dokumentow praktyki podatkowej Ministerstwa Finansow i KIS: interpretacje indywidualne (517 000+), interpretacje ogolne, objasnienia podatkowe, WIS, WIA. Fraza (query) szuka slow niezaleznie; filtry: sygnatura (takze prefiks), kategoria (category_ids ze slownika list_categories), zakres dat wydania. Wyniki sortowane data wydania malejaco. Bledy: invalid_filter (zly filtr), upstream_error (HTTP/timeout).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Numer strony (od 0). Do paginacji. | |
| query | No | Fraza wyszukiwania, np. 'fotowoltaika' albo 'ulga badawczo-rozwojowa'. | |
| date_to | No | Data wydania do (YYYY-MM-DD). | |
| date_from | No | Data wydania od (YYYY-MM-DD). | |
| page_size | No | Liczba wynikow na strone (1-50). Domyslnie 10. | |
| signature | No | Sygnatura dokumentu, pelna ('0112-KDIL3.4012.367.2026.2.AK') lub prefiks ('0112-KDIL3'). | |
| full_phrase | No | true = fraza musi wystapic DOKLADNIE (czesto 0 trafien); false (domyslnie) = slowa niezaleznie. | |
| category_ids | No | Id kategorii ze slownika (list_categories). Np. [1] = interpretacja indywidualna, [3] = interpretacja ogolna, [11] = objasnienia podatkowe. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and not destructive, so the description adds behavior like sorting by date descending and error types ('invalid_filter', 'upstream_error'), which is helpful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but every sentence adds value. It front-loads the database name and document counts, then details filters, sorting, and errors. Could be slightly more concise, but no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters with 100% schema coverage, no output schema, and no nested objects, the description adequately explains usage context including search behavior, sorting, and errors. It covers the complexity well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all parameters with descriptions, but the tool description adds critical context like prefix matching for signature, the meaning of full_phrase, and that category_ids come from list_categories. This provides value beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the EUREKA database of Polish tax documents, specifies the document types and counts, and distinguishes from siblings like search_by_signature which is signature-specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied for general text search with filters, but there is no explicit guidance on when to use this vs siblings like get_interpretation or list_categories. No when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_by_signatureARead-onlyIdempotent
Skrot: szuka dokumentu po sygnaturze (pelnej lub prefiksie). Odpowiednik search z parametrem signature. Bledy: missing_arg (brak signature), upstream_error.
| Name | Required | Description | Default |
|---|---|---|---|
| signature | Yes | Sygnatura, np. '0112-KDIL3.4012.367.2026.2.AK' albo prefiks '0114-KDIP2'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds that it is a shortcut and lists possible errors, which provides some additional context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise two-sentence description that is front-loaded with purpose and includes equivalent tool reference and error types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, description covers purpose, usage, and errors adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. Description adds meaning by explaining 'full or prefix' and providing an example parameter value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool searches for documents by signature (full or prefix). Distinguishes from sibling 'search' by being a shortcut with signature parameter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it is equivalent to search with signature parameter, providing clear use context. Mentions error types but does not explicitly state when not to use.
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.
4 tool updates
v0.1.0- First observed
get_interpretation - First observed
list_categories - First observed
search - First observed
search_by_signature
TDQS
Tools are mostly distinct: search by query, search_by_signature is a convenient shortcut, get_interpretation for full document, list_categories for filter options. However, search_by_signature overlaps with search with a signature parameter, which could cause confusion about which to use.
All tool names follow a consistent snake_case verb_noun pattern: get_interpretation, list_categories, search, search_by_signature. The naming is clear and predictable.
4 tools are appropriate for the server's purpose: searching and retrieving tax interpretation documents. The set is well-scoped without unnecessary bloat.
Covers core read-only operations: searching with filters, retrieving full content, and category listing. Missing pagination support for search results and full content retrieval beyond 3000 characters, but these are minor for typical use.
Maintenance
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
MCP server for 3M+ Polish companies — KRS & CEIDG financials, ownership, and industry search.
TED MCP Server: Real-time EU public tenders access. https://www.lexsocket.ai/
Eurlex MCP client: Access EU law & Official Journal. https://www.lexsocket.ai/
Polish company registry: 4.4M firms, KRS/REGON data, VAT white list checks, financial statements
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server that provides access to Polish individual tax interpretations (KIS) via the official EUREKA API, enabling search and retrieval of rulings with signatures, theses, and full text.44MIT
- AlicenseAqualityCmaintenanceMCP server for Polish administrative case-law (NSA + regional administrative courts, CBOSA) with ECLI and verifiable citations.6387MIT
- AlicenseAqualityAmaintenanceMCP server for Polish legislation (ISAP / Sejm) — search acts (Dz.U., M.P.) and fetch full texts with ELI identifiers and verifiable citations.31081MIT
- FlicenseAqualityCmaintenanceMCP server for searching and retrieving contracts from the Polish Central Register of Contracts (CRU) via its API.2-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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-eureka'
If you have feedback or need assistance with the MCP directory API, please join our Discord server