Server definition
- Hash
- sha256:0ffee4688c48fd91bb17d63e64d7e253682902d6522ad8e217f321dc5999cd24
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "Catalan open data MCP server. You can query real data directly with query_dataset if you know the dataset_id. Always respond in the user's language.\n\nFEATURED DATASETS (use query_dataset directly, no search needed):\n- generalitat:gn9e-3qhr → Embassaments (reservoirs), CURRENT state — one row per reservoir with the latest reading: fields dia, estaci, volum_embassat, percentatge_volum_embassat, nivell_absolut\n- generalitat:vjx7-6kcp → Embassaments, HISTORICAL series (readings over time). Long format: one row per station/variable/timestamp. Fields: dia, hora, estacio, conca, tipus_variable ('Volum embassat', 'Percentatge volum embassat', 'Nivell absolut'), valor, unitat_mesura. Filter by estacio + tipus_variable.\n- generalitat:i5n8-43cw → Estat de sequera per municipi (drought status by municipality)\n- generalitat:rmgc-ncpb → Accidents de trànsit amb morts o ferits greus (traffic accidents with deaths/serious injuries)\n- generalitat:jq8m-d7cw → Incidents operatius gestionats pel CAT 112 (112 emergency incidents)\n- generalitat:mfqb-sbx4 → Trucades operatives gestionades pel CAT 112 (112 emergency calls)\n- generalitat:g2ay-3vnj → Actuacions dels Bombers de la Generalitat (firefighter operations)\n- generalitat:j6ii-t3w2 → Certificats d'eficiència energètica d'edificis (building energy certificates)\n- fgc:vehicle-positions-gtfs_realtime → FGC train GPS positions (real-time)\n- fgc:alerts-gtfs_realtime → FGC service alerts (real-time, in Catalan)\n- fgc:trip-updates-gtfs_realtime → FGC train delays (real-time)\n- renfe:vehicle-positions-gtfsrt → Rodalies Barcelona train GPS positions (real-time)\n- renfe:trip-updates-gtfsrt → Rodalies Barcelona train delays (real-time)\n- renfe:alerts-gtfsrt → Rodalies Barcelona service alerts (real-time, in Spanish)\n- idescat:m10328 → Població de Catalunya (population)\n- idescat:m10234 → Confiança empresarial (business confidence)\n- barcelona:accidents-gu-bcn → Accidents gestionats per la Guàrdia Urbana BCN (police-managed accidents)\n- barcelona:relacio-contractistes → Top contractors of Barcelona City Council: company name, NIF, total amount, number of contracts per entity\n- barcelona:perfil-contractant → Public procurement announcements: tenders, awards, formalizations of Barcelona and its municipal group\n- generalitat:ybgg-dgi6 → ALL public procurement in Catalonia (PSCP): company name (denominacio_adjudicatari), amount (import_adjudicacio_sense_iva), entity. Filter by denominacio_adjudicatari or organ.\n- generalitat:hb6v-jcbf → Public contracts registry for ANY Catalan municipality. Filter: organisme_contractant='Ajuntament de X'. Fields: adjudicatari, import_adjudicacio, contracte, exercici\n- generalitat:nn7v-4yxe → Generalitat contract awards (last 5 years): empresa_adjudicataria, import_adjudicat_sense_iva, departament\n- ine:poblacio-municipis → Population by municipality from INE (national census)\n- ine:epa-atur-ocupacio → Employment/unemployment by region (EPA survey)\n- ine:turisme-ocupacio-hotelera → Hotel occupancy by province/tourist destination\n- ree:generacio-espanya → Electricity generation mix in Spain (solar, wind, nuclear...)\n- ree:preus-electricitat → Real-time electricity prices (PVPC)\n- cnmc:preus-carburants → Fuel prices at every gas station in Spain\n\nCORA RESEARCH DATA (academic datasets via CKAN datastore):\n- cora:electoral-1936 → 1936 Spanish elections at municipal level: votes by coalition (left/right/center), turnout, 8,560 municipalities including 1,065 in Catalonia\n- cora:airbnb-bcn-demografia → Barcelona census-section demographics (population by age, foreigners) linked to Airbnb impact study\n- cora:airbnb-bcn-adreces → 1,918 Airbnb-style tourist rentals in Barcelona with GPS coordinates\n- cora:cova-gran-2025 → Cova Gran (Lleida) archaeological inventory: 5,573 finds (bones, lithic, ceramic) with stratigraphic levels and XYZ coordinates\n- cora:polat-panel → POLAT 12-wave political-attitudes panel of Spain (2010-2020): 20,991 obs, 106 key variables (trust, vote, ideology, populism)\n- cora:populistes-espanya → Populist Attitudes Survey Spain 2018: 3,031 respondents, 173 variables (populism, emotions, personality, ideology)\n- cora:vulnyouth-espanya → VulnYouth: precarious youth in Spain 2023: 3,013 young people (20-34), 138 variables (labour precariousness, WHO-5 mental health, housing)\n- cora:covid-normes-espanya → COVID-19 Social Norms Spain 2020: 4,523 responses during lockdown on compliance, informal sanctions, risk perception (62 variables)\n- cora:depcura-bcn → Care & Dependency Barcelona 2020: 1,600 people aged 65+ with functional dependency, 639 variables on care strategies and social services\n\nCATALÒNICA DIGITAL HERITAGE (Biblioteca de Catalunya — live, NOT indexed locally):\nUse query_dataset('catalonica:<set>', search='<text>').\n20 subportals return REAL RECORDS via their native API/scrape (title, creator, date, url_resource, abstract when available); the rest return a SEARCH GUIDE with native cercador URL.\nNATIVE-HANDLER SUBPORTALS (real records, citable):\n • DSpace 7 JSON: catalonica:upcommons (UPC), catalonica:o2uoc (UOC), catalonica:e-repositori (UPF), catalonica:dd (UB), catalonica:udlobert + catalonica:udlfonsespecials (UdL)\n • DSpace XMLUI scrape: catalonica:tdx (TDX theses), catalonica:uivic (UVic), catalonica:repositori_filmoteca (Filmoteca), catalonica:calaix (Cultura Generalitat)\n • DSpace JSPUI scrape: catalonica:bcnroc (Ajuntament BCN)\n • CONTENTdm API: catalonica:mdc (Memòria Digital Catalunya — broad heritage aggregator: cartells, fotos, manuscrits, premsa local)\n • Invenio MARC XML: catalonica:ddduab (UAB general), catalonica:ddduabrecerca (UAB research articles)\n • Europeana API: catalonica:mnac (MNAC art collection), catalonica:arca (~229K Catalan historical magazines/newspapers), catalonica:cartoteca (historical maps via ICGC), catalonica:regira (~51K Girona patrimoni hemerogràfic), catalonica:dugidocs (~18K UdG repo: postals, articles, documents)\n • Hardcoded journal catalogue: catalonica:raco (returns matching RACO journals filtered by keywords. Each record is a journal with `url_resource` and `search_within_journal` — the LLM should drill into the chosen journal to find articles, since OJS exposes no public article-level cross-search API)\nSEARCH-GUIDE SUBPORTALS (no JSON API, returns URLs + topic hints — direct the user to search_url_native, do NOT fabricate records):\n catalonica:hcc, catalonica:reus, catalonica:iei, catalonica:trencadis, catalonica:corpusliterari, catalonica:arxiuparaula, catalonica:bipadi, catalonica:rde, catalonica:rd_tecnocampus, catalonica:drac, catalonica:maco, catalonica:dugife, catalonica:dugimedia, catalonica:rcub, catalonica:egranados, catalonica:p3d, catalonica:bilderatlas, catalonica:ddduabrecursosdocents, catalonica:ddduabv2\nPick the right subportal for the topic — each one is a thematic source:\n- catalonica:tdx → Tesis Doctorals en Xarxa — Catalan doctoral theses (best for: scholarly research by author, supervisor, university or topic). Try search='tema:biomedicina', 'pais:Catalunya'\n- catalonica:raco → Revistes Catalanes amb Accés Obert — 600+ open-access Catalan academic journals (best for: scholarly papers in Catalan/Spanish by discipline)\n- catalonica:upcommons → UPC engineering & architecture (theses, papers, final-year projects)\n- catalonica:ddduab → Dipòsit Digital UAB (research + heritage)\n- catalonica:mnac → Museu Nacional d'Art de Catalunya — paintings, sculpture, photography, decorative arts (best for: Catalan art, modernisme, noucentisme, romanesque, gothic). Try search='Casas', 'modernisme', 'frescos romànics'\n- catalonica:mdc → Memòria Digital de Catalunya — heritage aggregator (cartells, fotos, manuscrits, premsa local from CSUC universities). Try search='cartell guerra civil'\n- catalonica:bipadi → Biblioteca Patrimonial Digital UB — manuscripts, incunabula, rare books\n- catalonica:cartoteca → Cartoteca Digital ICGC — historical maps and atlases. Try search='mapa Barcelona 1850'\n- catalonica:arca → Arxiu de Revistes Catalanes Antigues — historical magazines/newspapers\n- catalonica:hcc → Hemeroteca Científica Catalana — historical scientific journals\n- catalonica:reus → Reus historical local press (1850-1940)\n- catalonica:iei → Institut d'Estudis Ilerdencs — Lleida heritage and press\n- catalonica:repositori_filmoteca → Filmoteca de Catalunya — cinema heritage, posters, programs\n- catalonica:corpusliterari → Corpus Literari Digital — Catalan literature critical editions\n- catalonica:dd → Dipòsit Digital UB; catalonica:o2uoc → UOC repo; catalonica:e-repositori → UPF repo; catalonica:udlobert → UdL repo; catalonica:uivic → UVic repo (all academic research)\n- catalonica:bcnroc → Barcelona City Council reports & studies\n- catalonica:trencadis → XBM local municipal heritage (small towns)\n- catalonica:rcub → UB Revistes Científiques; catalonica:rde → Dept. Educació Generalitat; catalonica:calaix → Dept. Cultura Generalitat; catalonica:drac → Dades i Recursos Cultura\n- catalonica:arxiuparaula → Ateneu Barcelonès oral archive; catalonica:egranados → Enric Granados archive\n- catalonica:dugidocs/dugife/dugimedia → UdG; catalonica:dddua/dddua-recerca/dddua-recursosdocents/dddua-v2 → UAB; catalonica:udlfonsespecials → UdL; catalonica:rd_tecnocampus → TecnoCampus; catalonica:maco → Catalan academic monographs; catalonica:regira → Girona heritage; catalonica:bilderatlas → image archive\nStrategy: for an unknown query, you may try several subportals or fall back to catalonica:mdc (broadest aggregator). Subportal-specific cercador URLs are exposed via get_dataset_info > extra.subportal_url.\n\nMUNICIPAL DATA (filter by NOM_ENS with query_dataset):\n- aoc:ge-ge-cost-efectiu-serveis-minhap → Cost dels serveis de +1,000 municipis (municipal service costs)\n- aoc:ge-p-pressupostos-i-plantilles → Pressupostos i plantilles municipals (budgets & staffing)\n- aoc:ge-ge-endeutament → Endeutament municipal (municipal debt)\n- aoc:ge-p-liquidacions-per-programes-detallat → Budget execution by program\n- aoc:ge-ge-termini-pagament-proveidors → Payment terms to suppliers\n\nAVAILABLE PORTALS:\ngeneralitat (Socrata, ~1091), aoc (CKAN, ~903), barcelona (CKAN, ~555), idescat (API, ~144), reus (CKAN, ~119), diba (REST+CIDO, ~91), girona (CKAN, ~53), fgc (ODS+GTFS-RT, ~50), catalonica (OAI-PMH, ~39 cultural-heritage sets ≈2.2M items), cora (CKAN Datastore, 9 academic), ine (statistics API, ~6), renfe (CKAN+GTFS-RT, ~6), ree (energy API, ~4), sepe (employment, ~2), cnmc (fuel prices, ~1)\n\nCOMMON SEARCH KEYWORDS:\nembassament, sequera, aigua, qualitat aire, contaminació, transport, trànsit, pressupost, educació, salut, població, habitatge, turisme, energia, electricitat, preu llum, residus, comerç, seguretat, bombers, accidents, 112, emergència, trens, rodalies, renfe, meteorologia, temps, temperatura, pluja, atur, ocupació, gasolina, carburants, PIB, IPC\n\nMAIN CATEGORIES:\nMedi Ambient, Economia, Educació, Salut, Seguretat, Societat-benestar, Urbanisme-infraestructures, Transport, Territori, Població, Treball, Turisme, Ciència i Tecnologia\n\nQUICK REFERENCE — Common queries (use query_dataset directly):\n- Contracts of any municipality: generalitat:hb6v-jcbf, filter {\"organisme_contractant\": \"Ajuntament de X\"}\n- Municipal budgets/debt: aoc:ge-* datasets, filter {\"NOM_ENS\": \"Ajuntament de X\"}\n- Reservoir levels: generalitat:gn9e-3qhr (no filter needed)\n- Electricity price now: ree:preus-electricitat (no filter needed)\n- Fuel prices by town: cnmc:preus-carburants, filter {\"municipi\": \"X\"}\n- Train delays: renfe:trip-updates-gtfsrt or fgc:trip-updates-gtfs_realtime\n- Population: ine:poblacio-municipis (auto-filtered to Catalonia)\n\nIF THE USER ASKS WHAT THEY CAN DO or what data is available:\nExplain that this server provides 15 portals covering: reservoirs & drought, air quality, traffic accidents, 112 emergencies, firefighters, public contracts & procurement, municipal budgets of 1000+ towns, train delays (FGC + Rodalies real-time), electricity prices (hourly PVPC), fuel prices (1500 gas stations), population, employment, tourism, GDP, housing, plus CORA academic research data (1936 elections, Airbnb, archaeology, political attitudes, populism, youth precariousness, COVID norms, dependency care), plus Catalònica digital heritage (~2.2M cultural objects: MNAC, RACO journals, doctoral theses, BNC library, MDC, Filmoteca, historical newspapers, maps, manuscripts). Suggest they try asking a specific question about any Catalan topic.\n\nNOTES:\n- Embassaments: current state → gn9e-3qhr. Evolution, trends or any past date → vjx7-6kcp. Every other question: follow the normal flow (search_datasets, then query_dataset).\n- Socrata: filter by any field, case-insensitive. Ex: filters: {\"estaci\": \"Embassament de Sau\"} or {\"municipi\": \"badalona\"}\n- CKAN AOC municipal: filter by NOM_ENS (e.g., \"Ajuntament de Tiana\"). Field names often in Spanish.\n- Idescat: each dataset_id returns 1 specific indicator with value, unit, period, and time series.\n- FGC GTFS-RT: auto-decoded protobuf. vehicle-positions → GPS, alerts → Catalan text.\n- Renfe GTFS-RT: JSON real-time data for Rodalies de Catalunya. Auto-filtered to Barcelona commuter routes. Content in Spanish.\n- INE: national statistics auto-filtered to Catalunya/Barcelona/Girona/Lleida/Tarragona series.\n- REE: electricity data (national level). Generation, demand, balance, real-time prices.\n- CNMC fuel prices: use filters {\"provincia\": \"Barcelona\"} or {\"municipi\": \"Sabadell\"} to narrow. Default: all Catalunya.\n- Public contracts: for ANY municipality use generalitat:hb6v-jcbf with filter {\"organisme_contractant\": \"Ajuntament de X\"}. Add {\"exercici\": \"2025\"} to filter by year. For Barcelona, barcelona:relacio-contractistes has aggregated totals per company.\n- CORA datasets: CKAN-compatible datastore. Filter by any field (case-insensitive). Survey datasets use coded values (numeric or short text). Wave-based panels (polat) have field 'wave'. Use list_dataset_fields to see all columns.\n- Catalònica: each dataset_id `catalonica:<set>` is one digital-heritage collection (thousands to millions of records). Use `q` for free-text search on title/creator/subject/description (very effective — try keywords like 'Picasso', 'Barcelona 1936', 'manuscrit medieval'). Filter by `type` (Text, Image, MovingImage, Sound), `language` (cat, spa, eng, lat), or `date` (year). `url_resource` points to the institutional viewer; `url_catalonica` to the BNC aggregator page.\n- Radioteca: use `search_radioteca` to query radioteca.cat (~485K radio episodes, programs and people from 8 Catalan/Spanish broadcasters: Catalunya Ràdio, RAC1, Catalunya Música, iCat, Catalunya Informació, RTVE, Cadena SER, ara.cat). Searches title, description (contains episode summary with what was said), program and subheading. Filter by `publisher`, `year` (YYYY) or `type` (Episode/Program/Person). Only year-level date filtering is indexed; for a specific day combine year filter + keywords and inspect the URL path (`/YYYY/MM/DD/`) or `subheading`. ALWAYS cite radioteca.cat as source and include each hit's absolute `url` in your reply for traceability — never paraphrase episodes without linking.\n- Dataset names and field names are in Catalan or Spanish — use them as-is in queries.\n- Pagination: query_dataset returns max 100 rows per call. Use offset to get more (offset=0, 100, 200...). No duplicates when paginating. Don't assume 100 is all there is.\n- Sorting (Socrata): pass {\"order\": \"field_name DESC\"} in filters to sort results. Example: {\"order\": \"import_adjudicacio DESC\"} for top contracts by amount. Default order is stable (:id).\n- Use search_datasets only when you don't know which dataset you need.",
"tools": [
{
"description": "Get complete metadata for a dataset: fields with types and descriptions, API endpoint, license, available formats and last update. Call after search_datasets to get full details of a specific dataset.",
"inputSchema": {
"properties": {
"dataset_id": {
"description": "Unique dataset identifier in 'portal:id' format. Obtained from search_datasets results. Examples: 'generalitat:gn9e-3qhr', 'barcelona:qualitat-de-laire', 'renfe:vehicle-positions-gtfsrt'.",
"type": "string"
}
},
"required": [
"dataset_id"
],
"type": "object"
},
"name": "get_dataset_info",
"outputSchema": null
},
{
"description": "List all dataset categories and themes with counts per portal. Great first step to discover what data types are available before searching with search_datasets. Returns total datasets, count per portal and category list with counts. No parameters required.",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"name": "list_categories",
"outputSchema": null
},
{
"description": "List fields of a dataset with name, data type and description. Call before query_dataset to know which fields and filters are available.",
"inputSchema": {
"properties": {
"dataset_id": {
"description": "Unique dataset identifier in 'portal:id' format. Obtained from search_datasets results.",
"type": "string"
}
},
"required": [
"dataset_id"
],
"type": "object"
},
"name": "list_dataset_fields",
"outputSchema": null
},
{
"description": "List all 13 indexed open data portals with dataset counts. Catalan portals (Generalitat, Barcelona, Diba, AOC, Reus, Girona, FGC, Idescat, Renfe) + Spanish national sources with Catalonia focus (INE statistics, REE energy, SEPE employment, CNMC fuel prices). No parameters required.",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"name": "list_portals",
"outputSchema": null
},
{
"description": "Query real data from a dataset. Check instructions for featured dataset_ids and NOTES section for common filter patterns (municipal budgets, contracts, weather, energy, fuel prices).",
"inputSchema": {
"properties": {
"dataset_id": {
"description": "Unique dataset identifier in 'portal:id' format. Obtained from search_datasets results.",
"type": "string"
},
"filters": {
"additionalProperties": {
"type": "string"
},
"description": "Key-value filters where the key is the field name and the value is the filter value. Examples: {\"municipi\": \"Barcelona\"}, {\"any\": \"2024\"}, {\"NOM_ENS\": \"Ajuntament de Tiana\"}. Use list_dataset_fields to know valid field names.",
"type": "object"
},
"limit": {
"default": 20,
"description": "Number of rows to return. Min 1, max 100. Default 20. Use offset for pagination.",
"type": "number"
},
"offset": {
"default": 0,
"description": "Number of rows to skip for pagination. Default 0. Combine with limit to navigate large results.",
"type": "number"
},
"search": {
"description": "Free text search within dataset data. Works with Socrata ($q) and CKAN (q). For Diba and CIDO, use specific filters.",
"type": "string"
}
},
"required": [
"dataset_id"
],
"type": "object"
},
"name": "query_dataset",
"outputSchema": null
},
{
"description": "Find related datasets from OTHER portals. Great for discovering complementary data: if you're looking at air quality from Generalitat, it may suggest traffic data from Barcelona or emissions from AOC. Relations are computed by thematic similarity across portals.",
"inputSchema": {
"properties": {
"dataset_id": {
"description": "Dataset ID to find related datasets for. Obtained from search_datasets.",
"type": "string"
}
},
"required": [
"dataset_id"
],
"type": "object"
},
"name": "related_datasets",
"outputSchema": null
},
{
"description": "Search datasets by free text. IMPORTANT: check server instructions first — many common queries have a direct dataset_id you can use with query_dataset without searching. Only use search_datasets when you don't know which dataset you need.",
"inputSchema": {
"properties": {
"category": {
"description": "Filter by thematic category. Examples: 'Medi Ambient', 'Educació', 'Salut', 'Economia', 'Transport', 'Seguretat'. Use list_categories to see all available categories.",
"type": "string"
},
"limit": {
"default": 20,
"description": "Maximum number of results to return. Min 1, max 100. Default 20.",
"type": "number"
},
"portal": {
"description": "Filter results to a single portal.",
"enum": [
"generalitat",
"barcelona",
"diba",
"aoc",
"reus",
"girona",
"fgc",
"idescat",
"renfe",
"ine",
"ree",
"sepe",
"cnmc",
"cora",
"catalonica"
],
"type": "string"
},
"query": {
"description": "Search text in Catalan or Spanish. Examples: 'qualitat aire', 'pressupostos municipals', 'transport públic', 'residus', 'educació', 'rodalies'.",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_datasets",
"outputSchema": null
},
{
"description": "Search radio shows, episodes and people indexed at radioteca.cat (Catalan radio archive, ~485K documents from Catalunya Ràdio, RAC1, Catalunya Música, iCat, Catalunya Informació, RTVE, Cadena SER, ara.cat). Searches across episode titles, descriptions (which include a detailed summary of what was said), program name and subheading. Returns episodes (~473K), programs (~3K) and people (~9K). IMPORTANT: always cite radioteca.cat as the source and include the absolute 'url' in your reply for traceability — never paraphrase without linking.",
"inputSchema": {
"properties": {
"limit": {
"default": 10,
"description": "Maximum results. Min 1, max 50. Default 10.",
"type": "number"
},
"offset": {
"default": 0,
"description": "Pagination offset. Default 0.",
"type": "number"
},
"publisher": {
"description": "Filter by broadcaster.",
"enum": [
"Catalunya Ràdio",
"RAC1",
"Catalunya Música",
"iCat",
"Catalunya Informació",
"RTVE",
"Cadena SER",
"ara.cat"
],
"type": "string"
},
"query": {
"description": "Free text in Catalan or Spanish. Searches title, description (contains episode summary), program and subheading. Examples: 'visita papa', 'eleccions municipals', 'crisi habitatge', 'Albert Serra cinema'.",
"type": "string"
},
"type": {
"description": "Filter by document type.",
"enum": [
"Episode",
"Program",
"Person"
],
"type": "string"
},
"year": {
"description": "Filter by year (4 digits, e.g. '2025'). NOTE: only year-level filtering is indexed; for a specific day, use the broader year filter and look at the URL path (radioteca URLs include /YYYY/MM/DD/) or the 'subheading' field which often contains the date.",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_radioteca",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:0ffee4688c48fd91bb17d63e64d7e253682902d6522ad8e217f321dc5999cd24 | sha256sum