Skip to main content
Glama

@entyrix/mcp

npm

Model Context Protocol (MCP) server for the Entyrix European business-registry (KYB) API. Exposes 10 stdio tools so LLM clients (Claude Desktop, Claude Code, Cursor, ChatGPT) can search, look up, and analyze companies across 23 live markets (FR, GB, RO, SK, UA, GR, CZ, BE, NO, IE, FI, CH, PL, AT, CY, LT, LV, EE, SI, ES, IT, NL, HR).

30-second quickstart

npm install -g @entyrix/mcp
export ENTYRIX_API_KEY=your-api-key-here
entyrix-mcp

Or run without installing:

export ENTYRIX_API_KEY=your-api-key-here
npx @entyrix/mcp

Get an API key at https://entyrix.com.

Related MCP server: eu-company-mcp-server

Tools

Tool

Description

search_companies

Fuzzy/typo-tolerant name search (server-side 26-62 ms cold, ~1 ms cached; measured 2026-08-11)

lookup_company

Resolve a company by national registry ID, country-aware (SK/CZ/AT/EE/SI/LV/…)

get_company_details

Full profile: financials, tech stack, security, NIS2, sanctions, credit grade

get_company_network

Shared-officer graph — related entities via common directors/officers

get_company_relations

Directors, UBO / beneficial owners, M&A and succession links

advanced_search

57-key filter search (country, NACE, turnover, credit grade, NIS2, sanctions, tech, …)

check_compliance

AML / sanctions / debtor lists / RPVS check (SK)

get_financials

Last N years of turnover, profit, EBITDA, ROA, ROE

find_suppliers

Public-sector contracts where company is supplier (SK CRZ)

list_rankings

Pre-computed leaderboards (top turnover, top employers, …)

Configuration

Env var

Default

Description

ENTYRIX_API_KEY

(required)

Bearer token from your Entyrix dashboard

ENTYRIX_BASE_URL

https://entyrix.com

Override for staging / self-hosted

ENTYRIX_TIMEOUT_MS

30000

HTTP timeout per request

Client setup

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "entyrix": {
      "command": "npx",
      "args": ["-y", "@entyrix/mcp"],
      "env": {
        "ENTYRIX_API_KEY": "your-api-key-here"
      }
    }
  }
}

Restart Claude Desktop. The 10 tools appear in the tools panel.

Claude Code

Register the server from any project (writes to ~/.claude.json):

claude mcp add entyrix --env ENTYRIX_API_KEY=your-api-key-here -- npx -y @entyrix/mcp

Or add it manually to .mcp.json in your project root (checked in) / ~/.claude.json (global):

{
  "mcpServers": {
    "entyrix": {
      "command": "npx",
      "args": ["-y", "@entyrix/mcp"],
      "env": {
        "ENTYRIX_API_KEY": "your-api-key-here"
      }
    }
  }
}

Cursor

Edit .cursor/mcp.json in your workspace (or ~/.cursor/mcp.json for global):

{
  "mcpServers": {
    "entyrix": {
      "command": "npx",
      "args": ["-y", "@entyrix/mcp"],
      "env": {
        "ENTYRIX_API_KEY": "your-api-key-here"
      }
    }
  }
}

ChatGPT

ChatGPT does not consume MCP stdio servers directly today. Two integration paths:

1. Custom GPT Actions — expose Entyrix endpoints as OpenAPI actions. Sketch:

openapi: 3.1.0
info:
  title: Entyrix
  version: 0.1.0
servers:
  - url: https://entyrix.com/api/v1
paths:
  /companies/autocomplete:
    get:
      operationId: searchCompanies
      parameters:
        - name: q
          in: query
          required: true
          schema: { type: string }
        - name: country
          in: query
          schema: { type: string, minLength: 2, maxLength: 2 }
      responses:
        "200": { description: OK }
  /companies/{country}/{national_id}:
    get:
      operationId: lookupCompany
      parameters:
        - { name: country, in: path, required: true, schema: { type: string } }
        - { name: national_id, in: path, required: true, schema: { type: string } }
      responses:
        "200": { description: OK }
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
security:
  - BearerAuth: []

Paste this into the Custom GPT builder, set the auth header, and the Entyrix endpoints become first-class GPT actions.

2. Connectors API (enterprise)<https://platform.openai.com/docs/connectors> accepts MCP servers behind an HTTP wrapper; a small HTTP-to-stdio adapter is on the roadmap.

Development

git clone <repo>
cd entyrix-mcp
npm install
npm run build
npm test

Local stdio sanity-check (requires a real API key):

ENTYRIX_API_KEY=your-key node dist/index.js
# (stdin/stdout speaks MCP — wire it to a client to actually issue calls)

Quality gates

npm run check   # format:check + lint + typecheck + test — the same four CI runs

Run check, not the four by hand. On 2026-08-12 a release was cut after lint + typecheck + test passed and CI went red on format:check — the one step that got skipped because it was being remembered rather than scripted.

Releasing

npm run bump 0.1.5          # writes all four manifests, refuses on drift
npm run check
git commit -am "chore(release): 0.1.5"
git tag v0.1.5
git push && git push --tags   # one push, then the tag

The version lives in four files and src/lib/__tests__/version.test.ts asserts they agree; bump is what keeps that guard from firing on every release. Push once — each push is a full CI run, and a release cut as four separate pushes bills four of them (plus two red ones for the intermediate states).

npm publish runs from the tag via OIDC trusted publishing, so no token is involved. npm versions are immutable: a bad publish cannot be recalled, only superseded — which is why the tag is checked against package.json before anything is published.

License

MIT — see LICENSE.

Available Tools

10 tools
check_complianceCompliance + sanctions checkA

Public compliance check for a Slovak company: AML/sanctions, debtor lists (SocPoist/VšZP/tax), insolvency/bankruptcy/liquidation status, RPVS (transparency-of-ownership register, zákon 315/2016), and active regulatory flags. No API key required server-side (public route), but still routed through the authenticated MCP client for traceability. SK-only today; CZ/AT compliance modules tracked in roadmap.

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYes6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It reveals the public route, authentication via MCP client, and geographical limitation. It also lists the exact registries checked, providing useful operational context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first states the core purpose, second explains auth behavior, third gives market scope. Everything earns its place with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description provides a thorough list of check types, geographical scope, and authentication behavior. Despite lacking an output schema, it gives a strong sense of what the tool returns. Minor gaps include error handling and return format, but for a single-param tool this is quite complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single 'ico' parameter, which already includes detailed constraints (6-8 digits, pattern, market limitation). The description adds no param-specific details, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs a compliance check for a Slovak company and enumerates specific data sources (AML/sanctions, debtor lists, insolvency, RPVS, regulatory flags). This distinguishes it from sibling tools like search_companies or get_financials, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit usage context: SK-only, public route with no server-side API key but routed through authenticated client, and notes CZ/AT are not yet available. It doesn't explicitly name alternatives, but the domain (compliance vs. search/details) makes the when-to-use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_suppliersFind public-sector contracts (SK supplier)A

List public-sector contracts where the given company is the supplier. Backed by SK CRZ (Centrálny register zmlúv). Returns contract value, buyer (public-sector entity), signing date, contract subject, and CPV code where available. SK-only today (CRZ is a Slovak register). For broader EU procurement signal use the planned TED-search tool (not yet exposed). Useful for B2G exposure analysis and supplier due diligence.

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYes6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet.
limitNoMax contracts (default 50, cap 500)
yearsNoRestrict to recent years, e.g. '3' for the last 3
offsetNoSkip this many contracts; page with data.pagination.total

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral transparency burden. It discloses the data source (SK CRZ), return fields, and a data quality caveat ('CPV code where available'). It also honestly limits scope to SK. It does not mention pagination or error behavior, but these are covered by the schema, and the tool is clearly a read-only listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but front-loaded with the core action and resource. The additional sentences about data source, scope, and use case are valuable and not redundant. It could be slightly tighter, but each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description enumerates returned fields (contract value, buyer, signing date, subject, CPV) and provides business context. It also mentions the data source and geographic limitation, giving an agent enough context to invoke correctly. A minor gap is that it does not explicitly state the input ICO is the supplier, though that is strongly implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions (e.g., ICO format, limit cap, years example). The description adds no parameter-specific meaning beyond output expectations, so the baseline of 3 is appropriate. It does not need to repeat what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with a clear resource ('public-sector contracts') and relationship ('where the given company is the supplier'). It distinguishes itself from siblings by explicitly stating it is SK-only and referencing the planned TED-search tool for broader EU coverage, making its purpose unique.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage guidance: for B2G exposure analysis and supplier due diligence. It also gives an explicit exclusion: for broader EU procurement signal, use the planned TED-search tool (not yet exposed), and notes the SK-only limitation, which helps an agent decide when not to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_detailsGet full company detailsA

Fetch the full company profile by IČO: identity, registered address, NACE, legal form, status, latest financials, tech stack / website / SSL signals, security findings (CVE/CT logs), NIS2 scope, sanctions hits, and credit score / grade. Richer than lookup_company (which is identity-only). For SK↔CZ 8-digit collisions the API picks the active SK match first; use lookup_company with explicit country for deterministic disambiguation.

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYesNational registry identifier. Slovakia, Czechia and Estonia use a 6-8 digit IČO; France a 9-digit SIREN. Norway, Lithuania and Portugal 9 digits; Belgium 10; Switzerland CHE#########; Finland 0140168-2. Austria uses a Firmenbuch number like 357942k; Britain 08183069 or SC307270. Pass `country` for anything that is not a Slovak or Czech IČO.
countryNoISO 3166-1 alpha-2 code of the register, e.g. SK or FR. REQUIRED for any market whose identifier is not a 6-8 digit IČO, and the only way to disambiguate an 8-digit IČO that exists in both SK and CZ.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the disclosure burden. It reveals a specific behavioral quirk: 'For SK↔CZ 8-digit collisions the API picks the active SK match first' – useful non-obvious information. It does not mention error handling, rate limits, or explicitly state read-only, but the 'Fetch' verb and output list imply a safe read operation. The disclosed collision behavior goes beyond typical descriptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, tightly packed with essential information. The first sentence front-loads the main action and output scope; the second addresses an important caveat. No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description comprehensively lists the categories of data returned (identity, address, NACE, finances, tech signals, security, NIS2, sanctions, credit), giving the agent a clear picture of what to expect. It also covers the disambiguation context. For a read operation with good parameter schema, this is complete enough for effective invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds value by explaining the purpose of 'country' in disambiguating 8-digit IČO collisions and noting it is required for non-SK/CZ identifiers, complementing the schema's field-level descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb + resource: 'Fetch the full company profile by IČO' and enumerates exactly what is returned (identity, registered address, NACE, legal form, status, latest financials, tech stock/website/SSL signals, security findings, NIS2 scope, sanctions hits, credit score). It explicitly contrasts with sibling 'lookup_company (which is identity-only)', clearly distinguishing its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit when-to-use guidance by stating it is 'Richer than lookup_company' and directly advises using 'lookup_company with explicit country for deterministic disambiguation' when SK↔CZ collisions occur. This tells the agent exactly when to prefer which tool, including an alternative for a specific edge case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_networkGet company network (shared-officer graph)A

Company-to-company network via shared people (statutory officers / shareholders). Returns the company's current officers and, for each, the OTHER companies where that same person also holds a role — every connected company carries its IČO so the graph is walkable. This is the primary network-walk primitive: feed a returned IČO back into get_company_network to traverse another hop. Empty result means the company has no current shared-officer edges (e.g. officer data not yet ingested for that entity) — it does NOT mean the company is isolated; try get_company_relations for UBO / M&A edges. Bearer-auth + FO-gated at the API: keys without an FO addendum are refused for natural-person sole traders.

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYes6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet.
purposeNoDeclared due-diligence purpose. Only needed for `full`-tier keys when the subject is a natural person (sole trader) — the API's FO gate refuses such subjects unless a recognised purpose is attested. Ignored for legal entities. Marketing/prospection is not a valid value here.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the empty-result semantics (not isolated), the FO gate requirement for sole traders, bearer-auth requirement, and the walkable graph structure. This gives agents a realistic behavioral model.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed yet each sentence serves a purpose: functionality, usage, edge-case semantics, alternative guidance, and auth. Front-loaded with the core purpose and progressively adds nuance. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex graph-traversal tool with no output schema, the description covers return value structure, pagination-walkability, edge cases, and auth constraints. It is self-contained enough for an agent to use it correctly and know when to switch to another tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though the schema covers 100% of parameters, the description adds context beyond the schema for the 'purpose' parameter (only needed for natural-person sole traders, ignored for legal entities, marketing/prospection invalid). It also reinforces the 'ico' constraint about markets keyed on legacy IČO.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: it builds a company-to-company network via shared officers/shareholders. It differentiates from siblings by explicitly positioning it as the 'primary network-walk primitive' and references get_company_relations for alternative edge types (UBO/M&A).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use and alternatives: 'feed a returned IČO back into get_company_network to traverse another hop' and 'try get_company_relations for UBO / M&A edges'. Also clarifies the empty-result case with guidance to try another tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_company_relationsGet company relations (directors, UBO, M&A)A

Full relationship graph for one company: directors, shareholders, RPVS beneficial owners (UBO, SK register 315/2016 — persons with validity windows and a public-official flag), related companies via shared officers, corporate shareholders (counterparty IČO resolved), and M&A / succession events. Richer than get_company_network — that one is the shared-officer company graph only; this adds the UBO and M&A layers. Use get_company_network to walk company→company hops, use this to enumerate a single company's owners and officers. Bearer-auth + FO-gated at the API: keys without an FO addendum are refused for natural-person sole traders, and UBO persons are minimised (birth YEAR only).

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYes6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet.
purposeNoDeclared due-diligence purpose. Only needed for `full`-tier keys when the subject is a natural person (sole trader) — the API's FO gate refuses such subjects unless a recognised purpose is attested. Ignored for legal entities. Marketing/prospection is not a valid value here.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the behavioral burden. It discloses auth requirements (Bearer-auth + FO-gated), the refusal for sole traders without FO addendum, the minimization of UBO data (birth year only), the legacy IČO keying limitation, and the public-official flag. This goes well beyond what annotations would typically provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph, but every sentence contributes (content list, sibling differentiation, auth/limitation notes). It is longer than ideal but appropriately packed for a tool with this complexity. Slightly better structure (e.g., bullets) would make it a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description enumerates all return components (officers, UBO with validity windows, related companies, corporate shareholders with IČO resolution, M&A events). It also covers limitations, auth context, and parameter usage. This is complete for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful context: purpose is 'only needed for full-tier keys when the subject is a natural person', 'ignored for legal entities', and the IČO limitation is reiterated. This adds practical usage nuance beyond the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Full relationship graph for one company' and enumerates exactly what is included (directors, shareholders, UBO, related companies, corporate shareholders, M&A events). It also explicitly contrasts with get_company_network, making the specific scope unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Use get_company_network to walk company→company hops, use this to enumerate a single company's owners and officers.' It also states when the endpoint is not reachable (non-IČO markets) and the FO-gated auth conditions, clearly indicating appropriate use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_financialsGet company financialsA

Return up to N most-recent annual financial statements (turnover, total assets, equity, profit, EBITDA, ROA, ROE) for a company. Source: SK FS / CZ Justice / AT FBW depending on jurisdiction. All money amounts are in EUR (each row carries unit); roa/roe are ratios. Implemented as a thin extractor over get_company_details — saves the LLM from parsing the full company envelope when only financials are needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYesNational registry identifier. Slovakia, Czechia and Estonia use a 6-8 digit IČO; France a 9-digit SIREN. Norway, Lithuania and Portugal 9 digits; Belgium 10; Switzerland CHE#########; Finland 0140168-2. Austria uses a Firmenbuch number like 357942k; Britain 08183069 or SC307270. Pass `country` for anything that is not a Slovak or Czech IČO.
yearsNoHow many most-recent years to return (default 5)
countryNoISO 3166-1 alpha-2 code of the register, e.g. SK or FR. REQUIRED for any market whose identifier is not a 6-8 digit IČO, and the only way to disambiguate an 8-digit IČO that exists in both SK and CZ.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the data source per jurisdiction, that amounts are in EUR with a `unit` field, that ROA/ROE are ratios, and that it is an extractor over get_company_details. It does not discuss error handling or missing data scenarios, but the core behavioral context is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the core purpose, followed by units/source and the implementation note. Every sentence earns its place and there is no redundant or verbose language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description fully explains what is returned (list of annual statements, specific financial metrics, units, ratios). Combined with the detailed parameter schema and clear sibling differentiation, the tool context is complete for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so per the rubric, the baseline is 3. The description adds no parameter-specific semantics beyond what the schema already provides; it only mentions jurisdiction in the context of the data source, not the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Return') and resource ('most-recent annual financial statements') and enumerates the exact fields (turnover, total assets, equity, profit, EBITDA, ROA, ROE). It also distinguishes itself from siblings by branding itself as a 'thin extractor over get_company_details', which clearly separates it from the broader lookup tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'saves the LLM from parsing the full company envelope when only financials are needed.' It also names the alternative (get_company_details) and provides jurisdictional source guidance, making the use cases clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rankingsList companies by rankingA

Fetch a pre-computed company leaderboard by slug. Exactly four rankings exist: 'largest' (companies by turnover), 'public-contracts' (top state suppliers), 'shell-addresses' (addresses with most registered companies) and 'most-viewed' (most-viewed company profiles). Responses come from a 15-min cache, so they are millisecond-fast. Useful for 'top 100 …' style queries the LLM would otherwise try to assemble from many advanced_search calls.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesRanking slug. Supported: 'largest' (TOP 100 companies by turnover), 'public-contracts' (TOP 100 state suppliers by public-contract count), 'shell-addresses' (TOP 100 addresses with the most registered companies), 'most-viewed' (TOP 100 most-viewed companies). No other slugs exist.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It discloses that responses are cached for 15 minutes and are millisecond-fast, indicating potential staleness and performance characteristics. It does not explicitly state read-only nature, but 'fetch' and 'pre-computed' imply no side effects, and the enum constrains inputs. One minor gap is the lack of info on response format, but that is not critical given the tool's simplicity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with the action, then enumerates the slugs, and closes with a practical usage tip. Every sentence adds value with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool with no output schema, the description fully covers purpose, usage, cache behavior, and even provides a rationale for its existence. It is complete enough for an agent to select and invoke this tool correctly without further clarification.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with the 'key' parameter description already explaining each enum value fully. The tool description adds no additional parameter-level semantics beyond restating the same four slugs and adding context about the top-100 nature. This meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool fetches a pre-computed company leaderboard by slug, enumerating exactly four specific rankings. This distinguishes it from sibling search/lookup tools by highlighting that it serves pre-assembled top-N lists rather than arbitrary queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool: for 'top 100 …' style queries the LLM would otherwise assemble from many advanced_search calls. It also lists the exact four valid slugs, providing clear alternatives with advanced_search and implicitly excluding other use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_companyLook up company by national IDA

Resolve a single company by its national registry identifier with country disambiguation. Routes through the country-aware lookup so it handles all our shapes: SK/CZ/EE 6-8 digit IČO, AT Firmenbuch numbers (e.g. '187a'), SI/LV multi-digit registry numbers. Returns a single company object with core identity, address, legal form, status flags. Use this when you already know the registry number; use search_companies for name-based discovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
icoYesNational registry identifier. SK/CZ/EE: 6-8 digit IČO. AT: Firmenbuch number like '187a'. SI: 10-digit matična številka. LV: 11-digit reg number. Leading zeros are normalized server-side.
countryNoISO 3166-1 alpha-2 country code (default 'SK' for backwards compat). Required to disambiguate SK↔CZ 8-digit IČO collisions and for non-SK shapes (AT, SI, LV).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden and does so well: it reveals country-aware routing, support for multiple national ID formats, and a defined return type ('single company object with core identity, address, legal form, status flags'). It doesn't cover error/edge behavior, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the main purpose, and every clause adds functional value—alternatives, shapes handled, and return contents. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description specifies what the returned object contains and covers the main complexity (different national ID shapes and country disambiguation). For a lookup tool, this is complete enough for an agent to confidently invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters including format examples and the SK↔CZ collision issue. The description adds context about 'all our shapes' but largely repeats schema content. The baseline of 3 applies because the description doesn't significantly augment the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action—'Resolve a single company by its national registry identifier'—and explicitly scopes the tool to country-disambiguated lookups by national ID. It also differentiates from sibling tools by contrasting with search_companies for name-based discovery.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: 'Use this when you already know the registry number'. It also gives an alternative: 'use search_companies for name-based discovery', which clearly directs the agent to the right sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_companiesSearch companiesA

Search European companies by name, partial name, or address. Powered by the autocomplete index for typo-tolerance + 12ms p95. Returns ranked hits with IČO, name, address, NACE code, legal form, status, and country. Use this for fuzzy 'find a company called …' queries before drilling into details with lookup_company or get_company_details. Coverage: 23 live markets (FR, GB, RO, SK, UA, GR, CZ, BE, NO, IE, FI, CH, PL, AT, CY, LT, LV, EE, SI, ES, IT, NL, HR).

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesSearch query (company name, partial name, address, IČO)
limitNoMax results to return (default 10)
countryNoISO 3166-1 alpha-2 country code filter (e.g. 'SK', 'CZ', 'AT'). Case-insensitive.
active_onlyNoIf true (default), only active (non-terminated) companies

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It reveals typo-tolerance via autocomplete index, p95 latency, return fields, and market coverage. It does not explicitly state read-only status, but the tool name and 'search' semantics imply it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, each providing distinct value: action, performance, return fields, use case, and coverage. It is front-loaded and free of filler, making it effectively concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 adequately covers the tool's scope and return fields. It could mention result structure or pagination, but it is otherwise complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described. The description adds slight context by mapping q to name/partial/address, but does not provide additional semantic detail for limit, country, or active_only beyond what the schema already offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool searches European companies by name, partial name, or address. It distinguishes itself from sibling tools by targeting fuzzy queries and returning ranked hits with specific fields, while explicitly mentioning lookup_company and get_company_details for follow-up.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: 'Use this for fuzzy find a company called… queries before drilling into details with lookup_company or get_company_details.' This gives both when to use and names alternatives, making the usage context very clear.

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.

  1. 7 tool updatesv0.1.4
    • Changedadvanced_search1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Alias for country_code. ISO 3166-1 alpha-2, e.g. 'SK'.",
        +  "type": "string"
        +}
    • Changedcheck_compliance1 field changed
      • changedInput schema / properties / ico / description
        Previous value: -"6-8 digit Slovak IČO"New value: +"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet."
    • Changedfind_suppliers1 field changed
      • changedInput schema / properties / ico / description
        Previous value: -"6-8 digit Slovak IČO of the supplier company"New value: +"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet."
    • Changedget_company_details5 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "ISO 3166-1 alpha-2 code of the register, e.g. SK or FR. REQUIRED for any market whose identifier is not a 6-8 digit IČO, and the only way to disambiguate an 8-digit IČO that exists in both SK and CZ.",
        +  "maxLength": 2,
        +  "minLength": 2,
        +  "type": "string"
        +}
      • changedInput schema / properties / ico / description
        Previous value: -"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional."New value: +"National registry identifier. Slovakia, Czechia and Estonia use a 6-8 digit IČO; France a 9-digit SIREN. Norway, Lithuania and Portugal 9 digits; Belgium 10; Switzerland CHE#########; Finland 0140168-2. Austria uses a Firmenbuch number like 357942k; Britain 08183069 or SC307270. Pass `country` for anything that is not a Slovak or Czech IČO."
      • changedInput schema / properties / ico / maxLength
        Previous value: -8New value: +32
      • changedInput schema / properties / ico / minLength
        Previous value: -6New value: +1
      • changedInput schema / properties / ico / pattern
        Previous value: -"^\\d{6,8}$"New value: +"^[A-Za-z0-9][A-Za-z0-9./-]{0,31}$"
    • Changedget_company_network1 field changed
      • changedInput schema / properties / ico / description
        Previous value: -"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional."New value: +"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet."
    • Changedget_company_relations1 field changed
      • changedInput schema / properties / ico / description
        Previous value: -"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional."New value: +"6-8 digit IČO (Slovak/Czech/Estonian registry number). Leading zeros optional. This endpoint is keyed on the legacy IČO column, so markets whose identifier is not a 6-8 digit IČO are not reachable through this endpoint yet."
    • Changedget_financials5 fields changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "ISO 3166-1 alpha-2 code of the register, e.g. SK or FR. REQUIRED for any market whose identifier is not a 6-8 digit IČO, and the only way to disambiguate an 8-digit IČO that exists in both SK and CZ.",
        +  "maxLength": 2,
        +  "minLength": 2,
        +  "type": "string"
        +}
      • changedInput schema / properties / ico / description
        Previous value: -"6-8 digit IČO"New value: +"National registry identifier. Slovakia, Czechia and Estonia use a 6-8 digit IČO; France a 9-digit SIREN. Norway, Lithuania and Portugal 9 digits; Belgium 10; Switzerland CHE#########; Finland 0140168-2. Austria uses a Firmenbuch number like 357942k; Britain 08183069 or SC307270. Pass `country` for anything that is not a Slovak or Czech IČO."
      • changedInput schema / properties / ico / maxLength
        Previous value: -8New value: +32
      • changedInput schema / properties / ico / minLength
        Previous value: -6New value: +1
      • changedInput schema / properties / ico / pattern
        Previous value: -"^\\d{6,8}$"New value: +"^[A-Za-z0-9][A-Za-z0-9./-]{0,31}$"
  2. 10 tool updatesv0.1.0
    • First observedadvanced_search
    • First observedcheck_compliance
    • First observedfind_suppliers
    • First observedget_company_details
    • First observedget_company_network
    • First observedget_company_relations
    • First observedget_financials
    • First observedlist_rankings
    • First observedlookup_company
    • First observedsearch_companies

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: fuzzy name search vs structured multi-filter search, identity-only lookup vs full-profile fetch, officer-based network vs full relationship graph with UBO and M&A layers. Even overlapping tools like get_financials and get_company_details are explicitly differentiated as multi-year financial statements vs full company envelope, leaving no ambiguity.

Naming Consistency4/5

All tool names are snake_case and most follow the verb_noun pattern (search_, lookup_, get_, check_, find_, list_). The only deviation is 'advanced_search', which uses an adjective+noun form without a verb prefix, slightly breaking the otherwise consistent convention.

Tool Count5/5

With 10 tools, the server is well-scoped for a company data intelligence platform. Each tool covers a distinct feature—discovery, identity, details, financials, relationships, compliance, supplier contracts, and rankings—without redundancy or bloat.

Completeness4/5

The tool surface covers the core domain comprehensively: search, lookup, details, financials, network/relations, compliance, supplier data, and rankings. Minor gaps exist for non-SK compliance and broader EU procurement, but these are explicitly noted as roadmap items, and the main workflows are fully supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for Nordic company registries. Verify companies, check board members, signing authority, and financial data across Norway, Denmark, Finland, and Sweden using official public APIs. 23 tools covering search, details, roles, and batch lookups.
    19
    8
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for EU company and business data. 9 tools: company search (GLEIF, 2M+ entities), LEI lookup, corporate structures (parent/subsidiaries), trade register search, EU VAT validation (VIES), GDP, unemployment, inflation, and business demography (Eurostat). All APIs free, no keys required.
    9
    4
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    An MCP server that gives AI agents access to US business entity data, enabling searches across 9 state registries, SEC EDGAR filings, federal contracts, and lobbying disclosures.
    6
    1
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A local MCP server that exposes the UK Companies House API as tools for Claude Desktop and Cowork, enabling company search, profile retrieval, officer lookup, and document downloads.
    -

Latest Blog Posts

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/juliusgerman/entyrix-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server