Lead Strategist: Danish CVR company data

Danish company data (CVR) and annual-report financials for B2B lead research. Read-only.

Should I use this

Quality & Safety

A
Description quality
92%
Schema completeness
82%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,124Tokens (tool definitions)
~3.8 KBTypical response size
Moderate attention impact (1.66% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cvr": {
      "url": "https://leadstrategist.dk/mcp"
    }
  }
}

Remote endpoints

https://leadstrategist.dk/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_companies(industry_code, industry_contains, status_contains, company_name_contains, min_revenue, ...)

Search Danish companies in the CVR read model (read-only). Filters include industry, size, municipality (kommune), city/postnummer and region. Prefer exclude_reklamebeskyttelse=true for marketing leads.

Input Schema

{
  "type": "object",
  "properties": {
    "industry_code": {
      "type": "string",
      "maxLength": 32,
      "description": "Exact Danish industry code (DB25/NACE, up to 6 digits), e.g. \"621000\" (computer programming)."
    },
    "industry_contains": {
      "type": "string",
      "maxLength": 120,
      "description": "Case-insensitive text match on the industry name and secondary industries (Danish), e.g. \"tømrer\", \"software\" or \"restaurant\"."
    },
    "status_contains": {
      "type": "string",
      "maxLength": 80,
      "description": "Case-insensitive part of the CVR status (Danish), e.g. \"normal\" or \"aktiv\" for active companies, \"konkurs\" for bankruptcy."
    },
    "company_name_contains": {
      "type": "string",
      "maxLength": 120,
      "description": "Case-insensitive part of the company name, e.g. \"Novo\" or \"Carlsberg\"."
    },
    "min_revenue": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000000000,
      "description": "Minimum revenue (omsætning) in DKK from the latest annual report, e.g. 10000000 for 10 million DKK."
    },
    "max_revenue": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000000000,
      "description": "Maximum revenue in DKK from the latest annual report, e.g. 50000000 for 50 million DKK."
    },
    "min_employees": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Minimum average number of employees from the latest annual report, e.g. 10."
    },
    "max_employees": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Maximum average number of employees from the latest annual report, e.g. 50."
    },
    "municipality": {
      "type": "string",
      "minLength": 2,
      "maxLength": 60,
      "description": "Municipality (kommune) of the current CVR address, by name or code, e.g. 'Aarhus', 'Københavns Kommune' or '751'."
    },
    "city": {
      "type": "string",
      "minLength": 2,
      "maxLength": 60,
      "description": "Postal town (postdistrikt) as a prefix match, or a 4-digit postal code, e.g. 'Aarhus' (matches 'Aarhus C' and 'Aarhus N') or '8000'."
    },
    "region": {
      "type": "string",
      "minLength": 3,
      "maxLength": 40,
      "description": "Danish region, e.g. 'Midtjylland'. One of Hovedstaden, Sjælland, Syddanmark, Midtjylland, Nordjylland ('Region ' prefix optional)."
    },
    "exclude_reklamebeskyttelse": {
      "type": "boolean",
      "default": true,
      "description": "Leave out companies with reklamebeskyttelse (marketing protection, may not be contacted for marketing). Default true; set false only for research, not outreach."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 20,
      "description": "Number of companies to return (1 to 50), e.g. 20. Default 20."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000,
      "default": 0,
      "description": "Number of results to skip, for paging, e.g. 20 for page 2 with limit 20. Default 0."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_company(cvrnummer)

Get one company snapshot by 8-digit CVR number (read-only).

Input Schema

{
  "type": "object",
  "properties": {
    "cvrnummer": {
      "type": "string",
      "pattern": "^\\d{8}$",
      "description": "Danish CVR number, exactly 8 digits as a string, e.g. \"24256790\" (Novo Nordisk A/S). Get it from search_companies or recommend_leads."
    }
  },
  "required": [
    "cvrnummer"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_financials(cvrnummer, limit, year)

Get structured financial history for one CVR (read-only).

Input Schema

{
  "type": "object",
  "properties": {
    "cvrnummer": {
      "type": "string",
      "pattern": "^\\d{8}$",
      "description": "Danish CVR number, exactly 8 digits as a string, e.g. \"24256790\" (Novo Nordisk A/S). Get it from search_companies or recommend_leads."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10,
      "description": "Maximum number of annual statements to return, newest first (1 to 50), e.g. 5. Default 10."
    },
    "year": {
      "type": "integer",
      "minimum": 1990,
      "maximum": 2100,
      "description": "Only return the fiscal year whose period ends in this calendar year, e.g. 2024."
    }
  },
  "required": [
    "cvrnummer"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢recommend_leads(industry_code, industry_contains, status_contains, company_name_contains, min_revenue, ...)

Ranked lead shortlist from CVR filters (read-only). Scores the 500 highest-revenue matches (revenue, employees, email, phone) and returns them best first; page with limit and offset. Includes GDPR contact warnings.

Input Schema

{
  "type": "object",
  "properties": {
    "industry_code": {
      "type": "string",
      "maxLength": 32,
      "description": "Exact Danish industry code (DB25/NACE, up to 6 digits), e.g. \"621000\" (computer programming)."
    },
    "industry_contains": {
      "type": "string",
      "maxLength": 120,
      "description": "Case-insensitive text match on the industry name and secondary industries (Danish), e.g. \"tømrer\", \"software\" or \"restaurant\"."
    },
    "status_contains": {
      "type": "string",
      "maxLength": 80,
      "description": "Case-insensitive part of the CVR status (Danish), e.g. \"normal\" or \"aktiv\" for active companies, \"konkurs\" for bankruptcy."
    },
    "company_name_contains": {
      "type": "string",
      "maxLength": 120,
      "description": "Case-insensitive part of the company name, e.g. \"Novo\" or \"Carlsberg\"."
    },
    "min_revenue": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000000000,
      "description": "Minimum revenue (omsætning) in DKK from the latest annual report, e.g. 10000000 for 10 million DKK."
    },
    "max_revenue": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000000000,
      "description": "Maximum revenue in DKK from the latest annual report, e.g. 50000000 for 50 million DKK."
    },
    "min_employees": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Minimum average number of employees from the latest annual report, e.g. 10."
    },
    "max_employees": {
      "type": "integer",
      "minimum": 0,
      "maximum": 1000000,
      "description": "Maximum average number of employees from the latest annual report, e.g. 50."
    },
    "municipality": {
      "type": "string",
      "minLength": 2,
      "maxLength": 60,
      "description": "Municipality (kommune) of the current CVR address, by name or code, e.g. 'Aarhus', 'Københavns Kommune' or '751'."
    },
    "city": {
      "type": "string",
      "minLength": 2,
      "maxLength": 60,
      "description": "Postal town (postdistrikt) as a prefix match, or a 4-digit postal code, e.g. 'Aarhus' (matches 'Aarhus C' and 'Aarhus N') or '8000'."
    },
    "region": {
      "type": "string",
      "minLength": 3,
      "maxLength": 40,
      "description": "Danish region, e.g. 'Midtjylland'. One of Hovedstaden, Sjælland, Syddanmark, Midtjylland, Nordjylland ('Region ' prefix optional)."
    },
    "exclude_reklamebeskyttelse": {
      "type": "boolean",
      "default": true,
      "description": "Leave out companies with reklamebeskyttelse (marketing protection, may not be contacted for marketing). Default true; set false only for research, not outreach."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 25,
      "default": 10,
      "description": "Number of leads to return (1 to 25), e.g. 10. Default 10."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 499,
      "default": 0,
      "description": "Number of ranked leads to skip, for paging, e.g. 10 for page 2 with limit 10. Default 0. Ranking covers the 500 highest-revenue matches, so offset is at most 499."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_data_dictionary

Static documentation for the CVR read model and tool usage rules (no database writes).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools
verifiedversion not recorded5 tools
auth requiredversion not recorded—