Skip to content

io.github.juliusgerman/entyrix-mcp

by juliusgerman · remote · local (npm) · no sign-in to list tools · v0.2.1 · published by GitHub user juliusgerman

KYB data from 23 European business registries — company briefs, financials, ownership, AML screening

Changes · 4

13 tools: 4 change things and 9 only read.

Scanned Oct 21, 2026

1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http entyrix https://entyrix.com/mcp/v1

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "screen_companies" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

13 tools

Changes things 4Claude Code: ask
  • check_complianceLightweight public compliance snapshot for one company (works without an account): sanctions screening, insolvency, debtor registers, VAT reliability.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Lightweight public compliance snapshot for one company (works without an account): sanctions screening, insolvency, debtor registers, VAT reliability. For the full KYB picture use kyb_check. A null field means WITHHELD or not measured — it does NOT mean clean.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Public compliance snapshot
  • company_briefCompact, deterministic Markdown brief of one company (≤12 KB): identity, address, industry, latest financials, credit score and recommended limit, cyber score, risk flags (insolven…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Compact, deterministic Markdown brief of one company (≤12 KB): identity, address, industry, latest financials, credit score and recommended limit, cyber score, risk flags (insolvency, tax debt, sanctions), NIS2 status and key people where licensed. The best single call for 'tell me about company X'. Accepts every registry identifier shape we carry (SK/CZ IČO, AT Firmenbuch e.g. '033209m', PL REGON, FR SIREN, …); pass `country` for anything that is not an 8-digit IČO. Every fact comes from the database — missing data is marked, never invented.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Company brief
  • kyb_checkOne-call Know-Your-Business summary for one company: registry status, insolvency, liquidation, sanctions screening, debarment, tax/social/health debts, VAT reliability and the over…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    One-call Know-Your-Business summary for one company: registry status, insolvency, liquidation, sanctions screening, debarment, tax/social/health debts, VAT reliability and the overall risk verdict. Use before onboarding a customer or supplier. A null field means WITHHELD or NOT MEASURED — it does NOT mean clean; say so when you report it.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: KYB / AML summary
  • screen_companiesRun kyb_check on up to 25 companies at once and get one compact row per company (status, insolvency, sanctions, debts, verdict).1 finding

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "screen_companies" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Run kyb_check on up to 25 companies at once and get one compact row per company (status, insolvency, sanctions, debts, verdict). Use for supplier lists or portfolios. Each company counts as one API request against your rate limit. Requires an authenticated account.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Screen companies
Only reads 9Claude Code: allow
  • find_suppliersPublic procurement contracts this company is party to (SK CRZ + CZ Registr smluv), newest first, paged.No findings

    Why it is in this group

    • The name "find_suppliers" says "find": a word for reading.
    Description, as the server wrote it
    Public procurement contracts this company is party to (SK CRZ + CZ Registr smluv), newest first, paged. HONEST SCOPE: this is business-to-government procurement, NOT a commercial supply chain — do not present it as one.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Public-sector contracts
  • get_company_detailsFull record for one company: identity, address, legal form, status flags, NACE, and the whole enrichment layer we hold (web, tech stack, NIS2, EU funds, LEI, HU de minimis state ai…Reads text others writeNo findings

    Why it is in this group

    • The name "get_company_details" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "web": it reads web pages, which anyone can write.
    Description, as the server wrote it
    Full record for one company: identity, address, legal form, status flags, NACE, and the whole enrichment layer we hold (web, tech stack, NIS2, EU funds, LEI, HU de minimis state aid granted, HU public procurement from EKR, …). Large — prefer company_brief unless you need a specific field. Natural-person fields are gated and may be withheld; a withheld field is not the same as an empty one.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Full company record
  • get_company_networkCompanies connected to this one through shared officers or owners (one hop).No findings

    Why it is in this group

    • The name "get_company_network" says "get": a word for reading.
    Description, as the server wrote it
    Companies connected to this one through shared officers or owners (one hop). Use for group structure and beneficial-ownership tracing. Person names are gated like everywhere else.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Company network
  • get_company_relationsDirect relations of one company — statutory officers, owners, parents, subsidiaries, M&A events — without traversing the wider graph.No findings

    Why it is in this group

    • The name "get_company_relations" says "get": a word for reading.
    Description, as the server wrote it
    Direct relations of one company — statutory officers, owners, parents, subsidiaries, M&A events — without traversing the wider graph. `shareholders` are owners only; members of the supervisory board are in `supervisoryBoard`. SK M&A events: effectiveDate is the date stated by the register; when missing, derivedEffectiveDate may carry a date INFERRED from the absorbed firm's deregistration (effectiveDateSource: "derived") — present it as an estimate, never as a register fact.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Direct relations
  • get_financialsFiled financial statements of one company, one row per fiscal year (newest first), with revenue, profit, assets, equity, liabilities and year-over-year trend.No findings

    Why it is in this group

    • The name "get_financials" says "get": a word for reading.
    Description, as the server wrote it
    Filed financial statements of one company, one row per fiscal year (newest first), with revenue, profit, assets, equity, liabilities and year-over-year trend. Amounts are EUR CENTS as integers (divide by 100 for euros). Use for trend and solvency questions; company_brief already carries the latest year.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Financial statements
  • list_rankingsA published ranking by its slug (e.g.No findings

    Why it is in this group

    • The name "list_rankings" says "list": a word for reading.
    Description, as the server wrote it
    A published ranking by its slug (e.g. largest employers, top taxpayers). Call WITHOUT a key first to list the available slugs — inventing one returns an error.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Published rankings
  • lookup_companyResolve exactly one company by its national registry identifier in a given country.No findings

    Why it is in this group

    • The name "lookup_company" says "lookup": a word for reading.
    Description, as the server wrote it
    Resolve exactly one company by its national registry identifier in a given country. Handles every identifier shape we carry (SK/CZ/EE IČO, AT Firmenbuch e.g. '187a', SI/LV registry numbers, …). Returns the core record: identity, address, legal form, status, NACE. For an LLM-ready summary prefer company_brief; for the full enrichment layer use get_company_details.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Look up company by registry ID
  • search_companiesFind companies by name (or name fragment) across the pan-European dataset.No findings

    Why it is in this group

    • The name "search_companies" says "search": a word for reading.
    Description, as the server wrote it
    Find companies by name (or name fragment) across the pan-European dataset. Returns ranked candidates with registry identifier, country, legal form and status. Use this FIRST when you only know a name; then pass the identifier + country to lookup_company or company_brief. Do not use it to filter by industry or size — that is advanced_search.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Search companies by name

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.

Reads private data0
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write1
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Looked at Oct 22, 2026, 15:01 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
4
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
none
RFC 9728 protected resource metadata
https://entyrix.com/.well-known/oauth-protected-resource/mcp/v1
Authorization servers
https://entyrix.com
Legacy HTTP+SSE transport
no
Dynamic client registration
yes
Client ID metadata documents
yes
  • WarnThe whole server

    The endpoint served tools/list without credentials, and the list has 4 tools that change things (4 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://entyrix.com/mcp/v1: tools/list returned 13 tools to an anonymous client, including company_brief (write), kyb_check (write), screen_companies (write), check_compliance (write)

    What this check looks for

Install

Pinned to version 0.2.1. Values in angle brackets are yours to fill in.

claude mcp add --transport http entyrix https://entyrix.com/mcp/v1

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__entyrix__search_companies",
      "mcp__entyrix__lookup_company",
      "mcp__entyrix__get_company_details",
      "mcp__entyrix__get_financials",
      "mcp__entyrix__get_company_network",
      "mcp__entyrix__get_company_relations",
      "mcp__entyrix__advanced_search",
      "mcp__entyrix__find_suppliers",
      "mcp__entyrix__list_rankings"
    ],
    "ask": [
      "mcp__entyrix__company_brief",
      "mcp__entyrix__kyb_check",
      "mcp__entyrix__screen_companies",
      "mcp__entyrix__check_compliance"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as entyrix. Review it before you use it.

Capability tags behind 1 rule
  • mcp__entyrix__get_company_details untrusted-input