{
  "markdown": "# Nummeropslag API\n\n![API](https://img.shields.io/badge/API-REST-009688)\n![OpenAPI](https://img.shields.io/badge/OpenAPI-3.1-6BA539?logo=openapiinitiative&logoColor=white)\n![Auth](https://img.shields.io/badge/auth-API%20key-blue)\n![Region](https://img.shields.io/badge/region-Denmark%20%F0%9F%87%A9%F0%9F%87%B0-C8102E)\n![Examples](https://img.shields.io/badge/examples-curl%20%C2%B7%20python%20%C2%B7%20node%20%C2%B7%20php-lightgrey)\n![MCP](https://img.shields.io/badge/MCP-server-7C4DFF?logo=anthropic&logoColor=white)\n![License](https://img.shields.io/badge/examples%20license-MIT-green)\n\nPublic **Partner API** + **MCP server** for Danish phone-number lookup, caller-ID and spam/trust signals.\n\n<!-- mcp-name: io.github.andrey-tut/nummeropslag -->\n\nIdentify who is calling from a Danish number: company from the official **CVR** register,\n**telecom operator**, number type, and a **spam/trust verdict** based on anonymous user\nreports. Powered by official open data — not scraping. Use it from any HTTP client, or plug the\n**[MCP server](#mcp-server-ai-agents-)** straight into Claude and other AI agents.\n\n> 🌐 Service: **[nummeropslag.dk](https://nummeropslag.dk)** · 🔑 Get a key: **[/api-noegle](https://nummeropslag.dk/api-noegle)** · 📖 API reference: **[Redoc](https://andrey-tut.github.io/nummeropslag-api/)** · 🧪 Live sandbox: **[/api-reference](https://nummeropslag.dk/api-reference)** · 🤖 [MCP](#mcp-server-ai-agents-)\n>\n> This repository contains **only public API docs, the OpenAPI spec, client examples and the MCP server**. The backend source is private.\n\n---\n\n## Authentication\n\nAll endpoints require an API key, sent in the `X-API-Key` header:\n\n```http\nX-API-Key: npk_your_key_here\n```\n\nEach key has a **plan**, a set of **scopes** (`lookup`, `spam`, `operator`) and a **request quota**.\nCheck your key status any time via `GET /api/v1/partner/me`.\n\nBase URL: `https://nummeropslag.dk/api/v1`\n\n---\n\n## Endpoints\n\n| Method | Endpoint | Scope | Description |\n|---|---|---|---|\n| GET | `/partner/lookup/{e164}` | `lookup` | Full lookup — operator, CVR companies, spam/trust signals |\n| GET | `/partner/spam/{e164}` | `spam` | Compact spam/trust verdict only |\n| GET | `/partner/operator/{e164}` | `operator` | Telecom operator + number type |\n| GET | `/partner/search?q=` | `lookup` | Search companies by name (CVR) |\n| GET | `/partner/me` | — | Your key status: plan, scopes, quota/usage |\n\n`{e164}` accepts an 8-digit Danish number or full E.164 — e.g. `33633363` or `+4533633363`.\n\nFull machine-readable contract: [`openapi/openapi.yaml`](openapi/openapi.yaml) · [`openapi/openapi.json`](openapi/openapi.json).\n\n---\n\n## Quick start\n\n```bash\nexport NUMMEROPSLAG_API_KEY=npk_your_key_here\n\ncurl -H \"X-API-Key: $NUMMEROPSLAG_API_KEY\" \\\n  https://nummeropslag.dk/api/v1/partner/spam/33633363\n```\n\n## Client examples\n\nReady-to-run, dependency-free clients in [`examples/`](examples/):\n\n| Language | File | Run |\n|---|---|---|\n| Bash / curl | [`examples/curl.sh`](examples/curl.sh) | `./curl.sh 33633363` |\n| Python (stdlib) | [`examples/python_client.py`](examples/python_client.py) | `python3 python_client.py 33633363` |\n| Node.js 18+ | [`examples/node_client.js`](examples/node_client.js) | `node node_client.js 33633363` |\n| PHP | [`examples/php_client.php`](examples/php_client.php) | `php php_client.php 33633363` |\n\nAll read the key from the `NUMMEROPSLAG_API_KEY` environment variable.\n\n---\n\n## Workflow integrations\n\nUse Nummeropslag as native nodes and tools in popular automation and AI workflow\nbuilders:\n\n| Platform | Integration | Location |\n|---|---|---|\n| n8n | Community node with five operations and AI Tool support | [`integrations/n8n`](integrations/n8n) |\n| Dify | Installable tool plugin for Workflows, Chatflows and Agents | [`integrations/dify`](integrations/dify) |\n| Langflow | Custom component with Tool Mode support | [`integrations/langflow`](integrations/langflow) |\n| Flowise | Ready-to-paste Custom Tool functions and schemas | [`integrations/flowise`](integrations/flowise) |\n\nThe integrations store the API key in each platform's credential/secret system\nand send queries only to `https://nummeropslag.dk`.\n\n---\n\n## MCP server (AI agents) 🤖\n\nGive your AI agent (Claude Desktop, Claude Code, or any **Model Context Protocol** client)\ndirect access to Danish phone-number data. The server in [`mcp/`](mcp/) wraps the Partner API\nas MCP tools — same official data, same privacy rules (no names of private individuals).\n\n### One-click desktop installation\n\nDownload the latest `nummeropslag-mcp-*.mcpb` bundle from\n[GitHub Releases](https://github.com/andrey-tut/nummeropslag-api/releases), open it with a\ncompatible desktop client, and enter your Nummeropslag API key when prompted. The bundle uses\nthe managed `uv` runtime, so users do not need to install Python dependencies manually.\n\nThe canonical registry identifier is `io.github.andrey-tut/nummeropslag`.\n\n### Docker\n\nThe same stdio server is published as a public OCI image:\n\n```bash\ndocker run --rm -i \\\n  -e NUMMEROPSLAG_API_KEY=npk_your_key_here \\\n  ghcr.io/andrey-tut/nummeropslag-mcp:latest\n```\n\nMCP calls are metered against a **separate MCP quota** (not your REST quota); the server sends\n`X-Client: mcp` automatically.\n\n**Tools**\n\n| Tool | Description |\n|---|---|\n| `lookup_number(number)` | Full record: company (CVR), operator, spam/trust, comments |\n| `check_spam(number)` | Compact spam/scam verdict (caller-ID style) |\n| `get_operator(number)` | Operator + number type only (cheapest) |\n| `search_businesses(query, limit)` | Find Danish companies by name (CVR) |\n| `api_status()` | Your key's scopes + quota usage |\n\n**Setup — via PyPI (recommended)**\n\n```bash\npip install nummeropslag-mcp                    # or: uvx nummeropslag-mcp\nexport NUMMEROPSLAG_API_KEY=npk_your_key_here   # https://nummeropslag.dk/api-noegle\nnummeropslag-mcp                                # stdio transport\n```\n\n**Add to Claude Desktop** (`claude_desktop_config.json`) **or Claude Code** (`.mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"nummeropslag\": {\n      \"command\": \"nummeropslag-mcp\",\n      \"env\": { \"NUMMEROPSLAG_API_KEY\": \"npk_your_key_here\" }\n    }\n  }\n}\n```\n\n<details><summary>Run from source instead (no PyPI)</summary>\n\n```bash\npip install \"mcp[cli]\" httpx\npython mcp/server.py\n```\n\n…and use `\"command\": \"python\", \"args\": [\"/absolute/path/to/nummeropslag-api/mcp/server.py\"]` in the config above.\n\n</details>\n\nRestart your client, then ask e.g. *\"Is +45 70 10 20 30 spam?\"* or *\"Who owns 33 63 33 63?\"*.\n\n---\n\n## Errors\n\nErrors use a consistent envelope:\n\n```json\n{ \"error\": { \"code\": \"forbidden\", \"message\": \"…\", \"details\": {} } }\n```\n\nCommon codes: `unauthorized` (missing/invalid key), `forbidden` (scope not allowed),\n`rate_limited` (quota exceeded), `not_found`.\n\n## Data & privacy\n\n- Core data: official **CVR** (companies + production units) and the Danish **number plan** (SDFI, CC0).\n- Spam verdicts use **k-anonymity** — a public \"spam\" label requires several independent reports.\n- **Names of private individuals are never exposed.** Contacts are never uploaded (GDPR-compliant).\n\n## Privacy Policy\n\nThe MCP server sends only the phone number or business query requested by the user to the\nfirst-party Nummeropslag API. It does not read conversations, files, contacts, or call logs.\nSee the full [Nummeropslag privacy policy](https://nummeropslag.dk/privatlivspolitik) for data\ncollection, use, retention, sharing, and contact information.\n\n## License\n\nThe client examples and OpenAPI spec in this repository are released under the **MIT License**\n(see [LICENSE](LICENSE)) — copy and adapt them freely. The Nummeropslag API service itself and its\ndata are proprietary; use is governed by the terms at [nummeropslag.dk](https://nummeropslag.dk).\n",
  "bytes": 7768,
  "sha": "ff8bad6d650dc986bf96a313e15bec2462ec8323b324e0253152a2d7d1340e73",
  "repo_slug": "andrey-tut/nummeropslag-api",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_andrey_tut_nummeropslag_2803cd22/readme"
}