Skip to main content
Glama

Kalundborg MCP Server

MCP (Model Context Protocol) server til Kalundborg Kommune, der giver adgang til information fra kalundborg.dk.

Installation

npm install

Related MCP server: mcp-dawa

Brug

Lokalt

npm start

Med 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:

  1. Definer et nyt Zod schema

  2. Implementer tool funktionen

  3. Registrer tool i ListToolsRequestSchema handler

  4. Tilføj case i CallToolRequestSchema handler

Licens

ISC

Available Tools

5 tools
get_contact_infoA

Hent kontaktinformation for Kalundborg Kommune

ParametersJSON Schema
NameRequiredDescriptionDefault
departmentNoSpecifik afdeling at få kontaktinfo for (valgfrit)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNoFiltrer efter år (fx '2025')
limitNoAntal nyheder at returnere (standard: 10)
categoryNoFiltrer efter kategori

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

search_contentB

Søg i alt indhold på kalundborg.dk

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSøgeord eller sætning at søge efter

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSøgeord for service

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 5 tool updatesv1.0.0
    • First observedget_contact_info
    • First observedget_news
    • First observedget_popular_pages
    • First observedsearch_content
    • First observedsearch_services

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Five tools is a well-scoped set for a municipality website assistant, covering search, navigation, news, contact, and services without unnecessary redundancy or bloat.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for the Danish Address Web API (DAWA), enabling free-text address search, house number search, and detailed address lookup by ID.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for the Moroccan Open Data portal (data.gov.ma) enabling search and retrieval of datasets, resources, organizations, and groups via CKAN API.
    1
    MIT