Skip to main content
Glama
README.md
# 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)

TDQS

B3.4/5.0

Scored across 24 tools

Disambiguation4/5

The tools are organized around distinct Italian legal/parliamentary domains (e.g., constitutional case law, EU law, parliamentary bill status, open data), and each description clarifies its unique source and purpose. A few pairs like 'giurisprudenza_su' and 'cerca_sentenze_cost' could overlap in intent, but their descriptions make the article-focused vs. keyword-focused boundary clear.

Naming Consistency2/5

There is a strong but incomplete 'cerca_' verb_prefix convention covering about half the tools, while the remainder use noun phrases or question-style names ('novita_normative', 'cosa_modifica', 'chi_modifica', 'indice_di_forza'). This mixed convention makes tool discovery less predictable, despite the Italian naming being readable.

Tool Count3/5

With 24 tools, the server is at the high end of the 'heavy' range. The breadth is understandable given the domain spans Italian legislation, EU law, parliamentary workflow, open data, and statistics, but the count borders on excess and could be trimmed by consolidating some rare-purpose tools.

Completeness4/5

The toolset covers an unusually wide range of legal and parliamentary workflows: searching laws, case law, pending challenges, legislative amendments, bills, parliamentary members, votes, and open-data statistics. Minor gaps exist, such as no direct full-text retrieval of an arbitrary law article and limited ability to track a single bill across both chambers, but most reasonable queries can be satisfied.

Maintenance

ActivityMaintained
ResponsivenessNo issues