Open Transfer Times
Check if a flight connection is comfortable, tight or risky, with cited airport data.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
open-transfer-times-mcpclaude mcp add open-transfer-times -- npx -y open-transfer-times-mcp@0.2.0
{
"mcpServers": {
"open-transfer-times": {
"command": "npx",
"args": [
"-y",
"open-transfer-times-mcp@0.2.0"
]
}
}
}
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
Open Transfer Times
Is this flight connection comfortable, tight, or risky? Open, cited airport transfer data, an engine that explains its verdict, and an MCP server so AI agents can check connections before recommending a flight.
Try it
Ask an AI agent to compare layovers. With the MCP server connected, it gets:
1. IST 3 h BER–IST–PVG: comfortable, margin 135 min, protected itinerary, medium confidence
2. VIE 2 h BER–VIE–PVG: comfortable, margin 65 min, protected itinerary, low confidence
3. FRA 50 min BER–FRA–PVG: risky, margin -5 min, protected itinerary, medium confidence
Each result lists the transfer steps it counted, a confidence level, and the official sources behind the airport data:
BER–LHR–PVG: REASONABLE — A practical connection on one ticket.
Confidence: MEDIUM — The transfer-step durations are rule-of-thumb estimates, not sourced figures.
Layover 90 min, transfer steps 55 min, margin 35 min.
Steps counted: Move through airport 40 min (heuristic); Allow for another security check 15 min (heuristic). No other steps were counted.
With Claude Desktop or any MCP client
Add to claude_desktop_config.json, then fully restart Claude:
{
"mcpServers": {
"open-transfer-times": { "command": "npx", "args": ["-y", "open-transfer-times-mcp"] }
}
}
Then ask, in a new chat: "From Berlin to Shanghai, which is safest: 50 minutes in Frankfurt, 3 hours in Istanbul or 2 hours in Vienna?"
The server is also listed in the official MCP Registry and on Glama. Tools and options: packages/mcp.
From code
npm install open-transfer-times
const { assessConnection } = require("open-transfer-times");
const result = assessConnection(
{ segments: [
{ origin: "BER", destination: "LHR", arrivalTime: "2026-09-20T10:00" },
{ origin: "LHR", destination: "PVG", departureTime: "2026-09-20T11:30" }
] },
{ ticketStatus: "protected" }
);
result.quality; // "reasonable"
result.confidence.level; // "medium"
API reference: packages/core.
Why this exists
Airlines and booking systems decide whether a connection is feasible using minimum connection times (MCT): commercial data sold by IATA and schedule providers. Open flight-search tools can find itineraries but cannot say whether a layover is realistic. This project collects what airports and airlines publish openly, cites every fact, and marks every estimate as an estimate.
How it works
The engine is deterministic: the model that calls it explains the result but never does the arithmetic.
- Start from the scheduled layover.
- Deduct the transfer steps that apply at the connection airport: a base transfer allowance, Schengen passport control when the transfer crosses the Schengen border, a terminal change when known, security re-screening, and bag re-check when stated.
- Rate the remaining margin:
comfortable(≥ 45 min),reasonable(≥ 25),tight(≥ 5) orrisky.
Two things are reported separately from the rating:
- Confidence (
high/medium/low). An airport without a profile, or a route whose border situation is unknown, is always low confidence, so missing data is never presented as "no risk". - Ticket protection. Separate tickets change the warning and verdict, but do not add transfer time by themselves.
Airport data
13 hub airports have their own profile in airports/, one YAML
file each; every other airport uses a standard baseline.
All 13 cite official airport or airline pages. Facts confirm transfer steps,
for example that Heathrow, Hong Kong, Changi, Incheon, Narita and Doha screen
transfer passengers again, while most durations are still estimates
(basis: heuristic). COVERAGE.md shows how well each
airport is sourced.
Contributions welcome, no code needed. Add an airport, replace an estimate with a sourced figure, or report a rule the format can't express: see CONTRIBUTING.md or open an issue with the Airport data form.
Limitations
- Not an official MCT table, and no delay prediction. It is a structural estimate with its sources attached.
- Durations are mostly rule-of-thumb. No minute value is sourced yet, so no
result reaches
highconfidence. - One stop at a time. Itineraries with more connections are rejected; check each connection separately.
- Schengen status is known for about 56 airports. A connection at any other airport, or at a Schengen airport to or from one, is reported as low confidence.
- One rule set per airport. Rules that depend on where you arrive from (security at AMS), on terminal pairs (NRT) or on "some cases" (MUC) are not modelled yet.
- Self-transfers. Re-checking bags adds a fixed allowance, but entering and leaving the country is not counted outside Schengen.
- Local clock times. Layovers spanning a daylight-saving change are off by an hour.
- Visa and transit-visa requirements are not covered.
Roadmap
RFC 0001 proposes v0.2: a country for every airport, rules with conditions, self-transfer border steps, time zones, and sourced durations for MUC, NRT and LHR. It addresses most of the limitations above. Feedback is welcome on its discussion issue.
The agent evaluation measures how reliably an AI agent uses the server: 36 questions in Chinese and English, graded on tool calls and answer accuracy.
Repository layout
| Path | What it is |
|---|---|
airports/, regions/ | The transfer dataset (YAML) and Schengen membership. |
packages/core | open-transfer-times on npm: the dependency-free engine. |
packages/mcp | open-transfer-times-mcp on npm: the MCP server. |
eval/ | Agent evaluation against the Claude API. |
extension/ | Chrome extension for Google Flights (beta, not in the Chrome Web Store). |
docs/ | RFCs, data sources, extension store materials. |
src/, pyproject.toml | Legacy Python research code (delay simulation, EUROCONTROL benchmarks). Not published, not maintained, not used by the packages above. |
Development
Requires Node.js 20+.
npm install
npm run check # airport data validation, lint, all tests, extension build
npm run smoke # pack both npm packages, install them, call the MCP server
npm run eval # agent evaluation; needs ANTHROPIC_API_KEY (see eval/README.md)
npm run airports:build regenerates the engine's data after editing
airports/*.yaml. CI runs check and smoke on Ubuntu and Windows with
Node 20 and 22. Working on the extension: extension/README.md.
Changes by release: CHANGELOG.md.
License
MIT. Airport names come from the public-domain OurAirports dataset.
Questions fréquentes
Qu'est-ce que Open Transfer Times ?
Check if a flight connection is comfortable, tight or risky, with cited airport data.
Comment installer Open Transfer Times ?
Il s'exécute sur votre machine. Dans Claude Code : claude mcp add open-transfer-times -- npx -y open-transfer-times-mcp@0.2.0. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour Open Transfer Times ?
Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.
Open Transfer Times est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient Open Transfer Times ?
Il est publié par joelynli0110. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.