文章

Chrome系列7:ScriptCat云控系列需求汇总

需求描述

服务端

在cloud-server目录下使用java实现以下功能。
1. 支持mcp服务能力,支持动态注册,客户端连接时需要进行授权,仅能获取到授权的客户端能力。
2. 支持websocket协议,定义客户端和服务端的交互逻辑,支持对客户端的云控能力。
   - 客户单具备脚本名称,标识key,目标网址,和执行相关脚本的能力,支持关键词能力。
3. 将websocket协议编写markdown文档到本地目录。
4. 输出lm-studio的mcp.json的url协议配置示例。

客户端

1. 支持类似headerEditor的能力,对CSP的请求响应进行修改,防止无法远程执行,注意规则需要在后台管理可以配置。
   - 规则管理页面名称:CSP处理
   - 可以增加一系列规则,规则包含 path,名称,描述,优先级,创建时间,更新时间等,注意 规则能力需要持久化。
2. 支持自动化脚本能力,目标实现打开目标页面,调用相关函数,实现数据的发送和接收,并且单次任务具备唯一性。
  - 客户端能力管理页面名称:自动化规则脚本
  - 支持一系列的自动脚本管理,其中标识key是唯一的,支持客户端的能力定义,包含名称,标识key,目标网址,执行的相关脚本
  - 支持对脚本进行测试,并且自动化记录历史测试日志,可以对历史的json进行重复测试
3. 支持websocket连接服务端,支持服务端协议,客户端连接的时候需要填写信息,配置相关认证。



## 补充

其中测试部分或者执行代码部分请参考:async "ai-execute-code"(message: any, _sender: RuntimeMessageSender) {
    const { tabId, code } = message;
    if (!tabId) return { success: false, error: "No tabId" };

    try {
      const result = await chrome.scripting.executeScript({
        target: { tabId },
        world: "MAIN",
        func: (codeToExecute: string) => {
          try {
            const fn = new Function(codeToExecute);
            const result = fn();
            return { success: true, result: String(result), type: typeof result };
          } catch (error: any) {
            return { success: false, error: String(error), errorType: error.constructor.name };
          }
        },
        args: [code],
      });
      return result[0]?.result;
    } catch (error: any) {
      return { success: false, error: error.message };
    }
  }
消息的结果返回使用postMessage方式传递消息,传递消息的key是任务id。

效果

对话能力如下:

坑点摸排

  1. 部分网站有CSP拦截

    1. 解决办法:类似HeaderEditor能力,对CSP进行拦截处理,但是注意是不要所有拦截,否则不安全。

服务端交互提示词

请制定一份详细的开发计划,用于在当前cloud-server目录下开发基于Java的服务端应用程序。该服务端需通过WebSocket协议与Chrome插件建立实时连接,以实现插件端的自动化脚本执行能力。计划应包含以下关键内容:

1. 项目规划与准备阶段:
   - 明确项目架构设计,包括模块划分、组件交互关系
   - 制定详细的技术选型方案,确定WebSocket实现方式(Spring WebSocket)
   - 设计项目目录结构和开发规范
   - 准备开发环境与依赖管理配置

2. 核心功能开发阶段:服务端可以管理一系列的客户端,并且客户端之间的信息需要隔离,鉴权需要账号和密码,第一阶段密码不需要鉴权。
   - WebSocket服务实现:
     * 设计并开发WebSocket连接管理机制
     * 实现连接认证与授权流程
     * 开发消息接收与发送处理逻辑
   - 插件交互功能开发:
     * 实现插件端auth信息接收与验证机制
     * 开发脚本列表接收与存储功能
     * 设计并实现主动调用插件端脚本的触发机制
     * 开发脚本执行状态跟踪与反馈系统(执行中、成功、失败等状态)

3. 接口与协议设计阶段:
   - 设计插件端向服务端提供脚本列表的接口规范
   - 定义脚本相关配置信息的数据结构与JSON传输格式
   - 制定WebSocket消息格式标准,包括请求类型、脚本标识、参数传递等要素
   - 设计消息校验机制与数据传输安全策略
   - 实现连接重连机制与连接稳定性保障方案

4. 质量保障与测试阶段:
   - 开发高并发处理能力的优化方案
   - 实现全面的错误处理与异常恢复机制
   - 编写单元测试、集成测试用例
   - 进行性能测试与压力测试
   - 验证脚本执行状态反馈机制的准确性

5. 文档与交付准备阶段:
   - 整理完整的服务端源代码及配置文件
   - 编写详细的API文档,说明WebSocket消息格式及交互流程
   - 开发简单的测试用例,验证服务端基本功能
   - 准备部署说明与环境配置指南

6. 完成插件端的管理页面开发,实现与服务端的交互,标准采用上述标准
   - 管理页面:云控管理连接
请提供上述开发计划的详细内容,包括各阶段的具体任务、时间估计、技术难点及解决方案,以便确认后执行开发工作。


现在服务端完成了,接下来请按照协议编写chrome plugin端的技术方案,请让我确认后再执行。

1. 请在plugin端的管理页面新增:云控管理。

2. 页面具备对web socket的链接配置,当前链接状态,定时心跳发送,鉴权配置等能力,可以查看web socket的通信日志。

3. 自动上报scriptList功能,1min主动更新上报一次,并且在当前页面可以对部分script进行不上报,在这里具备配置能力。


期望这个连接配置是在后台自动连接的,不期望刷新页面后就断开。现在看起来刷新页面就断开了,还有为什么脚本你上报配置是空的,暂无脚本,但是 Automation Scripts 有脚本呢

期望服务端的index.html管理页面可以具备获取当前有哪些用户连接,并且获取哪些可用脚本,然后可以发送数据到客户端进行执行的动作,达到执行云控的目的,请补充能力及相关代码。

MCP服务端建设教程

## 需求
当前服务端已经具备和chrome plugin交互的能力,可以获取到plugin端的脚本,也可以去执行。现在期望服务端暴露server的mcp能力,通过Bearer 用户能够在mcp连接时将plugin端的脚本直接暴露成tools,在mcp触发调用时直接去执行将结果返回。

## 支持
### MCP技术实现
请使用MCP的Java Spring Boot SDK,官网:https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html
使用Streamable-HTTP MCP Servers模式。


### LM-Studio  连接示例
{
  "mcpServers": {
    "hf-mcp-server": {
      "url": "https://huggingface.co/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_HF_TOKEN>"
      }
    }
  }
}
## MCP代码参考

https://github.com/alexandredavi/mcp-webmvc-server

### 注意事项
1. 假设plugin端用户是boommanpro,则LM-Studio示例则是:Authorization Bearer boommanpro
2. 如果plugin端的脚本出现更新,也需要动态更新对应用户的tools
3. 不同用户的tools是隔离的,即每个用户通过Authorization获取自己的tools,调用自己的tools
4. 完成后请使用curl 对sse,message等mcp接口进行自测
  1. 因为mcp的信息较少,ai能够分析的结果并不好,经常出错分析不出根本原因,建议从协议层入手重新编写。

  2. 如果是demo,无鉴权情况,直接使用spring boot ai框架