mmadfox/go-crx3
GitHub: mmadfox/go-crx3
一个通过MCP协议集成AI的Chrome CRX3扩展管理Go工具,简化扩展打包、下载和分析等操作。
Stars: 55 | Forks: 12
# crx3
[](https://coveralls.io/github/mmadfox/go-crx3?branch=master)
[](https://pkg.go.dev/github.com/mediabuyerbot/go-crx3)
[](https://goreportcard.com/report/github.com/mediabuyerbot/go-crx3)

👉 **[MCP 配置指南](./MCP.md)** — Cursor、Claude Desktop、Opencode、Crush 等的设置说明。
## 🤖 MCP 集成
本工具通过 [Model Context Protocol (MCP)](https://modelcontextprotocol.io) 实现 **AI 兼容**,支持与以下客户端无缝交互:
- ✅ **Cursor IDE** — 与您的扩展对话,自动生成打包文件
- ✅ **Claude Desktop** — 使用自然语言操作 CRX3
- ✅ **Opencode** — 自动化扩展工作流
- ✅ **Crush** — AI 辅助的扩展管理
- ✅ **任何 MCP 客户端** — 支持 HTTP/SSE 或 stdio 传输
通过 AI 驱动的自然语言命令自动化 CRX3 操作。
📖 详细设置说明请参阅 **[MCP.md](./MCP.md)**。
## 🛠️ 命令参考
| 工具 | 用途 |
|------|------|
| `crx3 pack` | 将目录/压缩文件打包为已签名的 `.crx` 扩展 |
| `crx3 unpack` | 将 `.crx` 文件内容解压到目录 |
| `crx3 download` | 通过 ID 或 Chrome 网上应用店 URL 下载 `.crx` 扩展 |
| `crx3 search` | 通过名称/关键字搜索 Chrome 网上应用店(基于 DuckDuckGo) |
| `crx3 zip` | 从目录创建 `.zip` 归档文件 |
| `crx3 unzip` | 提取 `.zip` 归档文件内容 |
| `crx3 base64` | 将文件编码为 Base64 字符串 |
| `crx3 getid` | 从 `.crx` 文件或目录提取 Chrome 扩展 ID |
| `crx3 scan` | 列出/过滤工作空间中已下载的扩展 |
| `crx3 workspace` | 获取工作空间根目录的绝对路径 |
| `crx3 version` | 显示 CRX3 工具版本 |
| `crx3 mcp` | 启动用于 AI 集成的 MCP 服务器 |
## 📦 安装
### 通过 Homebrew (macOS/Linux)
```
brew tap mmadfox/tap https://github.com/mmadfox/homebrew-tap
brew install mmadfox/tap/crx3
```
### 通过 install.sh (Linux/macOS)
```
sudo curl -sSfL https://raw.githubusercontent.com/mmadfox/go-crx3/master/install.sh | bash -s
```
### 通过 Go
```
go install github.com/mediabuyerbot/go-crx3/crx3@latest
```
### 通过发布二进制文件
从 [Releases](https://github.com/mmadfox/go-crx3/releases) 下载预构建的二进制文件。
### 验证安装
```
crx3 version
# 输出:crx3 版本 x.y.z
```
## 🚀 快速开始示例
### 打包一个扩展
```
# 基本打包(缺少密钥时自动生成)
crx3 pack ./my-extension -o ./build/extension.crx3
# 使用现有私钥打包
crx3 pack ./my-extension -p ./keys/private.pem -o ./build/extension.crx3
```
### 解包并检查
```
# 将 CRX3 解压到目录
crx3 unpack ./extension.crx3 -o ./extracted
# 查看 manifest
cat ./extracted/manifest.json
# 不创建子目录
crx3 unpack ./extension.crx3 -o ./extracted -s
```
### 从 Chrome 网上应用店下载
```
# 按扩展程序 ID
crx3 download blipmdconlkpinefehnmjammfjpmpbjk -o ./extensions/lighthouse
# 不自动解压
crx3 download blipmdconlkpinefehnmjammfjpmpbjk --unpack=false
# 按完整 URL
crx3 download "https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk"
```
### 生成扩展 ID
```
# 从现有 CRX3 文件
crx3 id ./extension.crx3
# 输出:dgmchnekcpklnjppdmmjlgpmpohmpmgp
# 从公钥
crx3 id -k ./keys/public.pem
```
### 密钥管理
```
# 生成新的 RSA 密钥对
crx3 keygen ./keys/my-key.pem
# 同一命令创建私钥文件 private.pem 并在内部提取公钥
```
### 归档操作
```
# 压缩目录
crx3 zip ./my-extension -o ./archive.zip
# 解压存档
crx3 unzip ./archive.zip -o ./output
```
### Base64 编码(用于嵌入)
```
# 将 CRX3 编码为 base64
crx3 base64 ./extension.crx3
# 保存到文件
crx3 base64 ./extension.crx3 -o ./encoded.txt
```
### 搜索 Chrome 网上应用店
```
# 按关键字搜索
crx3 search "ad blocker"
```
## 💻 代码示例 (Go API)
### 打包 zip 文件或目录
```
import crx3 "github.com/mediabuyerbot/go-crx3"
// Basic pack
if err := crx3.Extension("/path/to/file.zip").Pack(nil); err != nil {
panic(err)
}
// Pack with private key
pk, err := crx3.LoadPrivateKey("/path/to/key.pem")
if err != nil { panic(err) }
if err := crx3.Extension("/path/to/file.zip").Pack(pk); err != nil {
panic(err)
}
// Pack to custom output path
if err := crx3.Extension("/path/to/file.zip").PackTo("/path/to/ext.crx", pk); err != nil {
panic(err)
}
```
### 解包扩展
```
import crx3 "github.com/mediabuyerbot/go-crx3"
if err := crx3.Extension("/path/to/ext.crx").Unpack(); err != nil {
panic(err)
}
```
### 从网上应用店下载
```
import crx3 "github.com/mediabuyerbot/go-crx3"
extensionID := "blipmdconlkpinefehnmjammfjpmpbjk"
if err := crx3.DownloadFromWebStore(extensionID, "/path/to/ext.crx"); err != nil {
panic(err)
}
```
### 生成/加载密钥
```
import crx3 "github.com/mediabuyerbot/go-crx3"
// Generate new key
pk, err := crx3.NewPrivateKey()
if err != nil { panic(err) }
// Save and load
if err := crx3.SavePrivateKey("/path/to/key.pem", pk); err != nil { panic(err) }
pk, err = crx3.LoadPrivateKey("/path/to/key.pem")
```
### 辅助函数
```
import crx3 "github.com/mediabuyerbot/go-crx3"
// Type detection
crx3.Extension("/path/to/ext.zip").IsZip() // true
crx3.Extension("/path/to/ext").IsDir() // true
crx3.Extension("/path/to/ext.crx").IsCRX3() // true
// Get extension ID
id, err := crx3.Extension("/path/to/ext.crx").ID()
```
### Base64 编码
```
import crx3 "github.com/mediabuyerbot/go-crx3"
b, err := crx3.Extension("/path/to/ext.crx").Base64()
if err != nil { panic(err) }
fmt.Println(string(b))
```
## ⚙️ 高级用法
### MCP 服务器模式
| 模式 | 命令 | 用例 |
|------|------|------|
| **stdio** | `crx3 mcp` | 本地 AI 客户端(Cursor、Claude Desktop) |
| **HTTP/SSE** | `crx3 mcp --listen=:3000` | 远程客户端、自定义集成 |
### 常用标志
```
# 全局标志
--workdir, -w # Set working directory (default: .)
--logfile, -f # Path to log file (default: stderr)
# MCP 特定标志
--listen, -l # Run HTTP server at address (e.g., :3000)
--tools.disabled, -d # Disable specific tools (comma-separated)
--tools.show, -s # List available tools and exit
```
### 示例:安全的 MCP 设置
```
# 使用受限工具和沙箱目录运行 MCP
crx3 mcp \
--workdir=/safe/extensions \
--tools.disabled=crx3_download,crx3_unpack \
--logfile=/var/log/crx3-mcp.log
```
## 🧪 开发
```
# 生成 protobuf 代码
make proto
# 运行带覆盖率的测试
make test/cover
# 查看覆盖率报告
go tool cover -html=coverage.out
```
## 📚 资源
- 📘 [CRX3 格式规范](https://developer.chrome.com/docs/extensions/mv3/architecture-overview/)
- 🤖 [Model Context Protocol](https://modelcontextprotocol.io)
- 🐛 [错误报告与问题反馈](https://github.com/mmadfox/go-crx3/issues)
## 📄 许可证
go-crx3 基于 **Apache 2.0 许可证** 发布。
详情请参阅 [LICENSE](https://github.com/mediabuyerbot/go-crx3/blob/master/LICENSE)。
标签:AI 兼容工具, Chrome 扩展管理, CRX3 打包, CRX3 解压, EVTX分析, Go 语言工具, MCP 集成, SOC Prime, ZIP 压缩, ZIP 解压, 命令行接口, 基础工具软件, 工作区管理, 开发工具, 扩展下载, 扩展扫描, 扩展搜索, 数字取证, 日志审计, 模型上下文协议, 浏览器扩展工具, 自动化脚本, 自然语言命令, 软件工具