MCP电子试剂
一个嵌入本地HTTP服务器的最小Electron桌面应用程序,该服务器公开了一个小型的模型上下文协议(MCP)样式的清单和工具,用于在交互式用户同意的情况下进行文件操作。
特性
- 带有强化默认值的电子外壳(GPU+硬件加速禁用,上下文隔离启用)。
- 上的本地Express服务器
http://127.0.0.1:8371. - MCP发现清单位于
/.well-known/mcp-manifest. - 工具:
- file.read:在白名单和同意后返回文件内容(\. | AGENT_API_TOKEN=secret123 | | AUTOCONSENT |如果 1,绕过交互式同意(仅限测试)。 | AUTOCONSENT=1 | | NODE_ENV |运行时模式(影响启动脚本)。 | NODE_ENV=development` |
使用自定义白名单+令牌运行:
ALLOWED_BASE_DIRS="$HOME:/tmp" AGENT_API_TOKEN="secret123" npm run dev完全操作系统访问权限(危险:授予跨系统的读/写/删除权限):
ALLOW_FULL_OS=1 ENABLE_WRITE=1 ENABLE_DELETE=1 npm run dev端点
GET /.well-known/mcp-manifest→ 清单(工具+配置标志)。POST /mcp/tool/file.readJSON:{ path, clientName }→{ content }.POST /mcp/tool/file.statJSON:{ path, clientName }→{ size, mtime, isDirectory, path }.POST /mcp/tool/file.writeJSON:{ path, content, clientName, mode }→{ status, path, bytes }.POST /mcp/tool/file.deleteJSON:{ path, clientName, recursive? }→{ status, path, recursive? }.POST /mcp/tool/file.listJSON:{ path, clientName, pattern?, limit? }→{ entries:[{name,isDirectory}], truncated }.POST /mcp/tool/dir.createJSON:{ path, clientName, recursive? }→{ status, path, recursive }.POST /mcp/tool/file.renameJSON:{ from, to, clientName, overwrite? }→{ status, from, to }.
同意流程
- 客户端请求工具。
- 服务器验证路径(白名单或完全访问标志)。
- 对话框显示按钮:允许一次/始终允许 /始终允许读写删除/拒绝。
- 用于未来操作(特定于操作或全局)的存储决策。
安全说明
nodeIntegration残疾人;通过预加载控制API。contextIsolation启用。- 令牌认证可选;建议在启用全操作系统访问时使用。
- 白名单或完整操作系统访问标志控制范围;出于安全考虑,更喜欢白名单。
- 不得在测试自动化之外启用AUTOCONSENT。
- 启用删除+完全访问时,请考虑在包含的VM内运行。
测试
手册:
curl -s http://127.0.0.1:8371/.well-known/mcp-manifest | jq
curl -s -X POST http://127.0.0.1:8371/mcp/tool/file.stat \
-H 'Content-Type: application/json' \
-d '{"path":"'$HOME'/.bashrc","clientName":"TestClient"}'首次访问将显示同意对话框。
令牌启用测试:
export AGENT_API_TOKEN=secret123
npm run dev &
# In another terminal
curl -s -H 'Authorization: Bearer secret123' http://127.0.0.1:8371/.well-known/mcp-manifest | jq路线图/建议改进
- 同意管理UI(查看/撤销决定)。
- 高级搜索(内容和全局)+索引。
- 增量/分块大文件支持。
- 结构化日志记录和日志查看器面板。
- 可选TLS终止。
- IPC工具事件流。
- TypeScript转换。
- 自动化测试(Jest用于API,Playwright用于对话框流)。
- 包装方式
electron-builder或electron-forge. - 覆盖/删除时的备份/还原机制。
- 补丁工具(应用统一差异)以实现更安全的编辑。
代理集成(SDK)
使用 agent-client.js 以编程方式进行交互:
const client = require('./agent-client');
(async () => {
await client.init({ baseUrl: 'http://127.0.0.1:8371', token: process.env.AGENT_API_TOKEN });
// Create directory
await client.createDir('/tmp/mcp-agent-demo');
// Write file
await client.writeFile('/tmp/mcp-agent-demo/hello.txt', 'Hello World', 'create');
// List directory
const listing = await client.listDir('/tmp/mcp-agent-demo');
console.log(listing);
// Rename file
await client.renamePath('/tmp/mcp-agent-demo/hello.txt', '/tmp/mcp-agent-demo/greeting.txt');
// Read file
const file = await client.readFile('/tmp/mcp-agent-demo/greeting.txt');
console.log(file.content);
// Delete directory recursively
await client.deletePath('/tmp/mcp-agent-demo', true);
})();故障排除
| 症状 | 原因 | 修复 |
|---|---|---|
| libva错误线 | 视频加速探测 | 可接受;或安装VA-API驱动程序/删除GPU禁用(如果已修复) |
| 403路径不允许 | 白名单外 | 调整 ALLOWED_BASE_DIRS 有人是。 |
| 401未经授权 | 已启用令牌 | 包括 Authorization: Bearer 头球 |
| 对话框重复 | 选择“允许”一次 | 选择“始终允许” |
| 托盘警告 | 丢失/无效 icon.png | 添加有效的PNG(建议使用64x64) |
许可证
内部/未指定。如果分发,请添加许可证文件。
______________________________________________________________________
生成的改进通道:安全强化、配置、令牌认证、第二个工具、README。上面列出的未来增强功能。
