Nordic Data

io.github.Mnymann由 GitHub 帳號 Mnymann 發布v1.5.6更新於 Oct 25, 2026

Company, KYB, VAT, sanctions, LEI and address data for 15 EU countries.

已驗證Streamable HTTP可網頁執行金融資料與分析商業與電商

概覽

AI 產生的概覽

Nordic Data 讓助理查詢歐洲官方企業資料:公司資訊、營業稅驗證、KYB 報告、制裁篩查、LEI 與地址資料,涵蓋 15 個國家。

可以做什麼
查詢 15 個歐洲國家的公司登記資料及含產業統計的增強公司紀錄,並提供法國公司變更時間軸。對照 VIES 驗證 27 個歐盟成員國的營業稅號。將最多 1000 個人名或公司名與聯合國、歐盟、英國及美國 OFAC 制裁名單和 PEP 名單進行篩查。產出完整 KYB 報告,彙整身分、人員、財務、LEI、營業稅、制裁與風險訊號。透過 GLEIF 解析 LEI,包括母公司與子公司關係,並提供含座標的地址自動完成。藉由以 OpenAPI 為基礎的 meta 工具探索並呼叫其他唯讀 API 端點。
適用情境
適合在客戶或供應商上線、開立發票、付款或簽約前核實交易對象,或需要處理歐洲各司法管轄區的公司、營業稅、LEI 或地址資料時使用。
執行需求
需要來自 addonnordic.com 的 Nordic Data API 金鑰:本機 npm 套件透過 NORDIC_API_KEY 提供,驗證型遠端端點透過 Authorization bearer 標頭提供。npx 套件需要 Node.js,並需能連線至託管 API。選用 NORDIC_DEFAULT_COUNTRY 與 NORDIC_VERBOSE_ERRORS。
安裝前請注意
需要 API 金鑰,每次查詢依配額計費;免費額度有限,NL 與 DE 需付費方案,且 NL 與 DE 呼叫會消耗更多配額單位。公開遠端端點無需金鑰,但費用計入營運方自己的金鑰,並依 IP 限流。回傳結果是決策參考訊號,並非法律或法遵結論,應獨立查證。服務會將查詢傳送給第三方登記機關與制裁資料來源。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Nordic Data,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.Mnymann%2Fnordic-data/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "nordic-data": {
      "type": "http",
      "url": "https://nordic-data-mcp-production.up.railway.app/mcp/auth",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

Nordic Data MCP Server

[npm version] [License: MIT]

A Model Context Protocol server that gives AI agents (Claude, Cursor, Claude Code, ChatGPT, Copilot, etc.) direct access to official European business data across 15 European countries.

Look up companies, validate VAT numbers, run KYB reports, screen against sanctions lists, autocomplete addresses, and resolve LEI ownership — all from inside your AI assistant.

DK · NO · SE · FI · IE · UK · FR · DE · CZ · PL · LV · EE · NL · BE · LU

NL and DE require a Starter+ subscription (free-tier API keys receive HTTP 402 upgrade_required). On paid tiers, NL calls cost 5x quota units and DE calls cost 3x; all other countries cost 1x.


Quick start

1. Get an API key

Sign up at addonnordic.com and grab your NORDIC_API_KEY. Free tier available.

2. Add to Claude Desktop

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

json
{  "mcpServers": {    "nordic-data": {      "command": "npx",      "args": ["-y", "nordic-data-mcp"],      "env": {        "NORDIC_API_KEY": "YOUR_KEY_HERE"      }    }  }}

Restart Claude Desktop. You should see "nordic-data" appear in the tools menu.

3. Add to Cursor

In Cursor settings → MCP → Add new server, or edit ~/.cursor/mcp.json:

json
{  "mcpServers": {    "nordic-data": {      "command": "npx",      "args": ["-y", "nordic-data-mcp"],      "env": {        "NORDIC_API_KEY": "YOUR_KEY_HERE"      }    }  }}

4. Add to Claude Code

bash
claude mcp add nordic-data --env NORDIC_API_KEY=YOUR_KEY_HERE -- npx -y nordic-data-mcp

5. Add to ChatGPT (Pro, Business, or Enterprise)

ChatGPT supports remote MCP servers as custom connectors. No API key needed from you — the hosted server handles upstream authentication.

  1. ChatGPT → Settings → Connectors → Add custom connector
  2. URL: https://nordic-data-mcp-production.up.railway.app/mcp
  3. Done — all 11 tools are available immediately.

Custom connectors require a ChatGPT Pro, Business, Team, or Enterprise plan.

6. Add to Claude.ai (web)

Same hosted endpoint, no local install:

  1. Claude.ai → Settings → Connectors → Add custom connector
  2. URL: https://nordic-data-mcp-production.up.railway.app/mcp
  3. Done.

Available tools

ToolWhat it does
lookup_companyBasic company data from official registries (CVR, Brønnøysund, Bolagsverket, Companies House, INSEE, etc.)
validate_vatValidate a VAT number for the 27 EU member states against VIES
screen_sanctionsBulk screen up to 1000 names against UN/EU/UK/OFAC/PEP lists (UK = FCDO UK Sanctions List; 745K+ entries)
kyb_fullMaster Know-Your-Business report — identity, persons, financials, LEI, VAT, sanctions, adverse media, risk score
autocomplete_addressAddress autocomplete with coordinates for DK (DAWA), NO (Kartverket), FR (BAN), SE and FI (OpenStreetMap Nominatim)
lookup_leiGLEIF Legal Entity Identifier lookup — forward, reverse, and parent/children relationships
company_enrichedCompany registry data + national industry statistics in one call (DK, NO, SE, FI)
fr_historyFrench company history timeline (name, activity, status, legal-form changes) from INSEE Sirene bitemporal data
list_endpointsDiscovery: list all read-only data endpoints in the underlying API (230+), with optional keyword filter
get_endpoint_schemaDiscovery: full parameter + response schema for one endpoint, before calling it
call_endpointDiscovery: execute a read-only request (GET/HEAD, plus three allowlisted POST screening queries) against any discovered endpoint

Example agent prompts

"Look up CVR 61056416 in Denmark" → calls lookup_company { country: "dk", id: "61056416" } → Carlsberg A/S

"Run a full KYB report on Equinor (NO 923609016)" → calls kyb_full { country: "no", id: "923609016" }

"Is LU26375245 a valid VAT number?" → calls validate_vat { country: "LU", vat_number: "26375245" }

"Screen these names against sanctions: Vladimir Putin, Acme Corp, John Smith" → calls screen_sanctions { names: [...] }

"Find the LEI for Tesco UK (00445790) and include parent and subsidiaries" → calls lookup_lei { mode: "reverse", country: "uk", id: "00445790" }


Country / ID format reference

CountryID typeFormat
DKCVR8 digits
NOOrganisasjonsnummer9 digits
SEOrganisationsnummer10 digits (with or without dash)
FIY-tunnusNNNNNNN-D (7 digits + check digit)
IECRO number1–7 digits
UKCompanies House8 chars (digits, or prefix like SC, NI, OC)
FRSIREN9 digits
DELEI or HRBLEI = 20 alphanum; HRB = prefix + digits
CZIČO8 digits
PLNIP / REGON / KRSNIP=10, REGON=9/14, KRS=10
LVReģistrācijas nr.11 digits
EERegistrikood8 digits
NLKvK-nummer8 digits
BEBCE/KBO10 digits
LURCSLB + digits

The table above applies to lookup_company, kyb_full and lookup_lei (reverse mode). company_enriched covers DK, NO, SE and FI; autocomplete_address covers DK, NO, SE, FI and FR.

For validate_vat, country codes are uppercase VIES codes for the 27 EU member states — use EL (not GR) for Greece. The United Kingdom and Norway are not supported.


Configuration

The only environment variable you need to set is:

VariableRequiredDescription
NORDIC_API_KEYyesYour API key from addonnordic.com

That's it. The MCP server connects to the hosted Nordic Data API for you.


Self-hosting (remote HTTP transport)

For remote MCP hosting (e.g. Anthropic Connectors, Smithery, web-based clients), deploy the bundled Streamable HTTP transport:

bash
npm installnpm run buildNORDIC_API_KEY=sk_... npm run start:http   # listens on :$PORT (default 3000)

Endpoints:

  • GET /healthz — health check (returns version + status)
  • ALL /mcp — public MCP endpoint. No key required; all upstream calls are billed to the server's own NORDIC_API_KEY (freemium / discovery). Per-IP rate-limited.
  • ALL /mcp/auth — authenticated MCP endpoint. Requires Authorization: Bearer ndk_... on every request; each call is billed to that customer's own key + quota.

Both are session-based via the Mcp-Session-Id header.

Connecting a remote client

This server uses static API-key authentication, not OAuth. How you connect depends on your client:

  • Header-capable clients (Claude Code, Cursor, Smithery, Claude.ai / ChatGPT custom connectors): point them at …/mcp/auth and supply your key as Authorization: Bearer ndk_.... Each request is billed to your own tenant + quota.
  • Generic / auto-discovery clients that only know "URL + OAuth": point them at the public …/mcp (no key). Otherwise such clients attempt OAuth Dynamic Client Registration (POST /register) and fail — this server has no OAuth endpoints by design and answers them with a clear JSON oauth_not_supported error (not a sign-in flow).
  • Local clients: prefer the stdio package — npx -y nordic-data-mcp with NORDIC_API_KEY set (see Quick start above).

Full OAuth 2.1 (so arbitrary external clients can self-onboard with their own key) is a planned Phase-2 item, not yet implemented.

A railway.toml is included for one-click deploy on Railway:

  1. New Project → Deploy from GitHub repo → select Mnymann/nordic-data-mcp
  2. Set Root Directory to nordic-data-mcp
  3. Add env var NORDIC_API_KEY
  4. Railway auto-detects the config, builds, and exposes a public HTTPS URL

Design notes

  • Thin adapter. No business logic, no caching, no transformations. Each tool maps 1:1 to a Nordic Data API endpoint.
  • No PII in logs. Request and response bodies are never logged.
  • API key required. The process refuses to start without NORDIC_API_KEY.
  • Rate limiting. The backend enforces per-key quotas; the HTTP transport additionally applies a per-IP limit on the public /mcp endpoint as defense-in-depth (tunable via PUBLIC_RATE_LIMIT / PUBLIC_RATE_WINDOW_MS). Caching is handled upstream.
  • Inputs are validated with zod before any HTTP call.

Contributing

Issues and PRs welcome at github.com/Mnymann/nordic-data-mcp.

Please do not include API keys, request bodies, or response payloads in bug reports.


Disclaimer

Nordic Data returns informational decision-support aggregated from official and public sources. It is not legal, compliance, financial, or professional advice, and not a definitive determination. KYB reports, sanctions/PEP matches, adverse-media hits, and risk scores are signals to review, not verdicts — verify independently and apply your own professional judgment before acting. Use of the service is subject to the AddonNordic Terms.


License

MIT © AddonNordic ApS

來源:README.md,提交 be2733a

工具

11

lookup_company

Look Up Company

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.

輸入參數id必填country必填

validate_vat

Validate VAT Number

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.

輸入參數country必填vat_number必填

screen_sanctions

Screen Sanctions and PEP Lists

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.

輸入參數fuzzynames必填min_scorebirth_yearentity_type

kyb_full

Full KYB Report

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.

輸入參數id必填country必填

autocomplete_address

Autocomplete Address

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.

輸入參數query必填country必填

lookup_lei

Look Up LEI

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.

輸入參數idleimode必填countryinclude_relationships

company_enriched

Enriched Company Profile

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).

輸入參數id必填country必填

fr_history

French Company History

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.

輸入參數siren必填

list_endpoints

List API Endpoints

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.

輸入參數search

get_endpoint_schema

Get Endpoint Schema

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.

輸入參數path必填method

call_endpoint

Call API Endpoint

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.

輸入參數path必填methodparams

版本歷史

1
  1. v1.5.6最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。