Open source · 11 MCP tools · Self-hosted

Trenitalia + Italo.
In your AI client.

Stations, timetables and train status through one MCP server. Connect your assistant to Trenitalia and Italo data without paid APIs.

Open source11 MCP toolsNo paid APIs
Install
ciuff / MCPIllustrative example
›

Trenitalia and Italo from Roma Termini to Milano Centrale tomorrow after 8 am?

ciuff_cerca_viaggiJSON
Roma TerminiROM
Milano CentraleMIL
TrenitaliaFrecciarossa 9516
08:05 → 11:50Scheduled timetable
Italo9972
08:05 → 11:15Scheduled timetable

Static workflow preview. This is not a live timetable or search result.

Two operators, one integration

Ask for a route. Check both sources.

Search stations and direct journeys across Trenitalia, Italo or both. Results retain their operator, source and data validity, so a scheduled journey stays distinct from a live update.

TrenitaliaItalo

11 MCP tools

From finding a station to checking a train.

Six new tools sit alongside the five original tools. Shared searches for both operators, with dedicated tools where the sources differ.

01

Direct journeys

Search downloaded timetables for direct Trenitalia and Italo journeys by date and time window.

ciuff_cerca_viaggi
"Trenitalia and Italo from Roma Termini to Milano Centrale tomorrow after 8 am"
02

Train status

Request public train status by operator and train number, including data freshness information.

ciuff_stato_treno
"What is the status of Italo 8908?"
03

Stations across operators

Search by name across one or both operators. Ambiguous names return choices.

ciuff_cerca_stazioni
"Find Roma Termini for Trenitalia and Italo"
Explore all 11 MCP tools

Trenitalia stations

trenitalia_cerca_stazione

Find a station in the local catalogue, with a Viaggiatreno fallback when needed.

Trenitalia departures

trenitalia_monitora_partenze

Read a live Trenitalia departure board with the information available from the source.

Trenitalia arrivals

trenitalia_monitora_arrivi

Read live Trenitalia arrivals at a station, including times and delays when available.

Trenitalia train details

trenitalia_traccia_treno

Query Viaggiatreno by train number and origin station for available stops and status.

Trenitalia timetables

trenitalia_orari_tra_stazioni

Find direct Trenitalia journeys for the requested date. Today's results can include live information.

Italo station board

italo_tabellone

Read Italo arrivals or departures using the station name or its Italo code.

Coverage and sources

ciuff_stato_fonti

Check local timetable provenance, update times and coverage. This does not measure upstream availability.

Official ticket sites

ciuff_link_biglietti

Get links to the official purchase sites. Live prices, seat availability and booking are not integrated.

From source to assistant

Timetables and live data, with clear limits.

The server distinguishes scheduled journeys from what a source currently reports. A missing response never becomes a confirmation.

Independent project, unaffiliated with Trenitalia or Italo.

  1. 01

    Download the timetables

    The updater downloads and validates official NeTEx feeds. Caches stay on your system and let you query timetables offline.

  2. 02

    Check the calendar

    Searches use the requested date, service days, exceptions and feed validity. Missing or expired coverage is reported explicitly.

  3. 03

    Query live sources

    Viaggiatreno and Italo In Viaggio provide train status and station boards. Today's live data stays separate from future timetables.

  4. 04

    Keep uncertainty visible

    A missing delay stays unknown. If an Italo service date cannot be verified, its delay is not attached to a journey scheduled for a specific date.

Project demos

The server in a client, in practice.

Original recordings of the Trenitalia integration on Claude Desktop and Mobile. They show the client workflow and predate the addition of Italo.

DEMO 01

Claude Desktop · Trenitalia search

A recording of train search with the original Trenitalia integration.

DEMO 02

Claude Desktop · Trenitalia status

A recording of a Trenitalia train status query.

DEMO 03

Claude Mobile · Trenitalia departures

A recording of a Trenitalia departure query on mobile.

Run it on your system

From the repository to your MCP client.

Clone the project, install its dependencies and download the timetables. Start the server over stdio, or choose Streamable HTTP for a remote client.

Python 3.12 or later. Internet access is needed to download and refresh timetables and to use live tools. No paid API account, database or cloud service is required.

Installation and configuration in the README
Python 3.12+MCP Python SDK 2.2stdio · HTTP · SSENeTExhttpxPydantic v2
Local installation
git clone https://github.com/Fanfulla/MCP_Trenitalia.git
cd MCP_Trenitalia
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe update_data.py
.venv\Scripts\python.exe server.py

Provenance and limits

Know where each piece of data comes from.

Timetables come from official feeds published on CCISS. Train status comes from the operators' public services. Use ciuff_stato_fonti to check the dates of your local caches.

Content updated on

Italo · In Viaggio

Status and boards from undocumented public endpoints without a reliable service date.

  • Search covers direct trains. It does not plan transfers or provide historic telemetry.
  • Undocumented live endpoints can change or become unavailable. The server cannot guarantee upstream availability.
  • A missing delay does not mean a train is on time. An Italo live service date may remain unverified.
  • The code is MIT licensed. Datasets and provider responses retain their own terms; downloaded caches stay local.

Before you start

Frequently asked questions

What is MCP Trenitalia + Italo?

It is a free, open-source MCP server, also called Ciuff. Its 11 tools let clients supporting Model Context Protocol search stations and direct journeys, query train status and station boards, and inspect data sources for Trenitalia and Italo.

Do I need paid APIs or a subscription?

The server requires no paid APIs, subscriptions, databases or cloud services. You can run it on your computer. Any costs of your chosen AI client or hosting provider are separate from this project.

Which clients and transports are supported?

Use an MCP client that supports stdio, Streamable HTTP or legacy SSE, such as Claude Desktop with a local configuration. Choose a transport your client supports: python server.py for stdio, --streamable-http for /mcp, or --sse for /sse. The --http flag remains an alias for legacy SSE.

Can I search for tomorrow or a future travel date?

Yes, within the coverage of your downloaded NeTEx timetables. The server checks service calendars and exceptions for the requested date and reports missing or expired caches. Search covers direct journeys; today's live data is not used as the status of a future journey.

How are Italo delays handled?

Italo's public source does not provide a reliable service date. When it cannot be verified, the server returns service_date null and freshness date_unverified and does not attach that delay to a journey scheduled for a specific date. A missing delay stays null and is never interpreted as on time.

Can I compare prices or book tickets?

No. The ciuff_link_biglietti tool returns links to the official Trenitalia and Italo websites. Live prices, seat availability, purchases and bookings are not implemented in the server.

How do I update timetables? Do they work offline?

Run python update_data.py to refresh both operators, or add --provider italo or --provider trenitalia. The updater validates the new feed before replacing the cache; a failed update preserves the previous file. Downloaded timetables can be queried offline within their validity period. Live tools need Internet access. You can schedule updates using your operating system's scheduler.

Is this an official Trenitalia or Italo service?

No. It is an independent project by Salvatore Arena, unaffiliated with either operator. The code is MIT licensed; datasets and source responses retain their own terms. The public live endpoints are undocumented and can change.

Bring Trenitalia and Italo into your project.

Read the code, configure the server and contribute on GitHub. Follow Salvatore Arena on X for project updates.