mcpField
G
GDD (Giggly-Dazzling-Duckling)

GDD (Giggly-Dazzling-Duckling)

远程服务
github.com浏览器自动化122 周前更新

关于 GDD (Giggly-Dazzling-Duckling)

GDD 是一款 MCP 服务,可运行相互隔离的 Chromium 浏览器,在模拟设备上测试网站。它支持并行操作与诊断,也提供可选的桌面界面以便手动控制。

主要功能

  1. 01并行运行隔离的 Chromium 实例
  2. 0222 种设备预设及自定义模拟
  3. 03浏览器交互与截图
  4. 04网络和地理位置控制
  5. 05控制台与性能诊断
  6. 06可选的桌面浏览器网格

适用场景

  1. 01跨手机和桌面尺寸测试注册流程
  2. 02检查慢速或离线网络下的页面
  3. 03截取页面并检查 JavaScript 错误

MCP 相关

通过 HTTP 向 MCP 客户端提供浏览器管理、导航、交互、模拟、截图和诊断工具。服务也可无头运行以支持自动化。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"GDD": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/cap-of-tea/gdd:1.5.0"
]
}
}
}
启动命令docker run -i --rm ghcr.io/cap-of-tea/gdd:1.5.0

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

安装包
ocighcr.io/cap-of-tea/gdd:1.5.0

工具

还没有获取到工具列表

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

详细介绍

GDD

GDD — Giggly-Dazzling-Duckling

在你的机器上运行由 AI 控制的浏览器集群
在 22 种设备类型上模拟多个真实用户——像正式发布日一样测试你的网站。

Release 平台 MCP MCP Registry 许可证

Claude Code Cursor


工作原理

你: 打开 3 部 iPhone 和一台桌面设备,访问 myapp.com,在所有设备上测试注册表单

Claude Code 会创建 4 个启用设备模拟的浏览器,分别访问你的应用、填写表单、截取屏幕截图并检查控制台错误——所有操作并行执行。

gdd_add_players(3, device="iPhone 15 Pro")    → players [1, 2, 3]
gdd_add_players(1, device="Desktop 1080p")    → player  [4]
gdd_navigate(1, "https://myapp.com")          → all 4 browsers open your app
gdd_tap(1, "#signup-btn")                     → taps signup on iPhone
gdd_screenshot(1)                             → captures the result
gdd_get_console(1, level="error")             → checks for JS errors

GDD 运行 N 个相互隔离的 Chromium 实例,每个实例都有自己的配置文件、Cookie、设备模拟、地理位置和网络条件。它通过 HTTP 在 localhost:9700 上提供 39 个 MCP 工具。

GDD 视频墙——3 台设备同时进行测试


安装

GDD 提供两种版本。服务端是无头版本——它只是 MCP 后端,可在任何地方运行(包括没有显示器的设备),纯 AI 自动化只需使用它。桌面应用则增加了 GUI:显示浏览器缩略图的实时网格,你可以点击缩略图,手动接管会话。服务端运行在端口 9700,桌面应用运行在端口 9800,因此可以同时运行两者。

服务端(无头)——MCP 后端:

平台下载运行
LinuxGDD-Server-Linux.tar.gzchmod +x GDD.Headless && ./GDD.Headless
macOS ARMGDD-Server-macOS-ARM.tar.gzbash Scripts/setup-macos.sh && ./GDD.Headless
macOS IntelGDD-Server-macOS-Intel.tar.gzbash Scripts/setup-macos.sh && ./GDD.Headless
WindowsGDD-Server-Windows.zip.\GDD.Headless.exe
Dockerghcr.io/cap-of-tea/gdddocker run -p 9700:9700 ghcr.io/cap-of-tea/gdd
Claude DesktopWin / Mac ARM / Mac Intel (.mcpb)打开 .mcpb 文件——将其安装为桌面扩展

桌面应用(GUI)——显示浏览器缩略图的实时网格,你可以点击缩略图:

平台下载运行
WindowsGDD-Desktop-Windows.zip解压并运行 GDD.exe(需要 WebView2)
LinuxGDD-Desktop-Linux.tar.gzbash Scripts/install-deps.sh && ./GDD.Desktop
macOS ARMGDD-Desktop-macOS-ARM.tar.gzbash Scripts/setup-macos.sh && ./GDD.Desktop
macOS IntelGDD-Desktop-macOS-Intel.tar.gzbash Scripts/setup-macos.sh && ./GDD.Desktop

Windows 应用使用 WebView2;Linux/macOS 应用(基于 Avalonia 构建)会操控停靠在屏幕外的真实 Chromium 窗口。独立二进制文件,约 70 MB。无需安装 .NET。首次启动时会自动下载 Chromium。

一行命令(Linux):

curl -sL https://github.com/Cap-of-tea/GDD/releases/latest/download/GDD-Server-Linux.tar.gz | tar xz && chmod +x GDD.Headless && ./GDD.Headless
Docker
# Run (headless, port 9700)
docker run -p 9700:9700 ghcr.io/cap-of-tea/gdd

# Or build locally
docker build -t gdd .
docker run -p 9700:9700 gdd

Docker 镜像以无头模式运行,并已预装所有 Chromium 依赖项。

默认情况下,浏览器以有头模式(显示窗口)启动。在 CI/CD 中使用时添加 --headless。其他标志:用于反机器人屏蔽的 --stealth 和 --stealth-max、用于自行更新的 --update,以及 --version 和 --help。下方的配置部分列出了所有标志和环境变量。


连接到 AI 客户端

添加到 .mcp.json,然后重启 AI 客户端:

{
  "mcpServers": {
    "gdd": {
      "url": "http://localhost:9700/mcp"
    }
  }
}

就这样。启动 GDD,然后让 Claude 或 Cursor 测试你的应用。

**Claude Desktop 用户:**从 Releases 下载 .mcpb 文件并打开,即可将 GDD 安装为一键式桌面扩展。无需手动配置。

配置文件位置
客户端项目配置全局配置
Claude Code<project>/.mcp.json~/.claude/.mcp.json
Cursor<project>/.cursor/mcp.json~/.cursor/mcp.json
VS Code / Windsurf / Antigravity<project>/.vscode/mcp.jsonIDE settings.json

全局配置和项目配置会合并,两者中的服务都可同时使用。只有重启 AI 客户端会话后,配置更改才会生效。

基于 VS Code 的 IDE(Windsurf、Antigravity、Copilot)

基于 VS Code 的 IDE 使用的配置格式与 Claude Code / Cursor 不同。

项目配置 — .vscode/mcp.json:

{
  "servers": {
    "gdd": {
      "type": "http",
      "url": "http://localhost:9700/mcp"
    }
  }
}

全局配置 — 通过 Cmd+Shift+P → “Open User Settings (JSON)”打开:

{
  "mcp": {
    "servers": {
      "gdd": {
        "type": "http",
        "url": "http://localhost:9700/mcp"
      }
    }
  }
}

全局 settings.json 的位置:macOS — ~/Library/Application Support/<IDE>/User/settings.json,Linux — ~/.config/<IDE>/User/settings.json,Windows — %APPDATA%/<IDE>/User/settings.json。将 <IDE> 替换为你的编辑器名称(Code、Windsurf、Antigravity 等)。

stdio-proxy 替代方案(.vscode/mcp.json):

{
  "servers": {
    "gdd": {
      "type": "stdio",
      "command": "bash",
      "args": ["/absolute/path/to/Scripts/mcp-proxy.sh"]
    }
  }
}
权限(Claude Code)

默认情况下,Claude Code 每次调用 MCP 工具时都会请求确认。如需允许 GDD 工具运行而不弹出提示,请添加到 ~/.claude/settings.json:

{
  "permissions": {
    "allow": [
      "mcp__gdd__*"
    ]
  }
}

这个通配符即可涵盖全部 39 个 GDD 工具。编辑后重启 Claude Code。

通过 stdio 代理自动启动(替代方案)

当 AI 客户端连接时,代理脚本会自动启动 GDD:

Windows:

{
  "mcpServers": {
    "gdd": {
      "command": "powershell",
      "args": ["-ExecutionPolicy", "Bypass", "-File", "C:/path/to/Scripts/mcp-proxy.ps1"]
    }
  }
}

Linux / macOS:

{
  "mcpServers": {
    "gdd": {
      "command": "bash",
      "args": ["/path/to/Scripts/mcp-proxy.sh"]
    }
  }
}

在 args 数组中添加 "--headless",以用于 CI/CD。

**提示:**首次启动时,GDD 会下载 Chromium(约 80 MB)。如果 AI 客户端超时,请先手动运行 GDD,然后重新连接。

作为服务自动启动(macOS / Linux)

macOS(launchd):

bash Scripts/install-launchd.sh            # headed (default)
bash Scripts/install-launchd.sh --headless  # for CI/CD

管理:launchctl list | grep gdd / bash Scripts/install-launchd.sh --uninstall

Linux(systemd):

mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/gdd.service << 'EOF'
[Unit]
Description=GDD Multi-Browser Testing Server
[Service]
ExecStart=/path/to/GDD.Headless
WorkingDirectory=/path/to/gdd-directory
Restart=on-failure
[Install]
WantedBy=default.target
EOF

systemctl --user daemon-reload
systemctl --user enable --now gdd
直接使用 HTTP(无需 AI 客户端)
curl -X POST http://localhost:9700/mcp -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"gdd_add_players","arguments":{"count":1}}}'

GDD 使用标准 JSON-RPC 2.0,可与 curl、Python、Node.js 或任何 HTTP 客户端配合使用。


功能

  • 多设备 — 运行 N 个相互隔离的 Chromium 实例,提供 22 种设备预设(手机、平板、桌面设备)
  • 原生支持 AI — 提供 39 个 MCP 工具,可用于 Claude Code、Cursor 或任何兼容 MCP 的客户端
  • 跨平台 — 在 Windows、Linux 和 macOS 上提供带实时视频墙的原生 GUI,并支持用于 CI/CD 的无头服务端
  • 全面交互 — 可导航、点击、输入、按键和快捷键、拖动、滑动、滚动、悬停、处理对话框、截取屏幕截图
  • 真实键盘输入 — 输入会发送真实可信的按键事件(完整的 keydown→input 事件链),因此输入掩码、自动补全和 maxlength 的行为与真实用户操作完全一致,并支持富文本(contenteditable)编辑器;gdd_press 可处理单个按键和快捷键,例如 Enter、Tab、Escape 和 Ctrl+A
  • 物理键盘布局 — 按键事件携带模拟地区键盘对应的真实 code/keyCode:俄语 ЙЦУКЕН 布局将「а」映射到物理按键 KeyF,法语 AZERTY 和德语 QWERTZ 会重新映射按键,死键重音符号和 AltGr 符号也可正常使用。布局会根据 gdd_set_language 自动设置(US、RU、DE、FR)
  • 类人输入 — humanize=true 会驱动连续的光标路径(带缓动和微抖动的三次贝塞尔曲线),并在点击、悬停和拖动之间延续;轻触只会触发一种适合设备的输入方式(触摸或鼠标),绝不会同时触发两种
  • 反机器人隐身 — 启用 --stealth 可掩盖常见的自动化特征(navigator.webdriver 等);--stealth-max 还会规避无头模式和数据中心检测(协调一致的 user-agent 客户端提示、可信的 WebGL 厂商信息、逼真的设备指标)——在无头容器中,这将 CreepJS 的无头模式评分降低了一半
  • 代理支持 — 使用 GDD_PROXY 将所有浏览器的流量路由至上游代理(可选身份验证)
  • 重写标头 — gdd_set_headers 可移除 X-Frame-Options/CSP frame-ancestors,以便在 iframe 中加载网站;也可添加或替换响应标头
  • 设备模拟 — 屏幕尺寸、DPR、触摸、user agent、地理位置、时区、语言
  • 网络控制 — 可为每个浏览器模拟 4G、Fast 3G、Slow 3G 或离线状态
  • 诊断 — 控制台错误、网络流量、性能指标、推送通知
  • 错误信标 — 每次工具响应都会自动提示所有浏览器中的 JS 错误
  • 支持 Docker — GHCR 上的官方镜像(ghcr.io/cap-of-tea/gdd),已列入 MCP Registry
  • 自动更新 — 内置版本检查和一键更新

MCP 工具(39 个)

播放器管理
工具描述
gdd_add_players添加 N 个浏览器实例,可选设备预设
gdd_remove_player按播放器 ID 移除浏览器实例
gdd_list_windows列出所有活动浏览器及其当前状态
导航
工具描述
gdd_navigate导航至 URL
gdd_wait等待 CSS 选择器出现(可设置超时)
gdd_reload重新加载页面(hard=true 可绕过缓存)
gdd_back返回上一页
gdd_forward前进至下一页
交互
工具描述
gdd_tap按 CSS 选择器或坐标点击元素;根据设备发送单次输入(触屏设备使用触摸输入,桌面设备使用鼠标输入),不会同时发送两者。humanize=true 会生成连续、仿人类的光标路径
gdd_swipe滑动手势(上/下/左/右)
gdd_drag通过真实指针事件将元素拖到 (x, y) 或另一个元素上(支持 dnd-kit 和 HTML5 拖放)
gdd_scroll滚动页面或元素
gdd_type使用真实、可信的按键输入文本(CDP dispatchKeyEvent——遮罩、自动补全和 maxlength 的行为与真实用户操作一致;适用于 contenteditable)。物理按键码遵循模拟的键盘布局(US/RU/DE/FR);humanize=true 会为每次按键添加抖动;paste=true 会一次性粘贴
gdd_press按下单个键或快捷键(Enter、Tab、Escape、方向键、F1–F12 或字符),可选修饰键(Control/Alt/Shift/Meta);字符键遵循模拟的键盘布局
gdd_hover将鼠标悬停在元素上。humanize=true 会生成连续、仿人类的光标路径
gdd_select从 <select> 下拉菜单中选择选项
gdd_dialog处理 JS alert/confirm/prompt 对话框
读取与截图
工具描述
gdd_read读取元素的文本内容
gdd_read_all读取所有匹配元素的文本
gdd_screenshot以 CSS 像素分辨率截取 JPEG 屏幕截图
模拟
工具描述
gdd_set_device设置设备预设(22 种设备:手机、平板、桌面设备)
gdd_set_viewport设置自定义视口尺寸
gdd_set_location设置地理位置、时区和区域设置
gdd_set_network设置网络条件(4G、3G、离线)
gdd_set_language设置浏览器语言
gdd_set_headers重写响应标头——移除 X-Frame-Options/CSP 以允许嵌入
状态与诊断
工具描述
gdd_get_state浏览器状态:URL、标题、设备、身份验证状态
gdd_get_console控制台输出和未捕获的异常
gdd_get_network网络请求及其耗时和状态
gdd_get_notifications收到的推送通知
gdd_get_performance性能指标(JS 堆、DOM 节点、FPS)
gdd_clear_logs清除控制台和/或网络日志
身份验证与执行
工具描述
gdd_quick_auth使用生成的凭据自动注册并登录
gdd_execute_js执行 JavaScript 并返回结果
浏览器存储
工具描述
gdd_storage读取/写入/清除 localStorage/sessionStorage
gdd_cookies读取或清除浏览器 Cookie
帮助与更新
工具描述
gdd_get_manual供 AI 自主学习的完整 GDD 手册
gdd_check_update检查是否有更新版本
gdd_update下载并安装更新(重启 GDD)

设备预设(22)
手机(11)
设备分辨率缩放比例触控
iPhone SE375 x 6672.0x是
iPhone 14390 x 8443.0x是
iPhone 15 Pro393 x 8523.0x是
iPhone 15 Pro Max430 x 9323.0x是
iPhone 16 Pro402 x 8743.0x是
iPhone 16 Pro Max440 x 9563.0x是
Pixel 9412 x 9152.625x是
Pixel 9 Pro412 x 9152.625x是
Galaxy S24360 x 7803.0x是
Galaxy S24 Ultra412 x 9153.0x是
OnePlus 12412 x 9153.5x是
平板(6)
设备分辨率缩放比例
iPad Mini744 x 11332.0x
iPad Air820 x 11802.0x
iPad Pro 11"834 x 11942.0x
iPad Pro 13"1024 x 13662.0x
Galaxy Tab S9800 x 12802.0x
Pixel Tablet800 x 12802.0x
桌面设备(5)
设备分辨率缩放比例
笔记本 HD1366 x 7681.0x
笔记本 HiDPI1440 x 9002.0x
台式机 1080p1920 x 10801.0x
台式机 1440p2560 x 14401.0x
台式机 4K3840 x 21602.0x

架构

Client (AI agent / curl / script)
         │ POST /mcp (JSON-RPC 2.0)
         ▼
    McpServer (:9700)
    Streamable HTTP + SSE
         │
         ▼
    McpToolRegistry (39 tools)
    Player · Navigation · Interaction · Read
    Emulation · Auth · State · Diagnostics
         │
         ▼
    IPlayerManager
    MainViewModel (WPF) / DesktopPlayerManager (Avalonia) / HeadlessPlayerManager
         │
         ▼
    IBrowserEngine Instances
    WebView2 (Win GUI)  |  Playwright (Desktop GUI + headed/headless server)
    Each: own profile, CDP session, emulation
版本

GDD 基于一个共享核心推出三个应用。两个 GUI 仅桌面工具包不同(Windows 上使用 WebView2,Linux/macOS 上使用 Avalonia);三个应用均提供相同的 39 个 MCP 工具。

Windows GUI桌面 GUI服务端
二进制文件GDD.exeGDD.DesktopGDD.Headless(添加 --headless 可不显示窗口)
引擎WebView2Playwright(有头)Playwright(有头/无头)
UIWPF 视频墙Avalonia 视频墙无 — 仅 HTTP API
MCP 端口970098009700
平台WindowsLinux、macOSWindows、Linux、macOS
技术栈
层技术
运行时.NET 8.0(独立部署)
UI(Windows)WPF + CommunityToolkit.Mvvm
UI(Linux/macOS)Avalonia + CommunityToolkit.Mvvm
浏览器(Windows GUI)Microsoft WebView2
浏览器(桌面 GUI + 服务端)Microsoft Playwright
协议MCP(Model Context Protocol)
浏览器控制Chrome DevTools Protocol(CDP)
日志记录Serilog
项目结构
BrowserXn.sln
├── src/
│   ├── GDD.Core/              ← Shared library (net8.0)
│   │   ├── Abstractions/      ← IBrowserEngine, IPlayerManager, ...
│   │   ├── Mcp/               ← MCP server, tools, protocol
│   │   ├── Models/            ← Device, Location, Network presets
│   │   ├── Services/          ← CDP, Emulation, Monitoring services
│   │   └── Collections/       ← RingBuffer
│   ├── BrowserXn/             ← Windows GUI (WPF + WebView2)
│   │   ├── Engines/           ← WebView2ControlAdapter
│   │   ├── ViewModels/        ← MVVM (MainViewModel : IPlayerManager)
│   │   ├── Views/             ← XAML + VideoWallPanel
│   │   └── ...
│   ├── GDD.Desktop/           ← Linux/macOS GUI (Avalonia + Playwright)
│   │   ├── Engines/           ← PlaywrightHeadedEngine (headed, parked off-screen)
│   │   ├── ViewModels/        ← MainViewModel (DesktopPlayerManager)
│   │   ├── Views/             ← AXAML + VideoWallPanel
│   │   └── Scripts/           ← mcp-proxy.sh, setup-macos.sh, install-deps.sh
│   └── GDD.Headless/          ← Cross-platform server (Playwright)
│       ├── Engines/           ← PlaywrightEngine
│       ├── Platform/          ← HeadlessPlayerManager
│       └── Scripts/           ← mcp-proxy.sh, mcp-proxy.ps1
└── .github/workflows/         ← CI/CD (8 build targets + auto-release)

配置

可执行文件旁的 appsettings.json:

{
  "GDD": {
    "FrontendUrl": "about:blank",
    "BackendUrl": "http://localhost:8080/api/v1",
    "BotToken": "",
    "McpPort": 9700,
    "DataFolderRoot": "",
    "Stealth": false
  }
}
键说明默认值
FrontendUrl新建浏览器的默认 URLabout:blank
BackendUrl身份验证服务的后端 APIhttp://localhost:8080/api/v1
BotTokenTelegram 机器人令牌(用于 TG 测试)—
McpPortMCP 服务端口(自动回退 +1..+9)9700
DataFolderRoot浏览器配置文件存储根目录%LOCALAPPDATA%\GDD\Profiles(Win)、~/.local/share/GDD/Profiles(Linux/macOS)
Headed显示浏览器窗口true(可用 --headless 覆盖)
Stealth可选启用反机器人屏蔽功能 — 启动 Chromium 时禁用 AutomationControlled,并隐藏常见的自动化特征(navigator.webdriver 等)。仅适用于 Playwright 引擎(GDD.Desktop、GDD Server)false
命令行标志
标志说明
--headed显示浏览器窗口(默认)
--headless不显示 UI — 用于 CI/CD
--stealth启用反机器人屏蔽功能(等同于 GDD_STEALTH=true)
--stealth-max完全隐身 — 伪装客户端提示 UA 元数据、WebGL/设备/时区;同时启用 --stealth(等同于 GDD_STEALTH_MAX=true)
--update检查是否有较新版本,并在有可用版本时安装
--version输出版本并退出
--help显示用法并退出
环境变量

适用于 Docker 和 CI,在这些场景中使用 appsettings.json 文件不太方便:

变量描述
GDD_STEALTH设置为 true/1 可启用反机器人屏蔽(等同于 --stealth)
GDD_STEALTH_MAX设置为 true/1 可启用完整隐身模式(等同于 --stealth-max)
GDD_PROXY所有浏览器使用的上游代理,例如 http://host:3128 或 socks5://host:1080(Server / Playwright 引擎)
GDD_PROXY_USER / GDD_PROXY_PASS经过身份验证的代理凭据
GDD_CHROME_CHANNEL启动已安装的 Chrome 版本(例如 chrome、chrome-beta),而非捆绑的 Chromium
GDD_PLAYER_IDLE_TIMEOUT_MINUTES仅限无头服务。若某个播放器在此分钟数内未被操作,则自动将其移除并回收其浏览器。默认值为 30;设为 0 可禁用。避免远程客户端断开连接却未移除播放器时内存不断累积
GDD_TRACE设置为 true/1 可启用详细跟踪日志
从源代码构建

需要 .NET 8 SDK。

# Windows GUI (requires Windows 10/11 + WebView2)
dotnet publish src/BrowserXn/BrowserXn.csproj -c Release -p:PublishSingleFile=true -o ./publish/win-gui

# Cross-platform headless
dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r linux-x64 --self-contained -o ./publish/linux-x64
dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r osx-arm64 --self-contained -o ./publish/osx-arm64
dotnet publish src/GDD.Headless/GDD.Headless.csproj -c Release -r win-x64 --self-contained -o ./publish/win-x64

Chromium 会在首次运行时自动安装。


文档

隐私

隐私政策

GDD 完全在您的本地计算机上运行。不进行遥测、分析或数据收集。

  • 数据不会离开您的计算机 — 所有浏览器配置文件、屏幕截图、日志和 Cookie 均保存在本地存储中
  • 浏览器配置文件 — 存储在 %LOCALAPPDATA%\GDD\Profiles(Windows)或 ~/.local/share/GDD/Profiles(Linux/macOS)
  • 无第三方服务 — 除了用于可选更新检查的 GitHub Releases,GDD 不会联系任何外部 API
  • 更新检查 — gdd_check_update 会向 api.github.com 发送一次只读请求。您可以不调用该工具以选择退出,或在 appsettings.json 中设置 CheckForUpdates: false
  • MCP 服务 — 仅监听 localhost(默认端口为 9700),绝不会暴露到网络

联系方式:[email protected]


许可证

imVS©,可免费用于个人用途。

源代码可用 — 非商业用途。可免费用于个人用途、教育和研究。商业用途需要付费许可证。完整条款请参阅 LICENSE。

商业授权:[email protected]

评论

支持 Markdown

第一次接触 MCP?

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

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