Lead Strategist: Danish CVR company data
Server Details
Danish company data (CVR) and annual-report financials for B2B lead research. Read-only.
- Status
- Healthy
- Uptime
- 84.5% over 23 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 5 tools
get_company (single snapshot) vs get_financials (financial history) are clearly distinct, and get_data_dictionary is a standalone docs tool. search_companies and recommend_leads both take CVR filters and could be confused, but the ranking/scoring behavior of recommend_leads differentiates it adequately.
All five tools follow a consistent verb_noun snake_case pattern: get_company, get_data_dictionary, get_financials, recommend_leads, search_companies. No style deviations.
Five tools is well-scoped for a read-only CVR data provider covering snapshot lookup, financials, search, lead ranking, and documentation. Each tool earns its place with no redundancy.
The read-only lifecycle is well covered: point lookup, financials, filtered search, ranked leads, and a data dictionary. Minor gaps exist around bulk multi-CVR retrieval and ownership/management data common in CVR, but the lead-gen workflow is fully supported.
Available Tools
5 toolsget_companyGet company by CVRCRead-onlyIdempotentInspect
Get one company snapshot by 8-digit CVR number (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| cvrnummer | Yes | Danish CVR number, exactly 8 digits as a string, e.g. "24256790" (Novo Nordisk A/S). Get it from search_companies or recommend_leads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the parenthetical '(read-only)' merely repeats structured data. The description adds nothing about behavior beyond that — no not-found handling, no rate limits, no indication of how fresh the 'snapshot' is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource and key stated first. It is tight, though the trailing '(read-only)' parenthetical is redundant against the annotations and could be dropped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is the only place to describe what a 'company snapshot' returns, and it does not — the agent cannot tell which fields come back or how missing companies are signaled. For a single-parameter read tool this is adequate but leaves a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the parameter already documents the 8-digit pattern, an example (Novo Nordisk), and where to obtain the value. The description restates '8-digit CVR number' without adding format or sourcing detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+key ('Get one company snapshot by 8-digit CVR number'), so an agent knows exactly what is retrieved and by what key. It does not, however, distinguish itself from siblings like search_companies or get_financials, leaving the differentiation to the schema text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance and never names an alternative. With siblings such as search_companies (find companies) and get_financials (company financials) in scope, the agent gets no help deciding between a single-company lookup and a search or a financials call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_dictionaryCVR data dictionaryARead-onlyIdempotentInspect
Static documentation for the CVR read model and tool usage rules (no database writes).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds 'static documentation' as useful context, but 'no database writes' largely restates the annotation set rather than revealing new behavior (no return format or size expectations).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource and scope front-loaded and no wasted words. It is tight, though the parenthetical about writes is the one element that mostly restates annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless documentation tool with rich annotations and no output schema, the description says enough about what is returned and its static nature. It could go slightly further on what the dictionary actually contains, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate, and schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (a data dictionary for the CVR read model) and the kind of content returned (static documentation plus tool usage rules). It is distinguishable from data-retrieval siblings like get_company and get_financials, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions 'tool usage rules', which implies an agent should call it to learn how to use the sibling tools, but there is no explicit when-to-use statement, prerequisites, or exclusion against alternatives. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsGet company financialsARead-onlyIdempotentInspect
Get structured financial history for one CVR (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Only return the fiscal year whose period ends in this calendar year, e.g. 2024. | |
| limit | No | Maximum number of annual statements to return, newest first (1 to 50), e.g. 5. Default 10. | |
| cvrnummer | Yes | Danish CVR number, exactly 8 digits as a string, e.g. "24256790" (Novo Nordisk A/S). Get it from search_companies or recommend_leads. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description's '(read-only)' merely restates that annotation and adds no new behavioral context such as rate limits, auth requirements, or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb and resource, with the scope qualifier in a short parenthetical. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations carry the safety profile and the schema fully documents the three parameters, but there is no output schema and the description says only 'structured financial history', leaving the shape of the returned data (which statements, which fields, pagination behavior) to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with year, limit, and cvrnummer each documented in detail (formats, ranges, defaults, provenance). The description adds no parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (structured financial history) scoped to a single CVR, so the agent can tell it returns financial statements rather than a company profile. It does not explicitly distinguish itself from siblings like get_company or search_companies, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one CVR' implies this is a single-entity lookup keyed by an identifier retrieved elsewhere (the schema even names search_companies / recommend_leads as sources), but there is no explicit when-to-use or when-not-to-use guidance versus get_company.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_leadsRecommend B2B leadsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Postal town (postdistrikt) as a prefix match, or a 4-digit postal code, e.g. 'Aarhus' (matches 'Aarhus C' and 'Aarhus N') or '8000'. | |
| limit | No | Number of leads to return (1 to 25), e.g. 10. Default 10. | |
| offset | No | 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. | |
| region | No | Danish region, e.g. 'Midtjylland'. One of Hovedstaden, Sjælland, Syddanmark, Midtjylland, Nordjylland ('Region ' prefix optional). | |
| max_revenue | No | Maximum revenue in DKK from the latest annual report, e.g. 50000000 for 50 million DKK. | |
| min_revenue | No | Minimum revenue (omsætning) in DKK from the latest annual report, e.g. 10000000 for 10 million DKK. | |
| municipality | No | Municipality (kommune) of the current CVR address, by name or code, e.g. 'Aarhus', 'Københavns Kommune' or '751'. | |
| industry_code | No | Exact Danish industry code (DB25/NACE, up to 6 digits), e.g. "621000" (computer programming). | |
| max_employees | No | Maximum average number of employees from the latest annual report, e.g. 50. | |
| min_employees | No | Minimum average number of employees from the latest annual report, e.g. 10. | |
| status_contains | No | Case-insensitive part of the CVR status (Danish), e.g. "normal" or "aktiv" for active companies, "konkurs" for bankruptcy. | |
| industry_contains | No | Case-insensitive text match on the industry name and secondary industries (Danish), e.g. "tømrer", "software" or "restaurant". | |
| company_name_contains | No | Case-insensitive part of the company name, e.g. "Novo" or "Carlsberg". | |
| exclude_reklamebeskyttelse | No | Leave out companies with reklamebeskyttelse (marketing protection, may not be contacted for marketing). Default true; set false only for research, not outreach. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotent/non-destructive, and the description is consistent with that ('read-only'). It adds real behavioral context beyond the annotations: ranking covers only the 500 highest-revenue matches, results come back best-first, paging via limit/offset, and GDPR contact warnings are attached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, each earning its place: ranking/scope first, then scoring and ordering, then paging and the GDPR caveat. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, zero-required, no-output-schema tool with full annotation coverage, the description supplies the key extras an agent needs: result fields, ordering, paging limits, and GDPR warnings. It stops short of describing pagination exhaustion or result cardinality behavior, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 14 filters, including the offset cap and prefix-match rules. The description restates paging and the 500-match ranking ceiling but adds no filter syntax or semantics beyond the schema; baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('ranked lead shortlist from CVR filters') and the ranking behavior, which meaningfully separates it from search_companies. It never names a sibling explicitly, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: reach for this when you want a ranked lead shortlist rather than raw search results. There is no explicit when-to-use/when-not guidance and no mention of search_companies as the unranked alternative, leaving the routing choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesSearch Danish companiesBRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Postal town (postdistrikt) as a prefix match, or a 4-digit postal code, e.g. 'Aarhus' (matches 'Aarhus C' and 'Aarhus N') or '8000'. | |
| limit | No | Number of companies to return (1 to 50), e.g. 20. Default 20. | |
| offset | No | Number of results to skip, for paging, e.g. 20 for page 2 with limit 20. Default 0. | |
| region | No | Danish region, e.g. 'Midtjylland'. One of Hovedstaden, Sjælland, Syddanmark, Midtjylland, Nordjylland ('Region ' prefix optional). | |
| max_revenue | No | Maximum revenue in DKK from the latest annual report, e.g. 50000000 for 50 million DKK. | |
| min_revenue | No | Minimum revenue (omsætning) in DKK from the latest annual report, e.g. 10000000 for 10 million DKK. | |
| municipality | No | Municipality (kommune) of the current CVR address, by name or code, e.g. 'Aarhus', 'Københavns Kommune' or '751'. | |
| industry_code | No | Exact Danish industry code (DB25/NACE, up to 6 digits), e.g. "621000" (computer programming). | |
| max_employees | No | Maximum average number of employees from the latest annual report, e.g. 50. | |
| min_employees | No | Minimum average number of employees from the latest annual report, e.g. 10. | |
| status_contains | No | Case-insensitive part of the CVR status (Danish), e.g. "normal" or "aktiv" for active companies, "konkurs" for bankruptcy. | |
| industry_contains | No | Case-insensitive text match on the industry name and secondary industries (Danish), e.g. "tømrer", "software" or "restaurant". | |
| company_name_contains | No | Case-insensitive part of the company name, e.g. "Novo" or "Carlsberg". | |
| exclude_reklamebeskyttelse | No | Leave out companies with reklamebeskyttelse (marketing protection, may not be contacted for marketing). Default true; set false only for research, not outreach. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and a closed world, so the safety profile is covered. The description redundantly restates read-only but does add useful business semantics around reklamebeskyttelse (marketing-protected companies may not be contacted). It says nothing about result ordering, pagination bounds, or what a match looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core purpose and with the marketing-lead recommendation last. Little waste, though the '(read-only)' parenthetical duplicates the annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter search tool with no output schema, the description is thinner than ideal; it does not hint at return shape, ordering, or paging behavior. The schema fully covers inputs, but the agent gets no description-side guidance on results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the 14 parameters carries a rich description with examples, so the schema does the heavy lifting. The description only names a subset of filter categories and adds no syntax or format detail beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search Danish companies in the CVR read model') and the filter surface (industry, size, municipality, city/postnummer, region). It does not explicitly distinguish itself from siblings like get_company or recommend_leads, though the marketing-leads hint nudges toward the latter.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete usage rule ('Prefer exclude_reklamebeskyttelse=true for marketing leads') and flags the read-only nature, but never states when to use this search vs. get_company for a single lookup or recommend_leads for lead generation. Usage is implied rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- First observed
get_company - First observed
get_data_dictionary - First observed
get_financials - First observed
recommend_leads - First observed
search_companies
Related MCP Connectors
Danish company registry (CVR): company search, financials, ownership, beneficial owners and more.
Swedish company data: segment companies by industry, place and size, and look up any company.
Swedish company data (Bolagsverket, SCB) for AI agents, verified, with history and annual reports
Company lookups and annual-account financials: Sweden, Norway, Finland, UK. Pay per call (x402).
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables querying key financial figures from Danish companies' published annual reports via CVR number, using XBRL data from Erhvervsstyrelsen, without an API key.523 npm1MIT
- AlicenseAqualityBmaintenanceRemote MCP server for the Danish company register (CVR): company lookup, name search, and parsed annual-report financials as structured JSON for 860,000+ active Danish companies.3MIT
- AlicenseAqualityCmaintenanceEnables looking up Danish companies by CVR number, name, or phone via cvrapi.dk.2MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to search and look up Danish and Norwegian company registry (CVR) data, including company details, bankruptcy status, and more.28 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.