e-RUP KNF MCP Server
Click on "Deploy 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., "@e-RUP KNF MCP Serversearch for active payment institutions"
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.
e-RUP KNF MCP Server
TypeScript MCP server that wraps the public KNF e-RUP registry API at https://e-rup.knf.gov.pl/JSON.
License
This project is licensed under the MIT License. See LICENSE.
Related MCP server: KRS Poland MCP Server
Security
To report vulnerabilities, see SECURITY.md.
Requirements
Node.js 18+
npm
Setup
npm installRun
Development:
npm run devBuild + start:
npm run build
npm startMCP Configuration (stdio)
Example MCP client entry:
{
"mcpServers": {
"erup": {
"command": "node",
"args": ["/absolute/path/to/erup2.0-mcp/dist/index.js"]
}
}
}For local development with tsx:
{
"mcpServers": {
"erup-dev": {
"command": "npx",
"args": ["tsx", "/absolute/path/to/erup2.0-mcp/src/index.ts"]
}
}
}Tools
search_entities: Search and filter entity listing with pagination and sorting.get_entity: Full detail record for a single entity id.get_entity_services: Authorized services for an entity by service type.get_entity_agents: Paged agents list for an entity.get_entity_branches: Paged branches list for an entity.get_entity_history: Status history timeline for an entity.list_entity_types: KNF taxonomy list forENT_TYP(cached in memory).get_registry_stats: Count-only query (limit: 0) for optional filters.
Known KNF API Quirks
List filters must use internal codes:
entity_type:PSD_PI,PSD_EPI@BP, ...status:ES_1,ES_2
Using display names like
Wpisanyin list filters returns zero rows without an error.Upstream can return HTTP
200withstatus: "error"in JSON. The server treats this as a failure.SER_LISencodes commas as,; this server decodes values before returning structured service lines.
Testing
Run all local unit tests:
npm testRun opt-in live tests against https://e-rup.knf.gov.pl/JSON:
ERUP_LIVE_TESTS=1 npm run test:liveLive tests are skipped by default unless ERUP_LIVE_TESTS=1.
Quality Gates
npm run lint
npm run typecheck
npm testAvailable Tools
8 toolsget_entityB
Get full details of a single e-RUP entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | Entity ID from search results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavior. It only states the purpose, omitting details like idempotency, error handling, permissions, or what 'full details' entails. For a read operation, the bare minimum is present but insufficient.
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 a single, concise sentence that front-loads the purpose with no wasted words. It is efficient, though it could be slightly expanded without losing conciseness.
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 the tool's simplicity (one param, no output schema) and sibling context, the description adequately covers the core function. However, it lacks details about return values or usage context, making it minimally complete.
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% and the description does not add new meaning. The schema already describes entity_id as 'Entity ID from search results', so the description offers no extra clarity beyond the baseline.
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 verb 'Get' and resource 'full details of a single e-RUP entity', distinguishing it from siblings like get_entity_agents or get_entity_branches which retrieve specific subsets.
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?
No guidance is provided on when to use this tool versus alternatives (e.g., search_entities for finding entities, or specific detail tools). No prerequisites or context for usage are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_agentsC
Get agents associated with an entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | Entity ID | |
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. The phrase 'Get agents' implies a read operation, but it does not clarify idempotency, pagination behavior, or any side effects. The minimal description offers little transparency beyond the name.
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 very short (one sentence), which is concise but under-specified. While it states the purpose, it fails to add value beyond the tool name. The sentence earns its place, but more detail is needed for a tool with three parameters.
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 the tool has three parameters (one required) and no output schema, the description is insufficient. It does not define 'agents', describe the result format, or note any important context (e.g., whether agents are users, bots, or something else). The presence of siblings further highlights the need for differentiation, which is absent.
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 description coverage is low (33%, only entity_id has a description), yet the description adds no parameter-specific information. It does not explain what 'entity_id' represents, how 'limit' and 'offset' control pagination, or any constraints on these parameters.
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 verb 'Get' and the resource 'agents' with context 'associated with an entity'. It distinguishes the tool from its siblings (e.g., get_entity_branches, get_entity_services) by focusing specifically on agents.
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 provides no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or use cases, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_branchesC
Get branches associated with an entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | Entity ID | |
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden but only says 'Get branches associated with an entity.' It does not disclose read-only nature, permissions, or any behavioral constraints beyond the implied read operation.
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 a single, front-loaded sentence with no wasted words. It is efficient, though it could be slightly expanded without losing conciseness.
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 output schema and no annotations, the description is too brief. It fails to explain pagination (limit/offset), response format, or any behavioral details, leaving agents underinformed.
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 description coverage is 33% (only entity_id has a description). The description adds no extra meaning for parameters like limit and offset, which control pagination but are not explained in either schema or description.
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 action 'Get' and the resource 'branches associated with an entity', distinguishing it from sibling tools like get_entity, get_entity_agents, and search_entities.
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?
No guidance on when to use this tool versus alternatives, such as search_entities or get_entity_agents. No context for appropriate usage or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_historyB
Get status history for an e-RUP entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | Entity ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It only states 'Get status history' without specifying read-only nature, permissions, pagination, response format, or limits. This is insufficient for safe agent decision-making.
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 a single sentence with no unnecessary words. It is front-loaded with the verb and resource. Slightly more structure (e.g., mentioning that it returns a list) could improve it, but it is not verbose.
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?
The tool is simple (1 param, no output schema, no annotations), but the description lacks details about what 'status history' includes, the output format, or any constraints. An agent may not know if this returns all history or a summary.
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% for the single parameter entity_id, and the description adds no additional meaning beyond the schema's 'Entity ID'. Baseline 3 is appropriate as the schema already documents the parameter adequately.
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 action (Get) and the resource (status history for an e-RUP entity). It is specific and distinguishes from sibling tools like get_entity which likely returns current state, and get_entity_history is self-explanatory.
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?
No guidance on when to use this tool versus alternatives. With siblings like get_entity and search_entities, the description does not specify when history is needed or what 'status history' entails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_servicesC
Get payment service authorizations for an entity.
| Name | Required | Description | Default |
|---|---|---|---|
| entity_id | Yes | Entity ID | |
| service_type | No | payment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states the basic purpose. It does not disclose whether the operation is read-only, what permissions are required, rate limits, or any side effects. For a tool lacking annotations, the description should provide more behavioral 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?
The description is a single sentence with no unnecessary words. However, it could be slightly more informative without losing conciseness. Overall, it is well-structured for its length.
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 annotations, no output schema, and 2 parameters (one required, one optional with enum), the description is insufficient. It does not explain the return value, how the optional parameter modifies results, or any constraints (e.g., valid entity_id ranges). A complete description would address these gaps.
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 50% (entity_id has a minimal description; service_type has an enum but no description). The description does not add any additional meaning beyond the schema. It fails to clarify how entity_id or service_type affect the results.
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 'Get payment service authorizations for an entity,' which indicates a read operation on a specific resource. Although the tool name uses 'services' and the input schema includes multiple service types, the description only mentions 'payment,' which is slightly narrow. It distinguishes from sibling tools like get_entity_agents or search_entities.
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?
No guidance on when to use this tool versus siblings. The sibling list is provided but no comparisons or conditions. The description does not mention prerequisites or context, leaving the agent without decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_registry_statsC
Return only the count of entities matching optional filters.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| nip | No | ||
| knf_number | No | ||
| entity_type | No | ||
| status | No | ||
| city | No | ||
| date_from | No | ||
| date_to | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states the return value (count) but omits details like whether the count is approximate, any performance implications, or that it's a lightweight read operation.
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 a single sentence with no extraneous words, achieving high conciseness. However, it is under-specified, sacrificing completeness for brevity.
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 optional parameters, no output schema, and no annotations, the description is too minimal. It fails to provide context on date formats, allowed values for free-text parameters, or the structure of the response, leaving the agent with significant uncertainty.
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 description coverage is 0%, so the description must compensate, but it only generically mentions 'optional filters' without explaining individual parameters. The schema lists 8 parameters, and their meanings are left entirely to the agent to infer from names.
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 it returns only a count of entities matching optional filters, which distinguishes it from sibling tools that return full entity details. However, it doesn't specify what 'registry' refers to, but context from sibling names makes it clear.
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 implies use when only a count is needed, but it doesn't explicitly mention when not to use it or provide alternatives. Sibling tools like search_entities could be for full lists, but no guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_entity_typesA
List all entity type codes and descriptions from KNF taxonomy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It only states the action without mentioning whether it is read-only, returns all items at once, or any performance implications. This is minimal transparency for a tool with no 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 a single, clear sentence with no wasted words. It front-loads the action and scope, making it easy to understand at a glance.
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 the tool's simplicity (no parameters, no annotations, no output schema), the description is adequate but sparse. It does not mention pagination, sorting, or response size, which could be relevant. It meets the minimum viability but leaves gaps for an agent.
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 tool has zero parameters, and schema_description_coverage is 100%. According to guidelines, zero parameters yields a baseline of 4. The description adds no extra meaning beyond confirming no parameters, which is acceptable.
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 lists entity type codes and descriptions from the KNF taxonomy. It uses a specific verb ('list') and resource ('entity type codes and descriptions'), and the sibling tools focus on individual entities or searches, so it distinguishes well.
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 provides no guidance on when to use this tool versus alternatives like search_entities or get_entity. It does not mention prerequisites or exclusions, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entitiesC
Search and filter entities in the KNF e-RUP registry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Entity name substring | |
| nip | No | Tax ID (NIP) substring | |
| knf_number | No | KNF registry number | |
| entity_type | No | ||
| status | No | ||
| city | No | City substring | |
| date_from | No | Date from YYYY-MM-DD | |
| date_to | No | Date to YYYY-MM-DD | |
| sort_field | No | ||
| sort_direction | No | asc | |
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It fails to mention pagination (though limit/offset exist in schema), sorting, potential result size, or any side effects. Only the basic search action is stated.
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 a single concise sentence with verb-first structure. It could be more informative without losing conciseness, but it is not overly verbose.
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 12 parameters and no output schema or annotations, the description is far from complete. It does not explain return format, how to interpret enums, or the relationship to sibling tools, leaving significant gaps for an agent.
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 description coverage is 50%, yet the description adds no parameter-level information. It does not explain how the parameters relate to filtering or provide any additional meaning beyond the schema.
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 identifies the action ('search and filter') and the resource ('entities in the KNF e-RUP registry'). However, it does not distinguish this search tool from sibling retrieval tools like get_entity, which reduces clarity slightly.
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?
No guidance is provided on when to use search_entities versus alternative tools such as get_entity or get_entity_agents. The description offers no context for decision-making.
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.
8 tool updates
v0.1.0- First observed
get_entity - First observed
get_entity_agents - First observed
get_entity_branches - First observed
get_entity_history - First observed
get_entity_services - First observed
get_registry_stats - First observed
list_entity_types - First observed
search_entities
TDQS
Scored across 8 tools
Each tool targets a distinct aspect of e-RUP entities (details, agents, branches, history, services) plus registry-level operations (search, stats, types). There is no ambiguity or overlap.
All tools follow a consistent verb_noun pattern in snake_case (e.g., get_entity, get_entity_agents, search_entities). The naming is predictable and uniform.
With 8 tools covering entity retrieval, sub-resources, search, and stats, the count is well-scoped for a read-only registry lookup server. No extraneous tools.
The tool surface fully covers the domain of querying e-RUP entities: entity details, related data (agents, branches, history, services), search, counts, and type taxonomy. There are no obvious gaps for a read-only service.
Maintenance
Related MCP Connectors
Polish company registry: 4.4M firms, KRS/REGON data, VAT white list checks, financial statements
Polish company records from the official KRS register API, with alerts on new registry entries.
Verify Polish companies by NIP/KRS/REGON + EU VAT (VIES). 14 MCP tools (9 no-key).
MCP server for 3M+ Polish companies — KRS & CEIDG financials, ownership, and industry search.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides access to Poland's largest business registry database, enabling company search, beneficiary checks, and financial document retrieval via natural language.1-
- AlicenseCqualityDmaintenanceEnables querying the Polish National Court Register (KRS) to retrieve current and historical entity data.284 npm4MIT
- AlicenseAqualityDmaintenanceProvides AI agents with real-time access to Polish official data: VAT whitelist for company verification and NBP exchange rates, enabling checks on VAT status, company details, and currency conversion without API keys.5MIT
- AlicenseAqualityCmaintenanceMCP server that provides AI agents with Polish business data tools: identifier validation (NIP, PESEL, REGON, KRS, IBAN), VAT whitelist checks, EU VIES lookups, and NBP exchange rates.57 npmMIT