Piazza in Festa
Server Details
Sagre, feste e manifestazioni dei comuni italiani, ricavate ogni giorno dagli albi pretori.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
TDQS
Scored across 3 tools
Each tool serves a clearly distinct function: search events, list supported municipalities, and fetch event details. There is no meaningful overlap or ambiguity between the three tools.
Names are all lowercase snake_case and readable, but they do not follow one pattern: cerca_eventi is verb_noun, while comuni_coperti and dettaglio_evento are noun-based phrases. The mix is understandable but not fully predictable.
Three tools is well-scoped for a focused read-only event lookup service. Each tool has a clear role in the workflow with no redundancy.
The toolset covers the complete user flow: identify a covered municipality, search for events, then retrieve full event details. For a read-only public data service, no create, update, or delete operations are needed.
Available Tools
3 toolscerca_eventiCerca eventi e sagre nei comuni italianiARead-onlyIdempotentInspect
Cerca sagre, feste patronali, fiere, mercatini, concerti, mostre e manifestazioni nei comuni italiani. I dati sono ricavati ogni giorno dagli atti pubblicati sugli albi pretori dei comuni (ordinanze, delibere, concessioni di suolo pubblico), quindi comprendono anche i paesi piccoli, che non stanno su nessun altro calendario. Ogni evento riporta il link alla propria scheda e alla fonte ufficiale.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Ricerca testuale nel titolo e nella descrizione, minimo 3 caratteri. | |
| al | No | Data massima di inizio, formato 'YYYY-MM-DD'. | |
| dal | No | Data minima di inizio, formato 'YYYY-MM-DD'. | |
| comune | No | Identificativo del comune, in minuscolo e con i trattini (es. 'barolo', 'santo-stefano-belbo'). Usa comuni_coperti per trovarlo. | |
| limite | No | Quanti eventi restituire, massimo 50. | |
| regione | No | Nome della regione. Valori: Sicilia, Piemonte, Valle d'Aosta/Vallée d'Aoste, Lombardia, Liguria, Trentino-Alto Adige/Südtirol, Umbria, Veneto, Emilia-Romagna, Toscana, Friuli-Venezia Giulia, Lazio, Marche, Campania, Puglia, Abruzzo, Basilicata, Calabria, Molise, Sardegna | |
| categoria | No | Filtra per tipo di evento. |
Output Schema
| Name | Required | Description |
|---|---|---|
| eventi | Yes | La pagina di risultati, lunga al massimo quanto `limite`. |
| totale | Yes | Quanti eventi rispondono ai criteri in tutto, anche oltre quelli riportati qui. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: data is sourced daily from official municipal registers (albi pretori), includes small towns, and each event includes a link to its detail page and official source. This goes beyond the annotations by explaining data provenance and output linkage.
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 two sentences, front-loaded with the core purpose and immediately followed by the key differentiator (small towns, official sources). It's efficient and every sentence earns its place, though it could be slightly more compact without losing the provenance detail.
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?
Given the tool has 7 optional parameters, a rich output schema, and annotations covering safety, the description is complete enough for an agent to select and invoke it correctly. It explains the data source, coverage, and output links. It doesn't mention pagination or the limite parameter's default, but the schema covers that. The only minor gap is not explicitly routing to dettaglio_evento for single-event details, but the sibling names and schema make that inferable.
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 the schema already documents all 7 parameters thoroughly, including formats, examples, and constraints. The description adds no parameter-specific semantics beyond what the schema provides. Baseline 3 is appropriate when the schema carries the full burden.
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 states a specific verb ('Cerca') and resource ('eventi e sagre nei comuni italiani'), and immediately distinguishes itself from siblings by noting it covers small towns not on other calendars. The title reinforces the search scope, and the description's mention of official sources and daily updates adds specificity beyond the name.
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 implies when to use this tool: when searching for events across Italian municipalities, including small towns, with data sourced from official public registers. It doesn't explicitly name alternatives like dettaglio_evento or comuni_coperti, but the context signals and sibling names make the distinction clear. It lacks explicit 'when not to use' guidance, but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comuni_copertiComuni coperti, con il loro identificativoARead-onlyIdempotentInspect
L'elenco dei comuni per cui abbiamo eventi, con il loro identificativo. Serve a trovare l'identificativo giusto prima di chiamare cerca_eventi.
| Name | Required | Description | Default |
|---|---|---|---|
| regione | No | Limita a una regione. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comuni | Yes | Al massimo 500 comuni: senza il filtro regione la lista nazionale sarebbe di migliaia di righe. |
| totale | Yes | Quanti comuni hanno eventi in tutto, anche oltre quelli elencati qui. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful scope information: the list contains only municipalities we have events for and includes identifiers. It does not over-explain, but it also does not add much behavioral depth beyond the annotations.
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 short sentences with no filler. The first states what the tool returns, and the second explains why it mattersaren't used, each earning its place.
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?
The tool is a simple read-only list with one optional filter, and an output schema exists. The description gives enough context for an agent to know when and why to call it, and nothing important is missing.
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?
The schema documents the single optional parameter `regione` with 100% coverage. The description provides no additional meaning beyond what the schema already states, so the baseline of 3 is appropriate.
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 the tool returns the list of municipalities that have events, along with their identifierschers. It explicitly frames the purpose as a lookup step before calling cerca_eventi, which distinguishes it from the sibling event-oriented tools even without naming them.
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 says this tool is meant to be used before calling cerca_eventi, to find the correct identifier. This gives a clear contextual trigger, though it does not state explicit conditions for when not to use it. Given the tool's simple role, the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dettaglio_eventoScheda completa di un eventoARead-onlyIdempotentInspect
Tutti i dati di un evento a partire dal suo identificativo, compresi descrizione, informazioni pratiche, organizzatore, se l'ingresso e' libero o a pagamento e il link alla fonte ufficiale.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Identificativo dell'evento, come restituito da cerca_eventi. |
Output Schema
| Name | Required | Description |
|---|---|---|
| evento | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral detail about what the response contains (description, practical info, organizer, free/paid status, official source link), which helps an agent know what to expect beyond the schema.
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?
A single well-structured sentence conveys the purpose and the range of returned data without redundancy. The content enumeration is informative, and there is no filler or unnecessary detail.
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?
This is a simple single-parameter read-only lookup with a rich output schema and complete annotations. The description names the main data categories, the schema documents the required id and its provenance, and the annotations cover idempotency and non-destructiveness. Nothing essential is missing.
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% and the parameter description already explains that id is the event identifier returned by cerca_eventi. The description only paraphrases this ('a partire dal suo identificativo'), adding no new semantic meaning beyond the schema, so the baseline of 3 is appropriate.
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 identifies the resource ('un evento') and the scope ('tutti i dati'), including concrete content categories, but it lacks an explicit verb such as 'recupera' or 'restituisce'. It is clearly distinct from siblings by emphasizing full detail from an identifier, though it does not explicitly name them.
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 phrase 'a partire dal suo identificativo' plus the schema note 'come restituito da cerca_eventi' gives clear context: this tool should be used after search to fetch complete details for a known event ID. It does not spell out when to prefer cerca_eventi or comuni_coperti, but the ID provenance is an effective usage cue.
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.
3 tool updates
- Changed
cerca_eventi1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "eventi": { + "description": "La pagina di risultati, lunga al massimo quanto `limite`.", + "items": { + "properties": { + "biglietteria_url": { + "description": "Dove si comprano i biglietti, solo se l'atto lo riportava.", + "type": [ + "string", + "null" + ] + }, + "categoria": { + "description": "Uno dei valori ammessi per il filtro categoria.", + "type": [ + "string", + "null" + ] + }, + "comune": { + "description": "Identificativo del comune, quello che vuole il filtro comune.", + "type": "string" + }, + "comune_nome": { + "description": "Nome del comune per esteso.", + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "ISO 8601 UTC.", + "type": "string" + }, + "data_fine": { + "description": "Formato 'YYYY-MM-DD'. Uguale a data_inizio se l'evento dura un giorno.", + "type": [ + "string", + "null" + ] + }, + "data_inizio": { + "description": "Formato 'YYYY-MM-DD'.", + "type": [ + "string", + "null" + ] + }, + "date_occorrenze": { + "description": "Le singole date quando l'evento non occupa un intervallo pieno, per esempio tre domeniche di fila.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "descrizione": { + "type": [ + "string", + "null" + ] + }, + "fonte_permanente_url": { + "description": "La nostra copia permanente dell'atto, che non scade.", + "type": [ + "string", + "null" + ] + }, + "fonte_url": { + "description": "L'atto sul portale del comune. Puo' sparire quando l'albo ruota.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Identificativo da passare a dettaglio_evento.", + "type": "string" + }, + "info_utili": { + "description": "Note pratiche: orari, come arrivare, prenotazioni.", + "type": [ + "string", + "null" + ] + }, + "ingresso": { + "description": "Nullo quando l'atto non lo dichiara, ed e' il caso di gran lunga piu' frequente. Nullo NON vuol dire gratis: se manca, dillo, non dedurlo.", + "enum": [ + "libero", + "pagamento", + null + ], + "type": [ + "string", + "null" + ] + }, + "lat": { + "type": [ + "number", + "null" + ] + }, + "locandina_url": { + "description": "La locandina, quando il comune ne ha pubblicata una.", + "type": [ + "string", + "null" + ] + }, + "lon": { + "type": [ + "number", + "null" + ] + }, + "luogo": { + "description": "Indirizzo o luogo preciso, quando l'atto lo dice.", + "type": [ + "string", + "null" + ] + }, + "maps_url": { + "type": [ + "string", + "null" + ] + }, + "organizzatore_ente": { + "description": "Chi organizza, quando e' un ente e non una persona.", + "type": [ + "string", + "null" + ] + }, + "provincia": { + "description": "Sigla della provincia.", + "type": [ + "string", + "null" + ] + }, + "regione": { + "type": [ + "string", + "null" + ] + }, + "stato_temporale": { + "description": "Se e' in corso, in arrivo o concluso.", + "type": [ + "string", + "null" + ] + }, + "titolo": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "description": "ISO 8601 UTC.", + "type": "string" + }, + "url": { + "description": "La pagina dell'evento sul nostro sito: e' questo il link da citare.", + "type": "string" + } + }, + "required": [ + "id", + "comune", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "totale": { + "description": "Quanti eventi rispondono ai criteri in tutto, anche oltre quelli riportati qui.", + "type": "integer" + } + }, + "required": [ + "totale", + "eventi" + ], + "type": "object" +}
- Changed
comuni_coperti1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "comuni": { + "description": "Al massimo 500 comuni: senza il filtro regione la lista nazionale sarebbe di migliaia di righe.", + "items": { + "properties": { + "comune": { + "description": "Identificativo da passare al filtro comune.", + "type": "string" + }, + "comune_nome": { + "type": [ + "string", + "null" + ] + }, + "eventi": { + "description": "Quanti eventi ha in catalogo.", + "type": "integer" + }, + "provincia": { + "type": [ + "string", + "null" + ] + }, + "regione": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "comune", + "eventi" + ], + "type": "object" + }, + "type": "array" + }, + "totale": { + "description": "Quanti comuni hanno eventi in tutto, anche oltre quelli elencati qui.", + "type": "integer" + } + }, + "required": [ + "totale", + "comuni" + ], + "type": "object" +}
- Changed
dettaglio_evento1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "evento": { + "properties": { + "biglietteria_url": { + "description": "Dove si comprano i biglietti, solo se l'atto lo riportava.", + "type": [ + "string", + "null" + ] + }, + "categoria": { + "description": "Uno dei valori ammessi per il filtro categoria.", + "type": [ + "string", + "null" + ] + }, + "comune": { + "description": "Identificativo del comune, quello che vuole il filtro comune.", + "type": "string" + }, + "comune_nome": { + "description": "Nome del comune per esteso.", + "type": [ + "string", + "null" + ] + }, + "created_at": { + "description": "ISO 8601 UTC.", + "type": "string" + }, + "data_fine": { + "description": "Formato 'YYYY-MM-DD'. Uguale a data_inizio se l'evento dura un giorno.", + "type": [ + "string", + "null" + ] + }, + "data_inizio": { + "description": "Formato 'YYYY-MM-DD'.", + "type": [ + "string", + "null" + ] + }, + "date_occorrenze": { + "description": "Le singole date quando l'evento non occupa un intervallo pieno, per esempio tre domeniche di fila.", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "descrizione": { + "type": [ + "string", + "null" + ] + }, + "fonte_permanente_url": { + "description": "La nostra copia permanente dell'atto, che non scade.", + "type": [ + "string", + "null" + ] + }, + "fonte_url": { + "description": "L'atto sul portale del comune. Puo' sparire quando l'albo ruota.", + "type": [ + "string", + "null" + ] + }, + "id": { + "description": "Identificativo da passare a dettaglio_evento.", + "type": "string" + }, + "info_utili": { + "description": "Note pratiche: orari, come arrivare, prenotazioni.", + "type": [ + "string", + "null" + ] + }, + "ingresso": { + "description": "Nullo quando l'atto non lo dichiara, ed e' il caso di gran lunga piu' frequente. Nullo NON vuol dire gratis: se manca, dillo, non dedurlo.", + "enum": [ + "libero", + "pagamento", + null + ], + "type": [ + "string", + "null" + ] + }, + "lat": { + "type": [ + "number", + "null" + ] + }, + "locandina_url": { + "description": "La locandina, quando il comune ne ha pubblicata una.", + "type": [ + "string", + "null" + ] + }, + "lon": { + "type": [ + "number", + "null" + ] + }, + "luogo": { + "description": "Indirizzo o luogo preciso, quando l'atto lo dice.", + "type": [ + "string", + "null" + ] + }, + "maps_url": { + "type": [ + "string", + "null" + ] + }, + "organizzatore_ente": { + "description": "Chi organizza, quando e' un ente e non una persona.", + "type": [ + "string", + "null" + ] + }, + "provincia": { + "description": "Sigla della provincia.", + "type": [ + "string", + "null" + ] + }, + "regione": { + "type": [ + "string", + "null" + ] + }, + "stato_temporale": { + "description": "Se e' in corso, in arrivo o concluso.", + "type": [ + "string", + "null" + ] + }, + "titolo": { + "type": [ + "string", + "null" + ] + }, + "updated_at": { + "description": "ISO 8601 UTC.", + "type": "string" + }, + "url": { + "description": "La pagina dell'evento sul nostro sito: e' questo il link da citare.", + "type": "string" + } + }, + "required": [ + "id", + "comune", + "url" + ], + "type": "object" + } + }, + "required": [ + "evento" + ], + "type": "object" +}
3 tool updates
- First observed
cerca_eventi - First observed
comuni_coperti - First observed
dettaglio_evento
Related MCP Connectors
Dati turistici ISTAT di ogni comune italiano: presenze, arrivi, posti letto, popolazione.
Descubre eventos en España: filtra por texto, categoría, ubicación, precio y fecha. 38 categorías.
400,000+ source-verifiable US events from independent venues/community calendars in all 50 states.
Live festival data for AI agents: lineups, set times, dates, locations and ticket links worldwide.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides music events, concerts, music festivals, nightclubs and other events information.172MIT
- AlicenseNot gradedqualityCmaintenanceOpen & historical US government bid solicitations from city/county portals — updated daily.16MIT
- FlicenseNot gradedqualityBmaintenanceEnables querying a comprehensive data lake of Italian civic open data, returning cited facts about Italian municipalities across domains like environment, education, finance, and governance.1-
- AlicenseNot gradedqualityDmaintenanceProvides real-time access to Italian legislation and administrative court rulings through Normattiva, OpenGA, and GA Portal.11MIT