# FlashKey_MCP-Server
**Repository Path**: Ai-Thinker-Open/FlashKey_MCP-Server
## Basic Information
- **Project Name**: FlashKey_MCP-Server
- **Description**: FlashKey 的MCP 服务器
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-06
- **Last Updated**: 2026-08-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
FlashKey MCP Server
> FlashKey FK-01 MCP 服务器 — 通用 USB 烧录调试器,支持任何 MCP 兼容的 AI 工具。
[](README.md)
[](LICENSE)
---
## 项目简介
FlashKey FK-01 是安信可(Ai-Thinker)推出的双芯片 USB 烧录调试器。**flashkey-mcp** 是它的 MCP(Model Context Protocol)服务器插件,让 Cline、Hermes Agent、MiMo Code 等 AI 工具可以直接控制 FK-01 完成烧录、日志采集与调试:
- ⚡ 一键烧录 BL602 / BL616 / BL618 固件
- 📋 采集目标芯片串口日志
- 🔘 控制 BOOT / RST 引脚与 5V / 3.3V / VUSB 电源
- 🔄 升级 FK-01 自身 CH32V203 固件(OpenOCD + WCH-LinkE)
插入 FK-01 后自动握手,5 秒内完成;`flashkey_status()` 统一状态查询无需认证,开箱即用。
> 源码仓库:[Ai-Thinker-Open/FlashKey_MCP-Server](https://github.com/Ai-Thinker-Open/FlashKey_MCP-Server)
---
## 安装 / 编译
### 一键安装(推荐)
```bash
curl -fsSL https://raw.githubusercontent.com/Ai-Thinker-Open/FlashKey_MCP-Server/master/setup.sh | bash
```
脚本自动完成:
1. 安装 flashkey-mcp
2. 检测系统上的 AI 工具,自动写入对应格式的 MCP 配置
3. 提示下一步操作
**支持自动配置的工具**:Cline、Hermes Agent、MiMo Code
### pip 安装(Git 源)
```bash
pip install git+https://github.com/Ai-Thinker-Open/FlashKey_MCP-Server.git
```
> SSE 运行所需的 starlette / uvicorn 已包含在默认安装中;`flashkey-mcp[sse]` 写法仅为兼容旧版本保留。
### 从源码安装(开发者)
```bash
git clone git@github.com:Ai-Thinker-Open/FlashKey_MCP-Server.git
cd FlashKey_MCP-Server
pip install -e .
```
### 国内网络/镜像
GitHub 不可达时,安装源和固件更新源都可以通过环境变量切换:
```bash
# 用 Gitee 镜像安装(Gitee 会自动从 GitHub 源仓库同步)
FLASHKEY_INSTALL_URL="flashkey-mcp[sse] @ git+https://gitee.com/Ai-Thinker-Open/FlashKey_MCP-Server.git" bash setup.sh
# firmware_check 更新源:auto(默认,先 GitHub 后 Gitee)/ github / gitee
FLASHKEY_UPDATE_SOURCE=gitee flashkey-mcp
```
---
## 使用说明
flashkey-mcp 默认以 **SSE(HTTP)模式**运行:一个常驻服务进程服务所有 AI 会话,多个会话共享同一台 FK-01,不会出现多进程抢占串口、握手互相打断的问题。
### 第一步:启动常驻服务
**Linux(推荐,systemd 用户服务,开机自启 + 崩溃自动重启)**
```bash
flashkey-mcp --service install
```
**Windows / macOS(手工常驻)**
```bash
flashkey-mcp --sse --host 127.0.0.1 --port 8100
```
> `--sse` 可省略(默认即 SSE)。启动后端点固定为 `http://127.0.0.1:8100/sse`。
> 若端口已被另一个 flashkey-mcp 实例占用,程序会提示"另一个实例已在运行,直接使用端点即可"并以 0 退出,不会重复占用设备。
### 第二步:配置 AI 工具(连接 URL)
所有工具的 MCP 配置本质相同:让工具连接上述 SSE 端点,而不是启动一个子进程。
#### JSON 格式(Cline / VS Code)
在工具的 MCP 配置文件中添加:
```json
{
"mcpServers": {
"flashkey": {
"type": "sse",
"url": "http://127.0.0.1:8100/sse"
}
}
}
```
| 工具 | 配置文件路径 |
|------|-------------|
| Cline (VS Code) | `~/.cline/mcp.json` |
#### YAML 格式(Hermes Agent)
`~/.hermes/config.yaml`:
```yaml
mcp_servers:
flashkey:
type: sse
url: http://127.0.0.1:8100/sse
enabled: true
```
#### Cursor
Settings → MCP → Add new MCP server:
- 名称:`flashkey`
- 类型:`sse`
- URL:`http://127.0.0.1:8100/sse`
#### MiMo Code
```bash
mimo mcp add flashkey-mcp --transport sse --url http://127.0.0.1:8100/sse
```
或项目根目录 `mimocode.json`:
```json
{
"mcp": {
"flashkey-mcp": {
"type": "sse",
"url": "http://127.0.0.1:8100/sse"
}
}
}
```
#### Codex (OpenAI)
```bash
codex mcp add flashkey-mcp --url http://127.0.0.1:8100/mcp
```
### 多个 AI 会话 / 多个客户端共享
同一台机器上的任意数量会话(Cursor、Codex…)都使用同一个 URL 即可。设备只被唯一的常驻进程持有,会话之间互不干扰:
- Linux:服务崩溃会自动重启,无需干预。
- Windows / macOS:保持常驻进程运行;日志可 `tail -f /tmp/flashkey-mcp.log` 查看。
### 空闲自动释放串口(心跳说明)
常驻服务在最后一次工具调用后默认 **30 秒**无活动会关闭 FK-01 串口,固件心跳(PING)随之暂停;下一次工具调用会自动重连并重新握手(约 5 秒),随后心跳自动恢复。这样空闲时串口不被长期占用,其他程序(或 WSL 的 USB 重映射)可以正常使用设备:
- 空闲秒数可用环境变量调整:`FLASHKEY_IDLE_TIMEOUT=60 flashkey-mcp`
- 设为 `0` 禁用空闲释放(一直保持连接,旧行为)
- 空闲期间 `flashkey_status()` 返回 `idle: true`
- 烧录、日志采集等长操作期间不会释放串口
### 兼容旧方式:stdio(单会话)
单会话场景仍可用 `flashkey-mcp --stdio` 启动,工具配置为 `{"command": "flashkey-mcp"}`。注意 stdio 是"一个会话一个进程",多会话同时使用会抢占同一台 FK-01,请优先使用 SSE。
### 验证安装
```bash
# 安装验证
flashkey-mcp --version
# 服务状态(Linux)
flashkey-mcp --service status
# 配置验证:重启 AI 工具后,在对话中调用
flashkey_status()
```
---
## 示例
### 示例 1:检查设备状态
在 AI 工具对话中调用:
```
flashkey_status()
```
返回 FK-01 的认证状态、固件版本、引脚状态与扩展模块信息。
### 示例 2:一键烧录固件
```
flashkey_flash(firmware_path="/path/to/firmware.bin", chip="bl602", flash_port="ttyACM1")
```
> ⚠️ 端口选择:先调用 `flashkey_list_ports()` 查看端口列表,选择 `role=fk_log` 的端口;**不能**使用 `role=fk_control` 的端口(那是 FK-01 主控口,MCP 内部专用)。
### 示例 3:采集目标芯片日志
```
flashkey_log(port="ttyACM1", baud_rate=115200, duration=5, grep="ERROR")
```
---
## 工作原理
FlashKey FK-01 是双芯片 USB 烧录调试器。MCP 插件提供 27 个工具:
```
flashkey_status() ← 统一状态,无需认证
flashkey_list_ports() ← 列出所有串口
flashkey_flash() ← 一键烧录 BL602/BL616/BL618
flashkey_log() ← 采集目标芯片日志
flashkey_firmware_check() ← 检查 FK-01 自身固件是否有更新
flashkey_firmware_flash() ← 烧录 FK-01 自身 CH32V203 固件(OpenOCD + WCH-LinkE)
flashkey_boot_set/get() ← BOOT 引脚控制
flashkey_rst_set/get/pulse() ← RST 引脚控制
flashkey_v5v_set/get() ← 5V 电源
flashkey_v3v3_set/get() ← 3.3V 电源
flashkey_enter_bootloader() ← 组合进入 ISP 模式
flashkey_ping() / flashkey_get_version() / flashkey_get_uid()
```
插入 FK-01 后自动握手,5 秒内完成。
---
## FK-01 自身固件升级(CH32V203)
`flashkey_firmware_check()` 检查设备当前固件版本、安装包内置固件版本与已安装插件版本,并与 GitHub 最新 Release 对比;`flashkey_firmware_flash()` 通过 WCH-LinkE(SDI)烧录 CH32V203(默认烧包内内置 hex,也可传 `hex_path`)。
⚠️ 烧录前置条件:把 FlashKey 自带的 WCH-LinkE 通过 USB 接入电脑,并将 SWDIO/SWCLK/GND/3V3 接到 CH32V203 的 SWD 接口且目标板上电;WSL 环境需先 `usbip attach`。烧录需要显式传 `confirm=True`;普通烧录失败且疑似读保护/写保护时,工具会自动用带 unlock 的全片擦除+烧录重试一次,仍失败会提示用 Windows 主机的 **WCH-LinkUtility** 手动解锁。
OpenOCD 二进制(WCH v1.6,Linux x64 / Windows x64)已随包内置在 `flashkey_mcp/openocd/`,无需单独安装;可用环境变量 `FLASHKEY_OPENOCD` 覆盖路径。随附组件的许可证见包内 `NOTICE-OPENOCD.md`。
---
## FAQ / 故障排查
**Q: 在 WSL 下无法识别 FK-01?**
A: 需要先把 USB 设备附加进 WSL(如 `usbip attach -r 127.0.0.1 -b `),然后再调用工具。
**Q: 烧录时选错端口?**
A: 先调用 `flashkey_list_ports()`,务必选择 `role=fk_log` 的端口(WCH-LinkE VCP);`role=fk_control` 是 FK-01 主控口,不可用于烧录或日志。
**Q: 烧录失败并提示读保护/写保护?**
A: 工具会自动重试带 unlock 的全片擦除+烧录;仍失败时请用 Windows 主机的 WCH-LinkUtility 手动解锁。
**Q: 高波特率日志不稳定?**
A: WCH-LinkE VCP(fk_log)最高仅支持 921600,需要更高波特率时请改用外接 USB-UART。
**Q: 串口空闲一段时间后被释放了?**
A: 这是设计行为:30 秒无工具调用后自动关闭串口并暂停心跳,下次调用自动重连(约 5 秒握手)。可用 `FLASHKEY_IDLE_TIMEOUT=0` 禁用,或调整空闲秒数。
**Q: 工具提示有新版?**
A: 执行 `pip install --upgrade git+https://github.com/Ai-Thinker-Open/FlashKey_MCP-Server.git` 后重启 MCP 服务。Linux 常驻服务可执行 `systemctl --user restart flashkey-mcp`(或 `flashkey-mcp --service status` 确认状态)。
---
## 贡献指南
欢迎提交 Issue 与 Pull Request:
1. Fork 本仓库并创建特性分支;
2. 提交信息遵循 Conventional Commits 风格(如 `feat:`、`fix:`、`docs:`);
3. 修改后请运行 `pytest` 保证测试通过;
4. 发起 PR 时说明改动目的与验证方式。
---
## License
[MIT](LICENSE) © 2026 Ai-Thinker Open