mcpField
M
MCP Screenshot Server

MCP Screenshot Server

本地服务
github.com/sethbang浏览器自动化358 周前更新

关于 MCP Screenshot Server

Universal Screenshot MCP 是一个 MCP 服务,为 AI 助手提供网页截图和系统截图能力。网页截图基于 Puppeteer 无头 Chromium,系统截图调用各操作系统的原生工具。项目强调安全加固,包括 SSRF 防护、路径穿越防护和子进程注入防护。

主要功能

  1. 01网页截图,可指定视口、元素选择器和等待条件
  2. 02系统截图,支持全屏、窗口和区域模式
  3. 03跨平台支持 macOS、Linux 和 Windows
  4. 04SSRF 与 DNS 重绑定防护
  5. 05命令行诊断命令 --doctor 检查依赖工具

适用场景

  1. 01让 AI 助手查看指定网页的渲染效果
  2. 02截取桌面或某个应用窗口用于问题反馈
  3. 03在本地开发服务器上截图(需开启 ALLOW_LOCAL)

MCP 相关

该服务暴露 take_screenshot 和 take_system_screenshot 两个 MCP 工具,供 Claude Desktop、Cursor 等 MCP 客户端调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"screenshot-server": {
"command": "npx",
"args": [
"-y",
"universal-screenshot-mcp"
]
}
}
}
启动命令npx -y universal-screenshot-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmuniversal-screenshot-mcp1.4.0

工具

2

收录的工具列表 · 更新于 2 周前

参数类型必填说明
urlstring是要截取的 URL
widthnumber否视口宽度
heightnumber否视口高度
fullPageboolean否截取整个页面
selectorstring否元素的 CSS 选择器
outputPathstring否绝对路径,或相对于主目录的路径
waitForTimeoutnumber否延迟时间(毫秒)
waitForSelectorstring否等待选择器

详细介绍

Universal Screenshot MCP

npm version MCP Registry License

一个 MCP (Model Context Protocol) 服务,为 AI 助手提供截图功能——既可以通过 Puppeteer 捕获网页,也可以使用原生 OS 工具进行跨平台系统截图。

功能

  • 网页截图 — 使用无头 Chromium 浏览器捕获任意公开 URL
  • 跨平台系统截图 — 使用原生 OS 工具捕获全屏、窗口或区域(macOS screencapture、Linux maim/scrot/gnome-screenshot/等、Windows PowerShell+.NET)
  • 安全优先设计 — 防止 SSRF、路径遍历、DNS 重绑定、命令注入和 DoS 攻击
  • 原生支持 MCP — 可直接集成到 Claude Desktop、Cursor 和任何兼容 MCP 的客户端

要求

  • Node.js >= 18.0.0
  • Chromium 会在首次运行时由 Puppeteer 自动下载
take_system_screenshot 的平台特定要求
平台所需工具备注
macOSscreencapture(内置)无需额外安装
Linux以下工具之一:maim、scrot、gnome-screenshot、spectacle、grim 或 import(ImageMagick)建议安装 maim 或 scrot 以获得完整功能支持。若要按窗口名称捕获,还需安装 xdotool。
Windowspowershell(内置)使用 .NET System.Drawing——无需额外安装
Linux 安装示例
# Ubuntu/Debian (recommended)
sudo apt install maim xdotool

# Fedora
sudo dnf install maim xdotool

# Arch Linux
sudo pacman -S maim xdotool

# Wayland (Sway, etc.)
sudo apt install grim

安装后,可以通过以下命令验证配置:

npx universal-screenshot-mcp --doctor

此命令会探测主机,并根据检测到的发行版,为缺少的工具打印可直接复制粘贴的安装命令。

快速开始

从 npm 安装
npm install -g universal-screenshot-mcp

也可以使用 npx 直接运行:

npx universal-screenshot-mcp
从源代码安装
git clone https://github.com/sethbang/mcp-screenshot-server.git
cd mcp-screenshot-server
npm install
npm run build
配置 MCP 客户端

将服务添加到 MCP 客户端配置中。对于 Claude Desktop,编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "screenshot-server": {
      "command": "npx",
      "args": ["-y", "universal-screenshot-mcp"]
    }
  }
}

如果从源代码安装,则使用:

{
  "mcpServers": {
    "screenshot-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-screenshot-server/build/index.js"]
    }
  }
}

对于 Claude Code,使用 claude mcp add 命令注册服务:

# Project scope (current directory only)
claude mcp add screenshot-server -- npx -y universal-screenshot-mcp

# User scope (available across all projects)
claude mcp add --scope user screenshot-server -- npx -y universal-screenshot-mcp

如果从源代码安装,则使用:

claude mcp add screenshot-server -- node /absolute/path/to/mcp-screenshot-server/build/index.js

使用 claude mcp list 验证服务是否已注册,或在会话中使用 /mcp 查看实时状态。

对于 Cursor 或其他 MCP 客户端,请参阅其文档,了解相应的配置方法。

工具

此服务提供两个 MCP 工具:

take_screenshot

通过无头 Puppeteer 浏览器捕获网页(或特定元素)。

参数类型必填说明
urlstring✅要捕获的 URL(仅限 http/https)
widthnumber—视口宽度(1–3840)
heightnumber—视口高度(1–2160)
fullPageboolean—捕获完整的可滚动页面
selectorstring—用于捕获特定元素的 CSS 选择器
waitForSelectorstring—捕获前等待此选择器
waitForTimeoutnumber—延迟时间,单位为毫秒(0–30000)
outputPathstring—输出文件路径(默认:~/Documents/screenshots)

提示词示例:

对 https://example.com 进行截图,分辨率为 1920x1080

take_system_screenshot

使用原生操作系统工具截取桌面、特定应用程序窗口或屏幕区域。支持 macOS、Linux 和 Windows。

ParameterTypeRequiredDescription
modeenum✅fullscreen、window 或 region
windowIdnumber—窗口模式下的窗口 ID
windowNamestring—窗口模式下的应用名称(例如 "Safari"、"Firefox")
regionobject—区域模式下的 { x, y, width, height }
displaynumber—多显示器配置下的显示器编号
includeCursorboolean—是否在截图中包含鼠标光标
formatenum—png(默认)或 jpg
delaynumber—截图延迟秒数(0–10)
outputPathstring—输出文件路径(默认:~/Documents/screenshots)
跨平台功能支持
FeaturemacOSLinuxWindows
全屏✅✅✅
区域✅✅ (maim, scrot, grim, import)✅
按名称选择窗口✅⚠️ X11 + xdotool⚠️ 尽力支持
按 ID 选择窗口✅✅ 仅限 X11⚠️ HWND
多显示器✅⚠️ 取决于工具✅
包含光标✅⚠️ 取决于工具⚠️
延迟✅✅✅

提示词示例:

截取 Safari 窗口的系统屏幕截图

配置

环境变量
VariableDefaultDescription
SCREENSHOT_OUTPUT_DIRDocuments/screenshots相对于 ~ 的默认输出目录
ALLOW_LOCALfalse设置为 true,以允许截取 localhost/127.x.x.x/[::1] 的屏幕截图(适用于本地开发服务器)
输出目录

屏幕截图默认保存到 ~/Documents/screenshots(可通过 SCREENSHOT_OUTPUT_DIR 配置)。自定义输出路径必须解析到以下允许的目录之一:

DirectoryDescription
~/Documents/screenshots默认输出位置(可配置)
~/Desktop/Screenshots原默认位置
~/Downloads用户下载文件夹
~/Documents用户文档文件夹
/tmp系统临时目录

安全

此服务采用多层安全加固措施:

IDThreatMitigation
SEC-001SSRF / DNS 重绑定根据被阻止的 IP 地址范围验证 URL;请求前解析 DNS,并通过 --host-resolver-rules 固定 IP;重新验证导航重定向
SEC-003命令注入所有子进程均使用 execFile(不使用 shell);根据 SAFE_APP_NAME_PATTERN 验证应用名称
SEC-004路径遍历使用 fs.realpath() 解析符号链接并验证输出路径;限制在允许的目录中
SEC-005拒绝服务通过信号量将并发 Puppeteer 实例限制为 3

完整详情请参阅 docs/security.md。

开发

脚本
命令说明
npm run build将 TypeScript 编译到 build/
npm run watch文件更改时重新编译
npm test单元测试(快速,完全模拟)
npm run test:integration集成测试(使用真实 DNS/文件系统)
npm run test:e2e端到端测试(使用真实 Puppeteer/原生工具)
npm run test:all一并运行所有测试层级
npm run test:linux通过 Docker 运行 Linux 端到端测试(需要 Docker)
npm run test:watch在监视模式下运行测试
npm run test:coverage运行测试并生成覆盖率报告
npm run lint使用 ESLint 检查源代码
npm run inspector启动 MCP Inspector 以进行调试
项目结构
src/
├── index.ts                 # Entry point — stdio transport
├── server.ts                # MCP server factory
├── config/
│   ├── index.ts             # Static constants (limits, allowed dirs)
│   └── runtime.ts           # Singleton semaphore, default directory
├── tools/
│   ├── take-screenshot.ts   # Web page capture tool
│   └── take-system-screenshot.ts  # macOS system capture tool
├── types/
│   └── index.ts             # Shared TypeScript interfaces
├── utils/
│   ├── helpers.ts           # Response builders, file utilities
│   ├── screenshot-provider.ts # Cross-platform provider interface + factory
│   ├── macos-provider.ts    # macOS: screencapture wrapper
│   ├── linux-provider.ts    # Linux: maim/scrot/gnome-screenshot/etc.
│   ├── windows-provider.ts  # Windows: PowerShell + .NET System.Drawing
│   ├── macos.ts             # Window ID lookup via CoreGraphics
│   └── semaphore.ts         # Async concurrency limiter
└── validators/
    ├── path.ts              # Output path validation (SEC-004)
    └── url.ts               # URL/SSRF validation (SEC-001)
测试

测试使用 Vitest,分为三个层级:

  • 单元测试(npm test)—— 完整的依赖注入,不进行真实 I/O。反馈周期快。
  • 集成测试(npm run test:integration)—— 进行真实 DNS 解析,使用临时目录操作真实文件系统,并通过本地 HTTP 服务运行真实 Puppeteer。
  • 端到端测试(npm run test:e2e)—— 使用真实的原生截图工具。macOS 测试原生运行;Linux 测试通过 npm run test:linux 在 Docker 中运行。
npm test                 # Unit tests (~300ms)
npm run test:linux       # Linux provider tests in Docker
npm run test:all         # Everything
使用 MCP Inspector 调试
npm run inspector

此命令会启动 MCP Inspector,并连接到已构建的服务,以便交互式调用工具。

许可证

Apache-2.0 — 版权所有 2026 Seth Bang

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。