_ registry / mcp http-sse · checked 1h ago

nordic-data-mcp

https://nordic-data-mcp-production.up.railway.app

Registry code: 1620a6493f47063f

api record

Nordic Data MCP provides authoritative company, KYB, VAT, sanctions, LEI and address data for 15 European countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU), sourced from official national business registries and EU systems (VIES, OpenSanctions, GLEIF).

Choosing a tool:

endpoint
https://nordic-data-mcp-production.up.railway.app/mcp/auth
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is nordic-data-mcp live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is nordic-data-mcp free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does nordic-data-mcp have?
11 tools: autocomplete_address, validate_vat, list_endpoints, lookup_company, lookup_lei, screen_sanctions, kyb_full, call_endpoint, ….
Is nordic-data-mcp safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
310ms

last good check

priced tools
0

of 11 tools

_ answered our checks, 90 days 377 checks · signed record
  • degraded → live
  • unknown → live
_ what it is for
used for
  • look up a european company in registries
  • run a kyb due diligence report
  • validate a vat number
  • screen names against sanctions lists
  • look up an lei
takes → gives
text → data
tools
11 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 11 tools
11 auth-required 11 of 11 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • autocomplete_address reads auth-required never probed

    Address autocomplete with coordinates. Sources: DAWA (DK, official address register), Kartverket/Geonorge (NO, official), BAN (FR, official Base Adresse Nationale), and OpenStreetMap Nominatim (SE, FI). Returns ranked address suggestions with lat/lng and a match confidence. Supports 5 countries: DK, NO, SE, FI, FR.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "country",
        "query"
      ],
      "properties": {
        "query": {
          "type": "string",
          "minLength": 2,
          "description": "Partial address — street name, postcode, city, or any combination. Min 2 characters."
        },
        "country": {
          "enum": [
            "dk",
            "no",
            "se",
            "fi",
            "fr"
          ],
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code, lowercase. Only dk, no, se, fi and fr are supported."
        }
      },
      "additionalProperties": false
    }
    arguments 27 lines
  • validate_vat reads auth-required 4h ago

    Call before issuing an invoice, processing a cross-border payment, or storing a counterparty's VAT number. Validate a VAT registration number for any of the 27 EU member states against the official EU VIES service (DK is checked against the national CVR register). Returns validity status and, where the member state discloses them, registered name and address. Use EL for Greece. Not supported: United Kingdom (GB) and Norway (NO) — for a Norwegian company, lookup_company with country 'no' reports `vatRegistered` from Brønnøysund. HTTP 503 upstream_unavailable means that member state's VIES node is temporarily down; retry later.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "country",
        "vat_number"
      ],
      "properties": {
        "country": {
          "enum": [
            "AT",
            "BE",
            "BG",
            "CY",
            "CZ",
            "DE",
            "DK",
            "EE",
            "EL",
            "ES",
            "FI",
            "FR",
            "HR",
            "HU",
            "IE",
            "IT",
            "LT",
            "LU",
            "LV",
            "MT",
            "NL",
            "PL",
            "PT",
            "RO",
            "SE",
            "SI",
            "SK"
          ],
          "type": "string",
          "description": "VIES country code, UPPERCASE. Supports the 27 EU member states. Use EL for Greece (not GR). The United Kingdom (GB) and Norway (NO) are not supported."
        },
        "vat_number": {
          "type": "string",
          "minLength": 1,
          "description": "VAT number WITHOUT country prefix — just the digits/characters. Example: for DK29403473, pass '29403473'."
        }
      },
      "additionalProperties": false
    }
    arguments 49 lines
  • list_endpoints reads auth-required 8h ago

    Discovery meta-tool. Lists ALL available Nordic Data API data endpoints (HTTP method, path, short description) by reading the backend's live OpenAPI spec at runtime — far beyond the curated high-level tools. Use this to discover capabilities the dedicated tools do not cover, then call get_endpoint_schema for parameter details and call_endpoint to execute one. Only read-only operations are listed (GET/HEAD plus the POST screening queries); admin and state-changing endpoints are never returned. Supports an optional `search` keyword filter. The catalog has 230+ endpoints.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "properties": {
        "search": {
          "type": "string",
          "description": "Optional case-insensitive keyword filter, matched against each endpoint's path, summary, and tags. Examples: 'sanction', 'address', 'cvr', 'history', 'vat', 'lei'. Omit to list every available data endpoint."
        }
      },
      "additionalProperties": false
    }
    arguments 11 lines
  • lookup_company reads auth-required 15h ago

    Call before onboarding a supplier or customer to confirm the legal entity exists and is active. Look up basic company data (name, address, status, industry, VAT registration, founding date) from official European business registries. Supports 15 countries: DK (CVR), NO (Brønnøysund), SE (Bolagsverket), FI (YTJ/PRH), IE (CRO), UK (Companies House), FR (INSEE Sirene), DE (Handelsregister), CZ (ARES), PL (KAS+KRS), LV (Uzņēmumu reģistrs), EE (Ariregister), NL (KvK), BE (KBO), LU (RCSL). Tier note: NL and DE use paid upstream registries (KvK and Handelsregister). Free-tier API keys will receive HTTP 402 with error 'upgrade_required' — do NOT retry on 402; the error message includes an upgrade URL. On paid tiers, NL calls cost 5x quota units and DE calls cost 3x; all other countries cost 1x.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "country",
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "National company identifier. DK=CVR (8 digits), NO=orgnr (9), SE=orgnr (10), FI=Y-tunnus (NNNNNNN-D), IE=CRO (1-7), UK=8 chars, FR=SIREN (9), DE=HRB number, CZ=IČO (8), PL=NIP (10) or KRS (10), LV=11 digits, EE=8 digits, NL=KvK (8 digits), BE=BCE/KBO (10 digits), LU=RCSL (B + digits)."
        },
        "country": {
          "enum": [
            "dk",
            "no",
            "se",
            "fi",
            "ie",
            "uk",
            "fr",
            "de",
            "cz",
            "pl",
            "lv",
            "ee",
            "nl",
            "be",
            "lu"
          ],
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code, lowercase. One of: dk, no, se, fi, ie, uk, fr, de, cz, pl, lv, ee, nl, be, lu."
        }
      },
      "additionalProperties": false
    }
    arguments 37 lines
  • lookup_lei reads auth-required 4h ago

    Look up a Legal Entity Identifier (LEI) via GLEIF — the global standard for entity identification. Returns legal name, registered address, status, parent + ultimate parent relationships, and child entities (subsidiaries). Also supports reverse lookup from a national company number to LEI across 15 countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Tier note (reverse mode only): NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "mode"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "National company ID. Required when mode='reverse'."
        },
        "lei": {
          "type": "string",
          "maxLength": 20,
          "minLength": 20,
          "description": "20-character ISO 17442 Legal Entity Identifier. Required when mode='lei'."
        },
        "mode": {
          "enum": [
            "lei",
            "reverse"
          ],
          "type": "string",
          "description": "'lei' = look up by LEI directly. 'reverse' = look up LEI from national company number."
        },
        "country": {
          "enum": [
            "dk",
            "no",
            "se",
            "fi",
            "ie",
            "uk",
            "fr",
            "de",
            "cz",
            "pl",
            "lv",
            "ee",
            "nl",
            "be",
            "lu"
          ],
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code, lowercase. Required when mode='reverse'."
        },
        "include_relationships": {
          "type": "boolean",
          "default": false,
          "description": "If true, also fetch parent and child entities. Only applies when mode='lei'."
        }
      },
      "additionalProperties": false
    }
    arguments 55 lines
  • screen_sanctions reads auth-required 4h ago

    Screen one or more person or company names against the UN, EU, UK (FCDO UK Sanctions List) and US OFAC sanctions lists plus PEPs (745K+ entries, UN direct and the rest via OpenSanctions). Typical use: counterparty checks before onboarding or processing a payment. Returns per-name match lists with fuzzy match scores, source-list attribution and risk topics, 'sourcesUsed' (each list actually screened, with its publisher's last-updated date), plus a 'disclaimer' field. Matches are informational decision-support from public sources, not legal or compliance advice — a match indicates a potential hit that requires verification, not a confirmed listing.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "names"
      ],
      "properties": {
        "fuzzy": {
          "type": "boolean",
          "default": true,
          "description": "Enable fuzzy matching. Default true."
        },
        "names": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1
              },
              {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "minLength": 1
                  },
                  "birth_year": {
                    "type": "integer",
                    "maximum": 2100,
                    "minimum": 1850,
                    "description": "Birth year of the screened person, if known. When the listed person's birth year is known and differs, the hit is never 'confirmed' (same name, different person)."
                  },
                  "entity_type": {
                    "enum": [
                      "company",
                      "person",
                      "auto"
                    ],
                    "type": "string",
                    "description": "What the screened party is. 'company': a hit on a listed individual is never 'confirmed' (a company is not a natural person). 'person': a hit on a listed entity is never 'confirmed'. 'auto' (default): a legal form in the name (A/S, Ltd, GmbH, AB, Oy …) marks it as a company."
                  }
                },
                "additionalProperties": false
              }
            ]
          },
          "maxItems": 1000,
          "minItems": 1,
          "description": "Names to screen, max 1000 per call. Each item is a plain name, or { name, entity_type, birth_year } to say per name whether it is a company or a person (e.g. a company plus its key persons in one call)."
        },
        "min_score": {
          "type": "number",
          "maximum": 1,
          "minimum": 0,
          "description": "Minimum fuzzy score for a candidate to be returned, 0-1. Default 0.85. Lower values return more low-confidence candidates; only candidates ≥ 0.95 can ever be classified as a match."
        },
        "birth_year": {
          "$ref": "#/properties/names/items/anyOf/1/properties/birth_year",
          "description": "Default birth year for all names that do not set their own. Only meaningful when screening one person."
        },
        "entity_type": {
          "$ref": "#/properties/names/items/anyOf/1/properties/entity_type",
          "description": "Default entity type for all names that do not set their own: 'company', 'person' or 'auto' (default). Set 'company' when screening a company name — a hit on a listed individual is then never 'confirmed'."
        }
      },
      "additionalProperties": false
    }
    arguments 71 lines
  • kyb_full reads auth-required 15h ago

    Run before a consequential decision — onboarding a counterparty, approving a payment, extending credit, or signing a contract. Full Know-Your-Business master report for a company across 15 EU countries (DK, NO, SE, FI, IE, UK, FR, DE, CZ, PL, LV, EE, NL, BE, LU). Aggregates 9 sections: identity, registered address (geocoded), key persons & directors, financial statements, official filings, LEI + corporate ownership, VAT registration, sanctions + PEP screening, adverse media (GDELT 2.0), and a composite risk score. Single call. Cold cache typically completes in 10-15s; warm cache returns in <100ms. Cached 6h on success, 60s when partial. Partial responses: if any of the 9 sections time out, the report still returns with 'truncated: true' and 'sectionsUnavailable: [{section, reason}]' — caller can retry in 60s for a complete report. Tier note: NL and DE use paid upstream registries — free-tier API keys receive HTTP 402 'upgrade_required'; do NOT retry on 402. On paid tiers, NL costs 5x quota and DE costs 3x. Disclaimer: this report is informational decision-support aggregated from official and public sources — NOT legal, compliance, or financial advice and not a definitive determination. The risk score and findings indicate areas to verify, not verdicts; the response includes a 'disclaimer' field stating this.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "country",
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "National company identifier — same format as lookup_company (e.g. DK CVR 8 digits, NO orgnr 9 digits)."
        },
        "country": {
          "enum": [
            "dk",
            "no",
            "se",
            "fi",
            "ie",
            "uk",
            "fr",
            "de",
            "cz",
            "pl",
            "lv",
            "ee",
            "nl",
            "be",
            "lu"
          ],
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code, lowercase."
        }
      },
      "additionalProperties": false
    }
    arguments 37 lines
  • call_endpoint reads auth-required 23h ago

    Discovery meta-tool. Executes a read-only HTTP request against the Nordic Data API for any data endpoint discovered via list_endpoints, and returns the response. Authenticates with the same scoped API key as the curated tools. Strictly read-only: only GET/HEAD requests are permitted, plus POST to three allowlisted screening endpoints (/api/sanctions/screen, /api/adverse/screen, /api/peps/nl/screen) that are pure queries using POST only to carry a large request body. All state-changing operations (watch lists, webhooks, DELETE/PUT/PATCH) and all /admin endpoints are refused. Use list_endpoints and get_endpoint_schema first to find the correct path, method, and parameters.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "minLength": 1,
          "description": "Concrete endpoint path, e.g. '/api/company/dk/22756214'. Path templates with {placeholders} are also accepted when you supply the values in `params`."
        },
        "method": {
          "type": "string",
          "default": "GET",
          "minLength": 1,
          "description": "HTTP method to use. Read-only methods only: GET or HEAD, plus POST solely for the allowlisted screening query endpoints (/api/sanctions/screen, /api/adverse/screen, /api/peps/nl/screen). Defaults to GET."
        },
        "params": {
          "type": "object",
          "description": "Parameters for the call. Values whose keys match {placeholders} in the path are substituted into the path. Remaining values become query-string params for GET/DELETE, or the JSON request body for POST/PUT/PATCH.",
          "additionalProperties": {}
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • company_enriched reads auth-required 23h ago

    Company registry data plus national industry statistics in one call. Returns `company` (same shape as lookup_company) and `industryStats` — a time series from the national statistics office for the company's industry code (currently Danmarks Statistik for DK); `industryStats.available` is false when no statistics exist. Supports 4 countries: DK, NO, SE, FI. For other countries use lookup_company (basic registry data) or kyb_full (full due-diligence report).

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "country",
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "description": "National company identifier — same format as lookup_company."
        },
        "country": {
          "enum": [
            "dk",
            "no",
            "se",
            "fi"
          ],
          "type": "string",
          "description": "ISO 3166-1 alpha-2 country code, lowercase. Only dk, no, se and fi are supported."
        }
      },
      "additionalProperties": false
    }
    arguments 26 lines
  • fr_history reads auth-required 23h ago

    French company history timeline. Returns one event per change to the company's name, activity (NAF code), status (active/closed), legal form, or social-economy flag, derived from INSEE Sirene 3.11's bitemporal periodesUniteLegale array. Includes 'initial:<field>' events that show the state at company creation (date, name, NAF code, etc.). Input: 9-digit SIREN number. Cost: 1 quota unit; free tier supported (France is not tier-gated, unlike NL and DE). Cache: 24h server-side. Errors: 400 invalid_id_format (not 9 digits), 403 non_diffusible (SIREN exists but is privacy-protected under art. R123-232-1), 404 not_found, 503 upstream_unavailable.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "siren"
      ],
      "properties": {
        "siren": {
          "type": "string",
          "pattern": "^\\d{9}$",
          "description": "9-digit French SIREN number. Examples: 652014051 (Carrefour), 775670417 (LVMH). No spaces or punctuation."
        }
      },
      "additionalProperties": false
    }
    arguments 15 lines
  • get_endpoint_schema reads auth-required 15h ago

    Discovery meta-tool. Returns the full parameter and response schema for a single Nordic Data API endpoint (path + method), read from the backend's live OpenAPI spec with $refs resolved inline. Use after list_endpoints to learn exactly which parameters an endpoint takes before calling it with call_endpoint. Admin endpoints are rejected.

    mcp-tool

    {
      "type": "object",
      "$schema": "http://json-schema.org/draft-07/schema#",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "minLength": 1,
          "description": "Endpoint path from list_endpoints, e.g. '/api/company/{country}/{id}'. Concrete paths like '/api/company/dk/22756214' are also accepted."
        },
        "method": {
          "type": "string",
          "default": "GET",
          "minLength": 1,
          "description": "HTTP method for the endpoint (e.g. GET, POST). Defaults to GET. Must be a method the endpoint actually defines."
        }
      },
      "additionalProperties": false
    }
    arguments 21 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 1620a6493f47063f.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/1620a6493f47063f/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/1620a6493f47063f/badge.svg)](https://brick.blue/agent/1620a6493f47063f?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.