Norric Intelligence MCP · v2.1.0

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.

MCP server: https://mcp.norric.io/mcp
Transport: 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
Agent-first access: discovery, 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

TierAccessQuota
Agent freeDiscovery, norric_status_v1, norric_data_freshness_v1No account; abuse controls apply
StandardAll registered toolsNo monthly cap in current backend policy
ComplianceAll registered tools + audit-log accessNo monthly cap in current backend policy

Missing or invalid key returns:

{
  "error": "Invalid API key. Get yours at norric.io/api-keys"
}
Never expose your API key in client-side code, logs, or user-visible output. Keys are associated with your account and rate limits are enforced per key.

Connect your agent

Claude Code and Claude Desktop handle the MCP handshake automatically. For direct HTTP calls, a two-step session initialization is required.

MCP server: https://mcp.norric.io/mcp
Transport: 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.

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

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

ToolDescriptionKey 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_v1Consolidated company risk score by orgnr.
norric_search_v1Company search by name or orgnr.
norric_contagion_map_v1Ownership-network contagion view.

Infrastructure tools

ToolDescription
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

FieldTypeDescription
dataobjectTool-specific payload.
metadataobjectTool, sources, fetch time, confidence, TTL, and cache state.
signalsarrayEvidence used by the tool; empty when not applicable.
warningsarrayFreshness, availability, or pipeline warnings.
Client guidance: Call 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

CodeMeaningWhat 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" }
Client retry guidance — 429: Wait 60 seconds, retry once. If you receive a second 429 in the same session, stop and inform the user. Do not loop.

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.

BandAtomic test USDCNominal
Lookup2,000$0.002
Signal5,000$0.005
Evidence10,000$0.01
Feed / batch20,000$0.02
Heavy synthesis50,000$0.05

Wallet payment flow

  1. Initialize anonymously and call tools/list.
  2. Call kreditvakt_score_company_v1 without payment to receive its x402 v2 exact challenge.
  3. Sign the accepted requirement with the agent wallet.
  4. Retry the same call with the payload in params._meta["x402/payment"].
  5. Read settlement from result._meta["x402/payment-response"].
Facilitator: https://x402-facilitator-production-5948.up.railway.app/
Network: Base Sepolia testnet · eip155:84532
Agent free
Free
discovery and trust checks
✓ tools/list + status
✓ data freshness
Compliance
Custom
audit access
✓ Standard access
✓ Audit-log access

→ Request an API key by email

Changelog

v2.1.0 - September 2026

  • Denmark, Norway and Finland paid routes deployed, not yet queryable - 42 functions registered
  • swedish_company_verify_v1 ($0.002) and swedish_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_KEYS authentication — all 401 errors point to norric.io/api-keys
  • Added /health endpoint returning status, tool count, and version
  • Added Bolagsverket ärenden leading-indicator signal (arende_ankommet_datum, arende_kanal)
  • Fixed all norric.se references → norric.io
  • Batch scoring (kreditvakt_batch_score_v1) now returns full portfolio risk summary
  • norric_company_profile_v1 wired 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
Norric · Developer Guide · v2.1.0 · September 2026 norric.io · edgar@norric.io