MCP服务器浏览器自动化

mcp-aoai-web-browsing

一个最小化的模型上下文协议🖥️服务器/客户端🧑‍💻,通过AzureOpenAI和Playwright实现🌐网页浏览器控制。

标签:

这是一个将 Model Context Protocol (MCP) 服务器与客户端实现相结合,并利用 Azure OpenAI 的应用示例。它是一个最小化的服务器/客户端应用,展示了如何整合 MCP 和 Azure OpenAI 服务。

核心组件与集成:

  1. MCP 服务器: 使用 FastMCP 构建。FastMCP 提供了一种快速、Pythonic 的方式来创建 MCP 服务器。
  2. 网页交互能力: 集成了微软开源的端到端测试框架 Playwright,用于测试现代 Web 应用。这使得 MCP 服务器能够执行网页导航等操作。
  3. 与 Azure OpenAI 的桥接: 该实现的关键在于将 MCP 服务器返回的关于工具(tools)的信息转换为 OpenAI 的函数调用格式
  4. 自定义 MCP-LLM Bridge: 转换 MCP 服务器响应到 OpenAI 函数调用格式的功能是基于 MCP-LLM Bridge 的定制实现。这个 bridge 专门用于连接 MCP 服务器和与 OpenAI 兼容的 LLM(大型语言模型)。
  5. 为了确保连接的稳定性,服务器对象被直接传递给了 bridge。

Model Context Protocol (MCP) 介绍:

MCP (Model Context Protocol) 是一个开放协议,旨在实现 AI 应用与本地或远程资源之间安全、受控的交互。它允许 AI 应用发现和调用外部资源提供的功能。

相关资源:

  • 官方仓库: MCP Python SDK, 创建 Python Server
  • MCP 服务器列表: MCP Servers, Awesome MCP Servers
  • 社区: MCP on Reddit
  • 相关项目:
    • FastMCP: 构建 MCP 服务器的快速、Pythonic 工具。
    • Chat MCP: 一个 MCP 客户端。
    • MCP-LLM Bridge: 实现 MCP 服务器与 OpenAI 兼容 LLMs 之间通信的桥接。
    • MCP Playwright: 基于 Playwright 的 MCP 服务器实现。
    • Microsoft Playwright for Python

配置说明:

  • 依赖管理: 在开发阶段(特别是 2024 年 12 月),推荐使用 uv 进行 Python 库依赖管理。其他依赖管理工具如 pip 和 poetry 在 MCP CLI 中的支持尚不完全。
  • Azure OpenAI 设置: 复制 .env.template 文件并重命名为 .env,然后填写以下 Azure OpenAI 的连接信息:
    • AZURE_OPEN_AI_ENDPOINT= (Azure OpenAI 服务的端点 URL)
    • AZURE_OPEN_AI_API_KEY= (Azure OpenAI 服务的 API 密钥)
    • AZURE_OPEN_AI_DEPLOYMENT_MODEL= (使用的 Azure OpenAI 模型部署名称)
    • AZURE_OPEN_AI_API_VERSION= (Azure OpenAI API 版本)

安装与执行:

  1. 安装 uv: 使用 pip 安装 uv:pip install uv
  2. 同步依赖: 使用 uv 同步项目依赖:uv sync
  3. 执行应用: 运行 chatgui.py 脚本:python chatgui.py
    • 运行后,示例客户端会启动一个浏览器窗口,并导航到指定的 URL。

通信层补充:

  • stdio 是一个传输层(用于原始数据流),而 JSON-RPC 是一个应用层协议(用于结构化通信)。它们是不同的概念,但常被结合使用,例如在协议中常见的“JSON-RPC over stdio”。

工具描述示例:

  • 在代码中,可以使用 @self.mcp.tool() 装饰器定义 MCP 工具。例如:

    python
    @self.mcp.tool()
    async def playwright_navigate(url: str, timeout=30000, wait_until="load"):
    """
    Navigate to a URL.
    """
    # ... 工具实现代码 ...

    * 这个函数的文档字符串 ("""Navigate to a URL.""") 提供了工具的描述,这将被用于类似 LLM 的函数调用机制中。
    * MCP-LLM Bridge 会将这个工具信息转换为如下所示的 OpenAI 函数调用格式的 Tool 对象:

    json
    {
    "name": "playwright_navigate",
    "description": "Navigate to a URL.",
    "inputSchema": {
    "properties": {
    "url": {"title": "Url", "type": "string"},
    "timeout": {"default": 30000, "title": "timeout", "type": "string"}
    // 注意:wait_until 可能因自动推断或定义方式不同而略有差异
    }
    // "required": ["url"] // 示例中未显示,但通常会包含必需参数
    }
    }

实用小贴士:

  • uv 命令:
    • uv run: 运行脚本。
    • uv venv: 创建新的虚拟环境(默认 .venv)。
    • uv add: 为脚本添加依赖。
    • uv remove: 从脚本移除依赖。
    • uv sync: 同步(安装)项目依赖到当前环境。
  • 终止 Python 进程: 在命令行中使用 taskkill /IM python.exe /F 命令可以强制结束所有名为 python.exe 的进程。
  • Visual Studio Code 调试: 使用 launch.json 配置文件可以在 VS Code 中启动 Python 调试器。

数据统计

相关导航

暂无评论

暂无评论...