MCP server exposing Madrid environmental open data for AI agents
Solid foundation with 10 well-named tools covering Madrid environmental data. All tools have descriptions (avg 180 chars, within baseline 194) and explicit input schemas with types. However, parameter descriptions are sparse or generic in several tools (e.g., get_traffic has empty input schema; find_nearby lacks radius_m description detail). Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent; no recovery guidance or validation messages. Missing tool annotations (readOnlyHint, idempotentHint). Naming is strong (verb_noun pattern, clear intent), but composition could be tighter, some tools like compare_districts could benefit from clearer parameter constraints.
Compare 2-4 Madrid districts side by side on the Green Index and all 5 sub-indices. Highlights which district scores best in each category. All data from Ayuntamiento de Madrid official sources.
Find which Madrid district a street address or place belongs to. Returns the district name, code, and coordinates. Use this first when the user mentions an address, street, or place instead of a district name. Then use the district code/name with other tools (get_green_index, get_air_quality, etc.).
Find the nearest EMT bus stops and BiciMAD stations to a street address in Madrid. Shows distance, available bus lines per stop, and real-time bike availability. Use when the user mentions an address and wants to know nearby transport options.
Get real-time air quality readings (NO2, PM2.5, PM10, O3) from Madrid monitoring stations. Data from Ayuntamiento de Madrid (ciudadesabiertas.madrid.es), updated every 20 minutes.
Get real-time BiciMAD public bike availability in Madrid. 635 stations with bikes and docks available, updated every minute. Data from EMT Madrid (madrid.publicbikesystem.net), no authentication required.
get_traffic has empty input schema (no parameters defined). LLM cannot understand what controls the tool's behavior or whether it accepts filters.
No output schemas documented for any tool. LLMs cannot predict response structure, field names, or types, forces runtime discovery and increases hallucination risk.
No error handling or recovery guidance. Tools return JSON but provide no actionable error messages, retry hints, or fallback suggestions when data is unavailable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get real-time EMT bus service alerts (disruptions, detours, events) in Madrid. Can filter by bus line or district. No authentication required. Data from EMT Madrid (openapi.emtmadrid.es).
Get green areas, urban trees, recycling infrastructure, and public transport (EMT bus) data per Madrid district. Includes m2/inhabitant, tree species, recycling container counts, and bus stops/lines. Data from Ayuntamiento de Madrid (datos.madrid.es, datos.emtmadrid.es).
Get the MadridVerde Green Index (0-100) for Madrid districts. Composite score from 5 sub-indices: Air (30%), Green areas (25%), Noise (20%), Mobility (15%), Recycling (10%). Includes real-time air quality and traffic data. All data from Ayuntamiento de Madrid official sources.
Get noise pollution levels (LAeq, Ld, Ln in dB) from Madrid monitoring stations. Historical monthly data since 1998. WHO recommends <55 dB. Data from Ayuntamiento de Madrid (datos.madrid.es).
Get real-time traffic conditions in Madrid from ~4,000 road sensors. Shows flow status (fluid/dense/congested/blocked), average intensity, and occupancy. Data from Ayuntamiento de Madrid (informo.madrid.es), updated every 5 minutes.
compare_districts requires 2-4 districts but lacks enum constraint or validation. LLM may pass invalid district names or wrong count without clear feedback.
find_nearby radius_m parameter lacks min/max bounds in description. LLM could pass 0, negative, or 10000+ meters without guidance.