Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Flytoday

PYPI · FLYTODAY-MCP

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

Available components

−15 this week 62 Trust /100

Last scanned (6 minutes ago)

Scores higher than 62% of PyPI servers

Category E-commerce

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security50
  • Malware scan not yet available for this package.Unverified
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 35 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to sepehr071/flytoday-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 0 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5207 tokens (~236/item across 22 items; 22 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability check failed: the tool surface changed between 0.1.2 and 0.3.1: 0 tool removals, 22 breaking changes, 0 additions. See how to fix → Fail
Tool Coverage99
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 98% of tool parameters carry a description.Partial
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "ft_flight_details" implies "refund" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Fail
  • An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 22 Oct 26 +15
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.3.0 → 0.3.1 functional
  • 19 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 18 Oct 26 0
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: pass → unverified ▼ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.2.0 → 0.3.0 functional
  • 16 Oct 26 +15
    • Stability: unverified → fail ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Package version: 0.1.2 → 0.2.0 functional
  • 14 Oct 26 +13
    • Malware scan: pass → unverified ▼ security
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • First check of Schema quality: fail functional
    • First check of Schema quality: excellent functional
    • First check of Schema quality: fail functional
    • First check of Destructive annotations: 0 functional
    • First check of Tool coverage: 98 functional
    • First check of Tool coverage: 100 functional
  • 13 Oct 26 0
    • Package version: 0.1.1 → 0.1.2 functional
  • 12 Oct 26 49

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Oct 2026 · Analysed pypi/flytoday-mcp@0.3.1

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo sepehr071/flytoday-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/sepehr071/flytoday-mcp/.github/workflows/publish.yml@refs/tags/v0.3.1
Rekor log index 3390371772
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:5314af5a21c9a8ea7551006b4931d80e5d815af83e774c8fb6aabaca5b1b56c4

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 35 packages
Packages resolved 35
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 22 exposed · ~4,513 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ft_activities ~216

Tours, tickets and experiences in a destination that are on sale in the date range, with from-prices. Only activities with a price in the range are listed (many are unavailable on given dates), cheapest first. price_toman is the adult from-price; list_price_toman is the box-office price. region is the destination matched; other_regions lists alternatives to retry with region_id. Next: ft_activity(activity_id).

NameTypeReqDescription
date_from––First day YYYY-MM-DD; tomorrow or later (today is moved to tomorrow); default tomorrow.
date_to––Last day YYYY-MM-DD, up to 90 days after date_from; default date_from + 30 days.
limitinteger–Max activities, cheapest first.
query––Destination, English or Persian, e.g. 'Dubai', 'دبی', 'Istanbul'. Needed unless region_id is given.
region_id––Region id from an earlier call, e.g. 1234 (Dubai); skips the lookup.

No output schema declared.

No examples provided.

ft_activity ~151

One activity: description, highlights, options with adult prices, and the cheapest days in the range. price_toman fields are adult prices. The range matters: an activity with no availability in it comes back with available=false, so use a wide range (the default is about two months). Slow upstream (up to a minute). Booking happens on flytoday.ir.

NameTypeReqDescription
activity_idintegeryesActivity id from ft_activities, e.g. 13049.
date_from––Price calendar start YYYY-MM-DD; default today + 3 days.
date_to––Price calendar end YYYY-MM-DD, up to 90 days after date_from; default date_from + 57 days.

No output schema declared.

No examples provided.

ft_bus_calendar ~137

Cheapest bus seat price per day for the next weeks (the site's price strip), in one cheap call. Values are cached minimums per day (one row per company in the API) and can differ a little from a live search; days without a listed bus are left out. Use it to pick a day, then ft_search_buses.

NameTypeReqDescription
destinationstringyes4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).
originstringyes4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).

No output schema declared.

No examples provided.

ft_cip ~289

CIP / VIP airport lounge service with prices for a date and passenger mix, plus paid add-ons. Only IKA and MHD sell CIP. `nationality` says which passports an offer is for (IKA lists one offer for Iranian passports and one for all others). price_per_passenger_toman is per person (tax included); total_toman is for the whole party; add-ons (wheelchair, pet, transfers) list their adult price. Nothing is held or booked. Next: the user books on flytoday.ir.

NameTypeReqDescription
adultsinteger–Adults, e.g. 1.
airportstringyesAirport IATA code that sells CIP lounges: 'IKA' (Tehran Imam Khomeini, international) or 'MHD' (Mashhad, domestic and international).
childreninteger–Children, e.g. 0.
datestringyesFlight date YYYY-MM-DD, today or later and at most about 3 months ahead, e.g. '2026-10-20'.
directionstring–'departure' = leaving from this airport, 'arrival' = landing here.
flight_typestring–Kind of flight.
full_textboolean–Skip text clips and item caps; return full texts.
infantsinteger–Infants, e.g. 0.

No output schema declared.

No examples provided.

ft_esim_plans ~117

eSIM data plans for a country with data amount, validity days and price, cheapest first. Covers 200+ countries (no regional or global bundles). fare_code identifies the plan on flytoday.ir; plans cannot be bought here. coverage_countries is how many countries the plan works in.

NameTypeReqDescription
countrystringyesCountry in English or Persian, or ISO code or slug, e.g. 'turkey', 'ترکیه', 'AE'.
limitinteger–Max plans, cheapest first.

No output schema declared.

No examples provided.

ft_find_airport ~141

Find the IATA codes the flight tools need, for domestic and international places. Each hit has `code`, `type` (City or Airport) and, for a city, its `airports`. Use the city code (THR, IST) in ft_search_flights and ft_flight_calendar: a city code covers all of its airports. Without a query it lists the popular Iranian and international cities.

NameTypeReqDescription
domestic_onlyboolean–Only Iranian places.
limitinteger–Max places.
query––City or airport name, Persian or English ('mashhad', 'استانبول'); omit for popular places.

No output schema declared.

No examples provided.

ft_find_bus_city ~97

Bus city ids (4 digits) for a city name, or the popular cities when query is empty. Use before ft_search_buses (Tehran '0001', Isfahan '0002', Shiraz '0004', Mashhad '0006').

NameTypeReqDescription
limitinteger–Max cities.
query––City name, Persian or latin, e.g. 'اصفهان' or 'shiraz'.

No output schema declared.

No examples provided.

ft_find_hotel_place ~224

Find the place ids the hotel and stay tools need. Which id goes where: `hotels` rows: kind 'city' (Iran) -> `city_id` for ft_search_hotels; kind 'region' (abroad, with international=true) -> `region_code` plus `country_code` for ft_search_hotels(international=true); kind 'hotel' -> `hotel_id` for ft_hotel and ft_hotel_reviews. `stay_regions` rows (Iran only, villas and apartments) -> `region_code` for ft_search_stays; they are NOT the same ids as the hotel city ids. Without a query it lists the popular hotel places (and popular stay areas, which have no region_code: search them by name).

NameTypeReqDescription
internationalboolean–Look for places outside Iran (hotels only; stays are Iran only).
limitinteger–Max rows per list.
query––City, region or hotel name, Persian or English ('مشهد', 'Istanbul', 'رامسر').

No output schema declared.

No examples provided.

ft_find_station ~94

Train station codes (`station_code`) for a city name, or the 8 most popular stations when query is empty. Use before ft_search_trains and ft_train_calendar, which need the codes (Tehran 1, Mashhad 191).

NameTypeReqDescription
limitinteger–Max stations.
query––City or station name, Persian or latin, e.g. 'مشهد' or 'isfahan'.

No output schema declared.

No examples provided.

ft_flight_calendar ~228

Cheapest one-adult fare per departure day around a date, in one cheap call (no search needed). Use it to pick the cheapest day, then ft_search_flights for that day. Values are cached minimums (price_toman, airline code) and can differ a little from a live search; days without a cached fare are left out and past days are dropped. `cheapest` is the lowest day.

NameTypeReqDescription
datestringyesCentre of the window, Gregorian YYYY-MM-DD, e.g. '2026-10-23'.
destinationstringyesIATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
originstringyesIATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
windowstring–week = the date +-3 days, month = the date +-15 days.

No output schema declared.

No examples provided.

ft_flight_details ~143

Refund and change rules, confirmed baggage per segment and (international) entry notes of one fare. The fare_source_code is valid only while its search lives (about 15 minutes); after that run ft_search_flights again. Charter fares list cancellation penalties as text, system fares as tiers (`penalties`, % of the fare by time before the flight).

NameTypeReqDescription
fare_source_codestringyesfare_source_code of a flight from ft_search_flights.
full_textboolean–Skip text clips and item caps; return full texts.
search_id––search_id of that search; adds the entry and transit notes of an international fare.

No output schema declared.

No examples provided.

ft_hotel ~292

One hotel for dates: every room and meal-plan offer with whole-stay price, rooms left and cancellation terms, the room details (size, beds, features) and the hotel basics (address, stars, score, facilities, check-in time). price_toman is the whole stay for one room; per_night_toman = price / nights. Offers are cheapest first, sold-out ones (rooms_left 0) last. Use after ft_search_hotels; the user books on flytoday.ir. Rate limited like ft_search_hotels: one availability call per use.

NameTypeReqDescription
adultsinteger–Adults in the (single) room.
check_instringyesGregorian date YYYY-MM-DD, e.g. '2026-10-21'.
check_outstringyesGregorian date YYYY-MM-DD, e.g. '2026-10-21'.
children_ages––Ages (0-11) of the children, one entry each, e.g. [5, 8]. Omit for none.
country_code––ISO country code of the DESTINATION for international, e.g. 'TR'.
hotel_idintegeryesHotel id from ft_search_hotels or ft_find_hotel_place, e.g. 24.
internationalboolean–true for a hotel outside Iran (id from ft_find_hotel_place international).

No output schema declared.

No examples provided.

ft_hotel_reviews ~148

Guest reviews of a hotel: score (1-10), text, pros, cons, trip type and nights. Mostly Persian text. Use after ft_search_hotels / ft_hotel to judge a hotel; total_reviews tells how many pages exist.

NameTypeReqDescription
full_textboolean–Skip text clips and item caps; return full texts.
hotel_idintegeryesHotel id, e.g. 24.
internationalboolean–true for a hotel outside Iran (id from ft_find_hotel_place international).
limitinteger–Reviews per page.
orderstring–Review order.
pageinteger–Page number, 1-based.

No output schema declared.

No examples provided.

ft_search_buses ~244

Buses between two cities on a date: company, terminals, departure, bus type, seats left, price per seat. A busy route lists over 100 buses (the raw reply is 1.5 MB): narrow with facility, sort or limit. price_toman is per seat. Rows carry `fare_source_code`; `search_id` is at the top. The site's seat map is not offered (it belongs to the booking flow). Searches are rate limited: do not repeat them in a loop.

NameTypeReqDescription
available_onlyboolean–Hide sold-out buses.
datestringyesDeparture date YYYY-MM-DD, e.g. '2026-10-14'.
destinationstringyes4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).
facility––Keep only buses with this facility, e.g. 'vip'.
limitinteger–Max buses.
originstringyes4-digit bus city id from ft_find_bus_city, e.g. '0001' (Tehran).
sortstring–Order of the results.

No output schema declared.

No examples provided.

ft_search_flights ~555

Search flights for a date: every flight with times, airline (airline_fa: Persian name), seats left, price and fare_source_code. price_toman is one adult's fare (taxes included), total_toman the whole party. Round trip (return_date): `flights` are outbound options (total_toman = cheapest round trip with that outbound), `return_flights` the returns for the cheapest outbound (`return_for` is its key; pass another key as outbound_key + search_id for its returns). Filters apply to the outbound leg. Rate limited: page with search_id, never search again. Next: ft_flight_details(fare_source_code); ft_flight_calendar finds the cheapest day first.

NameTypeReqDescription
adultsinteger–Adults (12+).
airlines––Only these airline codes, e.g. ['W5', 'EP'] (codes appear in results).
cabinstring–Cabin class.
childreninteger–Children (2-11).
datestringyesGregorian date YYYY-MM-DD, e.g. '2026-10-23'.
depart_after––Local time HH:MM, e.g. '18:00'.
depart_before––Local time HH:MM, e.g. '18:00'.
destinationstringyesIATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
direct_onlyboolean–Only flights without a stop or connection.
infantsinteger–Infants (under 2).
limitinteger–Flights per page.
max_price_toman––Highest fare in Toman (whole party).
originstringyesIATA city code from ft_find_airport, e.g. 'THR' (covers IKA and THR), 'MHD', 'IST', 'DXB'.
outbound_key––Round trip: `key` of the chosen outbound flight, to list the return flights for it (needs search_id).
pageinteger–Result page, 1-based. Pages above 1 need search_id.
return_date––Return date YYYY-MM-DD for a round trip, e.g. '2026-10-26'; omit for one-way.
search_id––searchId from an earlier result (valid about 15 minutes): pages and re-sorts without a new search.
sortstring–Order: lowest price, shortest trip, earliest departure.
ticket_type––Only charter or only system (scheduled) tickets.

No output schema declared.

No examples provided.

ft_search_hotels ~436

Priced hotels of a city (Iran) or region (abroad) for dates, one row per hotel with its cheapest room offer. Give city_id for Iran, or region_code + country_code with international=true. price_toman is the whole stay for one room (per_night_toman = price / nights); image is the cover photo. Next: ft_hotel(hotel_id) or ft_hotel_reviews. Rows with is_stay=true are apartments or villas: open them with ft_stay(property_id). rooms_left is given only when the site counts rooms. Captcha-limited hard per IP: search once, then filter and page; never loop.

NameTypeReqDescription
adultsinteger–Adults in the (single) room.
check_instringyesGregorian date YYYY-MM-DD, e.g. '2026-10-21'.
check_outstringyesGregorian date YYYY-MM-DD, e.g. '2026-10-21'.
children_ages––Ages (0-11) of the children, one entry each, e.g. [5, 8]. Omit for none.
city_id––Iranian city id from ft_find_hotel_place, e.g. 10 (Mashhad).
country_code––ISO country code of the DESTINATION for international, e.g. 'TR'.
internationalboolean–true for a hotel outside Iran (id from ft_find_hotel_place international).
limitinteger–Hotels per page.
max_price_toman––Max price of the WHOLE stay in Toman, e.g. 30000000.
pageinteger–Page number, 1-based.
refundable_onlyboolean–Only offers with free cancellation.
region_code––Foreign region code from ft_find_hotel_place, e.g. '178267' (Istanbul).
sortstring–price = cheapest first, score = best guest score first.
stars––Only these star ratings, e.g. [4, 5].

No output schema declared.

No examples provided.

ft_search_stays ~228

Villas, apartments and other private stays in Iran for dates, cheapest first. Give both dates (strongly advised: only properties free on the dates are listed and total_toman is filled) or none (base prices). price_per_night_toman and total_toman are Toman (the stay API is not in Rial like hotels). property_id feeds ft_stay (calendar, details, reviews). Prices change a lot by date.

NameTypeReqDescription
check_in–––
check_out–––
guestsinteger–Number of guests.
limitinteger–Properties per page.
max_price_toman––Max price PER NIGHT in Toman, e.g. 5000000.
pageinteger–Page number, 1-based.
region_code––Stay region code from ft_find_hotel_place `stay_regions`, e.g. '149' (Ramsar). Omit for all Iran.
sortstring–cheapest = lowest nightly price first.
type––Property type; omit for all types.

No output schema declared.

No examples provided.

ft_search_trains ~269

Trains between two stations on a date: one row per train class (wagon) with price per adult and seats left. price_toman is per adult. Sales cover only about the next 16 days (no_result means outside it). Rows carry `fare_source_code` and `wagon_id`: pass them to ft_train_stops for stops and amenities. Other days: ft_train_calendar. Searches are rate limited by the site: do not repeat them in a loop.

NameTypeReqDescription
adultsinteger–Adult passengers.
available_onlyboolean–Hide classes with no free seats for this party.
childreninteger–Children (2-12).
datestringyesTravel date YYYY-MM-DD, e.g. '2026-10-14'. Sales open ~16 days ahead.
destinationintegeryesTrain station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).
infantsinteger–Infants (under 2).
limitinteger–Max train classes.
originintegeryesTrain station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).
sortstring–Order of the results.

No output schema declared.

No examples provided.

ft_stay ~182

One villa / apartment: details (capacity, rooms, facilities, rules, host), the per-night price calendar with blocked days, and the review summary with the latest reviews. Calendar prices are Toman per night for that date (the base price in the details is only a reference). A day is available=false when the host blocked it or it is already reserved. The user books on flytoday.ir.

NameTypeReqDescription
from_date––First calendar day YYYY-MM-DD; default today.
full_textboolean–Skip text clips and item caps; return full texts.
guestsinteger–Number of guests (changes the price).
property_idintegeryesProperty id from ft_search_stays, e.g. 3804.
to_date––Last calendar day; default 14 days after from_date, at most 45.

No output schema declared.

No examples provided.

ft_train_calendar ~102

Cheapest train price per day for the next ~16 days, with sold-out days flagged. Use to pick a day; then ft_search_trains for that date.

NameTypeReqDescription
destinationintegeryesTrain station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).
originintegeryesTrain station code from ft_find_station, e.g. 1 (Tehran) or 191 (Mashhad).

No output schema declared.

No examples provided.

ft_train_stops ~89

Stops of one train with arrival and departure times, plus (with wagon_id) the class amenities and extra meals. Needs ids from a recent ft_search_trains result; they expire with the search.

NameTypeReqDescription
fare_source_codestringyesfare_source_code from a fresh ft_search_trains row.
wagon_id––wagon_id from the same row; adds the class amenities and meals.

No output schema declared.

No examples provided.

ft_visa ~131

Visa services of Flytoday: the country list with from-prices, or one country's prices, documents and process. Without country: every country with visa type, from_price (in price_currency, often USD or EUR, not Toman) and processing time. With country: price per visa type (foreign currency and Toman at Flytoday's rate), validity, processing time and documents. Schengen is one entry, 'schengen'.

NameTypeReqDescription
country––Country in English, Persian or slug, e.g. 'turkey', 'پاکستان', 'schengen'. Omit to list every country.

No output schema declared.

No examples provided.

Install

How do I install the Flytoday MCP server?

Flytoday runs locally as a PyPI package, launched with uvx flytoday-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · flytoday-mcp

# add to Claude Code
claude mcp add sepehr071-flytoday-mcp -- uvx flytoday-mcp
Common questions

What is the Flytoday MCP server?

Flytoday is an MCP server listed in the public MCP registry as io.github.sepehr071/flytoday-mcp. Unofficial read-only Flytoday: Iranian and international flights, hotels, villas, trains, buses. This page covers its PyPI package (flytoday-mcp).

Is the Flytoday MCP server safe to use?

Flytoday scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Flytoday MCP server expose?

Flytoday exposes 22 tools: ft_find_bus_city, ft_bus_calendar, ft_search_buses, ft_cip, ft_esim_plans, and 17 more. Their descriptions and schemas cost roughly 4,513 tokens of context every time the server is loaded.

Is the Flytoday MCP server still maintained?

Flytoday is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Flytoday MCP server under?

Flytoday declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.