mcpField
M
Multi Context Protocol (MCP) Server

Multi Context Protocol (MCP) Server

本地服务
github.com/prakashsanker地图与出行984 周前更新

关于 Multi Context Protocol (MCP) Server

这是一款用于处理航班、酒店和时间相关问题的旅行规划 MCP 服务。它通过 Booking.com API 搜索航班,并提供酒店搜索和当前日期信息。

主要功能

  1. 01搜索可用航班
  2. 02搜索酒店和住宿
  3. 03提供当前日期

适用场景

  1. 01查找能在指定时间前抵达的航班
  2. 02查找地标步行距离内的酒店

MCP 相关

向 MCP 客户端提供航班搜索、酒店搜索和当前日期功能。README 提及可与 Claude Desktop 或自定义客户端配合使用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"flights-mcp-server-prakashsanker": {
"command": "npx",
"args": [
"-y",
"travel-mcp-server"
],
"env": {
"BOOKING_COM_API_KEY": "<BOOKING_COM_API_KEY>",
"GOOGLE_MAPS_API_KEY": "<GOOGLE_MAPS_API_KEY>"
}
}
}
}
启动命令npx -y travel-mcp-server
需要配置的环境变量
BOOKING_COM_API_KEY密钥
GOOGLE_MAPS_API_KEY密钥

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmtravel-mcp-server
ocimcp/google-maps

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

✈️ 多上下文协议(MCP)服务

🌟 概述

这是一个通用的旅行 MCP 服务,可让你提出复杂的旅行规划问题。试试以下问题:

  • 我明天下午 4 点要到 Google 办公室。我需要搭乘最晚的哪班航班?
  • 我想住在价格合理、距离埃菲尔铁塔步行 15 分钟的酒店,请推荐一些选择。

🔧 支持的功能

🛫 search-flights

通过 Booking.com 的 API 搜索两个机场之间可搭乘的航班。

📅 today

向 LLM 提供当前日期,确保其掌握最新的时间背景。

🏨 search-hotels

搜索可预订的酒店和住宿。

🔮 即将推出的功能

🚗 search-car-rentals

查找目的地的租车选项。

⭐ hotel-reviews

查看酒店和住宿的评价。

🚕 search-taxis

查找目的地的出租车和接送服务。

📦 安装

此 MCP 服务可与 Claude Desktop 或你自己的客户端搭配使用。

前置条件
  1. 前往 RapidAPI,搜索 Booking.com API,并申请一个密钥。
  2. 前往 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

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。