restcountries_country_info
[restcountries] Look up country information from REST Countries.
query必填fieldssearch_by
com.moltravel由 moltravel.com 發布官方發布者v1.0.0更新於 Oct 27, 2026
Aggregated travel MCP — flights, tours, activities, price checks, visas, and more.
彙整式旅遊 MCP 伺服器,讓助理搜尋航班、旅行團、活動與飯店,查詢簽證,並取得國家與旅遊警示資訊。
Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。
把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。
閱讀 https://sourceweft.com/mcp/com.moltravel%2Ftravel/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。把它新增到你客戶端的 mcpServers 設定中。
{
"mcpServers": {
"moltravel": {
"type": "http",
"url": "https://mcp.moltravel.com/mcp"
}
}
}One MCP server. Every travel tool.
Search flights, compare prices, check visas, look up airports,
get travel advisories — through a single endpoint.
[MCP Protocol] [Python 3.12+] [License: MIT]
Travel data is scattered across dozens of APIs, each with its own auth, format, and quirks. MoltTravel aggregates them behind a single Model Context Protocol endpoint:
Server starts at http://localhost:8000/mcp. That's it.
Add to claude_desktop_config.json:
Add to .claude/settings.json:
Requires
GEMINI_API_KEY. Example: "Cheapest flights from Zurich to Rome next week, and do I need a visa?"
On startup, MoltTravel connects to each upstream MCP server, calls tools/list, and registers every discovered tool with a {provider}_{tool_name} prefix:
Native tools (airports, airlines, visas, countries, FCDO) are registered directly.
Clients see the original upstream JSON Schema for each tool — enums, nested objects, $ref, everything. Internally, MoltTravel uses a permissive Pydantic model (Any for all fields) so arguments pass through without lossy validation. The upstream MCP server validates its own args.
Static datasets (airports, airlines, visas) download on first use behind async locks. No startup penalty, no wasted bandwidth if you only use flight tools.
The server reads PORT from the environment and binds to 0.0.0.0 — it works out of the box on any container platform. Just point the start command at python molttravel_server.py.
Add one line to providers/__init__.py and restart:
Tools are discovered and registered automatically as your_provider_{tool_name}.
git checkout -b feature/my-feature)python molttravel_server.py)來源:README.md,提交 2a0046d
[restcountries] Look up country information from REST Countries.
query必填fieldssearch_by[fcdo] Get UK FCDO travel advice for a specific country. Includes safety, entry requirements, health, and warnings.
country必填[fcdo] List all countries with UK FCDO travel advice.
無需輸入參數。
Look up an airport by IATA (3-char) or ICAO (4-char) code. Returns full details including runways.
code必填Search airports by name or city. Returns up to 20 results sorted by size.
query必填countrytype_filterFind airports near a geographic point. Returns results sorted by distance.
limitlatitude必填longitude必填radius_kminclude_smallLook up an airline by IATA (2-char) or ICAO (3-char) code.
code必填Search airlines by name. Returns up to 20 results.
query必填countryactive_onlyCheck visa requirement for a passport country visiting a destination.
passport必填destination必填Overview of visa-free access for a passport country — counts by category.
passport必填Check which static datasets (airports, airlines, visas) are loaded and their row counts.
無需輸入參數。
[peek] Get availability information for a specific experience including dates, times, and pricing
id必填endDate必填quantity必填startDate必填[peek] Get detailed information about a specific experience by ID
id必填[peek] List all category tags
無需輸入參數。
[peek] Render activity tiles for a list of activity IDs, returning an embeddable widget URI
id必填[peek] Search for travel experiences with comprehensive filtering options. Returns available categories, tags, and regions with IDs for further filtering.
querytagIdlatLngendDateregionIdstartDatecategoryId[peek] Search for regions by name
limitquery必填[tourradar] Use this when the user wants information about a tour operator, such as their terms and policies. Fetches operator details including name, code, and terms & conditions based on operator ID.
operatorId必填[tourradar] Use this when you need to find city IDs for tour search filters like start city, end city, or cities to visit. Searches for cities by name within a specific country. Supports multiple name variants to handle different spellings (e.g., Krakow, Kraków, Cracow).
search必填country_code必填[tourradar] Use this when you need continent IDs for filtering tours by region. Returns a list of all supported continents with their IDs and names for use in tour search filters.
無需輸入參數。
[tourradar] Use this when you need to look up country IDs for filtering tours or validating country names. Returns a complete list of all supported countries with their IDs, names, and ISO country codes.
無需輸入參數。
[tourradar] Use this when you need to check supported currencies or get currency details like symbols. Returns a list of all supported currencies with their codes (USD, EUR), names, and symbols ($, €).
無需輸入參數。
[tourradar] Use this when you need language IDs for filtering tours by guide language. Returns a list of all supported languages with their IDs, codes, and names for use in tour search filters.
無需輸入參數。
[tourradar] Use this when you need tour type IDs for filtering tours by category like adventure, cultural, or wildlife. Returns a hierarchical list of tour type groups and their individual types with IDs and names.
無需輸入參數。
[tourradar] Use this when the user asks about available departure dates, pricing for specific dates, or needs to validate if a departure date is available. Returns a list of departures for a specific tour within a date range, including availability status, pricing, and booking information.
pagetourId必填currencydateRange必填[tourradar] Use this when the user wants to see detailed information about a specific tour. Fetches comprehensive tour details including itinerary, pricing, operator info, images, and booking links based on tour ID.
tourId必填currency[tourradar] Use this when the user has questions about a tour that might be answered in the FAQ section. Returns a paginated list of frequently asked questions and answers about a specific tour, covering topics like inclusions, requirements, and policies.
pagetourId必填[tourradar] Use this when the user wants to see tour routes on a map or compare itineraries visually. Fetches tour details for one or more tours and prepares map data with all itinerary locations, coordinates, and day-by-day information for visual display.
tourIds必填currency[tourradar] Use this when you need to know the current date, especially before setting departure date filters. Returns the current date and time in ISO format. Essential for calculating valid date ranges for tour searches.
無需輸入參數。
[tourradar] Use this when the user describes what they want in natural language and you need AI-powered semantic search to understand their intent. Before use this tool, please READ all possible filters. PLESE USE FILTERS, when can be used, to make search faster and much more precise. Please use start_city, end_city, cities, countries, start_country, end_country filters if possible. You can use multiple of them. AI-powered semantic search for tours using natural language queries combined with optional filters. Uses Google Vertex AI to understand intent and find relevant tours based on descriptions, themes, or specific requests. Use `vertex-tour-search` when: - The user describes what they want in natural language - You need semantic/AI-powered search to understand intent - Combining natural language with filters for refined results Examples: - "Family-friendly safari with kids under 12" - "Romantic honeymoon trip with beach and mountains" - "Adventure tour with hiking and camping for beginners" - "Cultural immersion experience with local homestays" - "Wine tasting tour through European countryside" ## Input ### Required - `textSearch`: Natural language description of what the user is looking for - `display_mode`: How to display results — `"listing"` (default, carousel of tour cards) or `"map"` (interactive map view) ### Optional Filters #### Location Filters | Filter | Type | Description | | --------------- | -------- | -------------------------------------------------------------------------- | | `start_country` | string[] | Country where tour BEGINS (ISO 3166-1 alpha-2 codes). OR logic. | | `end_country` | string[] | Country where tour ENDS (ISO 3166-1 alpha-2 codes). OR logic. | | `start_city` | number[] | City IDs where tour starts. Use `b2b-cities-search` to find IDs. OR logic. | | `end_city` | number[] | City IDs where tour ends. Use `b2b-
pricecitiesmax_agemin_agetourIdscurrencydiscountdurationend_citycountriesdeparturesstart_city另有 7 個[tourradar] Search for tours by title using AI-powered semantic search. Returns a list of matching tour IDs and titles. Use this when you need to look up a tour by name. When you know tour id, use b2b-tour-details tool to display details about specific tour
query必填[tourradar] Search tour reviews using AI-powered semantic search. Requires tourIds to scope results to specific tours. Use this when the user asks about reviews, feedback, or experiences for specific tours. Combine with an optional text query to find reviews mentioning specific topics (e.g., 'food', 'guide', 'accommodation'). When you don't have tour IDs, use vertex-tour-search or vertex-tour-title-search first to find them.
querytourIdskeywordspageSizeminRatingpageTokencreatedAftertravelledAfter[tourradar] Use this when the user wants to ASK A QUESTION about a tour or operator WITHOUT committing to a booking. Two modes: - mode "tour": a question about a specific tour. Requires `tourId`. The `departureDate` is OPTIONAL here — if the customer has not picked a date, omit it and the backend will pick the nearest real departure. Do NOT fabricate a date. - mode "operator": a general/operator-level question. Requires `operatorId` and no tour. Always provide the customer's real contact details (email, first/last name; phone optional) and their actual question text. Never fabricate or assume user data — ask for missing information.
email必填entity必填lastName必填question必填firstName必填phoneNumberagentInformation[tourradar] Use this when the user explicitly wants to book a tour and has provided their contact details. Creates a booking request for a specific tour. Requires real contact details (email, names; phone optional). Always confirm the departure date by checking departures first. Never fabricate or assume user data - always ask for missing information.
email必填tourId必填lastName必填firstName必填paxAdults必填paxChildren必填phoneNumberdepartureDate必填agentInformation必填extraInformation必填[tourradar] Use this when the user requests a tour brochure or PDF to be sent to their email. Sends a tour brochure (PDF file) to the specified email address. Before using this, ensure the user has provided their email address. If not provided, ask the user for it. Never generate or assume email addresses.
email必填tourId必填[tourradar] Use this when you need to find a tour operator's ID by their name for filtering tours. Searches tour operators by name and returns matching operators with their IDs. Use the returned operator ID with tour search filters.
textSearch必填[trivago] Search live hotel and accommodation listings near specific coordinates — a landmark, address, venue, or neighborhood — aggregated via trivago's metasearch of major booking sites. Returns the same, filterable results as trivago-accommodation-search. Use when the user anchors their search to a place rather than a named destination (e.g. "near the stadium," "within walking distance of X"). Additional Information: {"knownInformation":{"currentYear":"2026","today":"2026-10-11"}}
roomsadultsarrival必填countryfilterschildrencurrencylanguagelatitude必填departure必填longitude必填hotel_rating另有 2 個[trivago] Search live hotel and accommodation listings by destination or point of interest, aggregated via trivago's metasearch of major booking sites. Returns results with price, rating, amenities, and a link per property. Supports date range, guest/room configuration, and filters for star rating, guest rating, and amenities. Use for destination- or place-name-based lodging search. Additional Information: {"knownInformation":{"currentYear":"2026","today":"2026-10-11"}}
query必填roomsadultsarrival必填countryfilterschildrencurrencylanguagedeparture必填hotel_ratingchildren_ages另有 1 個[trivago] Forecast monthly hotel price trends for a destination — average, minimum, and maximum nightly rate by star rating, across a date window. Use for planning questions like "when is the cheapest month to visit X" or "how do prices change through the year" — this is a forecasting tool, not a live-availability search. Additional Information: {"knownInformation":{"currentYear":"2026","today":"2026-10-11"}}
query必填countrycurrencylanguageend_monthstart_monthhotel_rating[skiplagged] Search Skiplagged for flights between specific locations with filtering options for passengers, fare class, stops, airlines, and timing preferences
sortlimitadultsoffsetorigin必填childrenmaxStopsfareClassinfantsLapreturnDatedestination必填infantsSeat另有 14 個[skiplagged] Find lower-priced destinations from a departure city when the user is flexible about where to go.
from必填adultsdepart必填returnchildrenfare_classinfantsLapinfantsSeat[skiplagged] Generate a flexible calendar of the lowest one-way fares around a chosen departure, returning date → cheapest-price entries to help pick the best day to fly. Intended for flexible-date price discovery, not exact itinerary selection.
sortadultsorigin必填childreninfantsLapreturnDatedestination必填infantsSeatdepartureDate必填[skiplagged] Generate a flexible round-trip price calendar for a fixed-length stay around a chosen travel window. Returns (depart date, return date, lowest total price) entries for nearby date pairs that preserve the original trip length; intended for price discovery, not exact itinerary selection.
sortadultsorigin必填childreninfantsLapreturnDate必填destination必填infantsSeatdepartureDate必填[skiplagged] Search Skiplagged for hotels in a city with specific check-in and check-out dates, including ratings and pricing.
city必填sortlimitoffsetcheckin必填checkout必填numRoomsnumAdultsnumChildren[skiplagged] Search Skiplagged for rental cars between pickup and dropoff locations/dates, returning prices, companies, and car details.
limitoffsetpickupDate必填pickupTimedropoffDate必填dropoffTimepickupLocation必填dropoffLocation[skiplagged] Fetch room-level availability, pricing, and amenities for a specific hotel and stay dates.
livecheckin必填hotelId必填checkout必填numRoomsnumAdultsnumChildren[skiplagged] Search Skiplagged support articles for answers about its services, products, and policies.
query必填top_k[skiplagged] Resolve coarse location metadata supplied by the client to the nearest airport. Takes no user-provided arguments.
無需輸入參數。
[skiplagged] Resolve a city name to a valid IATA code
input必填[ferryhopper] Find ferry ports, harbors, maritime terminals, port IDs, codes, and geographic locations.
無需輸入參數。
[ferryhopper] Find all ferry travel disruptions, including delays, weather alerts, and strikes for a given date and country.
country必填tripDate必填[ferryhopper] Find all direct ferry routes and reachable destination ports from a given origin port without layovers or transfers.
portLocation必填[ferryhopper] Deprecated: prefer search_ferry_trips, which covers this tool plus round-trip and multi-leg search and per-segment availability flags. Get a list of available one-way ferry trips between two ports on a specific date.
date必填arrivalLocation必填departureLocation必填[ferryhopper] Search ferry trips as an ordered chain of 1 to 5 legs. Takes human-readable location names (e.g. city or port name) for each leg, not port codes — no need to call get_ports first. Availability flags (cabin, vehicles, pets, e-ticket) are reported per segment. - One leg: a plain one-way search. - Two legs where leg 2 reverses leg 1 (e.g. leg 1 Piraeus→Mykonos, leg 2 Mykonos→Piraeus): a round trip. - Up to 5 legs otherwise (e.g. A to B, then B to C, then C to D): an island-hopping chain. Legs after the first must depart from the location the previous leg arrived at, and must be in chronological order (a later leg may share the same date as an earlier one, but may not precede it). The response returns each leg's available options independently (legs[].options) — options are never filtered against another leg's options. Consecutive legs must leave enough time between one leg's arrival and the next leg's departure to be a valid connection; this is not pre-filtered server-side or reflected in this output, so do not assume every combination of options across legs is a valid connection — the widget the user interacts with enforces this.
legs必填[ferryhopper] Get full details for a single sailing leg, looked up by the id of one of the options returned by search_ferry_trips (legs[].options[].id). Returns the trip's departure/arrival time, ports, and operating company, plus the vessel's technical specs, onboard amenities, and photos. Use this to answer questions about a vessel such as: does it have wifi / a restaurant / a snack bar / an open deck / a lift or elevator / wheelchair or disabled access / a designated smoking area? Is it pet-friendly, or does it allow pets on board? Does it have cabins, or a garage / vehicle deck for cars and motorbikes? How many passengers or vehicles does it carry (capacity)? How long is the vessel (length in meters)? What is its IMO number or MMSI (maritime identification numbers used for registry/tracking lookups)? Is this vessel accessible, family-friendly, or suitable for passengers who need mobility assistance? What does the vessel look like (photos)? If no detailed specs exist for the vessel in the source system, vessel.hasDetails is returned as false and every spec/amenity field is null — this means the data is unavailable, not that the vessel lacks that amenity. Also returns the trip's bookable accommodation tiers (seat/cabin classes) with their price and a photo of that accommodation, when available. Throws if the tripId is malformed or the trip is no longer bookable (e.g. it has already departed, was cancelled, or sold out) — re-run search_ferry_trips to get a fresh tripId in that case.
tripId必填Ask a travel question in natural language. Routes to the right tools automatically and returns a combined answer. Example: 'Cheapest flights from Zurich to Rome next week, and do I need a visa?'
query必填已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在儲存庫或註冊中心條目中宣告授權條款。
Kiwi.com Navifare Peek.com LastMinute (flights) (prices) (experiences) (flights) \ | | / \ | | / +--------+-----------+--------+ | | | MoltTravel MCP Server | | | | Airports Airlines Visas | | Countries FCDO Gemini AI | | | +-------------|---------------+ | MCP over HTTP | Any MCP Client (Claude, Cursor, your app)git clone https://github.com/navifare/moltravel-mcp.gitcd moltravel-mcppython -m venv venv && source venv/bin/activatepip install -r requirements.txtpython molttravel_server.py{ "mcpServers": { "molttravel": { "url": "http://localhost:8000/mcp" } }}{ "mcpServers": { "molttravel": { "url": "http://localhost:8000/mcp" } }}from mcp import ClientSessionfrom mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client("http://localhost:8000/mcp") as (r, w, _): async with ClientSession(r, w) as session: await session.initialize() tools = await session.list_tools() result = await session.call_tool("airports_lookup", {"code": "ZRH"})kiwi → kiwi_search-flight, kiwi_feedback-to-devsnavifare → navifare_flight_pricecheck, navifare_format_flight_pricecheck_requestpeek → peek_search_experiences, peek_experience_details, ...lastminute → (discovered at runtime)# Client sees the real schemaparameters = input_schema # original from upstream
# Server doesn't re-validate types — just passes throughfields[prop_name] = (Any, Field(default=None))FROM python:3.12-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .EXPOSE 8000CMD ["python", "molttravel_server.py"]docker build -t molttravel .docker run -p 8000:8000 molttravelmoltravel-mcp/├── molttravel_server.py # Server core — proxy logic, native tools, routing├── requirements.txt # mcp[cli], httpx├── test_search.py # Integration test client└── providers/ ├── __init__.py # MCP_PROVIDERS registry + exports ├── mcp_client.py # Generic HTTP client for upstream MCP servers ├── data_loader.py # CSV downloader + haversine distance ├── airports.py # 45K airports from OurAirports ├── airlines.py # 7K airlines from OpenFlights ├── visas.py # Visa requirements from Passport Index ├── restcountries.py # REST Countries API ├── fcdo.py # UK FCDO travel advisories └── gemini.py # Gemini Flash tool routerMCP_PROVIDERS = { "kiwi": McpClient("https://mcp.kiwi.com/mcp"), "navifare": McpClient("https://mcp.navifare.com/mcp"), "peek": McpClient("https://mcp.peek.com/mcp"), "your_provider": McpClient("https://mcp.example.com/mcp"), # new}@server.tool(name="my_tool")async def my_tool(query: str) -> str: """Description shown to MCP clients.""" return "result"