Skip to main content
Glama
README.md
# italia-mcp

**Servizi italiani essenziali per assistenti vocali, via MCP.** Meteo, allerte della
Protezione Civile, notizie ANSA, novità editoriali e promemoria — in italiano,
con 9 strumenti in tutto.

> *Italian essentials (weather, Civil Protection alerts, ANSA news, reminders) as a
> Model Context Protocol server. Tool descriptions and responses are in Italian.*

Nato per il chatbot vocale **[xiaozhi-esp32](https://github.com/78/xiaozhi-esp32)**
(il "panda"), ma è un normale server MCP: funziona con Claude Desktop, Cursor,
Cherry Studio e qualsiasi client compatibile.

---

## ⬇️ Scarica per Windows

### **[PandaItalia.exe](https://github.com/BorisLandoni/italia-mcp/releases/latest/download/PandaItalia.exe)** · 19 MB · nessuna installazione

Un file, doppio clic. Python non serve. Incolli l'indirizzo del tuo dispositivo
**una volta sola**: viene salvato e dal secondo avvio il collegamento parte da
solo.

1. Su [xiaozhi.me](https://xiaozhi.me) → **Configure** → **Extensions**: togli
   la spunta a **`Weather`** e premi **Save**
2. Sempre lì → **MCP Endpoint** → icona **copia**
3. Avvia il programma → **Incolla** → **Collega**

Poi chiedi al tuo dispositivo: *"Che tempo fa a Gallarate?"*

> L'eseguibile non è firmato: al primo avvio Windows mostra *"Windows ha
> protetto il PC"* → **Ulteriori informazioni** → **Esegui comunque**.
>
> È pensato per la **prova rapida**. Windows va in sospensione e i riavvii di
> Windows Update interrompono il collegamento circa una volta al mese: per
> l'uso continuativo vedi la **[guida Raspberry](docs/raspberry.md)**.

Su macOS e Linux, e per chi preferisce Python:
**[guida PC](docs/pc.md)** · [tutte le versioni](https://github.com/BorisLandoni/italia-mcp/releases)

---

## Perché esiste

I server MCP meteo che si trovano in giro sono pensati per assistenti da scrivania,
dove il contesto è enorme e nessuno conta i byte. Su un dispositivo vocale basato su
ESP32 i vincoli sono un altro mondo:

| | server MCP meteo tipico | `italia-mcp` |
|---|---|---|
| Numero di strumenti | 17 | **9** |
| Peso dell'elenco strumenti | ~29.700 token | **~1.000 token** |
| Risposta | JSON grezzo, fino a 25.000 caratteri | **sotto 1.024 byte** |
| Lingua | inglese, fuso GMT | **italiano, fuso locale** |
| Come indichi il luogo | latitudine e longitudine | **nome del comune** |
| Dipendenze | varie | **una sola** (`mcp`) |

L'elenco degli strumenti viaggia in *ogni* richiesta al modello: è lì che si vince o
si perde. Tutto il resto del progetto discende da questo.

## Strumenti

| Strumento | Che cosa fa |
|---|---|
| `meteo_adesso(citta)` | Tempo attuale: cielo, temperatura, percepita, umidità, vento |
| `meteo_previsioni(citta, giorni)` | Previsioni da 1 a 7 giorni con probabilità di pioggia |
| `allerte_protezione_civile(comune)` | Allerta gialla/arancione/rossa per temporali, rischio idraulico e idrogeologico |
| `qualita_aria(citta)` | Indice europeo, PM10, PM2.5 |
| `notizie_italia(argomento)` | Ultimi titoli ANSA: principali, cronaca, politica, economia, mondo, tecnologia, sport |
| `novita_futura(sezione)` | Ultimi articoli di Elettronica In ed Elettronica In PRO, ultimi prodotti FuturaShop |
| `promemoria_aggiungi(testo)` | Aggiunge un promemoria o un articolo alla lista della spesa |
| `promemoria_elenco()` | Legge la lista |
| `promemoria_rimuovi(numero_o_testo)` | Toglie una voce, o svuota tutto con `"tutto"` |

## Installazione

```bash
pip install italia-mcp
```

Oppure, dalla sorgente:

```bash
git clone https://github.com/BorisLandoni/italia-mcp.git
cd italia-mcp
python3 -m venv .venv
./.venv/bin/python -m pip install -e .
```

### Provalo subito, senza collegare niente

```bash
python prova.py
```

Chiama tutti gli strumenti uno per uno e misura quanto pesa ogni risposta:

```
[            ok]  148 byte    448 ms  meteo_adesso
[            ok]  228 byte   1010 ms  allerte_protezione_civile
[            ok]  371 byte    685 ms  novita_futura [rivista]
...
Risposta piu' pesante: 409 byte su un limite di 1024.
Tutti gli strumenti rispondono correttamente.
```

Per avviare il server vero:

```bash
italia-mcp
```

Il cursore resta fermo e non compare nulla: **è corretto.** Il server parla MCP su
stdin/stdout e aspetta un client. Se stampasse qualcosa, romperebbe il protocollo.

### Guide dettagliate

- **[Installare e provare su PC](docs/pc.md)** — Windows, macOS, Linux, passo passo
- **[Raspberry Pi come gateway sempre acceso](docs/raspberry.md)** — servizio systemd,
  riavvio automatico, log, aggiornamenti
- **[Collegare il panda (xiaozhi)](xiaozhi/README.md)** — endpoint MCP e ponte
- **[Elecrow AI Panda ChatBot](elecrow/panda/README.md)** — guida specifica per
  quel dispositivo, e stato della ricerca sui sorgenti del firmware
- **[Creare l'eseguibile Windows](packaging/README.md)** — per chi vuole compilarlo

## Uso con Claude Desktop, Cursor e simili

```json
{
  "mcpServers": {
    "italia": { "command": "italia-mcp" }
  }
}
```

## Uso con il panda (xiaozhi)

Il panda non chiama un URL: è il tuo server che deve **collegarsi** all'endpoint MCP
del dispositivo e tenere aperta la connessione. Serve il ponte ufficiale
[`mcp_pipe.py`](https://github.com/78/mcp-calculator).

1. Nella console di [xiaozhi.me](https://xiaozhi.me) apri
   **Configure → Extensions → MCP Endpoint** e copia l'indirizzo
   `wss://api.xiaozhi.me/mcp/?token=...` (è un segreto, trattalo come una password).
2. Togli la spunta all'estensione ufficiale **Weather**, altrimenti il modello ha due
   strumenti meteo e sceglie a caso.
3. Avvia il ponte:

```bash
pip install italia-mcp websockets python-dotenv
export MCP_ENDPOINT="wss://api.xiaozhi.me/mcp/?token=..."
python mcp_pipe.py xiaozhi/italia_server.py
```

Vedi [`xiaozhi/`](xiaozhi/) per gli script pronti e la guida passo passo.

### Vincoli della piattaforma da rispettare

Dalla [documentazione ufficiale](https://my.feishu.cn/wiki/HiPEwZ37XiitnwktX13cEM5KnSb):

- la risposta di uno strumento è limitata a circa **1.024 byte**;
- l'elenco degli strumenti ha un tetto misurato in token;
- ogni endpoint ha un **limite di connessioni**: usa un solo server MCP, non uno per
  servizio;
- mai `print()` nel codice di uno strumento: stdin/stdout sono il canale di trasporto.

## Fonti dei dati

| Dato | Fonte | Licenza |
|---|---|---|
| Meteo, previsioni, qualità aria | [Open-Meteo](https://open-meteo.com) | CC BY 4.0, gratuito senza chiave |
| Allerte meteo-idro | [Dipartimento della Protezione Civile](https://github.com/pcm-dpc/DPC-Bollettini-Criticita-Idrogeologica-Idraulica), in CSV via [OpenData Sicilia](https://github.com/opendatasicilia/DPC-bollettini-criticita-idrogeologica-idraulica) | CC BY 4.0 |
| Notizie | Feed RSS pubblici [ANSA](https://www.ansa.it) | uso citazionale dei soli titoli |
| Novità editoriali | Feed RSS di [Elettronica In](https://ei.futuranet.it), [Elettronica In PRO](https://eipro.futuranet.it) e [FuturaShop](https://futuranet.it) | uso citazionale dei soli titoli |

**Nessuna chiave API richiesta.**

### Nota importante sulle allerte

Il bollettino della Protezione Civile esce entro le 16:00 e il mirror può avere
qualche ora di ritardo. Il codice **non si fida del nome del file**: legge la finestra
di validità dichiarata dentro il bollettino e usa solo quello valido in questo
momento. Se nessuno è valido, lo dice invece di rispondere con dati vecchi.
Ogni risposta include `valido_fino`.

> Questo software non è un servizio di allerta ufficiale e non sostituisce i canali
> della Protezione Civile. Per le emergenze fai sempre riferimento alle fonti ufficiali.

## Limiti noti

- **Non può svegliare il dispositivo.** I promemoria si consultano a voce, non
  suonano da soli: nel protocollo xiaozhi il server non può iniziare una
  conversazione.
- **Non riproduce musica.** Il canale audio è Opus binario, gli strumenti MCP
  scambiano solo testo.
- I promemoria sono salvati in un file locale, senza account: chi ha accesso al
  server li vede tutti.

## Personalizzare le fonti

Le fonti di `novita_futura` sono ridefinibili con la variabile d'ambiente
`ITALIA_MCP_FONTI`, nel formato `chiave=URL|Etichetta;chiave2=URL2|Etichetta2`:
chi usa il pacchetto può puntarlo ai propri feed.

## Licenza

Codice: MIT. I dati restano dei rispettivi titolari, alle licenze indicate sopra.

## Crediti

Sviluppato da **Boris Landoni** con l'assistenza di Claude (Anthropic), per
**[Futura Group Srl](https://futuranet.it)** — editore di
**[Elettronica In](https://ei.futuranet.it)** e
**[Elettronica In PRO](https://eipro.futuranet.it)**.

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation4/5

The weather, alert, air quality, news, electronics news, and reminder tools each cover distinct resources, and the descriptions clarify the differences. The main possible confusion is between notizie_italia and novita_futura since both can be described as 'latest news', but their source and scope are clearly separated.

Naming Consistency4/5

All tool names are lowercase Italian snake_case, which gives the set a coherent feel. The main tools are noun phrases (meteo_previsioni, qualita_aria) while the reminder tools use an object_verb pattern (promemoria_aggiungi, promemoria_rimuovi), creating a minor but readable inconsistency.

Tool Count5/5

Nine tools is a well-scoped size for this server. Each tool covers a meaningful slice of the Italian information domain plus a small reminder subsystem, with no redundant or unnecessary tools.

Completeness4/5

The weather, alerts, air quality, news, and reminder workflows are largely covered: current conditions, forecasts, official warnings, pollution, headlines, and add/list/remove for reminders. Minor gaps exist such as no news article detail retrieval and no reminder update operation, but agents can accomplish the main requested tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues