Metadata-Version: 2.5
Name: open-parlamento-mcp
Version: 0.2.3
Summary: MCP server: diritto italiano (Costituzione + codici, via LightRAG) + diritto UE (EUR-Lex) + iter Camera/Senato + relazioni di modifica (Normattiva) + giurisprudenza (UE/Consulta/Cassazione/TAR-CdS) + statistiche ufficiali (Eurostat) + Gazzetta Ufficiale + dati pubblici multi-portale (CKAN, data.europa.eu) + Parlamento curato (OpenPolis) + PNRR + accoglienza migranti
Project-URL: Homepage, https://github.com/giuliogarofalo/open-parlamento-mcp
Project-URL: Issues, https://github.com/giuliogarofalo/open-parlamento-mcp/issues
Author: Giulio Garofalo
License: Apache-2.0
License-File: LICENSE
Keywords: ckan,gemini,giurisprudenza,italy,legal,lightrag,mcp,model-context-protocol,normattiva,open-data,parlamento
Requires-Python: >=3.10
Requires-Dist: fastmcp>=3.0
Provides-Extra: dev
Requires-Dist: build; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Requires-Dist: twine; extra == 'dev'
Description-Content-Type: text/markdown

# open-parlamento-mcp — Italian Law & Public Data MCP Server

[![PyPI version](https://img.shields.io/pypi/v/open-parlamento-mcp)](https://pypi.org/project/open-parlamento-mcp/)
[![License: Apache-2.0](https://img.shields.io/pypi/l/open-parlamento-mcp)](./LICENSE)
[![Listed in italia-mcp-servers](https://img.shields.io/badge/listed%20in-italia--mcp--servers-blue)](https://github.com/bsab/italia-mcp-servers)

> MCP (Model Context Protocol) server joining **Italian & EU law** (Constitution, codes, EU legislation, case law, with citations) with **public data** (open data portals, official statistics, PNRR, migration reception centers) and curated **Parliament data** (OpenPolis) — 24 tools, one server.

## Overview

Most Italian legal/civic MCP servers cover one slice: either the law, or one data source, or parliamentary acts. `open-parlamento-mcp` covers all three, because answering "is X legal?" or "how much did Y cost?" properly requires citing the norm *and* the data together — that's the whole point of [Open Parlament](https://open-parlament.xyz), the project this server was built for.

### Key Features

- **24 MCP tools** across law, EU law, case law, parliamentary iter, curated Parliament data (OpenPolis), open data, official statistics, and two focused datasets (PNRR, migrant reception)
- **Citation-grounded**: legal answers point to the actual article (`Cost. art. 3`, `C.p. art. 575`), never a bare LLM guess
- **Multi-source data**: CKAN (dati.gov.it + regional/local portals), Eurostat, EUR-Lex, Gazzetta Ufficiale, Normattiva modification graph
- Complements **[RepublicMCP](https://github.com/giuliogarofalo/RepublicMCP)** (deep SPARQL access to Camera/Senato ontologies) with a broader, curated surface — use RepublicMCP for raw parliamentary SPARQL depth, this server for law + cross-domain data in one place

## Quick Start

### Installation

```bash
pip install open-parlamento-mcp
```

### Configuration with Claude Desktop

```json
{
  "mcpServers": {
    "open-parlamento": {
      "command": "open-parlamento-mcp"
    }
  }
}
```

Or run directly: `python -m open_parlamento_mcp.server`

### Environment

- `LIGHTRAG_URL` (default `http://localhost:9622`) — used only by `cerca_legge`, which queries a [LightRAG](https://github.com/HKUDS/LightRAG) instance holding the ingested legal corpus. Without it reachable, every other tool still works (they're independent HTTP/SPARQL clients with no shared state).
- `OPENPOLIS_API`, `OPENPOLIS_LEG`, `OPENPOLIS_TOKEN`, `OPENPOLIS_TTL` — optional, for the OpenPolis-backed tools (anonymous access works, token raises rate limits).
- `NORME_EDGES_DIR`, `SENTENZE_EDGES`, `PENDENZE_EDGES` — optional local corpus paths for `cosa_modifica`/`chi_modifica`/`giurisprudenza_su`/`casi_pendenti_su`; without them those tools degrade gracefully (see Known Limitations).

## Available MCP Tools

### Diritto italiano

- `cerca_legge(domanda)` — Answers a legal question from Italian law (Constitution + codes) via LightRAG, citing the exact articles (`Cost. art. 3`, `C.p. art. 575`).

### Normattiva — relazioni di modifica

- `cosa_modifica(norma)` — What a law/decree modifies, abrogates, replaces, or inserts (authoritative Normattiva relations), grouped by intervention type.
- `chi_modifica(norma)` — Which acts have modified a given norm/article.
- `novita_normative(argomento?, serie?)` — Latest acts published in Gazzetta Ufficiale (official RSS feed).

### Diritto UE

- `cerca_legge_ue(argomento)` — EU legislation (regulations, directives, decisions) by topic via EUR-Lex, with CELEX + link.

### Giurisprudenza

- `cerca_sentenze_ue(argomento)` — CJEU/General Court case law via EUR-Lex (CELEX sector 6).
- `cerca_sentenze_cost(argomento)` — Corte Costituzionale rulings by topic, official *massime* (1956→today).
- `giurisprudenza_su(norma)` — Which Corte Costituzionale rulings decided on a given norm/article, and the outcome (unconstitutional / unfounded / inadmissible).
- `casi_pendenti_su(norma)` — Is a norm/article currently under challenge before the Corte Costituzionale (pending cases, from *atti di promovimento*)?
- `cerca_sentenze_cassazione(argomento)` — Corte di Cassazione rulings (civil + criminal) via SentenzeWeb, last ~6 years.
- `cerca_giustizia_amministrativa(parole_chiave)` — Consiglio di Stato + TAR data via the OpenGA open-data portal (dataset-level: rulings/appeals by subject, not individual full-text rulings).

### Iter parlamentare

- `cerca_ddl_senato(argomento)` — Senato bills by topic, with progress status.
- `cerca_atti_camera(argomento)` — Camera bills/proposals by topic, with iter status.

> For deep SPARQL access to the full Camera/Senato ontologies (deputies, votes, groups, commissions, governments) see [RepublicMCP](https://github.com/giuliogarofalo/RepublicMCP) — these two tools are a thin, topic-search-first complement, not a replacement.

### OpenPolis · Openparlamento

> Curated, enriched Parliament data via the OpenPolis OPDM API. **License: CC-BY-NC — non-commercial use, attribute "Fonte: Openpolis".**

- `cerca_parlamentari(testo?, ruolo?, solo_attivi?)` — Search deputies/senators by name or role, ranked by power index.
- `indice_di_forza(ramo?, limite?)` — Power-index ranking of parliamentarians (Openpolis-exclusive metric).
- `profilo_parlamentare(nome)` — Member profile: group, role, constituency, attendance stats.
- `cerca_votazioni(testo?, solo_voti_chiave?, solo_finali?, solo_fiducia?, esito?)` — Votes by topic, with outcome, confidence/key-vote flags, cohesion.
- `decreti_legge(testo?, stato?)` — Decree-laws with conversion status and Normattiva link (chainable with `cosa_modifica`).
- `attivita_legislativa(testo?, tipo?, stato?, ramo?)` — Bills/acts across both chambers with iter phase, sponsors, rapporteurs.
- `organi_parlamentari(ramo?, tipo?)` — Groups (with power weights), presidency, or commissions.

### Dati pubblici & statistiche

- `cerca_dati(parole_chiave)` — Real datasets from Italian (dati.gov.it + regional/local CKAN portals) and EU (data.europa.eu) open-data catalogs.
- `cerca_statistiche(argomento)` — Official Eurostat statistics (unemployment, inflation, population, life expectancy, poverty, public debt, GDP...).

### Temi specifici

- `cerca_pnrr(tema)` — PNRR-funded projects by topic/place, with amount and iter phase. Source: OpenPNRR (Fondazione Openpolis, ODbL 1.0).
- `accoglienza_migranti(luogo)` — Migrant reception centers (CAS/CPA/Hotspot) by municipality/province/region: capacity, operator, daily cost. Source: Centri d'Italia (Fondazione Openpolis, CC-BY 4.0).

## Known Limitations

- `cerca_legge` requires a reachable LightRAG instance with the legal corpus ingested — it currently covers Constitution + Codice Penale, not the full body of Italian law.
- `cerca_sentenze_cassazione` only covers the last ~6 years (SentenzeWeb's public window) — full historical Cassazione case law (CED) sits behind a personal SPID-authenticated session, not automatable as open data.
- `cerca_giustizia_amministrativa` returns dataset-level results (rulings/appeals by subject), not individual full-text rulings.
- `cosa_modifica`/`chi_modifica`/`giurisprudenza_su`/`casi_pendenti_su` read from local pre-built corpora (`NORME_EDGES_DIR`, `SENTENZE_EDGES`, `PENDENZE_EDGES`) — without those paths configured they return empty results rather than failing.
- OpenPolis-backed tools are **non-commercial use only** (CC-BY-NC) — don't repackage that data behind a paywall.

## Related projects

Part of the [italia-mcp-servers](https://github.com/bsab/italia-mcp-servers) ecosystem. If you're building in this space:

- [RepublicMCP](https://github.com/giuliogarofalo/RepublicMCP) — sibling project, deep SPARQL access to the official Camera/Senato ontologies (30+ tools, hand-mapped OCD/OSR type system).
- [mcp-legal-it](https://github.com/capazme/mcp-legal-it) / [BetterCallClaude Italia](https://github.com/fedec65/bettercallclaude_italia) — other Normattiva/case-law MCP servers, useful cross-reference for citation handling.
- [ckan-mcp-server](https://github.com/ondata/ckan-mcp-server) — generic CKAN connector (945+ portals) if you need broader open-data coverage than the bundled `cerca_dati`.

## Integration Context

Developed as part of **[Open Parlament](https://open-parlament.xyz)**, an agent that answers questions about the Italian state by joining law with public data, with real citations. Works entirely standalone as a general-purpose MCP server, independent of Open Parlament.

## License

Apache-2.0

---

**Maintained by**: [Giulio Garofalo](https://github.com/giuliogarofalo) — part of [Open Parlament](https://open-parlament.xyz)
