关于 Multi Context Protocol (MCP) Server
这是一款用于处理航班、酒店和时间相关问题的旅行规划 MCP 服务。它通过 Booking.com API 搜索航班,并提供酒店搜索和当前日期信息。
主要功能
- 01搜索可用航班
- 02搜索酒店和住宿
- 03提供当前日期
适用场景
- 01查找能在指定时间前抵达的航班
- 02查找地标步行距离内的酒店
MCP 相关
向 MCP 客户端提供航班搜索、酒店搜索和当前日期功能。README 提及可与 Claude Desktop 或自定义客户端配合使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
✈️ 多上下文协议(MCP)服务
🌟 概述
这是一个通用的旅行 MCP 服务,可让你提出复杂的旅行规划问题。试试以下问题:
- 我明天下午 4 点要到 Google 办公室。我需要搭乘最晚的哪班航班?
- 我想住在价格合理、距离埃菲尔铁塔步行 15 分钟的酒店,请推荐一些选择。
🔧 支持的功能
🛫 search-flights
通过 Booking.com 的 API 搜索两个机场之间可搭乘的航班。
📅 today
向 LLM 提供当前日期,确保其掌握最新的时间背景。
🏨 search-hotels
搜索可预订的酒店和住宿。
🔮 即将推出的功能
🚗 search-car-rentals
查找目的地的租车选项。
⭐ hotel-reviews
查看酒店和住宿的评价。
🚕 search-taxis
查找目的地的出租车和接送服务。
📦 安装
此 MCP 服务可与 Claude Desktop 或你自己的客户端搭配使用。
前置条件
- 前往 RapidAPI,搜索 Booking.com API,并申请一个密钥。
- 前往 Google Cloud,申请一个 Google Maps API 密钥。
与 Claude Desktop 搭配使用
要与 Claude Desktop 搭配使用,请使用以下 claude_desktop_config.json。
{
"mcpServers": {
"travel": {
"command": "npx",
"args": ["travel-mcp-server"],
"env": {
"BOOKING_COM_API_KEY": "<YOUR_BOOKING_DOT_COM_API_KEY>"
}
},
"google-maps": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GOOGLE_MAPS_API_KEY",
"mcp/google-maps"
],
"env": {
"GOOGLE_MAPS_API_KEY": "<YOUR_GOOGLE_MAPS_API_KEY>"
}
}
}
}
你需要先获取 Google Maps API 密钥才能使用此服务。
编程方式使用
如果你想以编程方式使用,以下是一个代码片段。
class TravelClient {
private flightsClient: Client;
private mapsClient: Client;
private toolDefinitions: any[] = [];
constructor() {
this.flightsClient = new Client(
{ name: "FlightsApp", version: "1.0.0" },
{ capabilities: { tools: {}, resources: {}, prompts: {} } }
);
this.mapsClient = new Client(
{ name: "MapsApp", version: "1.0.0" },
{ capabilities: { tools: {}, resources: {}, prompts: {} } }
);
}
async initialize() {
console.log("Initializing MCP clients...");
try {
const flightsTransport = new StdioClientTransport({
command: "node",
args: ["../../node_modules/travel-mcp-server/build/index.js"],
});
console.log("GOOGLE MAPS API KEY", process.env.GOOGLE_MAPS_API_KEY);
const mapsTransport = new StdioClientTransport({
command: process.execPath,
args: [
"../../node_modules/@modelcontextprotocol/server-google-maps/dist/index.js",
],
env: {
GOOGLE_MAPS_API_KEY: process.env.GOOGLE_MAPS_API_KEY || "",
},
});
await Promise.all([
this.flightsClient.connect(flightsTransport),
this.mapsClient.connect(mapsTransport),
]);
// Discover tools from both servers
console.log("Discovering tools...");
const [flightsTools, mapsTools] = await Promise.all([
this.flightsClient.listTools(),
this.mapsClient.listTools(),
]);
// Combine tools from both servers
this.toolDefinitions = [
...flightsTools.tools.map((tool) => ({
name: tool.name,
description: tool.description || `Tool: ${tool.name}`,
input_schema: tool.inputSchema,
})),
...mapsTools.tools.map((tool) => ({
name: tool.name,
description: tool.description || `Tool: ${tool.name}`,
input_schema: tool.inputSchema,
})),
];
console.log(`Discovered ${this.toolDefinitions.length} tools`);
return this;
} catch (error) {
console.error("Error initializing MCP clients:", error);
throw error;
}
}
async callTool(toolName: string, parameters: any) {
const tool = this.toolDefinitions.find((t) => t.name === toolName);
if (!tool) {
throw new Error(`Tool ${toolName} not found`);
}
// Determine which client to use based on the tool name
const client = toolName.includes("maps")
? this.mapsClient
: this.flightsClient;
const toolRequest = {
name: toolName,
arguments: parameters,
};
const result = await client.callTool(toolRequest);
return result;
}
async getToolDefinitions() {
return this.toolDefinitions;
}
}
export default TravelClient;
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。