aria-mcp-drivetime-dk
Provides driving time and distance calculations between places in Denmark, using OpenStreetMap data through Nominatim geocoding and OSRM routing services.
Click on "Install 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., "@aria-mcp-drivetime-dkHvornår skal jeg køre for at nå Billund Lufthavn til 12:00?"
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.
aria-mcp-drivetime-dk
A Model Context Protocol (MCP) server that computes car driving time and distance between two places in Denmark, plus a "leave by" time for appointments. Built for ARIA and shareable with the community.
Fully keyless — uses public OpenStreetMap services with no API key required.
Example output ARIA might give Kim:
Horsens → Billund Lufthavn er ~48 min (67 km) — kør senest 11:02 for at nå 12:00 (inkl. 10 min buffer)
Data Sources
Source | What | Policy / Attribution |
Geocoding — place name → lat/lon | © OpenStreetMap contributors (ODbL). Usage policy: max 1 req/s, descriptive User-Agent required | |
Road routing — distance + duration | © OpenStreetMap contributors. Demo server: ~1 req/s, non-commercial use only |
No live traffic. Duration is typical free-flow routing time. For production or traffic-aware routing, self-host OSRM or use a paid provider (e.g. Google Maps Routes API, HERE, Mapbox).
Related MCP server: Valhalla MCP Server
Install & Run
npx aria-mcp-drivetime-dkOr install globally:
npm install -g aria-mcp-drivetime-dk
aria-mcp-drivetime-dkRequires Node.js 20 or later.
Tools
drive_time
Compute car driving distance and typical travel time between two Danish places.
Parameters:
Name | Type | Required | Description |
| string | Yes* | Origin — place name, address, or |
| string | Yes | Destination — place name, address, or |
| string | No | Arrival time — ISO datetime ( |
| number | No | Extra buffer minutes for leave-by (default |
*Not required when DEFAULT_ORIGIN env var is set.
Returns:
{
"fromResolved": "Horsens, Horsens Kommune, Region Midtjylland, Danmark",
"toResolved": "Billund Lufthavn, ...",
"distanceKm": 67.4,
"durationMin": 48,
"leaveByLocal": "2026-06-12T11:02",
"arriveByLocal": "2026-06-12T12:00",
"bufferMin": 10,
"notice": "Duration is typical/free-flow driving time from OSRM routing — does NOT include live traffic. Allow extra time during rush hours or adverse weather."
}leaveByLocal, arriveByLocal, and bufferMin are only present when arriveBy is given.
geocode
Resolve a Danish place name or address to geographic coordinates.
Parameters:
Name | Type | Required | Description |
| string | Yes | Place name or address to look up |
Returns:
{
"lat": 55.8607,
"lon": 9.8502,
"displayName": "Horsens, Horsens Kommune, Region Midtjylland, Danmark"
}leave_by
Convenience wrapper — same as drive_time but requires arriveBy explicitly and is named to signal intent.
Parameters: from (optional with default), to, arriveBy (required), bufferMin (optional)
Returns: Same as drive_time with arriveBy — always includes leaveByLocal.
Environment Variables
Variable | Default | Description |
| (none) | Default origin place (e.g. |
|
| Buffer minutes subtracted when computing |
|
| Override Nominatim base URL (for self-hosting). |
|
| Override OSRM base URL (for self-hosting or a traffic-aware provider). |
ARIA MCP Config
Add to your ARIA credentials / MCP config to use with ARIA:
{
"command": "npx",
"args": ["-y", "aria-mcp-drivetime-dk"],
"env": {
"DEFAULT_ORIGIN": "Horsens"
}
}With this config, from defaults to Horsens in all tools. Kim can ask ARIA "Hvornår skal jeg køre for at nå Billund Lufthavn til 12:00?" without specifying an origin.
Important Caveats
No live traffic. OSRM demo server provides free-flow routing only. Actual travel time may differ significantly during rush hours, holidays, road works, or bad weather.
Demo server limits. The public Nominatim and OSRM demo servers are rate-limited (~1 req/s) and intended for light, non-commercial use. For production workloads, self-host or use a commercial routing API.
Self-hosting. Set
NOMINATIM_URLandOSRM_URLenvironment variables to point at your own instances.
Development
git clone https://github.com/kimhjort/aria-mcp-drivetime-dk
cd aria-mcp-drivetime-dk
npm install
npm run build
npm testLicense
MIT — see LICENSE.
Map data © OpenStreetMap contributors, licensed under the Open Database Licence (ODbL).
Available Tools
3 toolsdrive_timeA
Compute car driving distance and typical travel time between two places in Denmark using OpenStreetMap data. Both 'from' and 'to' accept a Danish place name / address (e.g. 'Horsens', 'Billund Lufthavn', 'Rådhuspladsen, København') or a coordinate string in 'lat,lon' format. Returns distanceKm, durationMin, and the resolved place names. If 'arriveBy' is given (ISO datetime such as '2026-06-12T12:00' or 'HH:MM' for today in Copenhagen time), also returns leaveByLocal — the time you must leave to arrive on time including a buffer (default 10 min from DEFAULT_BUFFER_MIN). IMPORTANT: Duration is free-flow routing time WITHOUT live traffic. Allow extra time during rush hours.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Origin place name, address, or "lat,lon". Required when DEFAULT_ORIGIN env is not set. | |
| to | Yes | Destination place name, address, or "lat,lon". Required. | |
| arriveBy | No | Desired arrival time. ISO datetime ("2026-06-12T12:00") or "HH:MM" (today in Europe/Copenhagen). When provided, leaveByLocal is calculated: arriveBy − durationMin − bufferMin. | |
| bufferMin | No | Extra buffer minutes subtracted when computing leaveByLocal (default 10 from DEFAULT_BUFFER_MIN). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses data source (OSM), that duration is free-flow without live traffic, the computation of leaveByLocal when arriveBy is given, and the buffer mechanism. However, it does not mention error handling (e.g., place not found) or any rate limits.
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 one paragraph of 4–5 sentences, front-loaded with the core purpose, followed by input/output details and a critical caveat. Every sentence adds value without fluff.
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 no output schema, the description covers return values (distanceKm, durationMin, resolved place names, leaveByLocal) and explains the buffer and arrival parameters. It could mention potential errors (e.g., invalid place lookup) but is otherwise complete for a non-destructive routing 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%, baseline 3. The description adds meaning beyond schema by providing example inputs for 'from'/'to', explaining the 'arriveBy' format (ISO datetime or HH:MM for today in Copenhagen), and detailing how 'bufferMin' is used in leaveByLocal calculation. This adds significant context.
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 computes car driving distance and typical travel time between two places in Denmark using OpenStreetMap data. It specifies the verb (compute), resource (distance and time), geographic scope (Denmark), data source (OSM), and output keys (distanceKm, durationMin, leaveByLocal). This is specific and distinguishes it from siblings like geocode.
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?
While the description implies the use case for driving time in Denmark and includes important caveats (no live traffic, rush hour allowance), it does not explicitly state when to use this tool versus siblings like geocode or leave_by. No verbal 'when-not' guidance or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geocodeA
Resolve a Danish place name or address to geographic coordinates (latitude/longitude) using Nominatim (OpenStreetMap). Returns lat, lon, and a full display name. Useful for verifying that a place name is unambiguous before using it in drive_time.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Danish place name or address to geocode (e.g. 'Billund Lufthavn', 'Nørreport, København'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It discloses the use of Nominatim and output fields, but lacks mention of potential rate limits, error handling, or external dependency constraints.
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?
Two sentences, no redundant words, front-loaded with the core purpose. Every sentence adds 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?
Given the tool's simplicity (one parameter, no output schema), the description covers purpose, use case, and return values. It could mention potential limitations of the external geocoding service, but is largely complete.
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% for the single parameter. The description adds context by specifying 'Danish place name or address' and giving examples, which improves meaning beyond the schema.
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 resolves a Danish place name or address to coordinates using Nominatim. It specifies output fields and connects to drive_time, distinguishing it from sibling tools.
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?
It says 'useful for verifying that a place name is unambiguous before using it in drive_time,' providing clear context. However, it does not explicitly state when not to use it or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leave_byA
Convenience tool: given a destination and a required arrival time, returns the time you must leave and a drive summary. Equivalent to drive_time with arriveBy but requires arriveBy explicitly. Both 'from' and 'to' accept a Danish place name / address or 'lat,lon'. Returns leaveByLocal (Europe/Copenhagen), arriveByLocal, durationMin, distanceKm, and a no-live-traffic notice. Example output: 'Horsens → Billund Lufthavn er ~48 min — kør senest 11:02 for at nå 12:00'.
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Origin place name, address, or "lat,lon". Required when DEFAULT_ORIGIN env is not set. | |
| to | Yes | Destination place name, address, or "lat,lon". Required. | |
| arriveBy | Yes | Required. Desired arrival time as ISO datetime ("2026-06-12T12:00") or "HH:MM" (today in Europe/Copenhagen). | |
| bufferMin | No | Extra buffer minutes to subtract (default 10 from DEFAULT_BUFFER_MIN). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses return fields (leaveByLocal, arriveByLocal, durationMin, distanceKm), no-live-traffic notice, and gives an example output. Adequately describes behavioral traits.
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?
Single paragraph with all essential info, example included. Could be slightly more structured (e.g., bullet points), but very efficient and clear.
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?
Covers purpose, parameters, return fields, and example. No output schema, but description sufficiently details outputs. Missing edge cases like timezone handling, but adequate for a convenience 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. Description adds extra meaning: 'from' and 'to' accept Danish place names or lat,lon, 'arriveBy' format options, bufferMin default. Adds value beyond schema.
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?
Clearly states it's a convenience tool for calculating leave time given destination and required arrival time, distinguishing it from sibling drive_time by requiring explicit arriveBy parameter.
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?
Provides clear usage context: given destination and required arrival time. Compares to drive_time with arriveBy, but lacks explicit when-not-to-use or alternatives beyond the sibling comparison.
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. Dates show when Glama detected each change.
3 tool updates
v1.0.0- First observed
drive_time - First observed
geocode - First observed
leave_by
TDQS
drive_time and leave_by overlap significantly, as leave_by is explicitly a wrapper for drive_time with arriveBy. However, the descriptions clarify their relationship and distinct use cases, so an agent can differentiate them with careful reading.
Naming is inconsistent: 'drive_time' and 'leave_by' use underscores, while 'geocode' does not. The verb styles also differ (verb_noun, verb_preposition, single verb), making the pattern unpredictable.
Three tools is appropriate for the domain: geocode for place resolution, drive_time for core computation, and leave_by as a convenience wrapper. Each tool serves a clear purpose and no tool is redundant.
The tool set covers the essential workflow: resolving addresses, computing drive time, and arriving by a deadline. Minor gaps exist, such as lack of batch or alternative routes, but these are not critical for the primary use case.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Norwegian transport (Entur) and geodata (Kartverket): trips, departures, addresses, elevation.
Danish address & property lookup: BBR, Matriklen, DAR, CVR. A DAWA/Datafordeler-compatible source.
Danish vehicle registration tax (registreringsafgift) calculator and DMR registration statistics
Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables natural language access to Denmark's Statistics API (Danmarks Statistik), allowing users to query and analyze Danish statistical data without coding knowledge through AI-powered interactions.MIT
- FlicenseNot gradedqualityDmaintenanceIntegrates Claude Desktop with the Valhalla routing engine to provide OpenStreetMap-based routing and isochrone capabilities. It enables users to calculate travel paths and reachability polygons for various transportation modes using natural language.5-
- AlicenseAqualityDmaintenanceProvides access to Danish weather data from the Danish Meteorological Institute, enabling users to retrieve current conditions, hourly forecasts, and historical records. It supports location lookups via city names, postal codes, and coordinates for any Danish region.314MIT
- AlicenseAqualityDmaintenanceProvides access to Danish energy data from Energinet, including real-time electricity spot prices, CO2 emissions, and production mix. It enables users to monitor grid status and identify the most cost-effective hours for energy-intensive tasks.415MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kimhjort/aria-mcp-drivetime-dk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server