Mcp Screenshot

io.github.Digital-Defiance由 GitHub 帳號 Digital-Defiance 發布v1.0.3更新於 Oct 24, 2026

Screenshot capture with PII masking and cross-platform support for AI agents

發布方自己的服務:screenshot.com.ar

概覽

AI 產生的概覽

讓 AI 助理擷取全螢幕、指定視窗或螢幕區域的截圖,並可選擇進行 PII 遮蔽。

可以做什麼
提供五個工具:screenshot_capture_full、screenshot_capture_window、screenshot_capture_region、screenshot_list_displays 和 screenshot_list_windows。截圖可存成檔案或以 base64 回傳,支援 PNG、JPEG、WebP、BMP 及可設定的品質。選用的 OCR 式 PII 遮蔽會遮蓋電子郵件、電話號碼和信用卡號。安全控制包括允許的儲存目錄、速率限制、視窗封鎖模式和稽核日誌。
適用情境
適合助理需要看到真實介面而非只有程式碼的情境:視覺除錯、無障礙與對比度檢查、響應式設計比較,以及產生附截圖的文件或缺陷報告。它是桌面端工具,適用於本機開發機而非無頭伺服器。若只需在瀏覽器工作階段內渲染網頁,則不必安裝。
執行需求
以本機 Node.js 程序透過 stdio 執行,npm 套件為 @ai-capabilities-suite/mcp-screenshot。Linux 需要 imagemagick(X11)或 grim(Wayland);macOS 需要螢幕錄製權限;Windows 不需額外相依套件。選用環境變數:SCREENSHOT_ALLOWED_DIRS、SCREENSHOT_MAX_CAPTURES_PER_MIN、SCREENSHOT_ENABLE_AUDIT_LOG、SCREENSHOT_BLOCKED_WINDOWS。不需要帳號或 API 金鑰。
安裝前請注意
會截取整個螢幕或指定視窗,敏感內容可能進入圖片;PII 遮蔽預設關閉且依賴 OCR。儲存路徑受 SCREENSHOT_ALLOWED_DIRS 限制,建議設定 SCREENSHOT_BLOCKED_WINDOWS 排除密碼管理員等視窗。macOS 需要授予螢幕錄製權限。稽核日誌預設開啟。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Mcp Screenshot,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

📸 MCP ACS Screenshot Server

[NPM Version] [GitHub Release] [License: MIT] [Node.js Version] [Docker Pulls]

Give AI agents visual superpowers to see, analyze, and document your applications like senior UX designers.

This enterprise-grade MCP server transforms AI from code-only assistants into visual experts capable of UI analysis, accessibility auditing, documentation generation, and responsive design testing.

🔗 Repository

This package is now maintained in its own repository: https://github.com/Digital-Defiance/mcp-screenshot

This repository is part of the AI Capabilitites Suite on GitHub.

🤔 Why Do AI Agents Need Visual Capabilities?

AI agents today are powerful but visually blind:

  • ❌ Can read HTML/CSS but can't see actual layouts
  • ❌ Can suggest UI improvements without seeing the real user experience
  • ❌ Can't detect accessibility issues like poor contrast or spacing
  • ❌ Can't create visual documentation or bug reports
  • ❌ Can't analyze responsive design across different screen sizes

Result: You're stuck manually creating screenshots, documentation, and visual analysis that AI should handle.


🎯 Revolutionary Use Cases

📚 "AI, create professional documentation"

You: "Document the checkout process with screenshots"AI: *Captures each step, analyzes UI flow*AI: "Generated complete user guide with 6 annotated screenshots, highlighting key interactions and error states..."

🔍 "AI, audit this page for accessibility"

You: "Check if this form meets WCAG guidelines"AI: *Captures form, analyzes visual elements*AI: "Found 4 accessibility issues: contrast ratio 2.1:1 (needs 4.5:1), missing focus indicators, touch targets too small..."

🐛 "AI, create a detailed bug report"

You: "The mobile navigation is broken"AI: *Captures different viewport sizes*AI: "Created bug report with before/after screenshots, exact breakpoint where it fails, and CSS fix suggestions..."

🎨 "AI, compare these design variations"

You: "Which hero section design works better?"AI: *Captures both versions, analyzes visual hierarchy*AI: "Version B has 28% better visual flow—CTA more prominent, text hierarchy clearer, better use of whitespace..."

📱 "AI, test responsive design"

You: "How does this look on different screen sizes?"AI: *Captures multiple viewport sizes*AI: "Layout breaks at 768px—sidebar overlaps content. Here's the media query fix with visual proof..."

✨ What This Changes

Before: AI worked blind, relying on code descriptions

  • ❌ "The button looks wrong" → AI guesses the issue
  • ❌ "Create documentation" → AI writes generic text
  • ❌ "Check accessibility" → AI only reviews code
  • ❌ "Test responsive design" → AI can't see actual breakpoints

After: AI sees and analyzes your actual user interface

  • ✅ Visual debugging - AI identifies exact pixel-level issues
  • ✅ Smart documentation - AI creates guides with real screenshots and annotations
  • ✅ Accessibility audits - AI measures actual contrast ratios and spacing
  • ✅ Responsive testing - AI captures and compares different screen sizes
  • ✅ Design analysis - AI evaluates visual hierarchy and user experience
  • ✅ Professional reports - AI creates detailed visual evidence for bugs and improvements

🚀 Features

  • Multi-format Support: PNG, JPEG, WebP, BMP with configurable quality
  • Flexible Capture: Full screen, specific windows, or custom regions
  • Privacy Protection: PII masking with OCR-based detection for emails, phone numbers, and credit cards
  • Security Controls: Path validation, rate limiting, audit logging, and configurable policies
  • Cross-platform: Linux (X11/Wayland), macOS, Windows with native APIs
  • Multi-monitor Support: Capture from specific displays in multi-monitor setups
  • Enterprise Security: Window exclusion, audit logging, rate limiting
  • AI-Optimized: Structured responses perfect for AI agent workflows

Installation

NPM Installation

bash
npm install @ai-capabilities-suite/mcp-screenshot

System Requirements

Linux:

  • X11: imagemagick package (provides import command)
  • Wayland: grim package
bash
# Ubuntu/Debiansudo apt-get install imagemagick grim
# Fedorasudo dnf install ImageMagick grim
# Archsudo pacman -S imagemagick grim

macOS:

  • Built-in screencapture command (no additional dependencies)
  • Screen Recording permission required (System Preferences > Security & Privacy > Privacy > Screen Recording)

Windows:

  • No additional dependencies required

MCP Configuration

Add to your MCP settings file (e.g., ~/.kiro/settings/mcp.json or .kiro/settings/mcp.json):

json
{  "mcpServers": {    "screenshot": {      "command": "node",      "args": ["/path/to/mcp-screenshot/dist/cli.js"],      "env": {        "SCREENSHOT_ALLOWED_DIRS": "/home/user/screenshots,/tmp",        "SCREENSHOT_MAX_CAPTURES_PER_MIN": "60",        "SCREENSHOT_ENABLE_AUDIT_LOG": "true"      }    }  }}

🛠️ 5 Professional MCP Tools

Purpose-built for AI agents to capture, analyze, and work with visual information:

The server exposes 5 comprehensive MCP tools that enable AI agents to see and understand your applications:

1. screenshot_capture_full

Capture full screen or specific display.

Parameters:

  • display (string, optional): Display ID to capture (defaults to primary display)
  • format (string, optional): Image format - png, jpeg, webp, or bmp (default: png)
  • quality (number, optional): Compression quality 1-100 for lossy formats (default: 90)
  • savePath (string, optional): File path to save screenshot (returns base64 if not provided)
  • enablePIIMasking (boolean, optional): Enable PII detection and masking (default: false)

Example:

json
{  "name": "screenshot_capture_full",  "arguments": {    "format": "png",    "savePath": "/home/user/screenshots/desktop.png",    "enablePIIMasking": true  }}

Response:

json
{  "status": "success",  "filePath": "/home/user/screenshots/desktop.png",  "metadata": {    "width": 1920,    "height": 1080,    "format": "png",    "fileSize": 245678,    "timestamp": "2024-12-01T10:30:00.000Z",    "display": {      "id": "0",      "name": "Primary Display",      "resolution": { "width": 1920, "height": 1080 },      "position": { "x": 0, "y": 0 },      "isPrimary": true    },    "piiMasking": {      "emailsRedacted": 2,      "phonesRedacted": 1,      "creditCardsRedacted": 0,      "customPatternsRedacted": 0    }  }}

2. screenshot_capture_window

Capture specific application window by ID or title pattern.

Parameters:

  • windowId (string, optional): Window identifier (use windowId or windowTitle)
  • windowTitle (string, optional): Window title pattern to match (use windowId or windowTitle)
  • includeFrame (boolean, optional): Include window frame and title bar (default: false)
  • format (string, optional): Image format (default: png)
  • quality (number, optional): Compression quality 1-100 (default: 90)
  • savePath (string, optional): File path to save screenshot

Example:

json
{  "name": "screenshot_capture_window",  "arguments": {    "windowTitle": "Chrome",    "includeFrame": false,    "format": "jpeg",    "quality": 85  }}

Response:

json
{  "status": "success",  "data": "iVBORw0KGgoAAAANSUhEUgAA...",  "mimeType": "image/jpeg",  "metadata": {    "width": 1280,    "height": 720,    "format": "jpeg",    "fileSize": 89234,    "timestamp": "2024-12-01T10:31:00.000Z",    "window": {      "id": "12345",      "title": "Google Chrome",      "processName": "chrome",      "pid": 5678,      "bounds": { "x": 100, "y": 100, "width": 1280, "height": 720 }    }  }}

3. screenshot_capture_region

Capture specific rectangular region of the screen.

Parameters:

  • x (number, required): X coordinate of top-left corner
  • y (number, required): Y coordinate of top-left corner
  • width (number, required): Width of region in pixels
  • height (number, required): Height of region in pixels
  • format (string, optional): Image format (default: png)
  • quality (number, optional): Compression quality 1-100 (default: 90)
  • savePath (string, optional): File path to save screenshot

Example:

json
{  "name": "screenshot_capture_region",  "arguments": {    "x": 100,    "y": 100,    "width": 800,    "height": 600,    "format": "png"  }}

Response:

json
{  "status": "success",  "data": "iVBORw0KGgoAAAANSUhEUgAA...",  "mimeType": "image/png",  "metadata": {    "width": 800,    "height": 600,    "format": "png",    "fileSize": 123456,    "timestamp": "2024-12-01T10:32:00.000Z",    "region": {      "x": 100,      "y": 100,      "width": 800,      "height": 600    }  }}

4. screenshot_list_displays

List all connected displays with resolution and position information.

Parameters: None

Example:

json
{  "name": "screenshot_list_displays",  "arguments": {}}

Response:

json
{  "status": "success",  "displays": [    {      "id": "0",      "name": "Primary Display",      "resolution": { "width": 1920, "height": 1080 },      "position": { "x": 0, "y": 0 },      "isPrimary": true    },    {      "id": "1",      "name": "Secondary Display",      "resolution": { "width": 1920, "height": 1080 },      "position": { "x": 1920, "y": 0 },      "isPrimary": false    }  ]}

5. screenshot_list_windows

List all visible windows with title, process, and position information.

Parameters: None

Example:

json
{  "name": "screenshot_list_windows",  "arguments": {}}

Response:

json
{  "status": "success",  "windows": [    {      "id": "12345",      "title": "Google Chrome",      "processName": "chrome",      "pid": 5678,      "bounds": { "x": 100, "y": 100, "width": 1280, "height": 720 },      "isMinimized": false    },    {      "id": "67890",      "title": "Terminal",      "processName": "gnome-terminal",      "pid": 9012,      "bounds": { "x": 200, "y": 200, "width": 800, "height": 600 },      "isMinimized": false    }  ]}

Security Configuration

The server enforces security policies to control screenshot operations. Configure via environment variables or security policy file.

Environment Variables

  • SCREENSHOT_ALLOWED_DIRS: Comma-separated list of allowed directories for saving screenshots
  • SCREENSHOT_MAX_CAPTURES_PER_MIN: Maximum captures per minute (default: 60)
  • SCREENSHOT_ENABLE_AUDIT_LOG: Enable audit logging (default: true)
  • SCREENSHOT_BLOCKED_WINDOWS: Comma-separated list of window title patterns to exclude

Security Policy File

Create a security-policy.json file:

json
{  "allowedDirectories": ["/home/user/screenshots", "/tmp/screenshots"],  "blockedWindowPatterns": [    ".*Password.*",    ".*1Password.*",    ".*LastPass.*",    ".*Bitwarden.*",    ".*Authentication.*"  ],  "maxCapturesPerMinute": 60,  "enableAuditLog": true}

Load the policy when starting the server:

typescript
import { MCPScreenshotServer } from "@ai-capabilities-suite/mcp-screenshot";import * as fs from "fs";
const policy = JSON.parse(fs.readFileSync("security-policy.json", "utf-8"));const server = new MCPScreenshotServer(policy);await server.start();

Error Handling

All tools return structured error responses with error codes and remediation suggestions.

Error Codes

CodeDescriptionRemediation
PERMISSION_DENIEDInsufficient permissions to captureGrant Screen Recording permission (macOS) or check user permissions
INVALID_PATHFile path outside allowed directoriesUse a path within configured allowed directories
WINDOW_NOT_FOUNDSpecified window does not existUse screenshot_list_windows to find available windows
DISPLAY_NOT_FOUNDSpecified display does not existUse screenshot_list_displays to find available displays
UNSUPPORTED_FORMATRequested format not supportedUse png, jpeg, webp, or bmp
CAPTURE_FAILEDScreenshot capture failedCheck permissions and try again
RATE_LIMIT_EXCEEDEDToo many captures in time windowWait before making additional requests
INVALID_REGIONInvalid region coordinates or dimensionsEnsure coordinates are non-negative and dimensions are positive
OUT_OF_MEMORYInsufficient memory for operationReduce capture size or close other applications
ENCODING_FAILEDImage encoding failedTry different format or reduce quality
FILE_SYSTEM_ERRORFile system operation failedCheck permissions and disk space

Error Response Format

json
{  "status": "error",  "error": {    "code": "WINDOW_NOT_FOUND",    "message": "Window with ID '12345' not found",    "details": {      "windowId": "12345"    },    "remediation": "Verify the window exists and is visible. Use screenshot_list_windows to see available windows."  }}

Troubleshooting

Linux Issues

Problem: import: command not found or grim: command not found

Solution: Install required packages:

bash
# X11sudo apt-get install imagemagick
# Waylandsudo apt-get install grim

Problem: Black screen or empty captures

Solution: Check display server environment variables:

bash
echo $DISPLAY  # Should show :0 or similar for X11echo $WAYLAND_DISPLAY  # Should show wayland-0 or similar for Wayland

macOS Issues

Problem: PERMISSION_DENIED error

Solution: Grant Screen Recording permission:

  1. Open System Preferences > Security & Privacy > Privacy
  2. Select "Screen Recording" from the list
  3. Add your terminal application or Node.js to the allowed list
  4. Restart the application

Problem: Retina display captures are double resolution

Solution: This is expected behavior. Retina displays have 2x pixel density. Use the width and height from metadata to determine actual dimensions.

Windows Issues

Problem: Capture fails with access denied

Solution: Run the application with administrator privileges or check Windows Defender settings.

Problem: Multi-monitor captures show wrong display

Solution: Use screenshot_list_displays to get correct display IDs and positions.

General Issues

Problem: RATE_LIMIT_EXCEEDED error

Solution: The server limits captures to prevent abuse. Wait 60 seconds or adjust maxCapturesPerMinute in security policy.

Problem: INVALID_PATH error when saving

Solution: Ensure the save path is within allowed directories configured in security policy.

Problem: PII masking not working

Solution:

  • Ensure tesseract.js is properly installed
  • Check that eng.traineddata language file is available
  • PII masking requires OCR which may be slow on large images

Problem: Large file sizes

Solution:

  • Use JPEG format with lower quality (60-80) for smaller files
  • Use WebP format for best compression
  • Reduce capture region size if possible

Problem: Out of memory errors

Solution:

  • Capture smaller regions instead of full screen
  • Reduce quality settings
  • Close other applications to free memory
  • Use streaming for very large captures

Programmatic Usage

TypeScript/JavaScript

typescript
import { MCPScreenshotServer } from "@ai-capabilities-suite/mcp-screenshot";
// Create server with custom security policyconst server = new MCPScreenshotServer({  allowedDirectories: ["/home/user/screenshots"],  maxCapturesPerMinute: 30,  enableAuditLog: true,  blockedWindowPatterns: [".*Password.*"],});
// Start serverawait server.start();
// Server will handle MCP protocol requests via stdio// Keep process runningprocess.on("SIGINT", async () => {  await server.stop();  process.exit(0);});

Direct Capture Engine Usage

typescript
import { createCaptureEngine } from "@ai-capabilities-suite/mcp-screenshot";
// Create platform-specific capture engineconst engine = createCaptureEngine();
// Capture full screenconst fullScreen = await engine.captureScreen();
// List and capture windowsconst windows = await engine.getWindows();const window = windows.find((w) => w.title.includes("Chrome"));if (window) {  const buffer = await engine.captureWindow(window.id, false);}
// Capture regionconst region = await engine.captureRegion(100, 100, 800, 600);
// List displaysconst displays = await engine.getDisplays();console.log(`Found ${displays.length} displays`);

Development

This package is part of the AI Capabilities Suite monorepo.

Build

bash
npm run build

Test

bash
# Run all testsnpm test
# Run specific test suitesnpm test -- capturenpm test -- securitynpm test -- property
# Run with coveragenpm test -- --coverage

Project Structure

packages/mcp-screenshot/├── src/│   ├── capture/          # Platform-specific capture engines│   ├── processing/       # Image processing and encoding│   ├── privacy/          # PII detection and masking│   ├── security/         # Security policy enforcement│   ├── storage/          # File operations│   ├── tools/            # MCP tool implementations│   ├── interfaces/       # TypeScript interfaces│   ├── types/            # Type definitions│   ├── errors/           # Error classes│   ├── server.ts         # MCP server implementation│   └── cli.ts            # CLI entry point├── README.md├── TESTING.md└── package.json

Contributing

Contributions are welcome! Please ensure:

  • All tests pass (npm test)
  • Code follows TypeScript best practices
  • New features include tests and documentation
  • Security considerations are addressed

License

MIT

Support

For issues and questions:

來源:README.md,提交 d87dc1f

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.0.3最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。

其他 Screenshot 整合