使用说明

项目简介

uber-eats-mcp-server 是一个概念验证 (POC) 项目,展示了如何构建一个基于 Model Context Protocol (MCP) 的服务器,用于集成 Uber Eats 服务。它允许大型语言模型 (LLM) 应用通过标准化的 MCP 协议,调用工具来搜索 Uber Eats 菜单并最终下单订餐。该服务器使用浏览器自动化技术与 Uber Eats 网站进行交互。

主要功能点

  • 菜单搜索工具 (find_menu_options): 允许LLM应用通过关键词在 Uber Eats 上搜索餐厅或菜品,并返回搜索结果(包括菜品名称、URL和价格)。搜索过程通过后台浏览器自动化完成,结果存储为资源,客户端可以稍后获取。
  • 订餐工具 (order_food): 允许LLM应用根据菜品URL和名称下单订餐。订餐过程同样通过后台浏览器自动化完成。
  • 搜索结果资源 (resource://search_results/{request_id}): 提供访问菜单搜索工具产生的搜索结果的接口。客户端可以通过请求特定的资源URI来获取之前搜索操作的结果。
  • 基于标准IO (stdio) 的MCP传输: 使用标准输入输出作为MCP服务器与客户端之间的通信通道。

安装步骤

  1. 安装Python 3.12 或更高版本。
  2. 创建并激活虚拟环境 (建议使用 uv):
    uv venv
    source .venv/bin/activate  # Unix/Mac
  3. 安装依赖包:
    uv pip install -r requirements.txt
    uv pip install playwright
    playwright install # 安装 Playwright 浏览器驱动
  4. 配置API Key:
    • 复制 '.env' 文件模板并重命名为 '.env'。
    • 在 '.env' 文件中填入 Anthropic API Key ('ANTHROPIC_API_KEY=your_anthropic_api_key_here')。虽然代码中使用了 'ChatAnthropic',但注释中提到了 'openai_api_key_here',请根据实际情况配置。

服务器配置

MCP客户端需要配置以下JSON格式信息以连接到 uber-eats-mcp-server:

{
  "serverName": "uber_eats",  // MCP服务器名称,与server.py中 FastMCP 初始化时的名称一致
  "command": "uv",         // 启动命令,这里使用 uv 运行器
  "args": ["run", "server.py"], // 启动参数,指定运行 server.py 文件
  "transport": "stdio"      // 使用标准IO传输协议
}

配置信息参数注释:

  • 'serverName': 服务器名称,必须与 'server.py' 文件中 'FastMCP("服务器名称")' 初始化的名称完全一致。
  • 'command': 运行服务器的命令。通常是 Python 解释器路径 ('python3') 或者使用虚拟环境运行器 ('uv run', 'poetry run' 等)。这里使用 'uv run',假设用户已安装 uv 并使用 uv 虚拟环境。
  • 'args': 传递给 'command' 的参数列表。对于本仓库,需要指定运行 'server.py' 文件。
  • 'transport': MCP客户端与服务器通信的传输协议。本仓库使用标准IO,因此设置为 'stdio'。

基本使用方法

  1. 启动 MCP 服务器: 在项目根目录下,激活虚拟环境后,运行以下命令启动服务器:

    uv run server.py

    服务器将通过标准IO等待接收来自 MCP 客户端的请求。

  2. 使用 MCP 客户端: 配置 MCP 客户端连接到该服务器,并可以使用以下工具和资源:

    • 调用工具 'find_menu_options': 客户端可以调用 'find_menu_options' 工具,并提供 'search_term' 参数 (例如: "pizza", "sushi") 来搜索 Uber Eats 菜单。工具调用后会返回一个提示信息,告知搜索已开始,并提供资源 URI ('resource://search_results/{request_id}') 用于后续获取结果。
    • 调用工具 'order_food': 客户端可以调用 'order_food' 工具,并提供 'item_url' (菜品URL) 和 'item_name' (菜品名称) 参数来下单订餐。工具调用后会返回一个提示信息,告知订餐已开始。
    • 获取资源 'resource://search_results/{request_id}': 客户端可以使用资源 URI (需要替换 '{request_id}' 为实际的请求ID) 来获取 'find_menu_options' 工具的搜索结果。通常在调用 'find_menu_options' 工具一段时间后(例如,等待2分钟),再请求该资源以获取结果。

注意:

  • 本项目是一个 POC 示例,可能不包含完善的错误处理和安全机制。
  • 由于使用了浏览器自动化,执行速度可能较慢,且依赖于网络环境和 Uber Eats 网站的稳定性。
  • '.env' 文件中的 'ANTHROPIC_API_KEY' 可能是为 'browser.py' 中的 'ChatAnthropic' 或潜在的 'ChatOpenAI' LLM 配置的,但代码中 'browser.py' 的 'run_browser_agent' 函数目前看起来并没有直接使用 LLM 生成浏览器操作步骤,而是执行预定义的任务步骤。

信息

分类

网页与API