内容
# MCP 站点
本地 MCP 服务器管理员,委派给 OpenCode。连接你的小智代理到由 OpenCode 增强的操作系统工具。
## 功能
```
小智(语音)
│
▼
┌─────────────────────┐
│ MCP 站点 │ ← 该应用
│ ┌───────────────┐ │
│ │ OpenCode 服务 │ │ ← OpenCode 作为核心
│ └───────────────┘ │
│ ┌───────────────┐ │
│ │ 工具注册表 │ │ ← 真实工具(文件系统、命令、应用)
│ └───────────────┘ │
└─────────────────────┘
```
- **委托任务给 OpenCode** — 当小智请求复杂任务时,MCP 站点将其传递给 OpenCode(`opencode 服务`),后者有权访问强大的模型和自己的工具。
- **暴露真实工具** — `读取文件`、`创建文件`、`列出目录`、`打开应用程序`、`执行命令`(带有白名单)。
- **通过 `自定义服务` MCP 端点(WebSocket `wss://api.xiaozhi.me/mcp/?token=...`)与小智连接**。
- **用于管理模块、MCP 服务器、工具和监控连接的 Web 界面**。
## 要求
- **Go 1.24+** — 后端
- **Node.js 20+** — 前端
- **OpenCode CLI** 已安装(`curl -fsSL https://opencode.ai/install | bash`)
## 初始化
```bash
# 1. 安装依赖
cd apps/web && npm install && cd ../..
cd apps/server && go mod tidy && cd ../..
# 2. 启动后端(端口 8080)
cd apps/server && go run .
# 3. 启动前端(端口 5173,代理到 :8080)
cd apps/web && npm run dev
```
后端会自动启动 `opencode 服务`,监听端口 4096。如果您已经有一个运行中的服务,它会检测到它并连接。
打开 `http://localhost:5173` 以查看界面。
## 架构
```
apps/
├── server/ # Go 后端
│ ├── main.go # 入口点,启动 OpenCode 服务
│ └── internal/
│ ├── api/ # HTTP API(REST + WebSocket MCP 在 /ws)
│ ├── mcp/ # 运行时(入站 WS)+ 客户端(出站到小智)
│ ├── opencode/# 对抗 opencode 服务的 HTTP 客户端,进程管理器
│ ├── tool/ # 真实工具注册表
│ ├── storage/ # SQLite(集成、模块、服务器、日志)
│ └── model/ # 共享类型
└── web/ # 前端 React + TypeScript + Vite + Tailwind
└── src/
├── pages/ # MCP 集成、模块、服务器、监控、日志
├── components/ # 卡片、工具测试面板、UI 组件
└── store/ # Zustand 存储
```
## 面板
| 路径 | 功能 |
|---|---|
| `/` | 仪表盘 — 总体状态、活动模块、连接 |
| `/mcp` | **MCP 集成** — 连接/断开小智端点、测试工具 |
| `/模块` | 启用/禁用模块(OpenCode 适配器、文件系统等) |
| `/服务器` | 注册额外的 MCP 服务器 |
| `/opencode` | OpenCode 会话 — 跟踪、清理、状态 |
| `/日志` | 事件日志、工具调用、错误 |
| `/监控` | 服务器资源使用 |
## 与小智的流程
1. 进入小智控制台 → `配置角色` → `MCP 设置` → `自定义服务`
2. 复制端点 `wss://api.xiaozhi.me/mcp/?token=...`
3. 将其粘贴到 MCP 站点(`/mcp`)并点击 **连接**
4. MCP 站点连接到小智的中继并暴露其工具
5. 当你与小智交谈时,代理可以使用 `opencode_ask`、`read_file`、`create_file` 等。
## 可用工具
| 工具 | 功能 |
|---|---|
| `读取文件` | 读取系统文件 |
| `创建文件` | 创建带有内容的文件 |
| `列出目录` | 列出目录 |
| `打开应用程序` | 打开应用程序(xdg-open / open / start) |
| `执行命令` | 执行带有白名单的命令 |
| `opencode_ask` | 向 OpenCode 发送提示并等待响应 |
| `opencode_run` | 将异步任务分派给 OpenCode |
## OpenCode 配置
后端在内部使用 `opencode 服务`。要配置 OpenCode 的模型、API 密钥和 MCP 服务器,请使用您通常的 `opencode.jsonc`:
```jsonc
{
"mcp": {
"mcp-station": {
"type": "remote",
"url": "http://localhost:8081/mcp"
}
}
}
```
可选:设置 `OPENCODE_SERVER_PASSWORD` 以保护访问:
```bash
OPENCODE_SERVER_PASSWORD=你的密码 go run .
```
## 环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
| `OPENCODE_SERVER_USERNAME` | `opencode` | 基本身份验证的用户名 |
| `OPENCODE_SERVER_PASSWORD` | *(无)* | 基本身份验证的密码 |
## 技术栈
- **后端**:Go、SQLite、gorilla/websocket、JSON-RPC 2.0
- **前端**:React、TypeScript、Tailwind CSS、shadcn/ui、Zustand、Vite
- **协议**:MCP 上的 WebSocket(JSON-RPC 2.0)