aria-mcp-trafik-dk
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-trafik-dkany traffic incidents on E45?"
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-trafik-dk
A Model Context Protocol (MCP) server that exposes current Danish road traffic events and roadworks to AI assistants. Built for ARIA and shareable with the community.
Fully keyless — the data source is a public GCS-hosted JSON feed served by Vejdirektoratet as the backend for trafikkort.vejdirektoratet.dk (trafikinfo.dk).
Complements aria-mcp-drivetime-dk: that server computes drive time; this one tells you whether the road is clear.
Data Source
Source | What | Attribution |
Current traffic events, roadblocks, queues, roadworks, critical announcements | Danish Road Directorate — free public traffic data |
NAP reference: https://nap.vd.dk (National Access Point for road data, Denmark)
Endpoint details
The app at trafikkort.vejdirektoratet.dk is backed by two public GCS-hosted JSON feeds (discovered by reading the app's JavaScript bundle):
File | URL | What |
|
| All current incidents, accidents, roadblocks, queues, closures, weather-related events (~3 min cadence) |
|
| Major planned roadworks and critical traffic announcements |
Both are plain JSON (GeoJSON-derived), no authentication required, no API key.
Data format
big-screen-events.json is an array of GeoJSON FeatureCollections, one per event (each collection has exactly one feature). Each feature carries:
{
"type": "Feature",
"geometry": { "type": "Point", "coordinates": [lon, lat] },
"properties": {
"featureId": "...",
"layerId": "layer_id_19H1",
"title": "Kør forsigtigt",
"header": "Kør forsigtigt - E45 fra Randers mod Aalborg ...",
"description": "<p>HTML description</p>",
"TrafficMan2_Type": "org.vd.trafficmap.datexii.v32.datamodel.GeneralInstructionOrMessageToRoadUsers",
"beginPeriod": "13-06-2026 kl. 00:12",
"endPeriod": "13-06-2026 kl. 02:00",
"kommune": "Vejdirektoratet",
"suspended": "false",
"future": "false",
"visible": "true"
}
}The outer FeatureCollection also carries layerName which classifies the event:
| Meaning |
| General incidents, accidents, obstructions |
| Road/lane closures |
| Traffic queues |
| Public events with road closures |
| Slippery road / water on road |
| Strong wind warnings |
| Active roadworks (when present) |
TrafficMan2_Type is a DATEX II v3.2 class path (e.g. ...Accident, ...AbnormalTraffic, ...MaintenanceWorks).
critical-announcements.json is a single FeatureCollection with properties: featureId, title, description (HTML), category, validFrom (ISO datetime).
Fragility notes
The GCS bucket (
trafikkort-data) is public but not officially documented. It has been stable since at least 2020 (the mobile SDKs reference the same domain). URL changes are possible with app updates.The subdirectory
geojson/25832/(EPSG:25832 projected coordinates) is not publicly accessible — only thegeojson/root files are open.Events arrive as individual FeatureCollections (one per event), so the array length in
big-screen-events.jsonequals the event count (typically 100–300).descriptioncontains HTML; this server strips it before returning.beginPeriod/endPeriodare Danish-formatted date strings (e.g."13-06-2026 kl. 00:12"), not ISO — returned as-is.suspended: "true"means the event is stored but currently inactive (e.g. cleared accident). This server includes suspended events but marks the flag.
Related MCP server: mcp-danish-weather
Install & Run
npx aria-mcp-trafik-dkOr install globally:
npm install -g aria-mcp-trafik-dk
aria-mcp-trafik-dkRequires Node.js 20 or later.
Tools
traffic_events
Fetch current Danish road traffic events.
Parameters:
Name | Type | Required | Description |
| string | No | Free-text region/road filter, e.g. |
| string | No |
|
Returns: Array of traffic events:
[
{
"type": "Traffic message",
"road": "E45 fra Randers mod Aalborg",
"location": "Kør forsigtigt - E45 fra Randers mod Aalborg mellem <35> Hobro V og <34> Hobro N",
"description": "E45 fra Randers mod Aalborg mellem <35> Hobro V og <34> Hobro N Havareret køretøj, Pas på I højre spor, vejhjælp er på vej",
"from": "13-06-2026 kl. 00:12",
"severity": "warning",
"suspended": false,
"coordinates": [9.733868, 56.66633]
}
]roadworks
Fetch planned and ongoing roadworks.
Parameters:
Name | Type | Required | Description |
| string | No | Free-text region/road filter |
Returns: Mixed array of TrafficEvent objects (from live roadwork layers) and CriticalAnnouncement objects (from critical-announcements.json):
[
{
"id": "9349df74-15e8-4ffc-93e7-e3e236720da9",
"title": "E45 Østjyske Motorvej spærres ved Horsens",
"description": "I forbindelse med bronedrivning spærres E45 Østjyske Motorvej ...",
"category": "Trafikal forsidemelding (trafikkort)",
"validFrom": "2026-06-12T10:56:00.410Z"
}
]events_near
Find traffic events within a radius of a geographic point.
Parameters:
Name | Type | Required | Description |
| number | Yes | Latitude (WGS84) |
| number | Yes | Longitude (WGS84) |
| number | No | Radius in km (default 25, max 200) |
Returns: Array of traffic events, each with an added distanceKm field, sorted by distance ascending.
[
{
"type": "Road/lane closure",
"road": "E45 Østjyske Motorvej",
"location": "...",
"description": "...",
"severity": "blocking",
"suspended": false,
"coordinates": [9.85, 55.86],
"distanceKm": 2.3
}
]Environment Variables
Variable | Description |
| Override the GCS base URL (for testing or caching proxies). Default: |
ARIA MCP Config
Add to your ARIA credentials / MCP config:
{
"command": "npx",
"args": ["-y", "aria-mcp-trafik-dk"],
"env": {}
}No environment variables are required. Pair with aria-mcp-drivetime-dk for a complete pre-drive check:
[
{ "command": "npx", "args": ["-y", "aria-mcp-drivetime-dk"] },
{ "command": "npx", "args": ["-y", "aria-mcp-trafik-dk"] }
]Development
git clone https://github.com/kimhjort/aria-mcp-trafik-dk
cd aria-mcp-trafik-dk
npm install
npm run build
npm testLicense
MIT — see LICENSE.
Traffic data is public information from Vejdirektoratet (Danish Road Directorate). Attribution to Vejdirektoratet / trafikinfo.dk is appreciated when redistributing.
Available Tools
3 toolsevents_nearA
Find current traffic events (incidents, roadblocks, queues, roadworks) within a geographic radius of a given coordinate. Useful for checking conditions near a specific destination or along a route. Only events that carry Point geometry from Vejdirektoratet are returned; events without coordinates are excluded. Results are sorted by distance ascending. Example: check for issues near Horsens (55.86, 9.85) before driving there.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude of the centre point (WGS84 decimal degrees). | |
| lon | Yes | Longitude of the centre point (WGS84 decimal degrees). | |
| radiusKm | No | Search radius in kilometres (default 25, max 200). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: returns only Point geometry events from Vejdirektoratet, excludes events without coordinates, and sorts by distance. However, it does not cover error conditions, rate limits, or any side effects. No annotations are present, so the description carries the full burden.
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?
Description is three sentences plus an example, front-loaded with purpose. Every sentence adds value, with no superfluous text.
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?
Adequately covers purpose and constraints given the simple input schema, but lacks details on output format and error handling. With no output schema, the description could be more 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% with clear descriptions for all three parameters. The description adds no extra meaning beyond the schema, only providing an overall example that uses the parameters.
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?
Describes specifically finding current traffic events by geographic radius, listing event types, and noting that only events with Point geometry are returned. Clearly distinguishes from sibling tools 'roadworks' and 'traffic_events' by focusing on location-based filtering.
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?
States it is useful for checking conditions near a destination or along a route, and provides a concrete example. However, it does not explicitly mention when not to use it or contrast with sibling tools beyond the implicit filtering.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roadworksA
Fetch planned and ongoing roadworks on Danish state roads from Vejdirektoratet. Combines two feeds: active roadwork layers from the live events feed and critical-announcements.json (major planned closures, e.g. motorway bridge work). Returns roadwork entries with title, description, road, location, and validity times. Use this when ARIA needs to warn about scheduled disruptions before a drive.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Optional free-text region or road filter (e.g. 'E45', 'Horsens', 'København'). Matched case-insensitively against title, location, road, and description fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that it fetches data from two feeds and returns specific fields, but does not mention side effects, rate limits, or authentication. It adds some actionable context but lacks depth.
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, front-loaded with action, data sources, and return values. No wasted words. 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?
For a tool with one optional parameter and no output schema, the description covers the purpose, data sources, and return fields. It lacks details on filtering behavior, pagination, or errors, but is largely complete for the tool's simplicity.
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 baseline is 3. The description does not add any meaning about the 'area' parameter beyond what the schema provides. No value added.
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?
Description clearly states the tool fetches planned and ongoing roadworks on Danish state roads from Vejdirektoratet, combining two specific feeds. It specifies the return fields, making the purpose 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?
Explicitly tells when to use: 'when ARIA needs to warn about scheduled disruptions before a drive.' No explicit when-not or comparison to siblings, but the specific use case is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
traffic_eventsA
Fetch current Danish road traffic events from Vejdirektoratet (trafikkort.vejdirektoratet.dk). Returns incidents, accidents, roadblocks, queues, and closures on Danish state roads. Each event includes type, road, location, description, from/to times, and severity. Use this to warn ARIA before Kim drives — check for incidents on the route. Data is updated approximately every 3 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | Optional free-text region or road filter (e.g. 'Horsens', 'E45', 'Vejle', 'Fyn'). Matched case-insensitively against location, road, and description fields. | |
| type | No | Filter by event category. 'incident' = accidents, obstructions, closures, weather events. 'roadwork' = maintenance and construction works. 'queue' = traffic queues. 'all' = everything (default). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses expected return fields (type, road, location, times, severity) and update behavior. This is sufficient for a read-only data fetch with no side effects.
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 concise: three sentences covering purpose, use case, and update frequency. No wasted words; every sentence serves a purpose.
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 two optional parameters and no output schema, the description adequately covers return fields and update frequency. It provides enough context for correct invocation without overspecifying.
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% and both parameters have descriptions. The description adds value by explaining that the 'area' filter is case-insensitive and matches against multiple fields, and it elaborates on the enum values in plain language.
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 fetches Danish road traffic events from a specific source (Vejdirektoratet), lists event types (incidents, accidents, etc.), and distinguishes from siblings like 'events_near' and 'roadworks' by focusing on state roads.
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 explicitly suggests a concrete use case: warn ARIA before Kim drives. It also notes data update frequency (every 3 minutes), aiding timely decisions. No explicit when-not guidance, but the purpose is clear.
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
events_near - First observed
roadworks - First observed
traffic_events
TDQS
Tools have overlapping purposes (events_near and traffic_events both return current events), but descriptions clarify differences: events_near is location-based, traffic_events is general. roadworks is distinct. Overall, agents likely select correctly with clear prompts.
Tool names lack a consistent pattern: 'events_near' combines noun+preposition, 'roadworks' is a single noun, 'traffic_events' is noun_noun. No verb_noun or consistent convention, making predictions harder.
Three tools is a reasonable count for querying Danish road events. It covers current incidents, planned roadworks, and proximity search without unnecessary duplication, though slightly minimalist.
Covers the main needs: current events globally and by location, and planned roadworks. Missing features like event details by ID or historical data, but sufficient for real-time trip planning.
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
Read-only airport delay, weather, and 24h forecast tools for AI assistants. Airport-level only.
Danish address & property lookup: BBR, Matriklen, DAR, CVR. A DAWA/Datafordeler-compatible source.
Norwegian transport (Entur) and geodata (Kartverket): trips, departures, addresses, elevation.
Denmark Peppol/NemHandel e-invoices for AI agents: send, check recipient, get delivery proof.
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
- 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
- AlicenseAqualityDmaintenanceQuery Swedish public data from AI tools. Includes company data, SCB statistics, weather, transport, public agencies, and more through the Apiverket API.2572MIT
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-trafik-dk'
If you have feedback or need assistance with the MCP directory API, please join our Discord server