kalundborg-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kalundborg-mcpSøg efter pas og kørekort"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Kalundborg MCP Server
MCP (Model Context Protocol) server til Kalundborg Kommune, der giver adgang til information fra kalundborg.dk.
Installation
npm installRelated MCP server: mcp-dawa
Brug
Lokalt
npm startMed Claude Desktop
Tilføj til din Claude Desktop konfiguration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"kalundborg": {
"command": "node",
"args": ["/sti/til/kalundborg-mcp-server/index.js"]
}
}
}Eller installer globalt:
npm install -g .Og brug:
{
"mcpServers": {
"kalundborg": {
"command": "kalundborg-mcp"
}
}
}Tilgængelige Tools
1. search_content
Søg i alt indhold på kalundborg.dk.
Input:
query(string, påkrævet): Søgeord eller sætning
Eksempel:
{
"query": "affald"
}2. get_news
Hent nyheder og pressemeddelelser fra Kalundborg Kommune.
Input:
limit(number, valgfri): Antal nyheder (standard: 10)year(string, valgfri): Filtrer efter år (fx "2025")category(string, valgfri): Filtrer efter kategori
Eksempel:
{
"limit": 5,
"year": "2025"
}3. get_popular_pages
Hent de mest populære sider på kalundborg.dk.
Input: Ingen parametre
Eksempel:
{}4. get_contact_info
Hent kontaktinformation for Kalundborg Kommune.
Input:
department(string, valgfri): Specifik afdeling
Eksempel:
{
"department": "borgerservice"
}5. search_services
Søg efter kommunale services og selvbetjeningsløsninger.
Input:
query(string, påkrævet): Søgeord for service
Eksempel:
{
"query": "pas og kørekort"
}Brug Cases
1. Find nyheder om trafiksikkerhed
Tool: get_news
Input: { "limit": 5 }2. Søg efter affaldsinformation
Tool: search_services
Input: { "query": "affald" }3. Hent kontaktoplysninger
Tool: get_contact_info
Input: {}4. Find populære selvbetjeningsløsninger
Tool: get_popular_pages
Input: {}Funktioner
✅ Real-time data fra kalundborg.dk ✅ Nyheder og pressemeddelelser ✅ Søgning i kommunale services ✅ Kontaktinformation ✅ Populære sider
Teknisk Stack
MCP SDK: @modelcontextprotocol/sdk
Web Scraping: cheerio
HTTP Client: node-fetch
Validation: zod
Udvikling
For at udvide serveren med flere tools:
Definer et nyt Zod schema
Implementer tool funktionen
Registrer tool i ListToolsRequestSchema handler
Tilføj case i CallToolRequestSchema handler
Licens
ISC
Available Tools
5 toolsget_contact_infoA
Hent kontaktinformation for Kalundborg Kommune
| Name | Required | Description | Default |
|---|---|---|---|
| department | No | Specifik afdeling at få kontaktinfo for (valgfrit) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the operation but does not disclose what happens when 'department' is omitted, what the response format is, or whether any permissions are needed. This is a simple read operation, so the lack of detail is not severely misleading.
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?
The description consists of a single concise sentence that front-loads the tool's purpose. There is no wasted wording or redundant information.
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?
Given the tool's simplicity (one optional parameter, no output schema, low-risk read operation), the description is nearly complete. It would benefit from explicitly stating the default behavior when no department is specified, but this is easily inferred from the tool's name and description.
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 input schema already provides full coverage (100%) for the single 'department' parameter. The description adds no further semantic detail about the parameter beyond confirming the context of Kalundborg Kommune, so the baseline score of 3 is appropriate.
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?
The description clearly states the action ('Hent kontaktinformation') and the resource ('Kalundborg Kommune'), making the purpose unambiguous. It does not explicitly distinguish from sibling tools, but the resource is distinct enough that separation is not necessary.
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 implies that the tool is used to obtain contact information, but it does not explain when to use it versus alternatives like search_content or search_services. It also gives no guidance on how the optional 'department' parameter affects usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsB
Hent nyheder og pressemeddelelser fra Kalundborg Kommune
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Filtrer efter år (fx '2025') | |
| limit | No | Antal nyheder at returnere (standard: 10) | |
| category | No | Filtrer efter kategori |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose behavioral details such as sorting, pagination, output format, or any side effects. While 'get' implies a read operation, this is not explicitly confirmed.
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?
The description is a single concise sentence that communicates the core purpose without unnecessary words. It is well-structured for quick scanning.
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?
The tool is simple with optional parameters, but the description lacks information about return format, ordering, interaction between parameters, and differentiation from sibling tools. This leaves notable gaps for an agent selecting the tool.
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 coverage is 100% with descriptions for all parameters (year, limit, category). The description adds no additional param semantics beyond what the schema already provides, so a baseline of 3 is appropriate.
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?
The description clearly states the tool retrieves news and press releases from Kalundborg Kommune, with a specific verb and resource. It does not explicitly distinguish itself from sibling tools like search_content, but the resource scope is clear.
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?
No guidance is provided on when to use this tool versus alternatives such as search_content. The description only states what the tool does, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_popular_pagesA
Hent de mest populære sider på kalundborg.dk
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description only states the verb 'get' without disclosing sorting, limits, response format, auth requirements, or other behavioral traits. The read-only nature is implied but not explicitly confirmed, leaving the agent under-informed.
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?
The description is a single sentence with no filler. It is perfectly concise and front-loaded with the action and resource.
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 tool with no output schema, the description should explain what is returned (e.g., a list of page URLs and titles). It does not. However, the tool is simple with no parameters, so the gap is moderate. The description is minimally adequate but lacks any detail about the output.
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 has zero parameters, so the baseline is 4. The description correctly implies no inputs are needed, and there is no parameter information to compensate for.
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?
The description clearly states the action (get) and the resource (most popular pages on kalundborg.dk), which is distinct from the sibling tools (search_content, get_news, etc.). It is specific and concise.
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 provides no guidance on when to use this tool versus alternatives. It does not mention scenarios, exclusions, or related tools, so the agent receives no decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contentB
Søg i alt indhold på kalundborg.dk
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Søgeord eller sætning at søge efter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It does not mention that the operation is read-only, what the response looks like, or any limitations. The bare 'search' implies safety but does not explicitly disclose behavior.
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?
The description is extremely concise, one sentence with no wasted words. It is structurally fine, though it essentially restates the tool's name in a different language, adding little extra value.
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?
The tool has no output schema and no annotations, so the description should cover context like result format, scope, and relationship to sibling tools. It only provides a one-liner, lacking guidance on when to use it over search_services or how the results are returned.
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 coverage is 100% as the only parameter 'query' is described ('Søgeord eller sætning at søge efter'). The description itself adds nothing about parameters, 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?
The description 'Søg i alt indhold på kalundborg.dk' clearly states a specific verb (search) and resource (all content on kalundborg.dk). It distinguishes from siblings like search_services by covering all content, not just a subset.
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?
No guidance is given on when to use this tool versus alternatives. There is no mention of exclusions (e.g., 'for services, use search_services') or any contextual hints beyond the bare description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_servicesC
Søg efter kommunale services og selvbetjeningsløsninger
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Søgeord for service |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, but it only restates the basic search function. It does not disclose return format, search scope limitations, pagination, or authentication requirements, which is a significant gap for a search tool.
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?
The description is a single concise sentence that directly states the tool's purpose. There is no wasted words or redundant information, and it is easily scannable.
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?
The tool has no output schema and no annotations, and the description is minimal. It does not explain what kind of results are returned, how they are structured, or any edge cases. For a search tool with sibling alternatives, more context is needed to fully guide an agent.
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 the query parameter described as 'Søgeord for service'. The description adds no additional parameter details, but the schema already documents the only parameter adequately, so a baseline score of 3 is appropriate.
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?
The description clearly states it searches for municipal services and self-service solutions using the specific verb 'søg efter' and a defined resource. It does not explicitly differentiate from sibling tool search_content, but the resource type is evident from the name and description.
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?
No guidance is provided on when to use this tool versus alternatives like search_content. The description only states what it does, leaving the agent to infer usage context.
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
v1.0.0- First observed
get_contact_info - First observed
get_news - First observed
get_popular_pages - First observed
search_content - First observed
search_services
TDQS
Scored across 5 tools
Search tools overlap somewhat—search_content covers all site content while search_services narrows to municipal services, but the descriptions are distinct enough to avoid major confusion. The other tools (popular pages, news, contact info) are clearly separate.
All five tool names follow the same verb_noun pattern (search_*, get_*), with consistent snake_case and clear action-object pairs. No mixed conventions or unpredictable naming.
Five tools is a well-scoped set for a municipality website assistant, covering search, navigation, news, contact, and services without unnecessary redundancy or bloat.
The domain is public information on kalundborg.dk, and the tools cover primary browsing, searching, news, and contact lookup. Minor gaps include no dedicated page-by-URL fetcher or event calendar, but agents can work around these via search_content.
Maintenance
Related MCP Connectors
Hosted MCP server for finding authoritative primary data sources and official portals.
MCP server for Calvix Technology Solutions — query IT services, contact info, and company details.
MCP server for Statistics Sweden (SCB) - 1200+ tables with population, economy, environment data
Udbud.dk MCP — Danish government public procurement notices (keyless).
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for GOV.UK — search, content retrieval, organisation lookup, and postcode resolution.73MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for the Danish Address Web API (DAWA), enabling free-text address search, house number search, and detailed address lookup by ID.-
- AlicenseNot gradedqualityCmaintenanceMCP server for the Moroccan Open Data portal (data.gov.ma) enabling search and retrieval of datasets, resources, organizations, and groups via CKAN API.1MIT
- AlicenseAqualityDmaintenanceMCP server that provides tools to search Norwegian addresses, reverse geocode, find place names, and get elevation data from Kartverket's open geographic datasets.46 npm1MIT