
Flytoday
io.github.sepehr071v0.1.0更新於 Oct 11, 2026
Unofficial read-only Flytoday: Iranian and international flights, hotels, villas, trains, buses.
概覽
讓助理在 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 代理,系統代理設定會被忽略。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Flytoday,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
✈️ 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")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
If Flytoday does not answer from your network, add a proxy:
Claude Desktop
Settings → Developer → Edit Config, then add:
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:
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
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)
🏨 Hotels and stays (6)
🚆 Trains (4)
🚌 Buses (3)
🛂 CIP, eSIM, visa, activities (5)
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). Flightprice_tomanis per adult andtotal_tomanthe whole party; hotelprice_tomanis the whole stay (withper_night_toman); stays giveprice_per_night_tomanandtotal_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) andairline_fa(Persian name, when the API has one). - Hotels and stays (search rows,
ft_hotel,ft_stay) carryimage, 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_idandfare_source_codeare 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_trainsretries 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?
Configuration
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:
بعد بپرسید: «ارزانترین راه رفتن از تهران به مشهد حدود ۲۸ مهر چیست؟»
Development
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
來源:README.md,提交 40a7a42
工具
0版本歷史
1- v0.1.0最新Oct 11, 2026

