Flytoday

io.github.sepehr071v0.1.0更新于 Oct 11, 2026

Unofficial read-only Flytoday: Iranian and international flights, hotels, villas, trains, buses.

已验证STDIO仅桌面位置与生活效率与工作流

概览

AI 生成的概览

让助手在 Flytoday 上查询机票、火车、巴士、酒店、别墅、CIP 休息室、eSIM 和签证,价格以托曼显示。

功能
这是一个非官方、只读的 MCP 服务器,通过 Flytoday 的公开网关查询伊朗及国际旅行信息。它提供 22 个工具,涵盖航班搜索与最低价日历、票价规则与行李额、酒店和别墅搜索及价格与评价、火车和巴士班次与余票,以及 CIP 休息室、eSIM 套餐、签证和活动等附加服务。结果以紧凑的结构化 JSON 返回,价格单位为托曼。
适用场景
适合规划前往伊朗、从伊朗出发或在伊朗境内的旅行,并按价格和日期比较选项,例如查找两城之间最便宜的航班或火车日期、查看退改规则,或比较酒店和别墅。它只是查询工具,不能预订、占座或付款。
运行要求
通过 stdio 在本地运行,通常使用 uvx flytoday-mcp(或 pip install flytoday-mcp),需要 uv 或 Python。无需账号、登录或 API 密钥。需要能访问 flytoday.ir;可选环境变量 FLYTODAY_MCP_PROXY 为所有请求设置 HTTP 代理,系统代理设置会被忽略。
安装前请注意
设计上只读:不登录、不预订、不付款、不占座。Flytoday 按 IP 限制搜索频率,酒店搜索可能触发验证码封禁,持续一小时或更久;search_id 和 fare_source_code 约 15 分钟后失效。可选的 FLYTODAY_MCP_PROXY 值可能包含代理凭据,应视为机密。该服务器为非官方项目,与 Flytoday 无关联,其公开接口可能变更。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Flytoday,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[flytoday-mcp: let your AI agent find the cheapest flight, train or hotel in Iran]

✈️ flytoday-mcp

Let your AI agent plan trips with Flytoday.
Find the cheapest domestic or international flight, train or bus on a date or over a month, read fare rules and baggage,
compare hotels and villas with exact prices, and price CIP lounges, eSIMs and visas, all from Claude, Cursor or Copilot.

[PyPI] [Python] [CI] [MCP Registry] [License: MIT]

[Install in Cursor] [Install in VS Code]

Quick start · What it can do · Tools · FAQ · فارسی


Why

Flytoday (flytoday.ir, فلای تودی) sells domestic and international flights, hotels, villas, trains, buses, CIP lounges, eSIMs and visas. Comparing "which day, plane or train or bus, which hotel" still means many page loads. An agent with flytoday-mcp does it in one go:

You: Cheapest way from Tehran to Mashhad around 20 October?

Agent: calls ft_flight_calendar(origin="THR", destination="MHD", date="2026-10-21", window="week"), ft_train_calendar(origin="1", destination="191")

ModeCheapest dayPrice (Toman)
Flight2026-10-20, airline IRZ11,056,700
Train2026-10-20 (and most days that week)760,000

The train is far cheaper; want me to list that day's trains with ft_search_trains?

Real tool output from 2026-10-07; prices and seats change all the time. Prices are in Toman.

What it can do

  • ✈️ Flights: domestic and international, one-way or round trip, party prices, airline, direct, charter/system and time filters
  • 📅 Cheapest day for flights (+-15 days), trains (~16 days) and buses (~6 weeks)
  • 📜 Fare details: refund and change rules, baggage, international entry notes
  • 🏨 Hotels in Iran and abroad: priced search, room and meal offers with cancellation terms, guest reviews
  • 🏡 Villas and apartments in Iran: price per night and total, per-date calendar with blocked days
  • 🚆🚌 Trains and buses: classes, seats left, stops, amenities, VIP and sleeper buses
  • 🛂 Extras: CIP lounges at IKA and MHD, eSIM data plans per country, visa prices and documents, tours and tickets
  • 🔒 Read-only by design: no login, no seat hold, no booking, no payment

Quick start

You need uv.

Claude Code
bash
claude mcp add flytoday -- uvx flytoday-mcp

If Flytoday does not answer from your network, add a proxy:

bash
claude mcp add flytoday -e FLYTODAY_MCP_PROXY=http://127.0.0.1:8080 -- uvx flytoday-mcp
Claude Desktop

Settings → Developer → Edit Config, then add:

json
{  "mcpServers": {    "flytoday": { "command": "uvx", "args": ["flytoday-mcp"] }  }}

Need a proxy? Add "env": { "FLYTODAY_MCP_PROXY": "http://127.0.0.1:8080" } next to args.

Cursor

Click Install in Cursor above, or add the Claude Desktop block to ~/.cursor/mcp.json.

VS Code (Copilot agent mode)

Click Install in VS Code above, or add to .vscode/mcp.json:

json
{  "servers": {    "flytoday": { "type": "stdio", "command": "uvx", "args": ["flytoday-mcp"] }  }}
Anything else

It's a standard stdio MCP server: run uvx flytoday-mcp, or pip install flytoday-mcp and run flytoday-mcp.

Then just ask:

  • "Cheapest day to fly Tehran to Istanbul next month, and the refund rules of that fare?"
  • "Hotels in Mashhad for 2 nights from the 21st, cheapest first, with free cancellation."
  • "A villa in Ramsar for 4 people next weekend under 5 million Toman a night."
  • ارزان‌ترین اتوبوس VIP تهران به اصفهان دوشنبه بعد؟

How it works

text
  AI agent  (Claude, Cursor, Copilot, ...)      │      │  MCP over stdio      ▼  flytoday-mcp  (runs on your machine)      │      │  HTTPS (optional proxy)      ▼  www.flytoday.ir/api/gateway  ──▶  api.flytoday.ir, placesearch.flytoday.ir

flytoday-mcp runs locally and calls the same public gateway the flytoday.ir website uses. There's no hosted server in between, no API key, and nothing about you is sent anywhere else.

Tools

Each vertical has its own ids, taken from its find tool: IATA codes for flights (THR, MHD, IST), hotel city_id / region_code, stay region_code, train station codes (Tehran 1, Mashhad 191), 4-digit bus city ids (Tehran 0001, Isfahan 0002).

✈️ Flights (4)
ToolWhat it does
ft_find_airportFinds IATA codes for Iranian and international cities and airports, or lists the popular ones
ft_search_flightsSearches one-way or round-trip flights with filters, sorting and paging, in Toman, with fare_source_code and search_id
ft_flight_calendarShows the cheapest fare per departure day around a date and marks the cheapest day
ft_flight_detailsGives the refund and change rules, baggage and international entry notes of one fare
🏨 Hotels and stays (6)
ToolWhat it does
ft_find_hotel_placeFind city, region and hotel ids for hotels, and region codes for villa stays; popular places when empty
ft_search_hotelsPriced hotels of a city or region for dates: whole-stay and per-night Toman, stars, score, refundable, meal
ft_hotelOne hotel: room and meal offers with price, rooms left and cancellation terms, room details, basics
ft_hotel_reviewsGuest reviews of a hotel with score, text, pros and cons
ft_search_staysVillas and apartments in Iran for dates, cheapest first, Toman per night and total
ft_stayOne villa or apartment: details, price calendar with blocked days, reviews
🚆 Trains (4)
ToolWhat it does
ft_find_stationTrain station codes by city name, or the popular stations
ft_search_trainsTrains between two stations on a date: company, class, times, seats left, price per adult
ft_train_calendarCheapest train price per day for the next ~16 days, sold-out days flagged
ft_train_stopsStops and times of one train, plus class amenities and meals
🚌 Buses (3)
ToolWhat it does
ft_find_bus_cityBus city ids by name, or the popular cities
ft_bus_calendarCheapest bus seat price per day for the next weeks (the site's price strip)
ft_search_busesBuses between two cities on a date: company, terminals, type, seats left, price per seat
🛂 CIP, eSIM, visa, activities (5)
ToolWhat it does
ft_cipCIP / VIP airport lounge prices and add-ons at IKA and MHD for a date and passengers, per passport nationality
ft_esim_planseSIM data plans for a country (GB, days, price in Toman), cheapest first
ft_visaVisa country list with from-prices, or one country's prices, documents and processing time
ft_activitiesTours, tickets and activities in a destination with from-prices for a date range
ft_activityOne activity: description, options, prices and cheapest days

All 22 tools are annotated readOnlyHint: true and return compact structured JSON, so they don't flood the agent's context.

Good to know

  • Prices are in Toman in every tool, in fields named *_toman (the API sends Rial; values are divided by 10). Flight price_toman is per adult and total_toman the whole party; hotel price_toman is the whole stay (with per_night_toman); stays give price_per_night_toman and total_toman; trains per adult; buses per seat. Visa and some activity prices are in a foreign currency (price_currency).
  • Dates in and out are Gregorian YYYY-MM-DD; past dates are rejected. Times are local to the place.
  • Flights give airline (English name) and airline_fa (Persian name, when the API has one).
  • Hotels and stays (search rows, ft_hotel, ft_stay) carry image, the cover photo, built like the site as <cdn>/<id>/main.jpg (the API has no image field).
  • Searches are rate limited per IP by Flytoday: about 15 flight/train/bus searches, and hotel search asks for a captcha after about 12 searches in 10 minutes (blocked for an hour or more). Use the calendars and paging (search_id) instead of searching again; the tools never loop searches.
  • Ids expire: search_id and fare_source_code are valid for about 15 minutes.
  • Sales windows: trains open about 16 days ahead. An empty result often just means "not on sale yet".
  • When the rail companies' link is down, Flytoday answers HTTP 599; ft_search_trains retries three times, then says so.

FAQ

Do I need a proxy?

Usually not: the website's gateway answers from Iran and from abroad. If your network cannot reach www.flytoday.ir, or your IP is rate limited, set FLYTODAY_MCP_PROXY to an HTTP proxy. System proxy variables (HTTPS_PROXY, ...) are ignored on purpose.

Can it book a ticket for me?

No, and that's deliberate. It has no login and never holds a seat, reserves, orders or pays. The agent finds the best option; you book on flytoday.ir.

I get "wants a captcha" or HTTP 429

Flytoday limits searches per IP. Wait (the hotel captcha block can last an hour or more) or use another network through FLYTODAY_MCP_PROXY. Calendars, details, reviews and stay searches are not limited.

Why is there no bus seat map?

The site's seat map comes from the first call of its checkout flow. It is left out until it is clear that the call holds nothing.

How do I debug what the agent sees?
bash
npx @modelcontextprotocol/inspector uvx flytoday-mcp

Configuration

VariableDefaultMeaning
FLYTODAY_MCP_PROXYunsetHTTP proxy for every request, e.g. http://user:pass@host:port

Safety

  • Read-only: no login or OTP, no seat hold, reservation, order, payment, refund, review or bookmark. The only POSTs are searches and price lookups the site itself makes before booking.
  • At most two requests at a time, and no tool repeats a search in a loop.

فارسی

flytoday-mcp به دستیار هوش مصنوعی شما (Claude، Cursor، Copilot و ...) اجازه می‌دهد در فلای‌تودی ارزان‌ترین پرواز داخلی و خارجی، قطار یا اتوبوس را برای یک روز یا یک ماه پیدا کند، قوانین استرداد و بار مجاز را ببیند و هتل‌ها و ویلاها را با قیمت دقیق مقایسه کند؛ همچنین قیمت CIP، سیم‌کارت eSIM و ویزا را می‌گوید.

  • فقط خواندنی است: وارد حساب نمی‌شود و چیزی رزرو یا پرداخت نمی‌کند.
  • همه قیمت‌ها به تومان است.
  • روی سیستم خود شما اجرا می‌شود و به هیچ سرور واسطی داده نمی‌فرستد.

نصب در Claude Code:

bash
claude mcp add flytoday -- uvx flytoday-mcp

بعد بپرسید: «ارزان‌ترین راه رفتن از تهران به مشهد حدود ۲۸ مهر چیست؟»

Development

bash
git clone https://github.com/sepehr071/flytoday-mcp && cd flytoday-mcpuv syncuv run pytest            # offline, against recorded responsesuv run pytest -m live    # real API, one search per tool (set FLYTODAY_MCP_PROXY if needed)uv run ruff check .

Tools live in src/flytoday_mcp/flights.py, hotels.py, trains.py, buses.py and extras.py; each is a typed async function with a docstring that tells the agent when to use it. Issues and PRs are welcome.

Releases: bump the version in pyproject.toml and server.json, then push a v* tag. GitHub Actions tests, publishes to PyPI and the MCP Registry, and creates the GitHub Release.

Disclaimer

Unofficial and not affiliated with or endorsed by Flytoday. It uses the public endpoints of the flytoday.ir website, which can change without notice. Please keep request rates reasonable.

License

MIT

来源:README.md,提交 40a7a42

工具

0
工具元数据尚未被收录。

版本历史

1
  1. v0.1.0最新Oct 11, 2026