上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

魔改脚本猫(支持mcp暴露浏览器操作功能)

[复制链接]
  • TA的每日心情
    开心
    2023-12-24 00:00
  • 签到天数: 31 天

    [LV.5]常住居民I

    6

    主题

    43

    回帖

    60

    积分

    初级工程师

    积分
    60

    油中3周年挑战者 lv1

    发表于 6 小时前 | 显示全部楼层 | 阅读模式

    *为 ScriptCat 的「外部接入(External Access)」体系新增了 `browser.` 浏览器操作能力**——让获得授权的外部程序(AI 客户端 / MCP / CLI)可以操作浏览器标签页、页面交互、Cookie 与站点数据;同时在 sctl 中把这套能力通过 MCP 与 CLI 暴露出来,并配套了独立的权限开关与文档。


    一、ScriptCat(扩展端)

    1. 外部接入新增 browser.* 浏览器操作能力(3c3434da

    在 External Access 的桥接协议里加入了 *15 个 `browser.` action**,调用方(经外部接入连接的 AI 客户端)可以:

    能力分组 方法 效果
    标签页 browser.tabs.list 列出标签页
    标签页 browser.tabs.open 打开 / 导航到 URL
    标签页 browser.tabs.close 关闭标签页
    标签页 browser.tabs.activate 切换 / 聚焦标签页
    页面 browser.page.read 读取页面可见内容(HTML→带选择器标注的可读文本,按内容预算裁剪)
    页面 browser.page.screenshot 截图(返回 JPEG/PNG data URL)
    页面 browser.page.click 点击元素(CDP 可信事件)
    页面 browser.page.fill 填充表单
    页面 browser.page.scroll 滚动(上/下/顶/底)
    页面 browser.page.wait 等待元素出现
    Cookie browser.cookies.list 列出 Cookie 元数据(永不返回值
    Cookie browser.cookies.delete 删除指定 Cookie
    站点数据 browser.bookmarks.list 列出书签
    站点数据 browser.history.list 列出历史
    站点数据 browser.downloads.list 列出下载

    关键实现要点:

    • 读直通、写走审批:读类动作(list/read/screenshot)直接放行;写类动作(open/close/activate/click/fill/delete cookie)经 ExternalAccessApprovalService 批准后,由同一执行器落地。
    • 安全边界:页面类操作复用内部 agent 的 AgentDomServicechrome:// 等内部页走 assertDomUrlAllowed 黑名单拦截,命中即返回明确的 INVALID_REQUEST);标签页级的 list/close/activate 不接触页面内容,不走该守卫。
    • 协议与校验:新增 protocol.generated.ts / validators.generated.ts / protocol-wire.ts,bridge 校验器与 browser.ts 执行器复用同一套 RPC 方法定义。
    • manifest 新增 bookmarks / history 权限。
    • 确认页改进:浏览器写操作在确认页展示明文参数;操作被作废(请求方取消 / 超时 / TTL)后自动翻到「已过期」状态,避免用户在僵尸确认页上点出 operation already cancelled
    • offscreen 修复:①业务方法按生成的 RPC_METHODS 放行(此前 browser.* 被静默丢弃);②SW 唤醒重发 connect 时复用健康连接,修复每 60 秒闪断;③参数 schema 不合法回 INVALID_REQUEST 而非误关整条连接。
    • 全语言文案同步(de/en/ja/ko/pt/ru/tr/vi/zh-CN/zh-TW)。

    主要改动文件:
    src/app/service/service_worker/external_access/{browser.ts,bridge.ts,approval.ts,types.ts}
    src/app/service/agent/service_worker/dom.tssrc/app/repo/external_access.ts
    src/pages/external_access_confirm/App.tsxsrc/pages/install/useInstallData.ts
    src/manifest.jsonsrc/pkg/config/config.ts、各 src/locales/*/external_access.json 及测试。

    2. 权限策略拆分出独立的「浏览器操作」开关(56a92d5f

    把"浏览器操作"从原有的「脚本写操作」权限中拆成独立策略,三者并列、互不影响:

    策略项(SystemConfig) 默认值 控制范围
    external_access_write_policy 需审批 脚本写操作
    external_access_browser_policy 需审批 浏览器操作(新增)
    external_access_source_read_policy 需审批 源码读取
    • 浏览器写操作(开关 / 切换标签页、页面点击与填充、删除 Cookie)改为走 external_access_browser_policy——允许脚本变更,不再等于允许 AI 操纵浏览器会话
    • 设置页「外部接入」卡片新增第三行策略分段控件(含「直接允许」的琥珀色警示);外部接入弹窗的默认权限清单同步补充浏览器操作条目。
    • bridge.ts 增加两策略互相独立的分流契约测试;设置页新增浏览器策略行测试。

    二、sctl(桥接 / MCP / CLI 端)

    3. 通过 MCP + CLI 暴露 browser.* 工具(05ad6cf

    把 ScriptCat 端的同一套 15 个 browser.* 方法,在 sctl 中落地为可被发现、带 schema 的工具:

    • 协议internal/pkg/protocol/protocol.json 新增 15 个 browser.* 方法,含 scope、读/写效果与审批语义;重新生成 Go / TS 绑定(protocol.generated.go / protocol.generated.ts / validators.generated.ts)。
    • MCP 服务internal/client/mcpserver/tools.go 为全部 browser 工具定义 MCP tool(Cookie 仅元数据、永不暴露值;截图返回 JPEG/PNG data URL)。
    • CLIinternal/cli/browser.go(+704 行)新增 tabs / page / cookies / records 四个命令组,例如:
      • sctl tabs list|open|close|activate
      • sctl page read|screenshot|click|fill|scroll|wait
      • sctl cookies list|delete
      • sctl records bookmarks|history|downloads
    • 守护进程:记录扩展连接关闭的 code / reason,便于诊断。
    • 文档docs/protocol.md 方法表、README.mddocs/README_zh-CN.md 命令表。

    4. 补全部署 / CLI 文档与 agent skill(13e330d

    • docs/deploy.md:把构建产物(release 或自编译单文件)跑成常驻守护进程——PATH 配置、单一数据目录规则、各 OS 守护示例、升级流程、MCP/CLI/skill 消费方接线。
    • docs/cli.md:完整命令参考——全局 flag、输出格式、退出码、写操作的阻塞语义、逐命令示例(已对 sctl --helpcli.go 退出常量核验)。
    • skills/scriptcat/SKILL.md:随包分发的 agent skill,教 AI 编码智能体如何驱动这些命令;由 deploy.md 给出安装指引,索引与两份 README 互相交叉链接。

    精确提交清单

    scriptcatupstream/main..feature/mcp):

    56a92d5f ✨ 外部接入权限策略拆分出独立的「浏览器操作」开关
    3c3434da ✨ 外部接入新增 browser.* 浏览器操作能力(标签页/页面交互/站点数据)

    sctlupstream/main..feature/mcp):

    13e330d docs: add deploy.md, cli.md and the shipped scriptcat agent skill
    05ad6cf feat: expose browser.* tools (tabs/page/cookies/records) over MCP and CLI

  • TA的每日心情
    开心
    2023-12-24 00:00
  • 签到天数: 31 天

    [LV.5]常住居民I

    6

    主题

    43

    回帖

    60

    积分

    初级工程师

    积分
    60

    油中3周年挑战者 lv1

    发表于 6 小时前 | 显示全部楼层
    Vibe coding 了一下,给哥哥开发提供一点小想法,哈哈哈。在脚本猫里面用 Agent 时遇到一个痛点——无法基于工作区进行管理。比如通过网页填充的场景要维护一个代码库,或者基于某个网站的操作要维护一个 Skill,只能写到内置工作区里,操作起来还是不够方便。最近摸索了一下,觉得可以把脚本猫做成 MCP 或 CLI 工具 + Skill 的形式,这样 Agent 的选择就多样起来了。脚本猫作为工具,相比其他浏览器操作工具,最大的优势在于可以基于操作直接生成脚本复用,这一点就比其他工具领先了一大截。
    回复

    使用道具 举报

  • TA的每日心情

    7 小时前
  • 签到天数: 1324 天

    [LV.10]以坛为家III

    112

    主题

    575

    回帖

    1230

    积分

    高级专家

    脚本猫首席体验官

    积分
    1230

    油中2周年生态建设者新人报道油中3周年挑战者 lv2喜迎中秋

    发表于 5 小时前 | 显示全部楼层
    ggnb!
    回复

    使用道具 举报

    发表回复

    本版积分规则