norsk

Running · one MCP server fronting every Norwegian public register and business system.

5MCP tools (fixed)
15catalog operations
6providers

The tool count does not grow with the provider count. Operations are rows in a searchable catalog, not tools — which is how this avoids the ~7 400 tools a naive one-tool-per-endpoint build would need.

Connect a harness

Claude Code — remote (this server):

claude mcp add --transport http norsk http://kikobling.hannisdal.dev/mcp

Claude Desktop / Cursor / Windsurf — add to the MCP config file:

{
  "mcpServers": {
    "norsk": {
      "type": "http",
      "url": "http://kikobling.hannisdal.dev/mcp"
    }
  }
}

Local stdio (no network round-trip, for a checkout of the repo):

{
  "mcpServers": {
    "norsk": { "command": "bun", "args": ["run", "/absolute/path/to/norsk/src/mcp/stdio.ts"] }
  }
}

Tools

ToolPurpose
norsk_searchSearch the catalog of Norwegian data operations (company registry, property/addresses, official statistics, exchange rates, weather, accounting systems).
norsk_describeGet the full parameter schema, returned fields and a worked example for one or more operation ids from norsk_search.
norsk_callExecute an operation and get shaped, token-budgeted data back.
norsk_resolveTurn a name, org number or address the user typed into a canonical Norwegian identifier.
norsk_providersList the data providers available, how many operations each has, and whether they are live or mocked.

Providers

ProviderOpsAuthStatus
brreg 5 none live
kartverket 3 none live
met 1 none live
norges-bank 1 none live
ssb 3 none live
tripletex 2 oauth mock

mock means fixture data served through the identical contract, so tier-1/2 providers can be exercised end-to-end before their access approvals land. Every mocked response is labelled source: mock so an agent can never present it as real.

Try it without a harness

# find an operation
curl -s 'http://kikobling.hannisdal.dev/api/v1/search?query=styremedlemmer'

# resolve a name to an org number
curl -s 'http://kikobling.hannisdal.dev/api/v1/resolve?text=Rema%201000'

# call an operation
curl -s 'http://kikobling.hannisdal.dev/api/v1/call' -H 'content-type: application/json' \
  -d '{"id":"brreg.roller.get","params":{"orgnr":"883409442"}}'

Endpoints

POST /mcpStreamable HTTP MCP
GET /healthLiveness + catalog stats
GET /catalog.jsonEvery operation, machine-readable
/api/v1/{search,describe,call,resolve,providers}REST mirror of the tools