mcpField
S
Stealth Browser Mcp

Stealth Browser Mcp

本地服务
github.com/vibheksoni浏览器自动化3.3k2 天前更新

关于 Stealth Browser Mcp

Stealth Browser MCP 是供兼容 MCP 的 AI Agent 使用的浏览器自动化服务,基于 Chrome 系浏览器和 Chrome DevTools Protocol。它提供可配置的页面控制、内容提取和网络调试工具;反机器人挑战处理效果可能因网站和环境而异。

主要功能

  1. 01自动化操作 Chrome、Chromium 和 Edge
  2. 02配置完整、精简或自定义工具集
  3. 03检查网络请求和响应
  4. 04提取含结构与样式的页面元素
  5. 05运行 JavaScript 和 CDP 命令

适用场景

  1. 01浏览网页并操作页面元素
  2. 02调试网站时检查捕获的请求
  3. 03提取页面元素及其视觉细节
  4. 04自动执行需要登录或处理挑战的浏览器任务

MCP 相关

该服务通过 stdio 或 HTTP 传输向 MCP 客户端提供浏览器自动化和调试工具。它支持标准 MCP 客户端配置,无需自定义代理。

配置

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

暂未收录安装方式

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

代码仓库

工具

还没有获取到工具列表

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

详细介绍

Stealth Browser MCP 标志

Stealth Browser MCP

为兼容 MCP 的 AI Agent 提供隐身浏览器自动化。

借助由 nodriver、Chrome DevTools Protocol 和 FastMCP 驱动的真实 Chrome 系浏览器实例,应对 Cloudflare 验证、反机器人检查和登录墙。

MCP PyPI Python Stars License PRs Welcome


赞助商

NodeMaven

NodeMaven — 为网页抓取和自动化提供最高效的代理服务商,拥有市场上质量最高的 IP。

为什么选择 NodeMaven?

  • ZIP 码定位
  • 99.9% 正常运行时间
  • IP 筛选:所有代理的欺诈评分均 <97%
  • 无需 KYC
  • 独特的免费工具:代理带宽检查器、Meta Tag Checker、IP Lookup 等!

Stealth-browser-mcp 用户专享优惠码

  • STEALTHMCP35 — 移动和住宅代理优惠 35%
  • STEALTHMCP40 — ISP(静态)代理优惠 40%

开始使用 NodeMaven

赞助商展示位。NodeMaven 是本项目的付费赞助商。


目录


演示

Stealth Browser MCP 通过 AI 聊天指令通过 Cloudflare 验证、克隆 UI 元素并检查网络流量。


功能

  • 抗机器人检测 - 测试中已通过 Cloudflare 和 Queue-It 风格的挑战;实际效果因网站、地区、浏览器版本和检测器版本而异。
  • 11 个分类,共 101 个工具 - 涵盖基础导航到高级 CDP 函数执行。
  • 模块化加载 - 可运行完整的 101 个工具,或精简的 21 个核心工具;禁用不需要的分类。
  • 像素级精准的元素克隆 - 通过 CDP 提取包含 CSS、DOM 结构、事件、动画和资源的完整元素。
  • 网络检查 - 通过 AI Agent 检查请求、响应、标头、负载和捕获的正文。
  • 动态钩子系统 - 受限的 Python 钩子可拦截、阻止、重定向、处理或修改请求/响应流。
  • CDP 执行 - 通过受信任的本地 MCP 客户端运行 JavaScript、直接 CDP 命令和文档加载前脚本。
  • 即时文本输入 - 通过 CDP 粘贴大量内容、模拟真人按键输入,或使用受信任的 CDP 按键事件按下真实按键。
  • 跨平台 - 支持 Windows、macOS、Linux、Docker 和 CI 环境,并可自动检测浏览器和平台。
  • 浏览器支持 - 支持 Chrome、Chromium 和 Microsoft Edge,并可自动查找可执行文件。
  • 简洁的 MCP 集成 - 通过标准 MCP 客户端运行,无需自定义代理。

快速开始

1. 安装

需要 Python 3.10+,以及 Chrome、Chromium 或 Microsoft Edge。

使用 pipx(推荐):

pipx install browserstealthmcp

这会在你的 PATH 中添加 stealth-browser-mcp 命令。使用 pipx upgrade browserstealthmcp 升级。uvx browserstealthmcp 无需安装即可运行。若要运行最新提交而不是正式版本,请使用 pipx install git+https://github.com/vibheksoni/stealth-browser-mcp.git。

该 PyPI 软件包名为 browserstealthmcp,因为 PyPI 上的 stealth-browser-mcp 属于另一个无关项目。运行 pipx install stealth-browser-mcp 安装的是那个项目,而不是本项目。

从克隆的仓库安装(用于开发):

git clone https://github.com/vibheksoni/stealth-browser-mcp.git
cd stealth-browser-mcp
python -m venv venv

# Windows
venv\Scripts\activate

# macOS / Linux
source venv/bin/activate

pip install -r requirements.txt
2. 添加到 MCP 客户端

使用 pipx 安装:

claude mcp add stealth-browser-mcp -- stealth-browser-mcp

或者,在任何客户端的 JSON 配置中添加:

{
  "mcpServers": {
    "stealth-browser-mcp": {
      "command": "stealth-browser-mcp",
      "args": [],
      "env": {}
    }
  }
}

如果客户端找不到该命令,请使用 pipx list 显示的完整路径。使用 uv 时,可以跳过安装并使用 "command": "uvx", "args": ["browserstealthmcp"]。

从克隆的仓库安装,并使用 Claude Code CLI:

Windows:

claude mcp add-json stealth-browser-mcp "{\"type\":\"stdio\",\"command\":\"C:\\path\\to\\stealth-browser-mcp\\venv\\Scripts\\python.exe\",\"args\":[\"C:\\path\\to\\stealth-browser-mcp\\src\\server.py\"]}"

macOS / Linux:

claude mcp add-json stealth-browser-mcp '{
  "type": "stdio",
  "command": "/path/to/stealth-browser-mcp/venv/bin/python",
  "args": ["/path/to/stealth-browser-mcp/src/server.py"]
}'

将示例路径替换为你实际克隆仓库的路径。

手动配置 JSON(Claude Desktop、Cursor 等)

Windows(%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "stealth-browser-mcp": {
      "command": "C:\\path\\to\\stealth-browser-mcp\\venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\stealth-browser-mcp\\src\\server.py"],
      "env": {}
    }
  }
}

macOS / Linux(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "stealth-browser-mcp": {
      "command": "/path/to/stealth-browser-mcp/venv/bin/python",
      "args": ["/path/to/stealth-browser-mcp/src/server.py"],
      "env": {}
    }
  }
}
实验性 FastMCP CLI 安装

这些命令适用于偏好使用 FastMCP 安装程序的用户。建议使用上述 stdio JSON 配置方式。

pip install fastmcp
fastmcp install claude-desktop src/server.py --with-requirements requirements.txt
fastmcp install claude-code src/server.py --with-requirements requirements.txt
fastmcp install cursor src/server.py --with-requirements requirements.txt
3. 测试

重启 MCP 客户端,并向 Agent 提出请求:

使用 stealth-browser 导航到 https://example.com 并截取屏幕截图。


Agent 技能

此仓库包含一个 Agent 技能,位于 skills/stealth-browser-mcp,适用于支持 Codex 风格技能的客户端。它会指导 Agent 按照推荐顺序使用工具、检查状态、使用文档加载前 CDP 脚本、排查网络问题,并遵循浏览器清理规则。

如果大模型难以选择合适的 MCP 工具,或在执行操作后忘记验证浏览器状态,请使用此技能。如果客户端不会自动加载仓库本地的技能,请将 skills/stealth-browser-mcp 添加到客户端技能目录,或在该目录中创建指向它的符号链接。


信任模型

此服务提供强大的本地浏览器控制原语:CDP 执行、页面 JavaScript 执行、Cookie/存储访问、网络拦截、动态钩子、标头修改、导航,以及从允许列表中的本地路径上传文件。

请将 MCP 客户端或 Agent 视为安全主体。推荐的部署方式是使用可信的桌面 MCP 客户端,通过本地 stdio 传输运行。如果使用 HTTP 传输,请设置 STEALTH_BROWSER_MCP_AUTH_TOKEN,并且不要在受信任的本地网络或专用网络之外暴露未经身份验证的 HTTP 服务。


模块化架构

按需选择所需功能。运行完整的 101 工具套件,或精简为包含 21 个工具的核心版本。

模式工具数用途
完整(默认)101完整的浏览器自动化与调试
最小(--minimal)21核心浏览器自动化与交互
自定义(--disable-*)自选禁用特定功能分区
Xpool 安全模式(--xpool-safe)84禁用会触发 Runtime.enable 的 CDP 函数工具
stealth-browser-mcp --minimal
stealth-browser-mcp --disable-cdp-functions --disable-dynamic-hooks
stealth-browser-mcp --list-sections
stealth-browser-mcp --debug
stealth-browser-mcp --transport http --host 127.0.0.1 --port 8000

从克隆的项目运行时,python src/server.py 接受相同的标志。

使用 --debug 或设置 STEALTH_BROWSER_DEBUG=1,即可在 stderr 上启用详细的服务诊断信息。默认情况下,正常的 MCP stdio 运行保持静默,以避免破坏 JSON-RPC 传输输出。

可用功能分区:

分区工具数说明
browser-management8核心浏览器操作
element-interaction13页面交互与操作
element-extraction9元素克隆与提取
file-extraction9基于文件的提取工具
network-debugging10网络监控与捕获
cdp-functions17Chrome DevTools Protocol 执行
progressive-cloning10高级元素克隆
cookies-storage3Cookie 管理
tabs5标签页管理
debugging7调试与系统工具
dynamic-hooks10AI 辅助网络钩子

服务端配置

以下是 MCP 服务进程的环境变量。可在 shell、服务管理器、Docker 环境或 MCP 客户端的 env 块中设置。

变量默认值含义
STEALTH_BROWSER_MCP_AUTH_TOKEN未设置HTTP 传输的可选 bearer token。设置后,HTTP 客户端必须发送 Authorization: Bearer <token>。
MCP_AUTH_TOKEN未设置STEALTH_BROWSER_MCP_AUTH_TOKEN 的向后兼容别名。
BROWSER_IDLE_TIMEOUT600浏览器实例闲置后自动关闭前的全局超时时间,单位为秒。设为 0 可全局禁用闲置回收。
BROWSER_IDLE_REAPER_INTERVAL60后台回收器的检查间隔,单位为秒。
BROWSER_TAB_RECYCLE_NAVIGATIONS0达到指定导航次数后,用新标签页替换主标签页。0 表示保留同一标签页,从而保留历史记录和会话存储。
BROWSER_ORPHAN_PROFILE_MAX_AGE21600启动时清理过期 uc_* 临时配置文件的阈值,单位为秒。设为 0 可禁用此启动清理。
STEALTH_BROWSER_EXECUTABLE自动检测用于启动的 Chrome、Chromium 或 Edge 可执行文件路径,取代自动检测的路径。
BROWSER_FILE_UPLOAD_ALLOWED_DIRS仓库根目录或数据目录file_upload() 可读取的目录。多个根目录之间用 ;(Windows)或 :(macOS/Linux)分隔。克隆项目时默认为仓库根目录;安装软件包时默认为数据目录中的 uploads 文件夹。
STEALTH_BROWSER_MCP_DATA_DIR仓库根目录或用户数据目录元素克隆和大型响应的写入位置。克隆项目时默认为仓库根目录;安装软件包时,Windows 默认为 %LOCALAPPDATA%\stealth-browser-mcp,macOS 默认为 ~/Library/Application Support/stealth-browser-mcp,Linux 默认为 $XDG_DATA_HOME/stealth-browser-mcp(~/.local/share/stealth-browser-mcp)。
STEALTH_BROWSER_DEBUG0设为 1 时,将详细调试日志输出到 stderr。
DEBUG0STEALTH_BROWSER_DEBUG 的旧版别名。
XPOOL_SAFE_MODE0启动时禁用 cdp-functions 部分。
PORT8000未提供 --port 时使用的默认 HTTP 端口。

PowerShell 示例:

$env:STEALTH_BROWSER_MCP_AUTH_TOKEN='replace-with-a-long-random-token'
$env:BROWSER_IDLE_TIMEOUT='900'
$env:BROWSER_IDLE_REAPER_INTERVAL='30'
$env:BROWSER_ORPHAN_PROFILE_MAX_AGE='43200'
$env:BROWSER_FILE_UPLOAD_ALLOWED_DIRS='C:\Users\me\uploads;C:\Users\me\Documents'
python src/server.py

MCP 客户端的 env 块:

{
  "mcpServers": {
    "stealth-browser-mcp": {
      "command": "C:\\path\\to\\stealth-browser-mcp\\venv\\Scripts\\python.exe",
      "args": ["C:\\path\\to\\stealth-browser-mcp\\src\\server.py"],
      "env": {
        "STEALTH_BROWSER_MCP_AUTH_TOKEN": "replace-with-a-long-random-token",
        "BROWSER_IDLE_TIMEOUT": "900",
        "BROWSER_FILE_UPLOAD_ALLOWED_DIRS": "C:\\Users\\me\\uploads;C:\\Users\\me\\Documents"
      }
    }
  }
}

HTTP 客户端示例:

from fastmcp import Client
from fastmcp.client.auth import BearerAuth

client = Client(
    "http://127.0.0.1:8000/mcp/",
    auth=BearerAuth("replace-with-a-long-random-token"),
)

单实例闲置超时覆盖:

  • spawn_browser(idle_timeout_seconds=1800) 会让该实例在闲置 30 分钟后关闭。
  • spawn_browser(idle_timeout_seconds=0) 会为该实例禁用闲置回收。

工具箱

浏览器管理(8)
工具描述
spawn_browser()创建隐身浏览器实例
list_instances()列出活动的浏览器会话
close_instance()正常关闭浏览器
get_instance_state()获取完整的浏览器状态信息
navigate()导航到 URL
go_back()在历史记录中后退
go_forward()在历史记录中前进
reload_page()重新加载当前页面
元素交互(13)
工具描述
query_elements()按 CSS 选择器或 XPath 查找元素
click_element()点击元素
type_text()模拟真人输入,支持换行
paste_text()通过 CDP 即时粘贴文本
press_key()通过可信的 CDP 按键事件按下真实按键(Enter、Tab、方向键、修饰键)
file_upload()将允许列表中的本地文件上传到文件输入框
select_option()选择下拉选项
get_element_state()检查元素状态
wait_for_element()等待元素
scroll_page()自然滚动页面
execute_script()运行页面 JavaScript
get_page_content()读取页面 HTML 和文本
take_screenshot()截取屏幕截图
`take_screenshot` 会返回一张带有元数据(格式、大小、缩放比例、质量、字节数、SHA-256)的 MCP 图像,因此远程客户端无需读取服务端磁盘即可显示图像。大型截图(例如较长的整页截图)会缩小尺寸,以符合客户端限制(每边 8000 px、约 5 MB),元数据则会报告原始尺寸。传入 `format="jpeg"` 并降低 `quality`,或指定 `max_width`,可生成更小的图像;也可传入 `file_path`,将全分辨率图像保存在服务端。
网络调试(10)
工具描述
list_network_requests()列出捕获的网络请求
get_request_details()检查请求标头和负载
get_response_details()检查响应元数据
get_response_content()读取捕获的响应内容
search_network_requests()搜索捕获的请求
export_network_data()导出捕获的网络数据
import_network_data()导入捕获的网络数据
set_network_capture_filters()配置捕获筛选条件
get_network_capture_filters()读取当前启用的捕获筛选条件
modify_headers()添加或替换请求标头
Cookie 和存储(3)
工具描述
get_cookies()读取 Cookie
set_cookie()设置 Cookie
clear_cookies()清除 Cookie
调试(7)
工具描述
get_debug_view()分页查看调试日志和统计数据
clear_debug_view()清除调试日志
export_debug_logs()将日志导出为 JSON、pickle 或 gzip 格式
get_debug_lock_status()检查调试日志记录器的锁定状态
hot_reload()无需重启服务即可重新加载模块
reload_status()检查模块重新加载状态
validate_browser_environment_tool()诊断浏览器与平台的兼容性
标签页(5)
工具描述
list_tabs()列出已打开的标签页
switch_tab()切换当前活动标签页
close_tab()关闭标签页
get_active_tab()获取当前活动标签页
new_tab()创建新标签页
元素提取(9)
工具描述
extract_element_styles()提取计算后的 CSS 属性
extract_element_structure()提取 DOM 结构
extract_element_events()提取事件监听器
extract_element_animations()提取动画和过渡效果
extract_element_assets()提取图像、字体、视频和资源
extract_element_styles_cdp()纯 CDP 样式提取
extract_related_files()查找相关的 CSS/JS 文件
clone_element_complete()完整克隆元素
extract_complete_element_cdp()基于 CDP 完整克隆元素
渐进式克隆(10)
工具描述
clone_element_progressive()初始轻量级元素克隆
expand_styles()按需展开样式
expand_events()按需展开事件
expand_children()按需展开子节点
expand_css_rules()展开 CSS 规则数据
expand_pseudo_elements()展开伪元素
expand_animations()展开动画数据
list_stored_elements()列出已存储的渐进式克隆
clear_stored_element()清除一个已存储的元素
clear_all_elements()清除所有已存储的元素
基于文件的提取(9) | 工具 | 描述 | |------|-------------| | `clone_element_to_file()` | 将完整克隆保存到文件 | | `extract_complete_element_to_file()` | 将完整提取结果保存到文件 | | `extract_element_styles_to_file()` | 将样式保存到文件 | | `extract_element_structure_to_file()` | 将结构保存到文件 | | `extract_element_events_to_file()` | 将事件保存到文件 | | `extract_element_animations_to_file()` | 将动画保存到文件 | | `extract_element_assets_to_file()` | 将资源保存到文件 | | `list_clone_files()` | 列出已保存的克隆文件 | | `cleanup_clone_files()` | 清理旧的克隆文件 |
CDP 函数执行(14)
工具描述
list_cdp_commands()列出可用的 CDP 命令
execute_cdp_command()直接运行 CDP 命令
add_script_to_evaluate_on_new_document()在页面 JavaScript 运行前安装脚本
get_execution_contexts()列出 JavaScript 执行上下文
discover_global_functions()查找全局 JavaScript 函数
discover_object_methods()查找 JavaScript 对象上的方法
call_javascript_function()执行已发现的 JavaScript 函数
inspect_function_signature()检查函数详情
inject_and_execute_script()注入并运行自定义 JavaScript
create_persistent_function()创建重新加载后仍可使用的函数
create_page_binding()暴露 window.<name>(),以便页面 JavaScript 回调 Agent
get_page_binding_calls()读取排队的页面绑定调用,可选择等待调用
resolve_page_binding_call()使用值或错误响应页面绑定调用
remove_page_binding()移除页面绑定并拒绝其待处理调用
execute_function_sequence()按顺序执行函数调用
execute_python_in_browser()使用 py2js 将 Python 转换为 JavaScript 并运行
get_function_executor_info()检查执行器状态
动态钩子(10)
工具描述
create_dynamic_hook()创建受限的 Python 网络钩子
create_simple_dynamic_hook()使用常见预设创建钩子
list_dynamic_hooks()列出活动钩子
get_dynamic_hook_details()检查钩子源码和元数据
remove_dynamic_hook()移除钩子
get_hook_documentation()阅读请求对象和操作文档
get_hook_examples()查看钩子示例
get_hook_requirements_documentation()阅读匹配和最佳实践文档
get_hook_common_patterns()查看常见钩子模式
validate_hook_function()使用前验证钩子代码

Stealth 与 Playwright MCP

检测结果反映特定时点的情况,并取决于网站策略、地区、浏览器版本、IP 信誉度和检测器版本。请参阅 STEALTH_TESTS.md,了解 benchmarks/stealth/ 基准测试的每周自动化结果。该测试通过 GitHub Actions 在 Linux、Windows 和 macOS 上运行,并提供较早的手动测试快照。

特性Stealth Browser MCPPlaywright MCP
Cloudflare / Queue-It 样式的检测测试中可通过常见的 JS 挑战通常会被拦截
加固型网站通过 nodriver 使用真实的 Chrome 系浏览器实例经常被标记为自动化程序
登录限制页面可通过 CDP 检查已加载内容和浮层通常需要手动编写脚本
UI 元素克隆精确提取 CDP 信息有限
网络调试通过 AI 工具完整检查请求/响应基础
API 逆向工程通过聊天检查负载仅限手动工具
动态钩子系统用于实时拦截的受限 Python 钩子不可用
模块化架构11 个部分,21-101 个工具固定的工具集
工具总数101 个可自定义工具约 20 个

故障排查

找不到兼容的浏览器 安装 Chrome、Chromium 或 Microsoft Edge。服务会自动检测第一个可用的浏览器。运行 validate_browser_environment_tool() 进行诊断。

工具挂起或返回格式错误的 JSON 在 MCP stdio 传输期间,调试输出不得打印到 stdout。拉取最新的 master 分支;除非正在诊断问题,否则请关闭调试日志。

需要详细诊断信息,但不想让常规运行产生过多输出 使用 python src/server.py --debug 或设置 STEALTH_BROWSER_DEBUG=1。调试日志会输出到 stderr;默认情况下,常规 MCP stdio 运行不会产生输出。

浏览器在 Linux、Docker 或 CI 上崩溃 仅当环境有此要求时,才使用 --sandbox=false;或者确保环境支持 Chromium 沙盒。服务会自动检测 root/容器环境并调整启动参数。

孤立的 Chromium 进程或 uc_* 临时配置文件不断累积 服务会自动回收空闲的浏览器实例,并在启动时清理已跟踪的孤立浏览器进程和过期的 uc_* 临时配置文件。只有在希望完全手动管理浏览器生命周期时,才设置 BROWSER_IDLE_TIMEOUT=0。

macOS 磁盘被 code_sign_clone 文件夹占满 旧版本会让 Chrome 在每次启动时将其应用程序包复制到 com.google.Chrome.code_sign_clone,而实例崩溃或被终止后,这些副本仍会残留。现在,服务会关闭 MacAppCodeSignClone 并启动 Chrome,因此不会再生成新副本。若要删除旧版本遗留的副本,请退出 Chrome 并运行 rm -rf /private/var/folders/*/*/X/com.google.Chrome.code_sign_clone(Edge 请使用 com.microsoft.edgemac.code_sign_clone)。

工具太多,导致 AI 聊天界面杂乱 使用 --minimal 获取 20 个核心工具,使用 --xpool-safe 以兼容 xpool 的模式运行,或选择性地禁用各个部分:

python src/server.py --disable-cdp-functions --disable-dynamic-hooks --disable-progressive-cloning

出现找不到模块的错误 请确保已激活虚拟环境并安装依赖:

pip install -r requirements.txt

示例

  • 市场调研 - 提取竞争对手的定价和功能,然后输出对比表。
  • UI 克隆 - 使用完全一致的字体、样式、资源和交互,重建定价版块。
  • 库存监控 - 监控产品页面,并在库存发生变化时发送提醒。
  • API 逆向工程 - 拦截请求、梳理端点并检查数据流。
  • 表单自动化 - 上传来自允许路径的文件,并验证页面的最终状态。

所有操作均由单次 AI Agent 对话驱动。


展示

Augment Code Hero Recreation

Augment Code 首页主视觉复刻 - 一位用户请 Claude 复刻 augmentcode.com 的主视觉区域。Agent 启动了一个隐身浏览器,访问该网站,通过 CDP 提取完整元素(样式、结构、素材),并生成了一个像素级精准的 HTML 复刻页面,支持响应式设计和动画。整个过程在不到两分钟的对话中完成。

查看复刻页面 | 完整演示


路线图

请参阅 ROADMAP.md 中的实时计划。欢迎贡献。


贡献

阅读 CONTRIBUTING.md 并提交 PR。欢迎首次贡献者。

如果这个项目为你节省了时间,请为仓库点个星。这比你想象的更有帮助。


支持

如果这个工具为你节省了时间或帮你赚了钱,可以考虑支持项目开发:


许可证

MIT - 详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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