Koskamo

Luxembourg MCP

A keyless Model Context Protocol server providing 44 read-only tools to access official Luxembourg public data, including legislation, statistics, live mobility, environment, parliament, and geodata, with every response traced to its official upstream source.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Luxembourg MCP logo, by amirdaraeeCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by amirdaraee
MCP endpoint (Streamable HTTP)
https://mcp.luxembourg-mcp.com/mcp
Vendor documentation

What its tools do

44 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

44 of 44 have a description · 0 of 44 declare behavior hints · 9 of 39 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search Luxembourg's national open-data catalogue and inspect dataset metadata
  • Retrieve official legislation, parliamentary questions, and election results
  • Access live mobility data such as parking availability, traffic sensors, and transit stops
  • Query environmental data including weather forecasts, air quality, and water levels

Source and maintenance

Community listingRegistry 0.7.0
Maintenance checked

Protocol and capabilities

Server
luxembourg-mcp 0.8.0
MCP protocol negotiated in check
2025-11-25
Tools
44 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Keyless access to official Luxembourg public data through 44 tools. Results include upstream source URLs.

Tools

44 advertised

search_datasets
Advertised by the server during the last successful anonymous check.

Search Luxembourg's official data.public.lu catalog.

search_datasets input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "page": {
      "type": "integer",
      "default": 1,
      "minimum": 1
    },
    "query": {
      "type": "string"
    },
    "page_size": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
get_dataset
Advertised by the server during the last successful anonymous check.

Get metadata and current download resources for an official dataset.

get_dataset input schema
{
  "type": "object",
  "required": [
    "dataset_id_or_slug"
  ],
  "properties": {
    "dataset_id_or_slug": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
geocode_address
Advertised by the server during the last successful anonymous check.

Resolve a Luxembourg address to official Geoportail coordinates.

geocode_address input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
reverse_geocode
Advertised by the server during the last successful anonymous check.

Find the nearest official Luxembourg address to WGS84 coordinates.

reverse_geocode input schema
{
  "type": "object",
  "required": [
    "latitude",
    "longitude"
  ],
  "properties": {
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
list_geo_collections
Advertised by the server during the last successful anonymous check.

Search official Geoportail OGC feature collections by title, description, or keyword.

list_geo_collections input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1
    },
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_geo_features
Advertised by the server during the last successful anonymous check.

Fetch GeoJSON features from an official Geoportail OGC collection.

get_geo_features input schema
{
  "type": "object",
  "required": [
    "collection_id"
  ],
  "properties": {
    "bbox": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "maxItems": 4,
      "minItems": 4,
      "description": "WGS84 [west, south, east, north]"
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 100,
      "minimum": 1
    },
    "collection_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_weather_alerts
Advertised by the server during the last successful anonymous check.

Get current official MeteoLux weather warnings published on data.public.lu.

get_weather_alerts input schema
{
  "type": "object",
  "properties": {
    "language": {
      "enum": [
        "en",
        "fr",
        "de",
        "lu"
      ],
      "type": "string",
      "default": "en"
    }
  },
  "additionalProperties": false
}
search_legislation
Advertised by the server during the last successful anonymous check.

Search official Luxembourg legislation and consolidated laws through Legilux.

search_legislation input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
search_statistics
Advertised by the server during the last successful anonymous check.

Search STATEC LUSTAT statistical dataflows by topic or title.

search_statistics input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_statistics
Advertised by the server during the last successful anonymous check.

Retrieve recent observations from a STATEC LUSTAT SDMX dataflow.

get_statistics input schema
{
  "type": "object",
  "required": [
    "dataflow_id"
  ],
  "properties": {
    "key": {
      "type": "string",
      "default": "all",
      "description": "SDMX dimension key or all"
    },
    "max_rows": {
      "type": "integer",
      "default": 500,
      "maximum": 2000,
      "minimum": 1
    },
    "dataflow_id": {
      "type": "string",
      "description": "STATEC identifier such as DF_D7100"
    },
    "last_n_observations": {
      "type": "integer",
      "default": 5,
      "maximum": 100,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
get_city_parking
Advertised by the server during the last successful anonymous check.

Get current Ville de Luxembourg car-park capacity and free spaces.

get_city_parking input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "available_only": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
list_cfl_parking
Advertised by the server during the last successful anonymous check.

List official CFL Park and Ride facilities.

list_cfl_parking input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_cfl_parking
Advertised by the server during the last successful anonymous check.

Get live occupancy and details for a CFL Park and Ride facility.

get_cfl_parking input schema
{
  "type": "object",
  "required": [
    "parking_id"
  ],
  "properties": {
    "parking_id": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_traffic
Advertised by the server during the last successful anonymous check.

Get live CITA motorway speed, occupancy, and flow measurements.

get_traffic input schema
{
  "type": "object",
  "properties": {
    "road": {
      "enum": [
        "a3",
        "a4",
        "a6",
        "a7",
        "a13",
        "b40"
      ],
      "type": "string",
      "default": "a6"
    }
  },
  "additionalProperties": false
}
get_water_levels
Advertised by the server during the last successful anonymous check.

Get the latest official measured water level at Luxembourg stations.

get_water_levels input schema
{
  "type": "object",
  "properties": {
    "station": {
      "type": "string",
      "description": "Optional station-name filter"
    }
  },
  "additionalProperties": false
}
get_air_quality
Advertised by the server during the last successful anonymous check.

Get the latest national telemetric air-quality measurements by station.

get_air_quality input schema
{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "Optional city-name filter"
    }
  },
  "additionalProperties": false
}
search_chamber_bodies
Advertised by the server during the last successful anonymous check.

Search official Chamber committees, delegations, bodies, memberships, and roles.

search_chamber_bodies input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1
    },
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_accessibility_figures
Advertised by the server during the last successful anonymous check.

Get national Digital Accessibility Observatory key figures.

get_accessibility_figures input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_accessibility_audits
Advertised by the server during the last successful anonymous check.

Get the latest public-sector digital accessibility audits.

get_accessibility_audits input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 100,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
search_transit_stops
Advertised by the server during the last successful anonymous check.

Search official nationwide public-transport stops from the current ATP GTFS feed.

search_transit_stops input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1
    },
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_city_mobility
Advertised by the server during the last successful anonymous check.

Get Ville de Luxembourg mobility locations as GeoJSON features.

get_city_mobility input schema
{
  "type": "object",
  "required": [
    "category"
  ],
  "properties": {
    "category": {
      "enum": [
        "park_and_bike",
        "park_and_ride",
        "covered_parking",
        "surface_parking",
        "accessible_parking",
        "bike_rentals"
      ],
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_weather_observations
Advertised by the server during the last successful anonymous check.

Get live MeteoLux weather observations at Luxembourg-Airport: temperature, wind, pressure, humidity, visibility.

get_weather_observations input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_public_holidays
Advertised by the server during the last successful anonymous check.

List Luxembourg legal public holidays in four languages, optionally for one year.

get_public_holidays input schema
{
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "maximum": 2100,
      "minimum": 2020
    }
  },
  "additionalProperties": false
}
search_parliamentary_questions
Advertised by the server during the last successful anonymous check.

Search Chamber of Deputies parliamentary questions by keyword, newest first.

search_parliamentary_questions input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
get_housing_prices
Advertised by the server during the last successful anonymous check.

Get advertised housing sale prices by commune from the official Observatoire de l'Habitat.

get_housing_prices input schema
{
  "type": "object",
  "properties": {
    "year": {
      "type": "string",
      "description": "Four-digit year such as 2025; defaults to the latest"
    },
    "commune": {
      "type": "string",
      "description": "Optional commune-name filter"
    },
    "property_type": {
      "enum": [
        "apartment",
        "house"
      ],
      "type": "string",
      "default": "apartment"
    }
  },
  "additionalProperties": false
}
get_election_results
Advertised by the server during the last successful anonymous check.

Get machine-readable 2023 legislative election results, national and per circonscription.

get_election_results input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_ev_charging
Advertised by the server during the last successful anonymous check.

Get Chargy public EV charging stations with live connector availability.

get_ev_charging input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional name or address filter"
    },
    "available_only": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
get_waste_collections
Advertised by the server during the last successful anonymous check.

Get upcoming municipal waste-collection dates for a Luxembourg commune.

get_waste_collections input schema
{
  "type": "object",
  "required": [
    "commune"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1
    },
    "street": {
      "type": "string",
      "description": "Optional street-name filter; commune-wide rows always match"
    },
    "commune": {
      "type": "string"
    },
    "waste_type": {
      "type": "string",
      "description": "Optional collection-type filter such as verre, papier, biodechets"
    }
  },
  "additionalProperties": false
}
get_weather_forecast
Advertised by the server during the last successful anonymous check.

Get the official MeteoLux forecast for a place in Luxembourg: current conditions, 24 hours, 5 days, UV index, sunrise and sunset.

get_weather_forecast input schema
{
  "type": "object",
  "properties": {
    "language": {
      "enum": [
        "en",
        "fr",
        "de",
        "lb"
      ],
      "type": "string",
      "default": "en"
    },
    "latitude": {
      "type": "number",
      "default": 49.6116
    },
    "longitude": {
      "type": "number",
      "default": 6.1319
    }
  },
  "additionalProperties": false
}
get_fuel_prices
Advertised by the server during the last successful anonymous check.

Get official monthly Luxembourg prices for petrol, diesel, hydrogen, LPG, home electricity and public EV charging.

get_fuel_prices input schema
{
  "type": "object",
  "properties": {
    "months": {
      "type": "integer",
      "default": 6,
      "maximum": 24,
      "minimum": 1
    }
  },
  "additionalProperties": false
}
get_public_alerts
Advertised by the server during the last successful anonymous check.

Get recent LU-Alert public warnings: floods, storms, food recalls and other national alerts.

get_public_alerts input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 3,
      "maximum": 10,
      "minimum": 1
    },
    "language": {
      "enum": [
        "en",
        "fr",
        "de",
        "lb"
      ],
      "type": "string",
      "default": "en"
    },
    "active_only": {
      "type": "boolean",
      "default": true
    }
  },
  "additionalProperties": false
}
get_commune_leaders
Advertised by the server during the last successful anonymous check.

Get the current mayor and aldermen of Luxembourg communes.

get_commune_leaders input schema
{
  "type": "object",
  "properties": {
    "commune": {
      "type": "string",
      "description": "Optional commune-name filter"
    }
  },
  "additionalProperties": false
}
get_commune_population
Advertised by the server during the last successful anonymous check.

Get official resident population by commune, split by adults, minors and sex.

get_commune_population input schema
{
  "type": "object",
  "properties": {
    "commune": {
      "type": "string",
      "description": "Optional commune-name filter"
    }
  },
  "additionalProperties": false
}
get_pharmacies_on_duty
Advertised by the server during the last successful anonymous check.

Get the pharmacies on duty in Luxembourg for a date, with address and phone number.

get_pharmacies_on_duty input schema
{
  "type": "object",
  "properties": {
    "date": {
      "type": "string",
      "description": "YYYY-MM-DD within the published window; defaults to today"
    },
    "locality": {
      "type": "string",
      "description": "Optional locality or address filter"
    }
  },
  "additionalProperties": false
}
get_electricity_prices
Advertised by the server during the last successful anonymous check.

Get Luxembourg day-ahead wholesale electricity prices per quarter hour, with the cheapest and most expensive slots.

get_electricity_prices input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
get_carsharing
Advertised by the server during the last successful anonymous check.

Find currently available CFL FLEX carsharing vehicles by station, town or fuel type.

get_carsharing input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional station, town, address or model filter"
    },
    "fuel_type": {
      "type": "string",
      "description": "Optional fuel filter such as electric or diesel"
    }
  },
  "additionalProperties": false
}
get_bike_sharing
Advertised by the server during the last successful anonymous check.

Get live Vel'OK bike-sharing availability at stations in southern Luxembourg.

get_bike_sharing input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional station, locality or commune filter"
    },
    "available_only": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
search_tenders
Advertised by the server during the last successful anonymous check.

Search Luxembourg public procurement notices with deadlines, buyers and CPV codes.

search_tenders input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "Optional full-text filter"
    },
    "open_only": {
      "type": "boolean",
      "default": true
    }
  },
  "additionalProperties": false
}
get_plenary_votes
Advertised by the server during the last successful anonymous check.

Get Chamber of Deputies plenary votes, newest first, with yes/no/abstain tallies per party and optionally how one deputy voted.

get_plenary_votes input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 10,
      "maximum": 50,
      "minimum": 1
    },
    "query": {
      "type": "string",
      "description": "Optional subject filter such as a bill number (PL 8727) or keyword"
    },
    "deputy": {
      "type": "string",
      "description": "Optional deputy-name filter; adds that deputy's vote"
    }
  },
  "additionalProperties": false
}
get_deputies
Advertised by the server during the last successful anonymous check.

List the current members of the Chamber of Deputies with party, constituency, start of mandate and official email.

get_deputies input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional name, party or constituency filter"
    }
  },
  "additionalProperties": false
}
lookup_luxembourgish
Advertised by the server during the last successful anonymous check.

Look up a word in the official Luxembourgish dictionary (LOD): translations into German, French, English and Portuguese, pronunciation, forms and examples.

lookup_luxembourgish input schema
{
  "type": "object",
  "required": [
    "word"
  ],
  "properties": {
    "word": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "default": 2,
      "maximum": 5,
      "minimum": 1
    },
    "language": {
      "enum": [
        "lb",
        "de",
        "fr",
        "en",
        "pt",
        "nl"
      ],
      "type": "string",
      "default": "lb",
      "description": "Language of the word being looked up"
    }
  },
  "additionalProperties": false
}
get_traffic_events
Advertised by the server during the last successful anonymous check.

Get live roadworks, lane closures, incidents and equipment faults on Luxembourg motorways from CITA.

get_traffic_events input schema
{
  "type": "object",
  "properties": {
    "road": {
      "type": "string",
      "description": "Optional road filter such as A4 or B40"
    }
  },
  "additionalProperties": false
}
get_electricity_grid
Advertised by the server during the last successful anonymous check.

Get Luxembourg's latest daily electricity load, generation by production type and cross-border flows (ENTSO-E actuals).

get_electricity_grid input schema
{
  "type": "object",
  "properties": {
    "include_series": {
      "type": "boolean",
      "default": false,
      "description": "Also return the 15-minute load and generation series"
    }
  },
  "additionalProperties": false
}
get_unemployment
Advertised by the server during the last successful anonymous check.

Get monthly ADEM figures: registered resident jobseekers by sex and job vacancies, nationally or for one commune.

get_unemployment input schema
{
  "type": "object",
  "properties": {
    "months": {
      "type": "integer",
      "default": 12,
      "maximum": 120,
      "minimum": 1
    },
    "commune": {
      "type": "string",
      "description": "Optional commune name for local jobseeker counts"
    }
  },
  "additionalProperties": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (3 of 3 answered).

  1. 2026-11-07: 2 of 2 checks answered
  2. 2026-11-09: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1531 ms
95th percentile latency
1531 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1531 ms · metadata changed · 44 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http luxembourg-mcp-mcp https://mcp.luxembourg-mcp.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add luxembourg-mcp-mcp --url https://mcp.luxembourg-mcp.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable luxembourg-mcp-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "luxembourg-mcp-mcp": {
      "url": "https://mcp.luxembourg-mcp.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "luxembourg-mcp-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.luxembourg-mcp.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start luxembourg-mcp-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "luxembourg-mcp-mcp": {
      "type": "http",
      "url": "https://mcp.luxembourg-mcp.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http luxembourg-mcp-mcp https://mcp.luxembourg-mcp.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.luxembourg-mcp.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "luxembourg-mcp-mcp": {
      "serverUrl": "https://mcp.luxembourg-mcp.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Luxembourg MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.