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"
Open source · 11 MCP tools · Self-hosted
Stations, timetables and train status through one MCP server. Connect your assistant to Trenitalia and Italo data without paid APIs.
Trenitalia and Italo from Roma Termini to Milano Centrale tomorrow after 8 am?
ciuff_cerca_viaggiJSONStatic workflow preview. This is not a live timetable or search result.
Two operators, one integration
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.
11 MCP tools
Six new tools sit alongside the five original tools. Shared searches for both operators, with dedicated tools where the sources differ.
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"
Request public train status by operator and train number, including data freshness information.
ciuff_stato_treno"What is the status of Italo 8908?"
Search by name across one or both operators. Ambiguous names return choices.
ciuff_cerca_stazioni"Find Roma Termini for Trenitalia and Italo"
trenitalia_cerca_stazioneFind a station in the local catalogue, with a Viaggiatreno fallback when needed.
trenitalia_monitora_partenzeRead a live Trenitalia departure board with the information available from the source.
trenitalia_monitora_arriviRead live Trenitalia arrivals at a station, including times and delays when available.
trenitalia_traccia_trenoQuery Viaggiatreno by train number and origin station for available stops and status.
trenitalia_orari_tra_stazioniFind direct Trenitalia journeys for the requested date. Today's results can include live information.
italo_tabelloneRead Italo arrivals or departures using the station name or its Italo code.
ciuff_stato_fontiCheck local timetable provenance, update times and coverage. This does not measure upstream availability.
ciuff_link_bigliettiGet links to the official purchase sites. Live prices, seat availability and booking are not integrated.
From source to assistant
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.
The updater downloads and validates official NeTEx feeds. Caches stay on your system and let you query timetables offline.
Searches use the requested date, service days, exceptions and feed validity. Missing or expired coverage is reported explicitly.
Viaggiatreno and Italo In Viaggio provide train status and station boards. Today's live data stays separate from future timetables.
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
Original recordings of the Trenitalia integration on Claude Desktop and Mobile. They show the client workflow and predate the addition of Italo.
A recording of train search with the original Trenitalia integration.
A recording of a Trenitalia train status query.
A recording of a Trenitalia departure query on mobile.
Run it on your system
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 READMEgit 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
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
Scheduled journeys, service calendars and validity periods.
Direct rail timetables, excluding combined itineraries.
Status, arrivals and departures from undocumented public endpoints, currently over HTTP.
Status and boards from undocumented public endpoints without a reliable service date.
Before you start
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.
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.
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.
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.
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.
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.
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.
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.
Read the code, configure the server and contribute on GitHub. Follow Salvatore Arena on X for project updates.