屏幕截图服务

一个为macOS应用程序提供屏幕截图功能的模型上下文协议(MCP)服务器。

  • by becksclair
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 becksclair/screenshot_mcp

使用说明

MCP服务器截图

为macOS应用程序提供屏幕截图功能的模型上下文协议(MCP)服务器。

安装

快速入门(推荐)

  1. 下载通用二进制文件:

    # Replace with actual release URL
    curl -L -o screenshot-mcp https://github.com/YOUR_USERNAME/screenshot-mcp/releases/latest/download/screenshot-mcp-universal
    chmod +x screenshot-mcp
    
  2. 测试其工作原理:

    echo '{"jsonrpc": "2.0", "id": "test", "method": "tools/list"}' | ./screenshot-mcp
    

从源代码构建

要求: 包子 >=1.0.0,macOS

git clone https://github.com/YOUR_USERNAME/screenshot-mcp.git
cd screenshot-mcp
bun install
bun run build-universal  # Creates universal binary

配置

克劳德桌面

增添 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "screenshot": {
      "command": "/path/to/screenshot-mcp"
    }
  }
}

其他MCP客户端

在MCP客户端配置中使用二进制路径:

{
  "command": "/usr/local/bin/screenshot-mcp"
}

用法

可用工具

  • take_screenshot -捕获特定应用程序的屏幕截图
  • list_running_apps -获取正在运行的应用程序列表
  • capture_region -捕获特定屏幕区域

内联图像嵌入

两者 take_screenshot 和 capture_region 现在内联返回实际的PNG图像(作为模型上下文协议 image 当文件大小低于嵌入阈值时。

响应内容顺序(嵌入成功):

  1. { type: "image", mimeType: "image/png", data: "<base64>" }
  2. { type: "text", text: "Screenshot successfully taken and saved to: /abs/path.png (embedded inline, 842 KB)" }

如果图像超过阈值,则只返回一个文本项,包括注释: Screenshot successfully taken and saved to: /abs/path.png (not embedded; 2100 KB exceeds 1000 KB limit)

大小阈值

  • 默认值:1000000字节(约1MB)
  • 每次通话覆盖 inlineMaxBytes
  • 通过环境变量进行全局覆盖 MCP_SCREENSHOT_EMBED_MAX_BYTES
  • 如果 returnData: true 设置后,行为是相同的,除了它明确选择尝试嵌入(仍受大小阈值的约束)。

参数

take_screenshot 额外字段:

  • returnData?: boolean -请求嵌入(即使为false,小的时候也会自动嵌入)
  • inlineMaxBytes?: number –每个呼叫字节阈值覆盖

capture_region 额外字段:

  • returnData?: boolean
  • inlineMaxBytes?: number

备注

  • 向后兼容性:现有客户端解析文本行仍然有效;文本项保留相同的前导短语 Screenshot successfully taken and saved to: / Region screenshot successfully captured and saved to:.
  • 图像base64数据没有前缀数据URI;它是每个MCP的原始base64 image 内容规范。
  • 大图像不会被两次读入内存;嵌入时只读取一次文件。
  • 压缩(compress: true)是最好的努力;它可能不会减小足够的大小(或根本不会)以进行嵌入。大小门始终使用任何压缩后的最终文件大小。

带有覆盖的请求示例

{
  "name": "take_screenshot",
  "arguments": {
    "appName": "Visual Studio Code",
    "compress": true,
    "inlineMaxBytes": 1500000
  }
}

示例

{
  "name": "take_screenshot",
  "arguments": {
    "appName": "Visual Studio Code",
    "compress": true
  }
}

发展

bun run dev        # Development server with hot reload
bun test          # Run tests
bun run qa        # Run all quality checks

演出

  • 冷启动:约74毫秒
  • 平行截图:比顺序快1.9倍
  • 二进制大小:120MB通用二进制文件(英特尔+苹果硅)
  • 压缩:可选PNG优化(~50-100ms开销)

平台支持

  • macOS: ✅ 完全支持(英特尔和苹果硅)
  • Linux: 🚧 规划(Wayland/X11)
  • 视窗: 🚧 计划中(PowerShell/Win32)

特性

  • 采用丁腈橡胶制造,性能快速
  • 通用二进制支持Intel和Apple Silicon Mac
  • 自包含的可执行文件(不需要依赖项)
  • 多种截图工具和捕获策略
  • 具有类型安全功能的综合测试套件

项目结构

screenshot_mcp/
├── src/
│   ├── index.ts          # Main MCP server
│   └── index.test.ts     # Test suite
├── src/winshot.ts        # Pure TypeScript screenshot implementation (replaces prior shell script)
├── dist/                 # Built binaries
└── package.json          # Build scripts

许可证

麻省理工学院