Skip to main content
Glama
diegts

privacy-informativa-mcp

by diegts
README.md
# privacy-informativa-mcp

[![CI](https://github.com/diegts/privacy-informativa-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/diegts/privacy-informativa-mcp/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue.svg)](pyproject.toml)

Plugin MCP (Model Context Protocol) che aiuta una persona a esercitare i
propri diritti come interessato nei confronti di un titolare del
trattamento: capire cosa dice davvero un'informativa privacy, e
verificare se quello che un sito dichiara corrisponde a quello che fa
tecnicamente.

**Non è un tool per il titolare del trattamento**: è pensato dal punto
di vista di chi riceve un'informativa e vuole capirla, non di chi deve
scriverla.

## Cosa fa

Due skill (istruzioni per un modello, esposte come MCP *prompt*),
orchestrano quattro tool (funzioni Python eseguibili, esposte come MCP
*tool*):

| Skill | Cosa risponde |
|---|---|
| `analizza_informativa_interessato` | "Cosa dice questa informativa? Quali finalità, dati, basi giuridiche, destinatari, tempi di conservazione?" |
| `verifica_coerenza_informativa` | "Quello che il sito fa tecnicamente (tracker, terze parti) corrisponde a quanto dichiarato?" |

| Tool | Cosa fa |
|---|---|
| `estrai_testo_informativa` | Estrae testo da un'informativa in PDF o screenshot (estrazione nativa + OCR quando serve, gestisce documenti misti) |
| `trova_informativa_da_sito` | Trova il link all'informativa privacy in un sito, distinguendola dalla cookie policy |
| `estrai_testo_da_url` | Estrae il testo pulito da una pagina web (informativa raggiunta via link) |
| `rileva_terze_parti_sito` | Analisi statica dell'HTML: rileva tracker/terze parti tecnicamente presenti in una pagina |

Nessuno di questi tool richiede API a pagamento o chiavi esterne.

Le skill orchestrano i tool secondo l'input fornito dall'utente (testo,
file, link diretto, o sito) e si fermano sempre a chiedere conferma in
caso di ambiguità (più link candidati sullo stesso sito) invece di
scegliere in autonomia.

## Come usarlo

Non serve installare nulla: basta collegare Claude a un'istanza già
online del plugin.

1. Su [claude.ai](https://claude.ai): **Impostazioni** → **Connettori**
   (in inglese "Customize" → "Connectors").
2. Clicca **"+"** → **Aggiungi connettore personalizzato**
   ("Add custom connector").
3. Incolla l'URL dell'istanza (es.
   `https://privacy-informativa-mcp-<hash>.onrender.com/mcp`).
4. Nessuna autenticazione richiesta: si può lasciare vuoto "Advanced
   settings".
5. Clicca **"Aggiungi"**. Per usarlo in una conversazione: pulsante
   **"+"** in basso a sinistra nella chat → **"Connettori"** → attiva
   il connettore per quella conversazione.

Vale per Claude.ai, Claude Desktop, Cowork e le app mobile.

Nota: gli utenti su piano gratuito di Claude possono aggiungere un solo
connettore personalizzato; Pro/Max/Team/Enterprise ne supportano più di
uno.

**Nota sui tempi di risposta**: se l'istanza gira su un piano gratuito
e non è stata usata di recente, la prima richiesta dopo una pausa può
richiedere 30-60 secondi prima di rispondere (il servizio si
"risveglia"). Le richieste successive sono immediate.

## Limiti importanti, dichiarati apertamente

- **`rileva_terze_parti_sito` è analisi statica**: legge l'HTML
  scaricato via richiesta HTTP semplice, non esegue JavaScript. Non vede
  tracker caricati dinamicamente dopo il caricamento (es. dopo il
  consenso cookie via Tag Manager). I risultati sono un limite
  inferiore delle terze parti realmente coinvolte, non un elenco
  definitivo.
- **Non esiste un modo per cercare un'azienda a partire dal solo nome**:
  bisogna fornire il sito o il link diretto all'informativa.
- **Nessuna delle due skill fornisce consulenza legale.** Aiutano a
  leggere un documento e a raccogliere informazioni; qualunque azione
  formale (reclamo, diffida) va valutata con un professionista se la
  posta in gioco lo richiede.
- Questo progetto **non è affiliato** con il Garante per la protezione
  dei dati personali né con alcuna autorità di controllo.

## Architettura: perché skill + tool separati

I tool sono codice Python deterministico: eseguono un'azione precisa
(scaricare una pagina, fare OCR, cercare un pattern) e non prendono
decisioni di giudizio. Le skill sono istruzioni in linguaggio naturale
che dicono a un modello *come* orchestrare i tool e *come* interpretare
i risultati (es. "se ci sono più link candidati, chiedi conferma
all'utente"; "un tracker rilevato ma non dichiarato è un problema, il
contrario no"). Questa separazione tiene il giudizio nella skill
(dove può adattarsi al contesto) e l'esecuzione nel tool (dove deve
essere prevedibile e testabile).

## Roadmap

- Servizio "esercizio diritti" (redazione istanze verso il titolare)
- Servizio "reclamo al Garante"
- `rileva_terze_parti_sito` con rendering browser reale (oltre
  all'analisi statica attuale)

## Per chi vuole ospitare una propria istanza o contribuire

Vedi [DEPLOY.md](DEPLOY.md): requisiti, installazione, configurazione,
deploy su Render/Docker, sviluppo e test.

## Licenza

MIT — vedi [LICENSE](LICENSE).

## Disclaimer

Questo progetto è indipendente, non affiliato con alcuna autorità di
controllo, e non costituisce consulenza legale. Fornisce strumenti di
supporto alla comprensione e alla raccolta di informazioni; le
decisioni su come procedere restano dell'utente, eventualmente con il
supporto di un professionista.