Universal Screenshot MCP

io.github.sethbang由 GitHub 账号 sethbang 发布v1.5.0更新于 Oct 30, 2026

MCP server for web page and cross-platform system screenshots (macOS, Linux, Windows)

发布方自己的服务:screenshot.com.ar

已验证STDIO仅桌面浏览器自动化媒体与设计

概览

AI 生成的概览

本地 MCP 服务器,让助手用无头 Chromium 截取网页,并在 macOS、Linux、Windows 上截取桌面、窗口或区域画面。

可以做什么
  • 通过无头 Chromium 截取公开网页或指定 CSS 元素,可设置视口尺寸、整页、等待选择器和延迟
  • 使用系统原生工具截取全屏、按名称或 ID 指定的应用窗口,或屏幕区域,可设置格式、光标和延迟
  • 将图片保存到默认截图目录或其他允许的输出目录
适用场景
适合需要视觉证据的场景:把网页或页面元素渲染成图片,或抓取用户当前屏幕、某个窗口或屏幕局部,用于文档、缺陷报告或界面检查。
运行要求
以本地 stdio 进程运行,来自 npm 包 universal-screenshot-mcp,需要 Node.js 18 或更高版本;Puppeteer 首次运行会自动下载 Chromium。系统截图需要原生工具:macOS 的 screencapture,Linux 的 maim、scrot、gnome-screenshot、spectacle、grim 或 import 之一(按窗口名截图还需 xdotool),Windows 的 PowerShell。可选环境变量 SCREENSHOT_OUTPUT_DIR 和 ALLOW_LOCAL。仅支持桌面端。
安装前请注意
系统截图会抓取用户屏幕上的内容,可能包含隐私或敏感信息,图片会写入 Documents、Desktop、Downloads 或 /tmp 等允许的目录。网页截图会访问任意公开 URL,由本机发起请求;除非将 ALLOW_LOCAL 设为 true,否则 localhost 被禁止。输出路径被限制在固定目录内。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Universal Screenshot MCP,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Universal Screenshot MCP

[npm version] [MCP Registry] [License]

An MCP (Model Context Protocol) server that provides AI assistants with screenshot capabilities — both web page capture via Puppeteer and cross-platform system screenshots using native OS tools.

Features

  • Web Page Screenshots — Capture any public URL using a headless Chromium browser
  • Cross-Platform System Screenshots — Fullscreen, window, or region capture using native OS tools (macOS screencapture, Linux maim/scrot/gnome-screenshot/etc., Windows PowerShell+.NET)
  • Security-First Design — SSRF prevention, path traversal protection, DNS rebinding defense, command injection prevention, and DoS limiting
  • MCP Native — Integrates directly with Claude Desktop, Cursor, and any MCP-compatible client

Requirements

  • Node.js >= 18.0.0
  • Chromium is downloaded automatically by Puppeteer on first run

Platform-Specific Requirements for take_system_screenshot

PlatformRequired ToolsNotes
macOSscreencapture (built-in)No additional installation needed
LinuxOne of: maim, scrot, gnome-screenshot, spectacle, grim, or import (ImageMagick)maim or scrot recommended for full feature support. For window-by-name capture, also install xdotool.
Windowspowershell (built-in)Uses .NET System.Drawing — no additional installation needed
Linux Installation Examples
bash
# Ubuntu/Debian (recommended)sudo apt install maim xdotool
# Fedorasudo dnf install maim xdotool
# Arch Linuxsudo pacman -S maim xdotool
# Wayland (Sway, etc.)sudo apt install grim

After installing, you can verify your setup with:

bash
npx universal-screenshot-mcp --doctor

This probes the host and prints copy-pasteable install commands for any missing tools, tailored to your detected distro.

Quick Start

Install from npm

bash
npm install -g universal-screenshot-mcp

Or run directly with npx:

bash
npx universal-screenshot-mcp

Install from Source

bash
git clone https://github.com/sethbang/mcp-screenshot-server.gitcd mcp-screenshot-servernpm installnpm run build

Configure Your MCP Client

Add the server to your MCP client configuration. For Claude Desktop, edit ~/Library/Application Support/Claude/claude_desktop_config.json:

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

Or if installed from source:

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

For Claude Code, register the server with the claude mcp add command:

bash
# 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

Or if installed from source:

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

Verify the server registered with claude mcp list, or check live status from inside a session with /mcp.

For Cursor or other MCP clients, consult their documentation for the equivalent configuration.

Tools

The server exposes two MCP tools:

take_screenshot

Captures a web page (or a specific element) via a headless Puppeteer browser.

ParameterTypeRequiredDescription
urlstring✅URL to capture (http/https only)
widthnumber—Viewport width (1–3840)
heightnumber—Viewport height (1–2160)
fullPageboolean—Capture the full scrollable page
selectorstring—CSS selector to capture a specific element
waitForSelectorstring—Wait for this selector before capturing
waitForTimeoutnumber—Delay in milliseconds (0–30000)
outputPathstring—Output file path (default: ~/Documents/screenshots)

Example prompt:

Take a screenshot of https://example.com at 1920x1080

take_system_screenshot

Captures the desktop, a specific application window, or a screen region using native OS tools. Works on macOS, Linux, and Windows.

ParameterTypeRequiredDescription
modeenum✅fullscreen, window, or region
windowIdnumber—Window ID for window mode
windowNamestring—App name (e.g. "Safari", "Firefox") for window mode
regionobject—{ x, y, width, height } for region mode
displaynumber—Display number for multi-monitor setups
includeCursorboolean—Include the mouse cursor in the capture
formatenum—png (default) or jpg
delaynumber—Capture delay in seconds (0–10)
outputPathstring—Output file path (default: ~/Documents/screenshots)
Cross-Platform Feature Support
FeaturemacOSLinuxWindows
Fullscreen✅✅✅
Region✅✅ (maim, scrot, grim, import)✅
Window by name✅⚠️ X11 + xdotool⚠️ best-effort
Window by ID✅✅ X11 only⚠️ HWND
Multi-display✅⚠️ tool-dependent✅
Include cursor✅⚠️ tool-dependent⚠️
Delay✅✅✅

Example prompt:

Take a system screenshot of the Safari window

Configuration

Environment Variables

VariableDefaultDescription
SCREENSHOT_OUTPUT_DIRDocuments/screenshotsDefault output directory relative to ~
ALLOW_LOCALfalseSet to true to allow screenshotting localhost/127.x.x.x/[::1] (useful for local dev servers)

Output Directories

Screenshots are saved to ~/Documents/screenshots by default (configurable via SCREENSHOT_OUTPUT_DIR). Custom output paths must resolve to one of these allowed directories:

DirectoryDescription
~/Documents/screenshotsDefault output location (configurable)
~/Desktop/ScreenshotsOriginal default location
~/DownloadsUser downloads folder
~/DocumentsUser documents folder
/tmpSystem temp directory

Security

This server implements multiple layers of security hardening:

IDThreatMitigation
SEC-001SSRF / DNS rebindingURLs validated against blocked IP ranges; DNS resolved pre-request with IP pinning via --host-resolver-rules; navigation redirects re-validated
SEC-003Command injectionAll subprocesses use execFile (no shell); app names validated against SAFE_APP_NAME_PATTERN
SEC-004Path traversalOutput paths validated with fs.realpath() symlink resolution; restricted to allowed directories
SEC-005Denial of serviceConcurrent Puppeteer instances limited to 3 via semaphore; 120 s hard deadline per call, after which the browser is killed and the slot freed
SEC-006Popup SSRF bypassChromium's popup blocker kept on (Puppeteer disables it by default); any popup that still opens is closed

For full details, see docs/security.md.

Development

Scripts

CommandDescription
npm run buildCompile TypeScript to build/
npm run watchRecompile on file changes
npm testUnit tests (fast, fully mocked)
npm run test:integrationIntegration tests (real DNS/filesystem)
npm run test:e2eE2E tests (real Puppeteer/native tools)
npm run test:allAll test tiers together
npm run test:linuxLinux e2e via Docker (requires Docker)
npm run test:watchRun tests in watch mode
npm run test:coverageRun tests with coverage report
npm run lintLint source with ESLint
npm run inspectorLaunch MCP Inspector for debugging

Project Structure

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)

Testing

Tests use Vitest in three tiers:

  • Unit (npm test) — Full dependency injection, no real I/O. Fast feedback loop.
  • Integration (npm run test:integration) — Real DNS resolution, real filesystem with temp directories, real Puppeteer against a local HTTP server.
  • E2E (npm run test:e2e) — Real native screenshot tools. macOS tests run natively; Linux tests run in Docker via npm run test:linux; Windows tests run on the windows-latest CI runner.
bash
npm test                 # Unit tests (~300ms)npm run test:linux       # Linux provider tests in Dockernpm run test:all         # Everything

Debugging with MCP Inspector

bash
npm run inspector

This launches the MCP Inspector connected to your built server, allowing you to invoke tools interactively.

License

Apache-2.0 — Copyright 2026 Seth Bang

来源:README.md,提交 d782ff3

工具

2

take_screenshot

Capture web page or element via headless browser. Saves to ~/Documents/screenshots by default (configurable via SCREENSHOT_OUTPUT_DIR env var).

输入参数url必填widthheightfullPageselectoroutputPathwaitForTimeoutwaitForSelector

take_system_screenshot

Capture desktop, window, or region screenshot. Cross-platform: macOS (screencapture), Linux (maim/scrot/gnome-screenshot/etc.), Windows (PowerShell+.NET). Saves to ~/Documents/screenshots by default (configurable via SCREENSHOT_OUTPUT_DIR env var). For window mode, provide windowName (app name like "Safari") or windowId.

输入参数mode必填delayformatregiondisplaywindowIdoutputPathwindowNameincludeCursor

版本历史

2
  1. v1.5.0最新Oct 30, 2026
  2. v1.4.0Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

其他 Screenshot 集成