机票
STDIO航空机票查询与跟踪MCP服务器
航空机票查询与跟踪MCP服务器
一个基于模型上下文协议(MCP)的航空机票查询服务器。该服务器为AI助手提供标准化的航班实时动态查询功能接口。
Flight Ticket MCP Server 实现了供航空机票相关查询操作的工具和资源。它作为AI助手与航空服务系统之间的桥梁,专注于航班实时动态查询功能。
该服务器采用模块化架构,将核心功能、工具和实用程序分离,使其具有高度的可维护性和可扩展性。
flight_search_tools.py) - 航班路线查询功能flight_transfer_tools.py) - 多段航程和中转查询flight_info_tools.py) - 根据航班号查询详细信息simple_opensky_tools.py) - 基于OpenSky Network的实时航班跟踪weather_tools.py) - 基于经纬度和城市的天气查询date_tools.py) - 日期时间获取和处理cities_dict.py) - 282个城市和机场代码映射validators.py) - 输入参数验证和格式检查date_utils.py) - 日期格式化和时区处理api_client.py) - HTTP请求封装和错误处理本服务器支持三种传输协议:
# 使用pip安装 pip install flight-ticket-mcp-server # 或使用uvx直接运行(无需安装) uvx flight-ticket-mcp-server # 或使用uvx安装后运行 uvx --install flight-ticket-mcp-server
# 克隆或下载项目 cd FlightTicketMCP # 安装依赖 pip install -r requirements.txt # 或从本地源码安装 pip install -e .
uvx 是一个现代的Python包运行工具,可以直接运行PyPI包而无需先安装到系统环境:
# 安装uv(包含uvx工具) pip install uv # 直接运行MCP服务器(无需安装) uvx flight-ticket-mcp-server # 使用最新版本(推荐) uvx flight-ticket-mcp-server@latest # 带参数运行 uvx flight-ticket-mcp-server --help # 指定版本运行 uvx flight-ticket-mcp-server==1.0.1 # 强制重新安装最新版本 uvx flight-ticket-mcp-server@latest --help
uvx 的优势:
# 使用主启动文件(默认启动SSE模式,监听127.0.0.1:8000) python flight_ticket_server.py # 或者直接运行main.py python main.py
# 启用调试模式,会输出详细日志 set MCP_DEBUG=true python flight_ticket_server.py # Linux/macOS export MCP_DEBUG=true python flight_ticket_server.py
# 直接启动,使用默认SSE配置(127.0.0.1:8000) python flight_ticket_server.py
# Windows set MCP_TRANSPORT=stdio python flight_ticket_server.py # Linux/macOS export MCP_TRANSPORT=stdio python flight_ticket_server.py
# Windows set MCP_TRANSPORT=streamable-http set MCP_HOST=127.0.0.1 set MCP_PORT=8000 python flight_ticket_server.py # Linux/macOS export MCP_TRANSPORT=streamable-http export MCP_HOST=127.0.0.1 export MCP_PORT=8000 python flight_ticket_server.py
项目提供了 .env.example 文件作为配置模板:
复制配置模板:
# 复制配置模板 cp .env.example .env
编辑配置文件:
打开 .env 文件,根据需要修改配置值:
# MCP服务器配置 MCP_TRANSPORT=sse MCP_HOST=127.0.0.1 MCP_PORT=8000 MCP_SSE_PATH=/sse # 日志配置 LOG_LEVEL=INFO LOG_FILE_PATH=logs/flight_server.log LOG_MAX_SIZE=10 LOG_BACKUP_COUNT=5 # 开发配置 MCP_DEBUG=false
配置说明:
.env 文件包含敏感配置,不会被提交到版本控制.env.example 是安全的模板文件,可以提交到Git如果不使用 .env 文件,也可以直接设置环境变量:
支持的环境变量:
| 变量名 | 描述 | 默认值 | 可选值 | 
|---|---|---|---|
MCP_TRANSPORT | 传输协议类型 | sse | stdio, sse, streamable-http | 
MCP_HOST | 服务器主机地址 | 127.0.0.1 | 任何有效IP地址 | 
MCP_PORT | 服务器端口 | 8000 | 1-65535 | 
MCP_PATH | HTTP路径 | /mcp | 任何有效路径 | 
MCP_SSE_PATH | SSE路径 | /sse | 任何有效路径 | 
MCP_DEBUG | 调试模式 | false | true, false, 1, 0 | 
LOG_LEVEL | 日志级别 | INFO | DEBUG, INFO, WARNING, ERROR, CRITICAL | 
LOG_FILE_PATH | 日志文件路径 | logs/flight_server.log | 任何有效路径 | 
LOG_MAX_SIZE | 日志文件最大大小(MB) | 10 | 正整数 | 
LOG_BACKUP_COUNT | 日志备份数量 | 5 | 正整数 | 
FASTMCP_LOG_LEVEL | FastMCP日志级别 | INFO | DEBUG, INFO, WARNING, ERROR | 
启动成功后,您会看到类似输出:
Transport: sse
Logging enabled - logs will be saved to logs/ directory
Flight Ticket MCP Server starting...
Transport: sse
All tools registered successfully
Starting SSE transport on 127.0.0.1:8000/sse
服务器启动后会在 logs/ 目录下生成以下日志文件:
flight_server.log - 一般日志(INFO级别及以上)flight_server_error.log - 错误日志(ERROR级别)flight_server_debug.log - 调试日志(仅在调试模式下生成)Ctrl+C 停止Ctrl+C 或发送SIGTERM信号使用uvx运行MCP服务器,无需预先安装,简洁优雅:
{ "mcpServers": { "flight-ticket-server": { "command": "uvx", "args": ["flight-ticket-mcp-server@latest"] } } }
uvx配置的优势:
如果已通过pip安装,可以直接使用命令行工具:
{ "mcpServers": { "flight-ticket-server": { "command": "flight-ticket-mcp-server" } } }
对于本地开发或自定义版本:
{ "mcpServers": { "flight-ticket-server": { "command": "python", "args": ["D:\\FlightTicketMCP\\flight_ticket_server.py"], "env": { "MCP_TRANSPORT": "stdio" } } } }
将上述配置添加到Claude Desktop配置文件中:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/claude/claude_desktop_config.json{ "mcpServers": { "flight-ticket-server": { "command": "python", "args": ["D:\\FlightTicketMCPServer\\flight_ticket_server.py"], "env": { "MCP_TRANSPORT": "sse", "MCP_HOST": "127.0.0.1", "MCP_PORT": "8000", "MCP_SSE_PATH": "/sse" } } } }
{ "mcpServers": { "flight-ticket-server": { "command": "python", "args": ["D:\\FlightTicketMCPServer\\flight_ticket_server.py"], "env": { "MCP_TRANSPORT": "stdio" } } } }
{ "mcpServers": { "flight-ticket-server": { "command": "python", "args": ["D:\\FlightTicketMCPServer\\flight_ticket_server.py"], "env": { "MCP_TRANSPORT": "streamable-http", "MCP_HOST": "127.0.0.1", "MCP_PORT": "8000", "MCP_PATH": "/mcp" } } } }
配置完成后,可以通过以下方式测试MCP服务器连接:
Claude Desktop测试:
命令行测试:
# 使用uvx直接测试 uvx flight-ticket-mcp-server --help # 或使用已安装的包测试 flight-ticket-mcp-server --help # 测试模块化运行 python -m flight_ticket_mcp_server --help
MCP协议测试:
# 使用MCP inspector工具测试(如果安装了) npx @modelcontextprotocol/inspector uvx flight-ticket-mcp-server
成功连接后,您的Claude应该能够访问以下工具:
如果连接失败,请检查:
uvx配置:
# 检查uv/uvx是否安装 uvx --version # 手动测试包运行 uvx flight-ticket-mcp-server@latest
包版本:
# 强制使用最新版本 uvx flight-ticket-mcp-server@latest # 清除uvx缓存后重试 uv cache clean uvx flight-ticket-mcp-server@latest
配置文件语法:
日志检查:
配置完成后,您可以要求Claude执行以下操作:
searchFlightRoutes(departure_city, destination_city, departure_date) # 根据出发地、目的地和日期查询可用航班
输入参数:
departure_city: 出发城市名称或机场代码 (如: "重庆", "CKG", "重庆(CKG)")destination_city: 目的地城市名称或机场代码 (如: "广州", "CAN", "广州(CAN)")departure_date: 出发日期 (YYYY-MM-DD格式)输出信息:
支持的城市格式:
getTransferFlightsByThreePlace(from_place, transfer_place, to_place, min_transfer_time, max_transfer_time)
输入参数:
from_place: 出发地城市名称或机场代码 (如: "北京", "BJS")transfer_place: 中转地城市名称或机场代码 (如: "香港", "HKG")to_place: 目的地城市名称或机场代码 (如: "纽约", "NYC")min_transfer_time: 最小中转时间(小时),默认2.0小时max_transfer_time: 最大中转时间(小时),默认5.0小时输出信息:
getWeatherByLocation(latitude, longitude, start_date, end_date)
输入参数:
latitude: 纬度 (如: 39.9042)longitude: 经度 (如: 116.4074)start_date: 开始日期 (YYYY-MM-DD格式),可选end_date: 结束日期 (YYYY-MM-DD格式),可选getWeatherByCity(city_name, start_date, end_date)
输入参数:
city_name: 城市名称 (如: "北京", "上海", "武汉")start_date: 开始日期 (YYYY-MM-DD格式),可选end_date: 结束日期 (YYYY-MM-DD格式),可选输出信息:
getFlightInfo(flight_number) # 根据航班号查询详细航班信息
输入参数:
flight_number: 航班号 (如: "CA1234", "MU5678", "CZ3691")输出信息:
支持的航班号格式:
getFlightStatus(flight_number, date=None) # 查询航班实时状态
输入参数:
flight_number: 航班呼号 (如: "CCA1234", "CSN5678", "MU9876")date: 日期参数(OpenSky仅支持实时数据,此参数被忽略)输出信息:
getAirportFlights(airport_code, flight_type="departure") # 查询机场周边航班
输入参数:
airport_code: 机场代码 (如: "PEK", "PVG", "CAN", "CTU", "XIY")flight_type: 航班类型(此参数仅为兼容性,OpenSky返回所有航班)输出信息:
支持的机场代码(70+个):
getFlightsInArea(min_lat, max_lat, min_lon, max_lon) # 查询指定区域内航班
输入参数:
min_lat: 最小纬度 (如: 39.0)max_lat: 最大纬度 (如: 41.0)min_lon: 最小经度 (如: 115.0)max_lon: 最大经度 (如: 118.0)输出信息:
trackMultipleFlights(flight_numbers, date=None) # 批量跟踪多个航班
输入参数:
flight_numbers: 航班呼号列表 (如: ["CCA1234", "CSN5678", "MU9876"])date: 日期参数(OpenSky仅支持实时数据)输出信息:
注意事项:
getCurrentDate() # 获取当前日期(YYYY-MM-DD格式)
输出信息:
FlightTicketMCPServer/
├── flight_ticket_server/
│   ├── core/              # 核心业务逻辑
│   ├── tools/             # MCP工具实现
│   ├── utils/             # 实用工具函数
│   └── main.py            # 服务器入口点
├── office_flight_ticket_server/  # 额外模块
├── tests/                 # 测试文件
├── logs/                  # 日志文件目录
├── pyproject.toml         # 项目配置
├── requirements.txt       # 项目依赖
├── flight_ticket_server.py # 主启动文件
├── mcp-config.json        # MCP配置示例
└── README.md              # 项目文档
# 运行所有测试 python -m pytest tests/ -v # 运行基本功能测试 python -m pytest tests/test_basic.py -v # 运行特定测试 python -m pytest tests/test_basic.py::TestFlightSearch::test_searchFlightsByNumber -v
logs/ 目录MCP_DEBUG=truetail -f logs/flight_server.log端口被占用
# 更改端口 set MCP_PORT=8001 python flight_ticket_server.py
导入错误
# 确保在正确的目录 cd FlightTicketMCPServer/flight_ticket_server python flight_ticket_server.py
权限问题
# 检查文件权限 ls -la flight_ticket_server.py chmod +x flight_ticket_server.py
查看日志文件了解详细错误信息:
# 查看一般日志 cat logs/flight_server.log # 查看错误日志 cat logs/flight_server_error.log # 实时监控日志 tail -f logs/flight_server.log
MIT License - 查看 LICENSE 文件获取详细信息。
欢迎提交Issue和Pull Request来改进这个项目。
如果您遇到问题或有功能建议,请在GitHub上创建Issue。