内容
# 眼神射线-mcp
> 由 DeepSeek 构建
[English](README.md)
**无遥测,无外部调用,无数据外泄。** 截图永远不会离开您的机器,除非您明确将其发送到您配置的视觉 API 端点。
眼神射线(截图 + 视觉)— 两个 MCP 工具,使您的 AI 能够 **看到**,在 Windows 上形成自动 **捕获 → 分析** 管道。
**如果您的 AI 已经具有视觉功能(GPT-4V、Claude 等),您只需要截图 MCP。** 视觉 MCP 适用于没有内置视觉支持的 AI。
## 兼容性
与任何 MCP 兼容的客户端配合使用:**opencode**、**Claude Desktop**、**Cursor**、**VS Code**(通过扩展)或其他任何 MCP 主机。这些是标准 MCP 工具 — 不绑定到任何特定平台。
## 用例
- 自动 UI 测试 — 编写前端代码后,让 AI 启动浏览器,截图并验证页面
- OCR 文本识别 — 捕获窗口或全屏,通过视觉模型读取文本
- 应用 UI 验证 — 启动桌面应用,截图并检查 UI 是否正确渲染
- AI 辅助调试 — 程序崩溃?截图并让 AI 查看它
## 安装
### 选项 1:让 AI 安装它(推荐)
将此提示发送给您的 AI 助手,它将处理所有事情:
> "克隆 https://github.com/yourname/eyeshot-mcp 到我的机器,安装其依赖项,然后在我的 opencode 配置文件中将其配置为 MCP 服务器。"
### 选项 2:手动安装
```bash
git clone https://github.com/yourname/eyeshot-mcp.git
pip install -r requirements.txt
```
## 配置
### opencode
添加到 `~\.config\opencode\opencode.jsonc`:
```jsonc
{
"mcp": {
"screenshot": {
"type": "local",
"command": ["python", "C:\\path\\to\\eyeshot-mcp\\screenshot_mcp.py"],
"enabled": true
},
"vision": {
"type": "local",
"command": ["python", "C:\\path\\to\\eyeshot-mcp\\vision_mcp.py"],
"enabled": true
}
}
}
```
### 环境变量
| 变量 | 默认值 | 描述 |
| --- | --- | --- |
| `VISION_API_KEY` | (必填) | 视觉 API 密钥 |
| `VISION_API_URL` | `https://api.openai.com/v1/chat/completions` | 任何 OpenAI 兼容的端点。例如:OpenRouter `https://openrouter.ai/api/v1/chat/completions` |
| `VISION_MODEL` | `qwen/qwen2.5-vl-32b-instruct` | 任何 VL 模型 |
| `VISION_MAX_WIDTH` | `2048` | 发送到 API 的最大图像宽度(0 = 不调整大小) |
| `VISION_MAX_TOKENS` | `512` | API 响应中的最大令牌数 |
| `SCREENSHOT_BROWSER_CLASSES` | (可选) | 以逗号分隔的额外浏览器窗口类 |
## 工具参考
### `screenshot_capture_to_file`
捕获现有的窗口或全屏,保存到 `screenshot.png`,返回路径。
| 参数 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `window_title` | 字符串 | `""` | 窗口标题,空 = 全屏 |
| `resize_width` | 整数 | `0` | 截图调整大小宽度,0 = 根据显示分辨率自动调整 |
**自动分辨率逻辑:**
- 4K(3840)→ 调整大小到 1920
- 1440p(2560)→ 调整大小到 1280
- 1080p(1920)→ 调整大小到 960
- 低于 1920 → 不调整大小,保持原始大小
### `screenshot_test_window`
启动程序 → 等待 → 捕获 → 关闭(全自动)。
| 参数 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `command` | 字符串 | 必填 | 启动命令,浏览器必须包含 `--new-window` |
| `wait_seconds` | 整数 | 必填 | 启动后等待秒数 |
| `maximized` | 布尔值 | 必填 | 是否最大化窗口 |
| `window_title` | 字符串 | `""` | 要捕获的窗口;空 = 全屏,不关闭 |
| `resize_width` | 整数 | `0` | 与 capture_to_file 相同 |
**浏览器标签保护:** 当检测到没有 `--new-window` 的浏览器时,不会关闭以保护其他标签页。有 `--new-window` 时,独占窗口会正常关闭。
### `vision_analyze_image`
使用视觉模型分析图像,返回文本结果。
| 参数 | 类型 | 默认值 | 描述 |
| --- | --- | --- | --- |
| `file_path` | 字符串 | 必填 | 图像路径,例如 `screenshot.png` |
| `prompt` | 字符串 | `"描述这张图片的内容"` | 您的提问,支持任何语言 |
## 浏览器支持
| 窗口类 | 浏览器 |
| --- | --- |
| `Chrome_WidgetWin_1` | Chrome,Edge(Chromium),Brave,Opera,Vivaldi |
| `MozillaWindowClass` | Firefox |
| `MSEdgeWindowClass` | Edge(UWP / legacy) |
| `ApplicationFrameWindow` | UWP 应用和 WebView |
添加自定义类:`SCREENSHOT_BROWSER_CLASSES=MyClass1,MyClass2`
## 常见问题
**问:截图文本模糊?**
答:增加 `resize_width`(例如 `4096`)以保持原始分辨率。
**问:不知道窗口标题?**
答:使用 `tasklist` 列出正在运行的进程,或捕获全屏并让视觉模型识别它。
**问:为什么浏览器窗口没有关闭?**
答:没有 `--new-window` 时,不会关闭以保护其他标签页。在启动命令中添加 `--new-window`。
**问:我可以使用不同的视觉模型吗?**
答:是的。设置 `VISION_API_URL` 和 `VISION_MODEL` 环境变量。兼容任何 OpenAI 兼容的 API。
MIT