MolTravel

行业场景

by navifare

聚合型旅行 MCP,提供航班、跟团游、活动、价格查询、签证及更多出行服务信息。

什么是 MolTravel

聚合型旅行 MCP,提供航班、跟团游、活动、价格查询、签证及更多出行服务信息。

README

<div align="center">

MoltTravel

One MCP server. Every travel tool.

Search flights, compare prices, check visas, look up airports,<br> get travel advisories — through a single endpoint.

MCP Protocol Python 3.12+ License: MIT

<br>
code
  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)
</div> <br>

Why?

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:

  • 21+ tools from 4 upstream MCP providers + 6 built-in datasets
  • Zero config for static data — airports, airlines, and visas load lazily with no API keys
  • Schema-transparent proxy — clients see the real upstream JSON Schema; upstream servers validate their own args
  • One line to connect from Claude Desktop, Claude Code, Cursor, or any MCP client
<br>

Quick Start

bash
git clone https://github.com/navifare/moltravel-mcp.git
cd moltravel-mcp
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python molttravel_server.py

Server starts at http://localhost:8000/mcp. That's it.

<br>

Connect Your Client

<details> <summary><strong>Claude Desktop</strong></summary>

Add to claude_desktop_config.json:

json
{
  "mcpServers": {
    "molttravel": {
      "url": "http://localhost:8000/mcp"
    }
  }
}
</details> <details> <summary><strong>Claude Code</strong></summary>

Add to .claude/settings.json:

json
{
  "mcpServers": {
    "molttravel": {
      "url": "http://localhost:8000/mcp"
    }
  }
}
</details> <details> <summary><strong>Python (programmatic)</strong></summary>
python
from mcp import ClientSession
from 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"})
</details> <br>

Tools

Flights & Pricing

ToolProviderWhat it does
kiwi_search-flightKiwi.comSearch flights by route, date, passengers, cabin class
navifare_format_flight_pricecheck_requestNavifareParse flight details from natural language into structured data
navifare_flight_pricecheckNavifareCompare a flight's price across multiple booking sites

Experiences & Activities

ToolProviderWhat it does
peek_search_experiencesPeek.comSearch 300K+ verified activities worldwide
peek_experience_detailsPeek.comFull details, reviews, and photos for an experience
peek_experience_availabilityPeek.comCheck availability and pricing for specific dates
peek_search_regionsPeek.comFind region IDs by name
peek_list_tagsPeek.comBrowse activity categories and tags
peek_render_activity_tilesPeek.comRender embeddable activity widgets

Reference Data <sub>(built-in, no API keys needed)</sub>

ToolDatasetWhat it does
airports_lookupOurAirportsLook up by IATA or ICAO code
airports_searchOurAirportsSearch by name, filter by country or type
airports_nearOurAirportsFind airports within a radius of any coordinates
airlines_lookupOpenFlightsLook up by IATA or ICAO code
airlines_searchOpenFlightsSearch by name, filter by country or active status
visa_checkPassport IndexCheck visa requirement between two countries
visa_summaryPassport IndexFull visa-free/VOA/e-visa breakdown for a passport
restcountries_country_infoREST CountriesCapital, currencies, languages, timezones, population
fcdo_travel_adviceUK FCDOSafety advisories, entry requirements, health warnings
fcdo_list_countriesUK FCDOList all countries with travel advisories
data_statusCheck which datasets are loaded and record counts

Natural Language <sub>(optional)</sub>

ToolWhat it does
travel_agentAsk any travel question — Gemini routes to the right tools and returns a combined answer

Requires GEMINI_API_KEY. Example: "Cheapest flights from Zurich to Rome next week, and do I need a visa?"

<br>

How It Works

1. Tool Discovery

On startup, MoltTravel connects to each upstream MCP server, calls tools/list, and registers every discovered tool with a {provider}_{tool_name} prefix:

code
kiwi       → kiwi_search-flight, kiwi_feedback-to-devs
navifare   → navifare_flight_pricecheck, navifare_format_flight_pricecheck_request
peek       → peek_search_experiences, peek_experience_details, ...
lastminute → (discovered at runtime)

Native tools (airports, airlines, visas, countries, FCDO) are registered directly.

2. Schema-Transparent Proxy

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.

python
# Client sees the real schema
parameters = input_schema          # original from upstream

# Server doesn't re-validate types — just passes through
fields[prop_name] = (Any, Field(default=None))

3. Lazy Data Loading

Static datasets (airports, airlines, visas) download on first use behind async locks. No startup penalty, no wasted bandwidth if you only use flight tools.

<br>

Configuration

VariableDefaultDescription
PORT8000Server port
GEMINI_API_KEYEnables the travel_agent natural-language routing tool
<br>

Deployment

<details> <summary><strong>Docker</strong></summary>
dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "molttravel_server.py"]
bash
docker build -t molttravel .
docker run -p 8000:8000 molttravel
</details> <details> <summary><strong>Render / Railway / Fly.io</strong></summary>

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.

</details> <br>

Project Structure

code
moltravel-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 router
<br>

Extending

Add an MCP provider

Add one line to providers/__init__.py and restart:

python
MCP_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
}

Tools are discovered and registered automatically as your_provider_{tool_name}.

Add a native tool

python
@server.tool(name="my_tool")
async def my_tool(query: str) -> str:
    """Description shown to MCP clients."""
    return "result"
<br>

Data Sources & Licenses

DatasetSourceLicense
AirportsOurAirportsPublic Domain
AirlinesOpenFlightsODbL 1.0
Visa RequirementsPassport IndexMIT
Country InfoREST CountriesMPL 2.0
Travel AdvisoriesUK FCDOOGL v3.0
<br>

Contributing

  1. Fork the repo
  2. Create a branch (git checkout -b feature/my-feature)
  3. Make changes and test (python molttravel_server.py)
  4. Open a pull request
<br>

License

MIT

常见问题

MolTravel 是什么?

聚合型旅行 MCP,提供航班、跟团游、活动、价格查询、签证及更多出行服务信息。

相关 Skills

面试体系设计

by alirezarezvani

Universal
热门

按岗位、级别和团队设计面试流程,生成能力矩阵、题库与评分标准,分析面试官偏差并校准招聘门槛,适合搭建或优化企业招聘体系。

团队招人没章法时,用它快速搭建岗位化面试流程、题库与评分标准,还能兼顾校准面试偏差,招聘更稳更准。

行业场景
未扫描24.9k

相关 MCP Server

by boosted-chat

热门

Flight search & booking for AI agents. 400+ airlines, $20-50 cheaper than OTAs.

行业场景
1.6k

检索韩国市场公司的披露文件与财务报表,并获取股票概况等关键信息。

想研究韩股公司时,它能一站式拉取披露、财报和股票概况,省去跨站查资料的麻烦,对跨境投研尤其省时。

行业场景
174

Search company disclosures and financial statements from the Korean market. Retrieve stock profiles, market classifications, and historical trading data across major exchanges. Accelerate equity research with accurate, date-specific insights for Korean securities.

做韩国股研时,用它能一站查公司披露、财报和历史行情,按日期精确追溯关键信息,比手动翻交易所高效太多。

行业场景
174

评论