Luxembourg MCP

Keyless MCP access to official Luxembourg public data: laws, statistics, mobility, and more.

Should I use this

Quality & Safety

A
Description quality
90%
Schema completeness
75%
Naming quality
99%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'lookup_luxembourgish' description lacks action verbin lookup_luxembourgish

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,260Tokens (tool definitions)
~542 BTypical response size
Significant attention impact (2.55% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "luxembourg-mcp": {
      "command": "uvx",
      "args": [
        "luxembourg-mcp"
      ]
    }
  }
}

Runnable packages

pypiluxembourg-mcp0.7.0stdio

Remote endpoints

https://mcp.luxembourg-mcp.com/mcpstreamable-http

What it can do

Tool inventory

Tools (44)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_datasets(query, page, page_size)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1
    },
    "page_size": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_dataset(dataset_id_or_slug)

Get metadata and current download resources for an official dataset.

Input Schema

{
  "type": "object",
  "properties": {
    "dataset_id_or_slug": {
      "type": "string"
    }
  },
  "required": [
    "dataset_id_or_slug"
  ],
  "additionalProperties": false
}
⚪geocode_address(query)

Resolve a Luxembourg address to official Geoportail coordinates.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢reverse_geocode(latitude, longitude)

Find the nearest official Luxembourg address to WGS84 coordinates.

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "additionalProperties": false
}
🟢list_geo_collections(query, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    }
  },
  "additionalProperties": false
}
🟢get_geo_features(collection_id, limit, bbox)

Fetch GeoJSON features from an official Geoportail OGC collection.

Input Schema

{
  "type": "object",
  "properties": {
    "collection_id": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 10
    },
    "bbox": {
      "type": "array",
      "items": {
        "type": "number"
      },
      "minItems": 4,
      "maxItems": 4,
      "description": "WGS84 [west, south, east, north]"
    }
  },
  "required": [
    "collection_id"
  ],
  "additionalProperties": false
}
🟢get_weather_alerts(language)

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

Input Schema

{
  "type": "object",
  "properties": {
    "language": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "de",
        "lu"
      ],
      "default": "en"
    }
  },
  "additionalProperties": false
}
🟢search_legislation(query, limit)

Search official Luxembourg legislation and consolidated laws through Legilux.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢search_statistics(query, limit)

Search STATEC LUSTAT statistical dataflows by topic or title.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_statistics(dataflow_id, key, last_n_observations, max_rows)

Retrieve recent observations from a STATEC LUSTAT SDMX dataflow.

Input Schema

{
  "type": "object",
  "properties": {
    "dataflow_id": {
      "type": "string",
      "description": "STATEC identifier such as DF_D7100"
    },
    "key": {
      "type": "string",
      "default": "all",
      "description": "SDMX dimension key or all"
    },
    "last_n_observations": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 5
    },
    "max_rows": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2000,
      "default": 500
    }
  },
  "required": [
    "dataflow_id"
  ],
  "additionalProperties": false
}
🟢get_city_parking(query, available_only)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "available_only": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
🟢list_cfl_parking

List official CFL Park and Ride facilities.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_cfl_parking(parking_id)

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

Input Schema

{
  "type": "object",
  "properties": {
    "parking_id": {
      "type": "string"
    }
  },
  "required": [
    "parking_id"
  ],
  "additionalProperties": false
}
🟢get_traffic(road)

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

Input Schema

{
  "type": "object",
  "properties": {
    "road": {
      "type": "string",
      "enum": [
        "a3",
        "a4",
        "a6",
        "a7",
        "a13",
        "b40"
      ],
      "default": "a6"
    }
  },
  "additionalProperties": false
}
🟢get_water_levels(station)

Get the latest official measured water level at Luxembourg stations.

Input Schema

{
  "type": "object",
  "properties": {
    "station": {
      "type": "string",
      "description": "Optional station-name filter"
    }
  },
  "additionalProperties": false
}
🟢get_air_quality(city)

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

Input Schema

{
  "type": "object",
  "properties": {
    "city": {
      "type": "string",
      "description": "Optional city-name filter"
    }
  },
  "additionalProperties": false
}
🟢search_chamber_bodies(query, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_accessibility_figures

Get national Digital Accessibility Observatory key figures.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_accessibility_audits(limit)

Get the latest public-sector digital accessibility audits.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 10
    }
  },
  "additionalProperties": false
}
🟢search_transit_stops(query, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_city_mobility(category)

Get Ville de Luxembourg mobility locations as GeoJSON features.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": [
        "park_and_bike",
        "park_and_ride",
        "covered_parking",
        "surface_parking",
        "accessible_parking",
        "bike_rentals"
      ]
    }
  },
  "required": [
    "category"
  ],
  "additionalProperties": false
}
🟢get_weather_observations

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

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_public_holidays(year)

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

Input Schema

{
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "minimum": 2020,
      "maximum": 2100
    }
  },
  "additionalProperties": false
}
🟢search_parliamentary_questions(query, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_housing_prices(property_type, commune, year)

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

Input Schema

{
  "type": "object",
  "properties": {
    "property_type": {
      "type": "string",
      "enum": [
        "apartment",
        "house"
      ],
      "default": "apartment"
    },
    "commune": {
      "type": "string",
      "description": "Optional commune-name filter"
    },
    "year": {
      "type": "string",
      "description": "Four-digit year such as 2025; defaults to the latest"
    }
  },
  "additionalProperties": false
}
🟢get_election_results

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

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_ev_charging(query, available_only)

Get Chargy public EV charging stations with live connector availability.

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(commune, street, waste_type, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "commune": {
      "type": "string"
    },
    "street": {
      "type": "string",
      "description": "Optional street-name filter; commune-wide rows always match"
    },
    "waste_type": {
      "type": "string",
      "description": "Optional collection-type filter such as verre, papier, biodechets"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20
    }
  },
  "required": [
    "commune"
  ],
  "additionalProperties": false
}
🟢get_weather_forecast(latitude, longitude, language)

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

Input Schema

{
  "type": "object",
  "properties": {
    "latitude": {
      "type": "number",
      "default": 49.6116
    },
    "longitude": {
      "type": "number",
      "default": 6.1319
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "de",
        "lb"
      ],
      "default": "en"
    }
  },
  "additionalProperties": false
}
🟢get_fuel_prices(months)

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

Input Schema

{
  "type": "object",
  "properties": {
    "months": {
      "type": "integer",
      "minimum": 1,
      "maximum": 24,
      "default": 6
    }
  },
  "additionalProperties": false
}
🟢get_public_alerts(limit, active_only, language)

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

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 3
    },
    "active_only": {
      "type": "boolean",
      "default": true
    },
    "language": {
      "type": "string",
      "enum": [
        "en",
        "fr",
        "de",
        "lb"
      ],
      "default": "en"
    }
  },
  "additionalProperties": false
}
🟢get_commune_leaders(commune)

Get the current mayor and aldermen of Luxembourg communes.

Input Schema

{
  "type": "object",
  "properties": {
    "commune": {
      "type": "string",
      "description": "Optional commune-name filter"
    }
  },
  "additionalProperties": false
}
🟢get_commune_population(commune)

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

Input Schema

{
  "type": "object",
  "properties": {
    "commune": {
      "type": "string",
      "description": "Optional commune-name filter"
    }
  },
  "additionalProperties": false
}
🟢get_pharmacies_on_duty(date, locality)

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

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

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

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟢get_carsharing(query, fuel_type)

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

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(query, available_only)

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

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(query, limit, open_only)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional full-text filter"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    },
    "open_only": {
      "type": "boolean",
      "default": true
    }
  },
  "additionalProperties": false
}
🟢get_plenary_votes(query, deputy, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "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"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "default": 10
    }
  },
  "additionalProperties": false
}
🟢get_deputies(query)

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

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Optional name, party or constituency filter"
    }
  },
  "additionalProperties": false
}
⚪lookup_luxembourgish(word, language, limit)

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

Input Schema

{
  "type": "object",
  "properties": {
    "word": {
      "type": "string"
    },
    "language": {
      "type": "string",
      "enum": [
        "lb",
        "de",
        "fr",
        "en",
        "pt",
        "nl"
      ],
      "default": "lb",
      "description": "Language of the word being looked up"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "default": 2
    }
  },
  "required": [
    "word"
  ],
  "additionalProperties": false
}
🟢get_traffic_events(road)

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

Input Schema

{
  "type": "object",
  "properties": {
    "road": {
      "type": "string",
      "description": "Optional road filter such as A4 or B40"
    }
  },
  "additionalProperties": false
}
🟢get_electricity_grid(include_series)

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

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(months, commune)

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

Input Schema

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

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded44 tools
verifiedversion not recorded44 tools
verifiedversion not recorded44 tools
verifiedversion not recorded44 tools
verifiedversion not recorded38 tools
verifiedversion not recorded38 tools
verifiedversion not recorded38 tools