Skyvern MCP 集成指南:把 AI 应用接入浏览器自动化
【免费下载链接】skyvernAutomate browser based workflows with AI项目地址: https://gitcode.com/GitHub_Trending/sk/skyvern
导读
Skyvern 的 MCP(Model Context Protocol)服务器实现,将浏览器能力以标准 MCP 工具的形式暴露给任意 AI 应用,使其可以直接完成填表、文件下载、网页信息检索等浏览器操作。本文以 integrations/mcp/README.md 为骨架,结合仓库源码,完整讲解 Skyvern MCP 的两种接入方式(本地服务与 Skyvern Cloud)、快速启动流程、主流 AI 编码工具的配置方法、MCP 工具面(scope)体系以及针对 Glama 的容器化发布流程,帮助读者把 Claude、Cursor、Windsurf、OpenCode 等工具无缝接入 Skyvern 的浏览器自动化能力。
Skyvern MCP 是什么
Skyvern MCP 服务器的核心价值,是把「浏览器」变成 AI 应用的一个可编程工具集。通过 MCP 协议,AI 应用可以调用 Skyvern 暴露的工具,完成诸如:
- 填写表单并提交
- 下载文件
- 在网页上检索与汇总信息
- 管理多标签页、iframe、浏览器会话与浏览器画像
- 创建、运行和监控完整的工作流(Workflow)
从仓库实现看,这套能力集中定义在 skyvern/cli/mcp_tools 目录下,基于 FastMCP 框架构建(见 scopes.py 中的from fastmcp import FastMCP),覆盖 75+ 个 MCP 工具(见 skyvern/cli/mcp_tools/README.md)。
接入方式有两种,对应不同的运行形态:
- 本地 Skyvern Server:使用你自己的 LLM 配置驱动 Skyvern,MCP 服务器通过 stdio 与本地 Skyvern 服务通信;
- Skyvern Cloud:在 app.skyvern.com 注册账号,从设置页获取 API Key,MCP 服务器以 HTTP 方式连接云端,浏览器会话在云端托管。
环境要求与安装
原文档特别强调了一个硬性前提:
⚠️ Skyvern 目前只支持在 Python 3.11 环境中运行。
这一点在 pyproject.toml 中有更精确的体现:requires-python = ">=3.11,<3.15",即 Python 3.11 及以上、3.15 以下的版本均可,3.11 是当前文档承诺的最低且经过充分验证的版本。安装方式为:
pip install skyvern安装后,CLI 入口由 pyproject.toml 中的[project.scripts]段定义(skyvern = "skyvern.__main__:main"),因此可以直接使用skyvern命令。
快速启动三步
- 安装:
pip install skyvern - 配置:运行配置向导
skyvern init,引导你选择连接 Skyvern Cloud 还是本地版 Skyvern - (可选)启动本地服务:
skyvern run server——仅在本地模式下需要
skyvern init是一个交互式命令,其注册位于 skyvern/cli/commands/init.py(register_lazy_command("init", "skyvern.cli.init_command", ...))。在原文档基础上,skyvern/cli/mcp_tools/README.md 还提供了等价的快捷方式:
skyvern setup claude-code # 直接为 Claude Code 配置 skyvern setup # 其他编码 Agent 的通用配置支持的应用与配置方式
skyvern init与skyvern setup可以帮助你完成以下应用的 MCP 配置(对应实现见 skyvern/cli/setup_commands.py 中的setup_claude_code、setup_claude、setup_cursor、setup_windsurf等函数):
- Cursor
- Windsurf
- Claude Desktop
- OpenCode(通过
skyvern setup opencode配置,使用 API Key 认证,可避免 OAuth 回调超时) - 任意自定义 MCP 应用
本地模式:为 Claude Code 等客户端配置 stdio MCP
setup_mcp(见 skyvern/cli/mcp.py)是skyvern init/skyvern setup中 MCP 配置的核心逻辑。在本地(local=True)模式下,它会为 Claude Code、Claude Desktop、Cursor、Windsurf 逐个写入 stdio 类型的 MCP 配置,让这些客户端直接与 localhost 上的 Skyvern 服务通信。
本地配置的底层由_build_local_mcp_entry(skyvern/cli/setup_commands.py)生成,其要点是:
- 始终使用当前激活的解释器路径(
sys.executable),保证本地 venv 与 editable 安装都能直接工作,不依赖 PATH 上的skyvern二进制; - 自动写入
SKYVERN_BASE_URL、SKYVERN_API_KEY等环境变量; - 如果指定了
browser_type或browser_remote_debugging_url,会同步写入BROWSER_TYPE与BROWSER_REMOTE_DEBUGGING_URL环境变量,用于接入本地浏览器画像或远程调试地址。
云端模式:HTTP 类型的 MCP 配置
云端配置由_build_remote_mcp_entry(skyvern/cli/setup_commands.py)生成,默认指向https://api.skyvern.com/mcp/,并把 API Key 写入x-api-key请求头。
对于只支持 stdio 的客户端(如 Claude Desktop 远程接入场景),_build_mcp_remote_bridge_entry会退化为通过npx mcp-remote桥接的方式,把远程 HTTP 端点包装成 stdio 子进程(见 setup_commands.py)。
手动配置任意 MCP 应用
如果你使用的是其他支持 MCP 的应用,可以直接复制以下 JSON 配置模板(来自原文档):
{ "mcpServers": { "Skyvern": { "env": { "SKYVERN_BASE_URL": "https://api.skyvern.com", # "http://localhost:8000" if running locally "SKYVERN_API_KEY": "YOUR_SKYVERN_API_KEY" # find the local SKYVERN_API_KEY in the .env file after running `skyvern init` or in your Skyvern Cloud console }, "command": "PATH_TO_PYTHON", "args": [ "-m", "skyvern", "run", "mcp" ] } } }配置项说明:
| 配置项 | 说明 |
|---|---|
SKYVERN_BASE_URL | 云端为https://api.skyvern.com;本地自托管为http://localhost:8000 |
SKYVERN_API_KEY | 本地模式下,运行skyvern init后会写入.env文件;云端模式下在 Skyvern Cloud 控制台获取 |
command | Python 解释器路径(PATH_TO_PYTHON),也可以直接使用skyvern可执行文件 |
args | 固定为-m skyvern run mcp,即通过 Python 模块方式启动 MCP 服务器 |
MCP 服务器启动参数详解
skyvern run mcp命令的定义位于 skyvern/cli/run_commands.py,支持以下参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
--transport | stdio | MCP 传输方式:stdio、sse或streamable-http |
--scope | all | MCP 工具范围:all、operate、build、browser、lean(详见下文) |
--host | 127.0.0.1 | HTTP 传输的监听地址;需要对外监听时显式传入0.0.0.0 |
--port | 8000 | HTTP 传输的端口 |
--path | /mcp | HTTP 端点的路径 |
--stateless-http/--no-stateless-http | 启用 | HTTP 传输是否使用无状态语义(stdio 下忽略) |
--verbose/--no-verbose | 关闭 | 是否返回完整工具响应(含sdk_equivalent、browser_context、timing 等字段) |
--browser-extension/--no-browser-extension | 关闭 | 是否启动中继(relay),用于通过 Skyvern 浏览器扩展控制 Chrome;该选项仅支持--transport stdio |
从源码还可以看到几个值得注意的实现细节:
- HTTP 传输的中间件链:依次是
_ServerCardMiddleware(在/.well-known/mcp/server-card.json暴露 MCP Server Card,便于客户端自动发现)、OriginValidationMiddleware(Origin 校验,浏览器来源的请求仅允许 loopback 与 Claude 来源,防止恶意页面借用合法 API Key)、MCPAPIKeyMiddleware(API Key 校验); - stdio 的生命周期管理:
run_mcp为 stdio 模式注册了 SIGINT/SIGTERM 处理与 stdin EOF 监听(_start_stdin_eof_watcher),退出时会依次清理浏览器会话、Skyvern 客户端连接与本地浏览器画像,保证宿主进程关闭时不留孤儿进程; - 本地组织与 API Key 引导:在本地模式下,
skyvern init会通过 skyvern/cli/mcp.py 中的get_or_create_local_organization自动创建域名为skyvern.local的本地组织,并签发一个长期有效的 HS256 JWT 作为 API Key 写入数据库。
OpenCode 远程 MCP 配置(API Key 认证)
如果你在 OpenCode 中执行opencode mcp auth Skyvern遇到OAuth 回调超时,请改用 API Key 认证方式:
skyvern login skyvern setup opencode该命令会在~/.config/opencode/opencode.json中写入"oauth": false以及你的x-api-key请求头。注意:完成上述操作后不要再执行opencode mcp auth,以免覆盖掉 API Key 配置。
关于无状态远程端点的关键提醒
原文档指出一个容易踩坑的要点:
远程
/mcp端点是无状态的(stateless)。请先调用skyvern_browser_session_create创建浏览器会话,并在后续每次浏览器工具调用时传入browser_session_id,否则浏览器工具会返回BrowserNotAvailable。
这正是--stateless-http默认开启的原因(见上文参数表):HTTP 传输不会在服务器端维护会话状态,浏览器会话必须由调用方显式创建并逐次传递。
按需裁剪工具面(Tool Scope)
为了把 MCP 安装收敛到单一职责,可以在args中追加--scope参数。原文档与 skyvern/cli/mcp_tools/README.md 给出了五种范围:
| Scope | 适用场景 | 暴露的工具分组 |
|---|---|---|
all(默认) | 完整功能 | 全部工具 |
operate | 运行、监控已存在的自动化 | workflow、schedule、folder、script |
build | 编排(author)工作流 | operate全部 +block_discovery、inspection、ai_powered、session、state |
browser | 直接浏览器控制 | browser_primitive、tab_management、session、browser_profile、inspection |
lean | 精简浏览器面 | lean(直接操作 + 选择器限定的页面读取) |
配置示例(仅启用operate):
{ "mcpServers": { "Skyvern": { "env": { "SKYVERN_BASE_URL": "http://localhost:8000", "SKYVERN_API_KEY": "YOUR_API_KEY" }, "command": "PATH_TO_PYTHON", "args": ["-m", "skyvern", "run", "mcp", "--scope", "operate"] } } }Scope 的底层实现见 skyvern/cli/mcp_tools/scopes.py:apply_scope先通过 FastMCP 的Visibility变换隐藏所有工具,再按SCOPES字典中的标签集合重新启用对应工具。设计上有两个值得留意的取舍:
operate刻意不包含浏览器相关工具,因为它的定位是「运行与监控已有的自动化」,不需要现场打开页面;build必须保留session工具分组,否则其 inspection 与 state 工具将无法获得浏览器实例而报NO_ACTIVE_BROWSER。
此外需要注意:--scope只支持本地 stdio 配置;云端(远程)配置固定为all范围(见 setup_commands.py 的_validate_scope_for_transport)。
应用示例
原文档附带三段演示视频,展示了三种典型用法(视频资产托管在 GitHub 外部,仓库内无对应文件,此处仅按原文档描述其场景):
- Claude 查询 Hacker News 今日热帖:让 Claude 通过 Skyvern 打开 HN 首页并汇总当天热门帖子;
- Cursor 检索你所在地区的高薪编程岗位:让 Cursor 访问招聘站点并按条件筛选岗位;
- Windsurf 进行 Form 5500 检索并下载文件:让 Windsurf 在相关网站执行检索并将结果文件下载到本地。
这些场景共同说明一件事:借助 MCP,AI 编码工具不再局限于读写代码仓库,而是可以真正「上网办事」。
工具全景(供 AI 应用调用的 75+ 工具)
虽然原文档没有逐一列举,但 skyvern/cli/mcp_tools/README.md 对 MCP 工具面做了完整归类,这里按类别列出,方便在配置后快速了解可用的能力(工具具体实现在 skyvern/cli/mcp_tools 目录下,如browser.py、workflow.py、session.py、credential.py等):
浏览器会话(Browser Sessions):skyvern_browser_session_create、skyvern_browser_session_close、skyvern_browser_session_list、skyvern_browser_session_get、skyvern_browser_session_connect
浏览器画像(Browser Profiles):skyvern_browser_profile_create、skyvern_browser_profile_list、skyvern_browser_profile_get、skyvern_browser_profile_update、skyvern_browser_profile_delete
浏览器动作(Browser Actions):skyvern_act(自然语言指令)、skyvern_navigate、skyvern_click、skyvern_type、skyvern_hover、skyvern_scroll、skyvern_select_option、skyvern_press_key、skyvern_drag、skyvern_file_upload、skyvern_wait
数据提取与校验(Data Extraction & Validation):skyvern_extract(结构化 JSON 输出)、skyvern_screenshot、skyvern_find、skyvern_validate、skyvern_evaluate(执行 JavaScript)、skyvern_get_html、skyvern_get_value、skyvern_get_styles
认证与凭据(Authentication & Credentials):skyvern_login、skyvern_credential_list、skyvern_credential_get、skyvern_credential_delete,以及skyvern_onepassword_*、skyvern_bitwarden_*系列;支持 Skyvern vault、Bitwarden、1Password、Azure Key Vault,并内置自动 2FA/TOTP 处理
标签页与框架(Tabs & Frames):skyvern_tab_new、skyvern_tab_list、skyvern_tab_switch、skyvern_tab_close、skyvern_tab_wait_for_new、skyvern_frame_list、skyvern_frame_switch、skyvern_frame_main
网络与控制台(Network & Console Inspection):skyvern_console_messages、skyvern_network_requests、skyvern_network_request_detail、skyvern_network_route、skyvern_network_unroute、skyvern_get_errors、skyvern_har_start、skyvern_har_stop、skyvern_handle_dialog
浏览器状态与存储(Browser State & Storage):skyvern_state_save、skyvern_state_load、skyvern_get_session_storage、skyvern_set_session_storage、skyvern_clear_session_storage、skyvern_clear_local_storage、skyvern_clipboard_read、skyvern_clipboard_write
工作流(Workflows):skyvern_workflow_create、skyvern_workflow_list、skyvern_workflow_get、skyvern_workflow_run_list、skyvern_workflow_run、skyvern_workflow_status、skyvern_workflow_retry、skyvern_workflow_update、skyvern_workflow_delete、skyvern_workflow_cancel、skyvern_workflow_update_folder
工作流构建块(Workflow Building Blocks):skyvern_block_schema、skyvern_block_validate——覆盖 23 种块类型,用于编排多步自动化
脚本缓存(Cached Scripts):skyvern_script_list_for_workflow、skyvern_script_get_code、skyvern_script_versions、skyvern_script_deploy、skyvern_script_fallback_episodes
组织管理(Organization):skyvern_folder_create、skyvern_folder_list、skyvern_folder_get、skyvern_folder_update、skyvern_folder_delete
在多个配置之间切换
如果需要在多个 API Key 或环境(本地/云端)之间切换,不必手动编辑配置文件,直接使用:
skyvern mcp switch该命令与skyvern init/skyvern setup共享同一套配置解析与写入逻辑(见 setup_commands.py 文件头注释,以及 skyvern/cli/mcp_commands.py)。
Glama 发布配置(容器化 Release)
Glama 的「release」流程与发布到 PyPI 或官方 MCP Registry 不同:Glama 需要一个可运行的服务器容器,以便它启动 MCP 服务器、检查工具 schema,并在其目录中发布可安装的版本。
为什么需要专门的 Dockerfile
原文档明确指出:
- 本目录下的专用 integrations/mcp/Dockerfile 用于 Glama 发布流程;
- 仓库根目录的 Dockerfile 面向完整的 Skyvern 应用栈,启动的是
python -m skyvern.forge,对仅用于 Glama MCP 发布的场景来说运行时不正确。
从 integrations/mcp/Dockerfile 的内容可以看到它与根 Dockerfile 的差异:
- 基于
python:3.11-slim-bookworm,并通过uv pip compile生成依赖清单; - 内置 Playwright Chromium(
playwright install --with-deps chromium)与 Bitwarden CLI(@bitwarden/cli@2025.9.0); - 默认命令为 stdio 传输:
python -m skyvern run mcp; - 通过环境变量支持运行时切换:
SKYVERN_MCP_TRANSPORT(默认stdio)、SKYVERN_MCP_PATH(默认/mcp)、PORT(默认8000)。当SKYVERN_MCP_TRANSPORT不是stdio时,容器会以--transport <transport> --host 0.0.0.0 --port $PORT --path $SKYVERN_MCP_PATH方式启动 HTTP 传输。
推荐的 Glama 配置步骤
- 认领服务器:本仓库已包含 glama.json,授权维护者可以认领
Skyvern-AI/skyvern条目; - 指定构建镜像:在 Glama 的 Dockerfile 管理页面,将构建指向
Dockerfile.glama(即本目录的 integrations/mcp/Dockerfile); - 保持默认命令:除非 Glama 明确要求 HTTP 传输,否则保持默认命令——镜像默认以 stdio 方式运行
python -m skyvern run mcp; - 配置云端 API Key(可选):如果你希望托管的 Glama release 使用 Skyvern Cloud 的浏览器会话,需要在 Glama 中添加真实的
SKYVERN_API_KEY密钥。否则容器会以本地嵌入式(embedded)模式启动,这足以用于检查,但不适合云端的浏览器会话; - 部署并发布:等待检查通过后,在服务器管理界面使用 Glama 的「Make Release」操作发布。
与官方 MCP Registry 的关系
如果你同时要向官方 MCP Registry 发布,请将其视为独立步骤:官方 Registry 基于包元数据与server.json,而 Glama 的发布是基于容器的。两者互不替代。
常见问题与排错
结合原文档与源码,将接入过程中最常遇到的问题整理如下:
| 问题现象 | 原因与处理 |
|---|---|
浏览器工具返回BrowserNotAvailable | 使用远程/无状态端点时未先创建会话。先调用skyvern_browser_session_create,并在每次浏览器工具调用中传入browser_session_id |
opencode mcp auth Skyvern报 OAuth 回调超时 | 改用 API Key 认证:skyvern login后执行skyvern setup opencode,且之后不要再运行opencode mcp auth |
本地 stdio 模式找不到skyvern命令 | 配置中使用sys.executable(Python 解释器路径)+-m skyvern run mcp方式,而非依赖 PATH 上的二进制(见_build_local_mcp_entry) |
| 本地运行提示 Python 版本不支持 | 使用 Python 3.11(>=3.11,<3.15)环境安装 |
| 端口被占用 | skyvern run server默认端口 8000;skyvern run ui默认端口 8080,可用--force清理占用进程 |
| 想缩小 MCP 工具面 | 在args中追加--scope operate/build/browser/lean(仅本地 stdio 模式有效) |
总结
Skyvern MCP 的价值在于用一套标准协议,把「AI 驱动浏览器自动化」交付给任意 MCP 客户端:本地自托管时通过 stdio 直连、零成本起步;需要托管时可切换到 Skyvern Cloud,通过 HTTP + API Key 认证获得云端浏览器会话。skyvern init/skyvern setup向导负责完成主流 AI 工具的配置写入,--scope体系允许按职责裁剪工具面,而 integrations/mcp/Dockerfile 则支持 Glama 这类容器化发布平台直接启动 MCP 服务器完成检查与发布。对于想要让 Claude、Cursor、Windsurf、OpenCode 等工具真正「会上网」的开发者,这是一个即装即用的接入方案。
【免费下载链接】skyvernAutomate browser based workflows with AI项目地址: https://gitcode.com/GitHub_Trending/sk/skyvern
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考