Skip to main content

webmcp-cli-skill

面向第三方 AI Agent 的安装与执行指南:如何使用 webmcp-cli 与浏览器页面交互。包含已注入 WebMCP 工具的页面领域专用工具说明。

Source facts

Repository
opentiny/agent-skills
Last source activity
August 18, 2026 at 07:16
Detected SKILL.md language
Chinese
Stars
20
Forks
2

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
9 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
webmcp-cli-skill
description
面向第三方 AI Agent 的安装与执行指南:如何使用 webmcp-cli 与浏览器页面交互。包含已注入 WebMCP 工具的页面领域专用工具说明。
license
MIT
metadata
{"author":"opentiny","version":"1.2.0"}
# WebMCP CLI Skill 本 Skill 为第三方 AI Agent 提供完整说明,介绍如何通过 Model Context Protocol(MCP)使用 `webmcp-cli` 与浏览器页面交互。 ## 何时使用 - 需要与网页交互(点击元素、填写表单、滚动页面)时。 - 需要读取当前 DOM 结构并识别可交互元素时。 - 在已注入领域专用工具的页面上操作时(例如 Excalidraw 绘图工具)。 ## 安装 用户环境通常都已经安装好 `webmcp-cli` 工具,当shell终端提示找不到工具时,才进行下面的安装: ```bash npm install -g @opentiny/webmcp-cli ``` ## 命令 ### 1. 管理浏览器标签页 `webmcp-cli tabs` 所有子级命令如下: ```bash webmcp-cli tabs open https://excalidraw.com # 打开新网页 webmcp-cli tabs close <tabid> # 关闭指定标签页 webmcp-cli tabs switch <tabid> # 切换到指定标签页 webmcp-cli tabs back # 当前标签页后退 webmcp-cli tabs back <tabid> # 指定标签页后退 webmcp-cli tabs forward # 当前标签页前进 webmcp-cli tabs forward <tabid> # 指定标签页前进 ``` ### 2. 查询浏览器当前状态 `webmcp-cli state` 它返回当前浏览器的**导航元数据**(url、title、activeTabid、webmcpTools、所有已打开页签),是确认当前页面有哪些可用工具(`webmcpTools`)的唯一方式。 > **注意**:`state` 不返回页面 DOM 内容(没有 `content` 字段)。需要获取可交互元素或页面信息状态时,请显式调用 `page-agent-tool` 的 `browserState` 或 `searchTree` 动作。 ```bash webmcp-cli state webmcp-cli state -t <targetId> # target a specific tab by its real Chrome target ID ``` **输出示例:** ```json { "url": "https://www.baidu.com/", "title": "百度一下,你就知道", "activeTabid": "2EA73ED323E46E5E108D4E46DA4E4AA7", "webmcpTools": [{ "name": "page-agent-tool" }, { "name": "baidu_search" }], "tabs": [ { "tabid": "2EA73ED323E46E5E108D4E46DA4E4AA7", "title": "百度一下,你就知道", "url": "https://www.baidu.com/" } ] } ``` 返回值中, `tabs` 属性值是浏览器当前打开的全部标签页的信息,其它属性为当前激活页面的URL、标题、已注入的 MCP 工具列表(`webmcpTools`)。 > `tabid` 是 **真实的 Chrome target ID**(UUID)。配合 `-t` 可指定某个标签页。 `webmcpTools`的值的数组中如果有 `system-overview`的工具,并且在本轮对话中,该域名下没有调用过它,那么一定要立即执行一下 。`system-overview`工具的返回值能指导后续的操作,比如会包含网站的`模块 & 路由 & 页面工具 &使用规范`等等内容。 ```bash webmcp-cli run system-overview '{}' ``` #### 何时必须调用 state | 时机 | 是否必须先 `state` | 说明 | | --------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------ | | 执行 `tabs open` 之前 | 否 | `tabs open` 是唯一可在未先 `state` 的情况下直接执行的命令 | | 执行 `tabs` 之后 | **是** | 新页面加载并注入工具后,须用 `state` 获取新页面的 `webmcpTools` | | 执行 `run` 之前 | **是** | 须先通过 `state` 确认工具列表,再用 `browserState` 或 `searchTree` 获取页面可交互元素 | | 连续多次 `run` 之间 | 视情况 | 若需重新确认工具列表或当前页面,才需再次 `state`;仅获取 DOM 变化直接使用 `page-agent-tool` 相关 action 即可 | **推荐工作流:** 1. **打开页面**:使用 `tabs open` 命令导航到目标 URL。 2. **确认状态**:使用 `state` 获取导航元数据,确认 `webmcpTools` 是否注入完毕。 3. **获取页面信息**:这是与页面交互**最关键的一步**!由于 `state` 不包含 DOM 内容,你必须通过 `page-agent-tool` 来获取页面的可交互元素。**请根据实际情况自主思考并选择获取方式**: - **方式 A(按需搜索)**:如果你明确知道要寻找的元素特征(例如“登录”按钮),**优先使用** `searchTree` 以节省大量上下文 Token。 `webmcp-cli run page-agent-tool '{"action": "searchTree", "query": "登录"}'` - **方式 B(全量获取)**:如果你需要全面了解页面结构,或者不知道页面上具体有什么元素,请使用 `browserState` 抓取完整的无障碍树。 `webmcp-cli run page-agent-tool '{"action": "browserState", "responseMode": "full"}'` 4. **执行交互**:拿到上一步返回的元素索引(`index`)后,再执行 `click`、`fill` 等具体操作。 执行 `page-agent-tool` 操作(点击、填写、滚动等)时,**必须** 依据 `browserState` 或 `searchTree` 返回的元素索引确定元素 `index`,切勿沿用过期猜测的索引。 ### 3. 执行页面上的工具 `webmcp-cli run <tool-name> '<json-args>'` 在当前活动页面上执行 MCP 工具, `json-args` 要提前转义为有效的cli参数。 ## 调用规范 该工具可以在多种终端下运行,但优先使用 `bash` shell 来运行。 不同终端传入 `json-args` 参数时,请严格依照下面规则传入: - bash终端: 使用单引号包裹`json-args` , eg. '{"action": "fill", "index": 0, "text": "你的幽默风趣技术标题"}' - cmd终端: 使用双引号包裹`json-args`, 且里面的双引号需要转义, eg. "{\"action\": \"fill\", \"index\": 0, \"text\":\"你的幽默风趣技术标题\"}" - powershell 终端: 使用单引号包裹`json-args`, 且里面的双引号需要转义, eg. `{\"action\": \"fill\", \"index\": 0, \"text\":\"你的幽默风趣技术标题\"}' 在遇到控制台报错: `executing run command: 参数不是有效的 JSON`时, 一定要检查`json-args` 参数的格式是否符合上面的规则。 ### 3.1 `page-agent-tool` 它是一个自动化操作网页的工具,每一个页面都会存在,可以直接调用。支持以下动作(`action`): `browserState`、`searchTree`、`click`、`fill`、`select`、`scroll`、`executeJavascript`。 此外,该工具接收配置参数 **`responseMode`**,用于控制操作后返回的页面状态形式: - **`diff`**(默认):仅返回自上一次状态以来的增量 DOM 差异,极大节省 Token。 - **`full`**:返回当前视口中完整的语义化 ARIA YAML 树。 - **`both`**:同时返回全量树和增量差异。 执行 `click`、`fill`、`select`、`scroll` 等操作后,工具会自动以指定 `responseMode`(默认 `diff`)返回最新页面状态,**无须再次手动调用 `browserState`**。 #### 示例: ```bash # 1. 首次获取全量页面状态 webmcp-cli run page-agent-tool '{"action": "browserState", "responseMode": "full"}' # 2. 点击索引为 18 的元素,自动返回 diff webmcp-cli run page-agent-tool '{"action": "click", "index": 18}' # 3. 填充文本框 webmcp-cli run page-agent-tool '{"action": "fill", "index": 13, "text": "Hello"}' # 4. 选择下拉框选项 webmcp-cli run page-agent-tool '{"action": "select", "index": 7, "value": "option_value"}' # 5. 滚动页面,同时获取全量与增量 webmcp-cli run page-agent-tool '{"action": "scroll", "down": true, "numPages": 1, "responseMode": "both"}' # 6. 执行 JavaScript webmcp-cli run page-agent-tool '{"action": "executeJavascript", "script": "document.title"}' # 7. 对指定标签页操作 webmcp-cli run page-agent-tool '{"action": "browserState"}' -t <targetId> ``` #### 3.1.1 Browser State:页面无障碍树格式说明 `browserState` 返回当前页面的语义化 YAML 无障碍树,格式如下: ```yaml - region: - main: - button #9 [cursor=pointer] "产品文档" - button #47 [selected] [cursor=pointer] "40元/月 2核CPU 2GB内存" - radio #53 [checked] [cursor=pointer] "自动生成密码" - button #74 [cursor=pointer] "立即购买" - generic #6 [cf-uba="serviceList..Flexus云服务"] "Flexus云服务" ``` **节点格式**:`- role #N [token1] [token2] "accessible name"` | 字段 | 说明 | | ----------------- | -------------------------------------------------------------------------------------- | | `role` | ARIA 语义角色(button / link / radio / heading / listitem / generic 等) | | `#N` | 可交互元素的唯一操作索引,**只有带 `#N` 的节点才能被操作**,操作时将 N 作为 `index` 参数传入 | | `[token]` | 可选 token:状态标记(`[checked]` `[selected]` `[disabled]` `[cursor=pointer]`)或定制属性(`[cf-uba="..."]`) | | `"accessible name"` | 元素的语义化名称,**用双引号包裹**(通过 aria-label / aria-labelledby / innerText 等计算得出);无名称节点此字段省略 | | 缩进 | 表示父子关系 | > ⚠️ **每次操作后 `#N` 索引会重新分配,不要复用旧索引。** #### 3.1.2 Browser State Diff:增量差异格式说明 执行交互操作后,工具默认返回增量差异(Diff)以减少 Token 消耗: ```diff - button #9 "产品文档" + button #9 "产品文档 (已点击)" ``` 或者当页面结构发生改变时,会展示新增或移除的节点差异。优先阅读 Diff 以快速确认操作是否生效;仅当 Diff 不足以支持下一步决策时,再显式调用 `browserState(full)`。 #### 3.1.3 `searchTree`:按关键词精准搜索无障碍树(优先使用) > 与业界 AI 编辑器(Cursor / Windsurf)**按需读取文件**的策略完全一致—— > **先精准搜索,再按需拉取全量**,将发送给模型的 token 降至最低。 **决策流程(请严格遵循):** ``` 已知要找的元素类型或名称? ↓ 是 → 先用 searchTree 搜索 ↓ 找到了? 是 → 直接使用命中的 #N 索引操作 否 → 再用 browserState(full) 获取全量树兜底 ↓ 否(完全不知道页面有什么) → 用 browserState(full) 获取完整树 ``` **支持的搜索维度(均对同一个 query 字符串做包含匹配):** | 搜索目标 | 示例 query | 说明 | | ------------ | ----------------------------------------- | ----------------------------------- | | 按 role 类型 | `button` / `link` / `heading` / `textbox` | 查找特定角色的节点 | | 按元素名称 | `提交` / `下一步` / `立即购买` | 查找 accessible name 含该文本的节点 | | 按状态 | `checked` / `disabled` / `expanded` | 查找特定状态的节点 | | 按 ref 索引 | `#5` | 精确定位某个已知 ref | **参数:** - `query`(必填):搜索关键词 - `contextLines`(可选,默认 2):每个命中行前后保留的上下文行数 - `maxMatches`(可选,默认 20):最多返回的分组数,防止结果过多 **示例:** ```bash webmcp-cli run page-agent-tool '{"action": "searchTree", "query": "button"}' webmcp-cli run page-agent-tool '{"action": "searchTree", "query": "提交", "contextLines": 3}' webmcp-cli run page-agent-tool '{"action": "searchTree", "query": "checked"}' webmcp-cli run page-agent-tool '{"action": "searchTree", "query": "#42", "contextLines": 1}' ``` **输出示例:** ``` 无障碍树搜索结果 — 关键词: "button" | 总行数: 182 | 命中: 4 行 | 返回分组: 1 ── 分组 1(第 159–171 行)── 159 | - generic #132 [cursor=pointer] 160 | - link #133 [cursor=pointer] >>> 161 | - button #134 [cursor=pointer] "立即购买" 162 | - link #135 [cursor=pointer] "计费说明" >>> 165 | - button #138 [cursor=pointer] "立即购买" 提示:如需操作命中元素,使用其 #N 索引;如需查看完整树,请使用 browserState。 ``` `>>>` 标注的行是命中行,其余是上下文。拿到 `#N` 后直接传给 `click` / `fill` 等动作。 #### 3.1.4 页面状态获取四原则 1. **按关键词精准搜索(最高优先级)**:已知要找的元素类型或名称时,**优先使用 `searchTree`**,token 消耗比全量树减少 80%+。 2. **首次获取全量**:首次进入页面、页面发生重大刷新、或 `searchTree` 无法找到所需信息时,调用 `browserState` 并指定 `responseMode` 为 `full` 或 `both`。 3. **增量优先**:执行 `click`、`fill`、`select`、`scroll` 操作后,工具默认自动返回 `diff` 增量信息,优先阅读这些 Diff 以快速确认操作是否生效。 4. **按需拉取全量**:如果增量 Diff 不足以支持下一步操作,或需要寻找不在 Diff 中的 `#N` 节点,且 `searchTree` 也无法定位时,再显式调用 `browserState` 拉取完整树。 #### 3.1.5 Browser Rules(操作约束) 在使用 `page-agent-tool` 与网页交互时,严格遵守以下规则: - **仅与具有 `#N` 索引的元素进行交互**,将 N 作为 `index` 参数传入,仅使用明确出现在树中的索引。 - **每次操作后 `#N` 索引会重新分配**,不要使用旧索引。 - 操作后分析返回的 Diff,判断是否需要与新出现的元素交互(如从下拉列表中选择选项)。 - 默认仅列出**可见视口**中的元素;若需要交互的元素在屏幕外,先使用 `scroll` 操作滚动。可用 `numPages` 参数控制滚动幅度(0.5 = 半页,2.0 = 两页)。 - 如果出现**验证码**,告知用户无法自动解决,请用户手动处理后再继续。 - 如果缺少预期元素,尝试滚动或导航后退。 - **不要重复同一操作超过 3 次**,除非有明确的条件变化。 - 如果向输入框填充文本后操作被中断(如弹出下拉建议),说明页面状态已变化,需先处理新出现的元素。 - 如果 `<user_request>` 包含具体筛选条件(产品类型、价格、位置等),优先应用过滤器提高效率。 - 如果向输入框填写文本,可能需要按回车、点击搜索按钮或从下拉列表中选择才能完成操作。 - **不要在无凭据的情况下尝试登录**。 #### 3.1.6 Capability(能力边界) - `page-agent-tool` **只能处理单页应用**,不要跳出当前页面。
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub