mcpField
M
Mcp Aoai Web Browsing

Mcp Aoai Web Browsing

本地服务
github.com/kimtth浏览器自动化356 周前更新

关于 Mcp Aoai Web Browsing

这是一个基于 Playwright 的网页浏览 MCP 项目,包含 Azure OpenAI/OpenAI 集成、Tkinter 聊天界面以及 MCP v1/v2、OAuth 和 MCP Apps 的示例。它适合希望学习 MCP 协议与浏览器自动化的开发者。仓库同时提供可直接在外部客户端中使用的 stdio 服务。

主要功能

  1. 01Playwright 控制可见的 Chromium 浏览器
  2. 02Tkinter 聊天界面连接 Azure OpenAI
  3. 03client_bridge 将 MCP 工具转换为函数调用格式
  4. 04MCP v1 与 v2 协议示例
  5. 05本地 OAuth 流程示例
  6. 06MCP Apps 交互式界面示例

适用场景

  1. 01通过聊天界面让 LLM 操作网页
  2. 02学习 MCP 初始化与会话处理
  3. 03在 Claude Desktop 或 VS Code 中使用浏览器工具

MCP 相关

原始服务通过 stdio 向外部 MCP 客户端暴露浏览器导航等工具。仓库中的 client_bridge 则作为客户端,将 MCP 工具适配为 OpenAI Chat Completions 的函数调用。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

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

详细介绍

MCP 实践:Web 浏览、协议与应用

一个 Playwright 浏览应用,支持 Azure OpenAI/OpenAI,另附 MCP v1/v2、OAuth 和交互式 MCP Apps 的专项示例。

  1. 原始浏览应用 — Azure OpenAI/OpenAI 集成、设置和客户端连接。
  2. MCP v1 和 v2 示例 — 浏览器工具和本地 OAuth 流程。
  3. MCP Apps 示例 — 使用 Prefab 构建的交互式工具响应界面。

1. Web 浏览 MCP 应用

一个本地浏览应用,带有 Tkinter 聊天界面和 MCP 到大模型的桥接。

  • 原始服务使用独立的 fastmcp 包;Playwright 控制一个可见的 Chromium 浏览器,并在工具调用之间保留当前页面。
  • 本地 client_bridge 实现将 MCP 工具定义转换为 OpenAI Chat Completions 函数调用。它支持进程内 FastMCP 服务或外部 stdio 服务。
  • GUI 使用 Azure OpenAI。Python 调用方可以将桥接配置为使用标准 OpenAI,但原始浏览器服务会单独初始化自己的 Azure 客户端,用于选择器提取工具。
设置和运行

要求:Python 3.13 或更高版本、Tkinter、图形桌面会话,以及 uv。以下命令使用 uv 管理此项目的环境;MCP 本身不要求使用特定的 Python 包管理器。请在仓库根目录运行这些命令。

  1. 将 .env.template 复制为本地 .env 文件,并保留模板原样。配置一个支持 Chat Completions 工具调用的现有 Azure OpenAI 部署:

    AZURE_OPEN_AI_ENDPOINT=
    AZURE_OPEN_AI_API_KEY=
    AZURE_OPEN_AI_DEPLOYMENT_MODEL=
    AZURE_OPEN_AI_API_VERSION=
    

    API 版本是旧版 Azure 端点所需的,下面介绍的 /openai/v1 路径则不需要。请勿将 .env 纳入版本控制;它已被 gitignore 排除。

  2. 安装 Python 依赖项和 Chromium 浏览器二进制文件:

    uv sync
    uv run playwright install chromium
    

    在 Linux 上,Playwright 可能还需要系统依赖项;请参阅其安装指南。所选的 Python 安装中必须提供 Tkinter。

  3. 在项目环境中启动 GUI:

    uv run python chatgui.py
    

根目录的依赖声明使用最低版本,不设兼容性上限。经检查的环境使用 FastMCP 3.2.0 和 MCP SDK 1.27.0;这并不保证重新解析较新的主版本后仍能正常工作。请将学习示例保留在各自独立的环境中。

原始浏览 GUI
Azure v1 端点和模型参数

对于以 /openai/v1 结尾的端点,请将 AZURE_OPEN_AI_ENDPOINT 设为完整 URL,并将 AZURE_OPEN_AI_DEPLOYMENT_MODEL 设为现有部署名称。此路径使用兼容 OpenAI 的客户端,无需 API 版本。请使用 AZURE_OPEN_AI_API_KEY;如果未设置密钥,也可以通过进程环境变量 AZURE_OPENAI_AD_TOKEN 提供短期有效的 Entra 令牌。令牌不会自动刷新;请在启动前续期,且切勿将其提交到文件中。

与外部客户端配合使用

外部客户端通过 stdio 启动原始服务。请先完成上述设置。服务会加载仓库的 .env,并且即使宿主使用其他模型提供方,启动时仍要求配置 Azure。请勿将凭据放入共享的 MCP JSON 配置中。

点击展开 - Claude Code、VS Code
Claude Desktop / Claude Code
  • **Claude Desktop:**打开 Settings > Developer > Edit Config,编辑 claude_desktop_config.json,并遵循 本地服务指南。
  • **Claude Code:**对于项目范围,将条目添加到项目根目录下的 .mcp.json,而非 .claude/mcp.json。Claude Code 会分别管理本地范围和用户范围。

将此条目合并到现有配置中。将目录替换为仓库的绝对路径(Windows 路径可以使用正斜杠)。使用 uv 的 --directory 可避免依赖客户端特定的 cwd 字段。

{
  "mcpServers": {
    "browser-navigator": {
      "command": "uv",
      "args": ["--directory", "/path/to/mcp-aoai-web-browsing", "run", "fastmcp", "run", "server/browser_navigator_server.py:app", "--transport", "stdio"]
    }
  }
}

如果桌面客户端找不到 uv,请将 command 设置为其可执行文件的绝对路径。保存后重启 Claude Desktop;在 Claude Code 中,使用 /mcp 查看项目服务的审批情况和连接状态。

VS Code

按照 VS Code MCP 配置参考,将配置合并到工作区中的 .vscode/mcp.json:

{
  "servers": {
    "browser-navigator": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "fastmcp", "run", "server/browser_navigator_server.py:app", "--transport", "stdio"],
      "cwd": "${workspaceFolder}",
      "envFile": "${workspaceFolder}/.env"
    }
  }
}

使用 MCP: List Servers 启动服务并检查其输出。启用工具前,请先查看服务信任提示。

以编程方式使用 Bridge
通过 stdio 连接

在仓库根目录运行此示例。Bridge 负责处理模型循环;子服务会从本地 .env 独立加载其 Azure 设置。

import asyncio

from client_bridge import BridgeConfig, MCPServerConfig, BridgeManager
from client_bridge.llm_config import get_default_llm_config

config = BridgeConfig(
    server_config=MCPServerConfig(
        command="uv",
        args=["run", "fastmcp", "run", "server/browser_navigator_server.py:app", "--transport", "stdio"],
    ),
    llm_config=get_default_llm_config(),
    system_prompt="You are a helpful assistant.",
)

async def main():
  async with BridgeManager(config) as bridge:
    response = await bridge.process_message("Navigate to https://example.com")
    print(response)


if __name__ == "__main__":
  asyncio.run(main())
点击展开 - 使用标准 OpenAI
使用标准 OpenAI(非 Azure)

要在 Bridge 的模型循环中使用 OpenAI,请将上方示例中的 config 构造替换为以下内容。此辅助函数会读取进程环境变量;如果使用本地 .env,请显式调用 load_dotenv()。

from dotenv import load_dotenv

from client_bridge.llm_config import get_openai_llm_config

load_dotenv()
llm_config = get_openai_llm_config()
# Set these explicitly to values supported by the chosen model.
llm_config.token_limit_parameter = "max_completion_tokens"
llm_config.temperature = None

config = BridgeConfig(
  server_config=MCPServerConfig(
    command="uv",
    args=["run", "fastmcp", "run", "server/browser_navigator_server.py:app", "--transport", "stdio"],
  ),
  llm_config=llm_config,
)

将 OPENAI_API_KEY 和 OPENAI_MODEL 设置为你的凭据及支持 Chat Completions 工具调用的模型。OpenAI 辅助函数默认使用 max_tokens 和 0.7 的温度;与 Azure 辅助函数不同,它不会读取 OPENAI_TOKEN_LIMIT_PARAMETER 或 OPENAI_TEMPERATURE 环境变量。示例会显式覆盖这些默认值;请根据你的模型进行调整。

这不会将 GUI 或原始服务的选择器提取客户端切换为 OpenAI。使用原始服务仍需使用设置步骤中的 Azure 设置。独立学习服务不依赖这些设置。

直接执行工具

在已配置 config 的异步函数中,Bridge 会向自行管理 LLM 循环的客户端提供工具元数据和直接执行功能:

async with BridgeManager(config) as bridge:
    tools = bridge.get_tools()  # OpenAI function calling format
    result = await bridge.execute_tool("playwright_navigate", {"url": "https://example.com"})

2. MCP v1 和 v2 示例

以下是独立的入门示例,与上文的原始应用分开。每个文件夹都有自己的依赖项;请从仓库根目录运行各自 README 中限定于该目录的命令,而不要升级根环境。这些示例不需要 LLM API 密钥。

示例演示内容
MCP v1 — 浏览器工具使用 Playwright 读取页面或截取屏幕截图;了解通过 HTTP 显式进行 MCP 初始化和会话处理。
MCP v2 — 浏览器工具使用显式选择的较新协议模式执行相同的浏览器操作。
MCP v2 — 本地 OAuth在调用受保护的浏览器工具前获取令牌;通过本地授权测试装置探索签发方验证和 PKCE。包含不依赖 SDK 的实验;真实 SDK 集成尚未验证。
规范参考

文件夹标签 v1 和 v2 是仓库中用于指代这里对比的两个协议修订版的简称,并非 MCP 官方主版本名称。Python SDK 版本和协议日期彼此独立:

  • Core MCP 2025-11-25 定义客户端与服务端之间的通信,包括 初始化和版本协商。 浏览器示例调用 initialize(),而不是硬编码协议日期。在 v1 浏览器示例固定使用的 mcp==1.27.0 环境中,最新支持版本为 2025-11-25,并已在运行时确认协商到该版本。
  • Core MCP 2026-07-28 是较新的浏览器和 OAuth 示例所针对的 核心规范。 这些示例中的客户端会显式设置 mode="2026-07-28",而不是调用较早的 initialize() API。这是代码预期采用的协议路径,并非已验证的集成结果。

3. MCP Apps 示例

MCP Apps 在核心 MCP 之上增加了交互式 UI 资源和由宿主介导的交互。它是一项可选扩展,并非 SDK v2 独有功能。这些独立示例不需要 LLM API 密钥;请按照各指南中的设置命令操作。

示例演示内容
响应式阅读卡片返回一个 Prefab 阅读卡片,其输入和重置操作会更新客户端状态,无需再次调用工具。
浏览器面板使用交互式按钮调用 Playwright 工具,并在支持 Apps 的宿主中显示页面文本和屏幕截图。
规范和宿主要求

官方 Apps 概览 链接至 2026-01-26 Apps 规范。 这些示例使用 FastMCP 3.2.0、Prefab 0.20.2 和 MCP SDK 1.27.0。

官方客户端支持矩阵 追踪宿主支持情况。Apps 概览将 Claude Desktop 和 VS Code GitHub Copilot 列为受支持的客户端;这并不能证明这些特定的 Prefab 示例已在其中任一宿主中通过验证。原始 Tkinter GUI 不是 MCP Apps 宿主。

示例屏幕截图

这是独立的 Prefab 预览,而非 MCP 聊天宿主的截图。浏览器结果由真实的本地 Playwright 调用生成,并单独渲染。

响应式 MCP App 预览本地 Playwright 结果预览
响应式 MCP App 预览本地 Playwright 结果预览

完整图片和预览限制请参阅 Apps 示例指南。本文未将任何屏幕截图作为未经验证的 SDK v2 集成的证据。

协议和工具说明

stdio 和 JSON-RPC

stdio 是本地进程传输方式;JSON-RPC 2.0 定义了消息格式。MCP 通过 stdio 或 Streamable HTTP 等传输方式传递 JSON-RPC 消息。对于 stdio 服务,stdout 只能包含协议消息;诊断信息应写入 stderr。打印到 stdout 的 Python 字典不是 MCP 通知。

工具描述

FastMCP 会根据 Python 文档字符串生成工具描述,并根据函数签名生成输入架构。在原始服务端中,playwright_navigate 使用的文档字符串是 "Navigate to a URL."。桥接程序会将这些元数据映射为 OpenAI 函数工具定义。请检查 tools/list 以查看实际架构;不带注解的参数不应被假定具有推断出的数值类型。

参考资料

Model Context Protocol (MCP)

Model Context Protocol (MCP) 是一种开放协议,用于将 AI 应用连接到工具、资源和提示词。身份验证、用户同意和访问控制仍需由应用和宿主实现。

官方文档和代码库
相关项目
  • FastMCP:独立的 Python MCP 框架;以前托管在 jlowin 下。
  • Chat MCP:MCP 客户端
  • MCP-LLM Bridge:已归档的上游项目,本仓库的本地桥接实现参考了它,但它不是已安装的依赖项。
MCP Playwright
社区资源

开发提示

uv 命令
uv run: Run a command or script in the project environment.
uv venv: Create a new virtual environment. By default, '.venv'.
uv add: Add a project dependency; use --script for inline script metadata.
uv remove: Remove a project dependency; use --script for inline script metadata.
uv sync: Synchronize the project environment with the lockfile (updating it if needed).
进程清理与调试
  • 正常关闭 GUI,使用 Ctrl+C 停止从终端启动的进程,或通过客户端的 MCP 控制停止由客户端管理的服务。如果进程无响应,请查明并仅终止其 PID;不要终止所有 Python 进程。
  • 在 Visual Studio Code 中,选择项目环境,并使用 Python Debugger 扩展及 GUI 的启动配置。请参阅 Python 调试指南。

评论

支持 Markdown

第一次接触 MCP?

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

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