European register data
for AI agents.
42 functions are registered across insolvency risk, municipal procurement, company lifecycle, website leads, and BRF intelligence. Some are live, some partial, and some are inactive until their pipelines are connected. Status is shown per tool below. Sweden is the only queryable country today. Denmark, Norway and Finland have deployed paid routes, but their national data is not queryable yet.
https://mcp.norric.io/mcpTransport: Streamable HTTP · FastMCP 3.2.3 · Protocol 2024-11-05
Functions: 42 registered; availability varies by function and tier
Coverage: Swedish company counts and ingestion times are live at mcp.norric.io/health and via
norric_status_v1 (both read the same pipeline run history) · Denmark, Norway and Finland: routes deployed, not queryable · Estonia and France: code-complete behind the same payment gates
tools/list, norric_status_v1, and norric_data_freshness_v1 are free without an API key. Paid tools quote exact test USDC through x402. Base Sepolia testnet only; mainnet is blocked.
Quick start
Connect to the Norric MCP server in under 60 seconds.
Step 1 — Discover without an account
Connect directly to https://mcp.norric.io/mcp. Initialize, keep the returned mcp-session-id, then call tools/list. No API key is needed for discovery, status, freshness, or an x402-gated call.
Step 2 — Claude Code (recommended)
claude mcp add norric https://mcp.norric.io/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Then use any tool directly in Claude Code:
# Score a Swedish company for insolvency risk
mcp__norric__kreditvakt_score_company_v1(orgnr="556012-3456")
# Get this week's procurement call list
mcp__norric__signal_weekly_call_list_v1(vertikal="aldreomsorg", limit=10)
# Check pipeline freshness before acting
mcp__norric__norric_data_freshness_v1()
Step 3 — Muse Code
Add Norric to your Muse Code settings file under mcp_servers. The server is optional so a temporary Norric outage does not stop the whole Muse run.
{
"mcp_servers": {
"norric": {
"transport": "streamable_http",
"url": "https://mcp.norric.io/mcp",
"enabled": true,
"mode": "optional"
}
}
}
Restart Muse Code after saving, ask it to list Norric tools, then call free status/freshness. Paid calls require an x402-capable wallet client; no Norric account is required.
Step 4 — Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"norric": {
"url": "https://mcp.norric.io/mcp",
"transport": "streamable-http",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
Step 5 — Cursor or Windsurf
Edit .cursor/mcp.json:
{
"mcpServers": {
"norric": {
"url": "https://mcp.norric.io/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
Authentication
Agents can initialize and discover tools without an account. Free calls are norric_status_v1 and norric_data_freshness_v1. A payment-gated tool challenges an unpaid call and accepts a signed x402 retry. Other anonymous tool calls return 403. Existing API-key clients may still use Authorization: Bearer or X-Norric-Key.
Authorization: Bearer nrk_your_key_here
Get a key: norric.io/api-keys
Key tiers
| Tier | Access | Quota |
|---|---|---|
| Agent free | Discovery, norric_status_v1, norric_data_freshness_v1 | No account; abuse controls apply |
| Standard | All registered tools | No monthly cap in current backend policy |
| Compliance | All registered tools + audit-log access | No monthly cap in current backend policy |
Missing or invalid key returns:
{
"error": "Invalid API key. Get yours at norric.io/api-keys"
}
Connect your agent
Claude Code and Claude Desktop handle the MCP handshake automatically. For direct HTTP calls, a two-step session initialization is required.
https://mcp.norric.io/mcpTransport: Streamable HTTP (FastMCP 3.2.3)
Protocol version: 2024-11-05
Direct curl — two-step handshake
# Step 1 — Initialize and capture session ID
SESSION=$(curl -si https://mcp.norric.io/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2024-11-05",
"capabilities":{},
"clientInfo":{"name":"curl","version":"1.0"}
}}' \
| grep -i "mcp-session-id" | awk '{print $2}' | tr -d '\r')
# Step 2 — Call a tool
curl -s https://mcp.norric.io/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "mcp-session-id: $SESSION" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{
"name":"kreditvakt_score_company_v1",
"arguments":{"orgnr":"556012-3456"}
}}'
Example: verify a Swedish company (no account)
swedish_company_verify_v1 takes one argument, orgnr_or_name: an organisation number such as 556703-7485 or a company name. Without a payment it returns an x402 challenge instead of data. Testnet only (Base Sepolia, eip155:84532); nothing is charged without a signed retry.
# 1. Unpaid MCP call (use the SESSION from the handshake above, without the Authorization header)
curl -s https://mcp.norric.io/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "mcp-session-id: $SESSION" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"swedish_company_verify_v1",
"arguments":{"orgnr_or_name":"556703-7485"}
}}'
# → payment challenge: 2,000 atomic test USDC on eip155:84532
# Same check over plain REST
curl -si "https://mcp.norric.io/x402/company/verify?orgnr_or_name=556703-7485"
# → HTTP 402, challenge in the payment-required header
Sign the accepted requirement with an x402 wallet client and retry the same call with the payload in params._meta["x402/payment"] (REST: the x402 payment header). A successful answer returns the Norric envelope {data, metadata, signals, warnings}: canonical identity, legal status, insolvency flags, latest registry changes, and per-source observation timestamps with evidence links. Fields Norric does not track return not_tracked. An unknown organisation number returns found=false with warnings, not a guess. Check norric_data_freshness_v1 before relying on any answer.
Health check
curl https://mcp.norric.io/health
# → response includes "status", "mcp_tools", "products", and pipeline freshness
Tools reference
42 functions are registered. Parameters vary by tool: company tools use orgnr or a search string, SIGNAL uses kommunkod and vertikal, Sigvik uses BRF IDs, and SiteLoop uses city or lead fields. Check each signature in your MCP client.
Kreditvakt - Experimental scoring unvalidated
The Kreditvakt public site is paused. The separate Norric API still exposes the tools listed below. Scoring pipeline status is available at mcp.norric.io/health; pipeline activity is not evidence of predictive accuracy. Early-warning performance and backtest results have not been verified. Scores must not be treated as validated insolvency predictions.
| Tool | Description | Key params |
|---|---|---|
| kreditvakt_score_company_v1 | Insolvency risk score on a 0–20 scale (20 = severe). Accepts orgnr only; use norric_search_v1 to resolve a name first. |
orgnr |
| kreditvakt_batch_score_v1 | Score up to 500 organisation numbers in one call. Returns a portfolio risk summary. | orgnrs[] |
| kreditvakt_debt_signals_v1 | Skatteverket and Kronofogden debt signals only. | orgnr |
| kreditvakt_bankruptcy_status_v1 | Bolagsverket konkurs status and pending ärenden. | orgnr |
Implemented response fields — kreditvakt_score_company_v1:
{
"data": {
"orgnr": "5560123456",
"score_source": "database",
"risk_score": 14,
"risk_band": 4,
"risk_tier": "HIGH",
"scale": "0-20",
"polarity": "higher_is_worse",
"distress_probability": 0.7,
"scored_at": "2026-09-14T06:56:00Z",
"data_freshness_hours": 1.2,
"stale_data": false
},
"metadata": { /* tool, source, fetched_at, confidence, TTL, cache state */ },
"signals": [],
"warnings": []
}
The values are illustrative; field names match the implementation.
SIGNAL — Municipal procurement activation in progress
Registered but inactive: the current SIGNAL functions return empty or zero-valued results with warnings while ingestion and contract data are disconnected. Do not treat these functions as live procurement intelligence yet.
| Tool | Description | Key params |
|---|---|---|
| signal_score_municipality_v1 | Inactive. Returns a zero-valued placeholder and a pipeline-not-live warning. | kommunkod, vertikal |
| signal_weekly_call_list_v1 | Inactive. Returns an empty call list until a live source is connected. | vertikal, limit |
| signal_municipality_briefing_v1 | Inactive. Returns an empty briefing with a warning. | kommunkod, vertikal |
| signal_contract_expiry_alerts_v1 | Inactive. Returns no expiries while the contract database is disconnected. | vertikal, days_ahead |
| signal_sweden_pulse_v1 | Inactive. Returns a zero-valued placeholder with a warning. | vertikal (optional) |
Verticals: aldreomsorg · skola · it_digital · fastighet · hr · bygg · annat
Municipalities: 4-digit kommunkod, e.g. 1280 (Malmö), 0180 (Stockholm), 1480 (Göteborg).
Sigvik - BRF tools unverified
The Sigvik public site is paused. The tool names below remain documented, but downstream availability, coverage and scoring performance have not been verified. No scored-BRF count or accuracy claim is offered.
| Tool | Description | Key params |
|---|---|---|
| sigvik_score_brf_v1 | Experimental BRF score tool; availability and scoring validity unverified. | brf_id |
| sigvik_brf_avgift_v1 | Inactive. Returns null/empty fee fields with a pipeline warning. | brf_id |
| sigvik_brf_flags_v1 | Inactive. Returns no flags while the flag pipeline is disconnected. | brf_id |
Vigil and SiteLoop inactive
Vigil's three lifecycle functions and SiteLoop's two lead-pipeline functions are registered, but their upstream pipelines are not live. They return empty or placeholder data with warnings.
New cross-portfolio functions
| norric_score_v1 | Consolidated company risk score by orgnr. |
| norric_search_v1 | Company search by name or orgnr. |
| norric_contagion_map_v1 | Ownership-network contagion view. |
Infrastructure tools
| Tool | Description |
|---|---|
| norric_company_profile_v1 | Company profile tool with experimental Kreditvakt fields; predictive performance unverified. |
| norric_explain_score_v1 | EU AI Act Article 9 provenance chain for any score. |
| norric_data_freshness_v1 | Ingestion freshness per source registry. Run before consequential workflows. |
| norric_status_v1 | Live status of all products and data pipelines. |
Response envelopes
Most product tools return {data, metadata, signals, warnings}. The two provenance helpers use the alternate NorricResponse shape. Authentication failures are bare {error} objects with HTTP 401.
{
"data": { /* tool-specific payload */ },
"metadata": {
"response_id": "nrsp_abc123",
"tool": "kreditvakt_score_company_v1",
"source": ["skatteverket", "bolagsverket"],
"fetched_at": "2026-09-14T06:56:00Z",
"confidence": 0.87,
"cache_ttl_seconds": 3600,
"is_cached": false
},
"signals": [],
"warnings": []
}
Field reference
| Field | Type | Description |
|---|---|---|
| data | object | Tool-specific payload. |
| metadata | object | Tool, sources, fetch time, confidence, TTL, and cache state. |
| signals | array | Evidence used by the tool; empty when not applicable. |
| warnings | array | Freshness, availability, or pipeline warnings. |
norric_data_freshness_v1 before any consequential workflow (credit approval, sales outreach, procurement bid). If any source is older than 7 days, note this in your output.
Error codes
| Code | Meaning | What to do |
|---|---|---|
| 401 | Missing or invalid API key | Get key at norric.io/api-keys |
| 404 | Company or entity not found | Verify orgnr format: XXXXXX-XXXX (10 digits) |
| 429 | Rate limit exceeded | Wait 60 seconds, retry with exponential backoff |
| 503 | Data source temporarily unavailable | Retry after 5 minutes |
Authentication failures use a bare error object:
{ "error": "Invalid API key. Get yours at norric.io/api-keys" }
Pricing
Agent prices are exact per call. Discovery, status, and freshness are free. Quoted today: swedish_company_verify_v1 at 2,000 atomic test USDC ($0.002, the trust anchor) and swedish_company_changes_v1 at 20,000 ($0.02, the changes feed). Network: Base Sepolia testnet (eip155:84532); mainnet is blocked.
| Band | Atomic test USDC | Nominal |
|---|---|---|
| Lookup | 2,000 | $0.002 |
| Signal | 5,000 | $0.005 |
| Evidence | 10,000 | $0.01 |
| Feed / batch | 20,000 | $0.02 |
| Heavy synthesis | 50,000 | $0.05 |
Wallet payment flow
- Initialize anonymously and call
tools/list. - Call
kreditvakt_score_company_v1without payment to receive its x402 v2 exact challenge. - Sign the accepted requirement with the agent wallet.
- Retry the same call with the payload in
params._meta["x402/payment"]. - Read settlement from
result._meta["x402/payment-response"].
https://x402-facilitator-production-5948.up.railway.app/Network: Base Sepolia testnet ·
eip155:84532Changelog
v2.1.0 - September 2026
- Denmark, Norway and Finland paid routes deployed, not yet queryable - 42 functions registered
swedish_company_verify_v1($0.002) andswedish_company_changes_v1($0.02) are the first x402 paid products- Anonymous discovery, status and freshness remain free - no account or API key needed
v2.0.0 — April 2026
- Added
NORRIC_API_KEYSauthentication — all 401 errors point tonorric.io/api-keys - Added
/healthendpoint returning status, tool count, and version - Added Bolagsverket ärenden leading-indicator signal (
arende_ankommet_datum,arende_kanal) - Fixed all
norric.sereferences →norric.io - Batch scoring (
kreditvakt_batch_score_v1) now returns full portfolio risk summary norric_company_profile_v1wired to Kreditvakt engine
v1.1.0 — April 2026
- Added
norric_explain_score_v1— EU AI Act Article 9 provenance chain - Added
norric_data_freshness_v1— per-registry ingestion freshness - Added provenance layer to NorricResponse (21 tools total)
- Supabase provenance table wired to
provenance_records
v1.0.0 — April 2026
- Initial release: 19 tools across SIGNAL, Kreditvakt, and Sigvik
- FastMCP 3.2.3 Streamable HTTP transport
- Railway deployment with nixpacks builder
- NorricResponse envelope with confidence, TTL, and source tracing