关于 snapmcp
snapmcp 是用于生成终端、代码、浏览器页面和文档图像的 MCP 服务,面向 Agent 和文档工作流。它提供图像、PDF、差异图和动画捕获工具,侧重渲染展示而非浏览器交互。
主要功能
- 01按检测到的配色捕获终端输出
- 02渲染语法高亮代码和文件
- 03捕获浏览器页面及 HTML
- 04渲染 Markdown 并生成 PDF
- 05生成差异图、GIF 和批量捕获
- 06默认启用 SSRF 防护和文件路径白名单
适用场景
- 01为安装指南添加终端和代码图片
- 02用前后对比捕获记录界面变更
- 03制作保留终端配色的 CLI 教程
MCP 相关
它提供 13 个 MCP 工具,用于捕获和渲染终端输出、代码、浏览器页面、文档、差异图、PDF、GIF 和序列。可配置给 Claude Code、OpenCode 和 VS Code/Cline 等 MCP 客户端使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y snapmcpSNAPMCP_DIROutput directory for capturesSNAPMCP_THEMEShiki syntax highlighting theme (27 built-in themes, auto-detected terminal theme when unset)SNAPMCP_FORMATOutput image format: png or jpegSNAPMCP_QUALITYJPEG quality (1-100, only used for JPEG)SNAPMCP_SHADOWDrop shadow level: none, soft, medium, strongSNAPMCP_ALLOWED_PATHSComma- or semicolon-separated allowlist of file paths readable by capture_file (deny-all when unset)SNAPMCP_SSRF_PROTECTIONBlock requests to private IP ranges (DNS-resolved, IPv4 + IPv6). Default: trueSNAPMCP_CHROME_EXECUTABLEPath to a system Chrome/Chromium binary to use for browser capturesSNAPMCP_CHROME_PROFILEChrome profile directory to use for browser captures (persistent context)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
13收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| lines | array | 是 | 要渲染的行。「$ 」前缀表示命令提示符,其他内容表示输出 |
| title | string | 是 | 终端标题栏中显示的窗口标题 |
| output | string | 否 | 输出文件名(默认:自动生成) |
详细介绍
用于可视化文档的 MCP 服务。
终端 · 代码 · 浏览器 · Markdown · 差异 · HTML · PDF · GIF
面向文档工作流——适用于结构化快照无法满足需求的场景。
真实终端配色、Shiki 代码高亮、可视化差异、PDF 和 GIF——一个 MCP 服务,提供 13 种工具。使用系统 Chrome 渲染,或在首次设置时自动安装 Chromium。默认启用 SSRF 防护。专为编写文档的 Agent 打造,而不只是驱动浏览器。
快速开始
三个步骤,不到两分钟:
1. 安装
npm install -g snapmcp
# or run without installing: npx -y snapmcp
2. 添加到 Claude Code(~/.claude/claude.json)
{
"mcpServers": {
"snapmcp": {
"command": "npx",
"args": ["-y", "snapmcp"],
"env": {
"SNAPMCP_DIR": "./captures",
"SNAPMCP_THEME": "nord"
}
}
}
}
3. 捕获
用自然语言向 Agent 提出请求:
“捕获
git log --oneline -5的终端截图,以及src/index.ts的语法高亮 PNG。”
Agent 会调用 capture_terminal 和 capture_file——图像会保存到 ./captures/,并应用真实的终端主题和所选的语法主题。
其他客户端:OpenCode、VS Code / Cline、Docker
OpenCode(opencode.json):
{
"mcpServers": {
"snapmcp": {
"command": "npx",
"args": ["-y", "snapmcp"],
"env": {
"SNAPMCP_DIR": "./captures",
"SNAPMCP_FORMAT": "jpeg",
"SNAPMCP_QUALITY": "95"
}
}
}
}
VS Code / Cline / Roo-Cline(settings.json → cline.mcpServers):
{
"mcpServers": {
"snapmcp": {
"command": "npx",
"args": ["-y", "snapmcp"],
"env": {
"SNAPMCP_DIR": "./captures",
"SNAPMCP_FORMAT": "jpeg"
}
}
}
}
Docker:
docker run -i --rm \
-e SNAPMCP_DIR=/captures \
-e SNAPMCP_THEME=nord \
-v /path/to/output:/captures \
ghcr.io/reeinharddd/snapmcp
效果展示
| 捕获内容 | 预览 |
|---|---|
| 终端(自动检测真实配色) | ![]() |
| 代码(Shiki 语法高亮) | ![]() |
| 差异(绿色/红色) | ![]() |
为什么选择 snapmcp,而不是 Playwright MCP
不同的任务需要不同的工具。Playwright MCP 通过节省令牌的无障碍快照驱动浏览器;snapmcp 则渲染像素级还原的图像,供人阅读。如果 Agent 需要点击,就用 Playwright;如果需要展示,就用 snapmcp。
| 使用场景 | snapmcp | Playwright MCP |
|---|---|---|
| 使用真实配色捕获终端 | ✅ 自动检测 Kitty、Gnome、Alacritty、WezTerm 主题 | ❌ 不支持终端 |
| 代码 → 语法高亮图像 | ✅ Shiki,支持 50 多种语言和 27 种主题 | ❌ 非其用途 |
| Git 差异 → 红绿可视化图像 | ✅ capture_diff | ❌ |
| URL → PDF 文档 | ✅ capture_pdf | ❌ |
| 从捕获内容生成动画 GIF | ✅ capture_gif(零依赖 gifenc) | ❌ |
| Markdown → 样式化文档 | ✅ capture_markdown、capture_document | ❌ |
| 浏览器页面截图 | ✅ capture_browser(整页或视口) | ✅ |
| 浏览器自动化(点击、填写、导航) | ❌ 仅支持截图 | ✅ 由无障碍树驱动,节省令牌——这才是合适的工具 |
大多数文档流水线会将两者搭配使用:用 Playwright MCP 交互,用 snapmcp 记录。
工具
| 工具 | 描述 |
|---|---|
capture_terminal | 带语法着色提示符的终端输出(自动检测真实终端主题) |
capture_code | 通过 Shiki 生成语法高亮代码(支持 50 多种语言和 27 种主题) |
capture_browser | 全页或视口截图(如果可用,则使用系统 Chrome 配置文件) |
capture_file | 文件 → 自动检测语言 → 高亮截图 |
capture_markdown | 将渲染后的 Markdown 生成为带样式的文档 |
capture_html | 将任意 HTML 片段渲染为图像 |
capture_diff | Git 差异,新增内容为绿色,删除内容为红色 |
capture_pdf | URL → PDF 文档 |
capture_batch | 一次调用批量捕获多个项目 |
capture_gif | 根据多张截图生成动画 GIF |
capture_sequence | 并排显示的动画序列 |
capture_document | 创建包含嵌入式捕获内容的文档(MD/HTML/PDF) |
snapmcp-hint | 为 MCP 客户端提供服务能力提示 |
使用场景
自动化文档 — Agent 编写设置指南并嵌入真实捕获内容:安装命令的终端输出(采用你的实际主题)、语法高亮的配置文件,以及迁移的差异内容。只需一条提示词和三个 capture_* 调用,图像就会保存到 Markdown 文件旁边。
视觉 QA — UI 更改后,Agent 使用 capture_browser 捕获受影响的页面,使用 capture_batch 批量处理更改前后的截图,并使用 capture_gif 制作动画对比图,用于 PR 描述。
终端指南 — 截图必须与读者实际看到的内容一致的 CLI 教程:capture_terminal 会重现真实的提示符颜色,而不是通用的深色矩形。
安全性
默认启用 SSRF 防护,无需主动开启。
| 功能 | 描述 |
|---|---|
| SSRF 防护 | 默认启用(使用 SNAPMCP_SSRF_PROTECTION=false 禁用)。会阻止 IP 字面量(v4 + v6)、localhost 变体,以及解析到私有地址段的 DNS 名称(127.0.0.0/8、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、fc00::/7、fe80::/10 等);每次页面请求(包括重定向)都会重新检查 |
| 文件允许列表 | 未设置时,SNAPMCP_ALLOWED_PATHS 默认拒绝所有路径;只有明确允许的路径才能被捕获 |
| 路径遍历 | 防止 ../ 越界、符号链接遍历(通过 realpath)和空字节注入 |
| 输入限制 | 终端最多 1000 行;代码/Markdown/HTML 最大 200KB;差异内容最大 500KB;文件读取最大 5MB;GIF 帧数最多 60;GIF 画布最大 8192×8192 |
| 审计日志 | 可选的结构化 JSON 日志文件,记录带时间戳的事件 |
| Chromium 沙箱 | 启动时检查沙箱是否可用 |
配置
MCP 服务的环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
SNAPMCP_DIR | ./captures | 截图的输出目录 |
SNAPMCP_THEME | 自动检测 | 语法主题(27 种内置主题 + 自动检测终端) |
SNAPMCP_FORMAT | png | 输出格式(png、jpeg) |
SNAPMCP_QUALITY | 90 | JPEG 质量(1-100) |
SNAPMCP_PADDING | 32 | 内容内边距(像素) |
SNAPMCP_SHADOW | none | 投影(none、soft、medium、strong;别名 sm/md/lg) |
SNAPMCP_WINDOW_CHROME | false | macOS 风格标题栏边框 |
SNAPMCP_BORDER_RADIUS | 0 | 窗口圆角半径 |
SNAPMCP_BADGE | false | 页脚徽章 |
SNAPMCP_LOG_FILE | — | 审计日志文件路径 |
SNAPMCP_CHROME_EXECUTABLE | — | Chrome/Chromium 二进制文件路径 |
SNAPMCP_CHROME_CHANNEL | — | Chrome 通道(stable、beta、dev、canary) |
SNAPMCP_CHROME_PROFILE | — | Chrome 配置目录名称 |
SNAPMCP_ALLOWED_PATHS | (默认全部拒绝) | capture_file 可访问的文件路径,以逗号或分号分隔 |
27 种内置 Shiki 主题:dracula、one-dark-pro、nord、tokyo-night、catppuccin-mocha、catppuccin-latte、ayu-dark、ayu-light、vitesse-dark、vitesse-light、min-dark、min-light、poimandres、rose-pine、rose-pine-moon、rose-pine-dawn、slack-dark、slack-ochin、snazzy-light、github-dark-dimmed、github-light、one-light、solarized-light、solarized-dark、material-theme、material-theme-lighter、material-theme-ocean
CLI
SnapMCP 除 MCP 服务外,还提供完整的 CLI:
snapmcp — Start the MCP server
snapmcp init — Interactive setup wizard (detects Chrome, terminal theme, output dir)
snapmcp doctor — Health check: 7 checks across Node, Chromium, paths, env
snapmcp test — Generate test captures (terminal + code) to verify the setup
文档
| 页面 | 内容 |
|---|---|
| 快速入门 | 安装、快速开始、MCP 客户端配置 |
| 工具参考 | 全部 13 种工具及其参数和示例 |
| 配置 | 所有 SNAPMCP_* 环境变量、主题和默认值 |
| CLI 参考 | Init、doctor、test 命令 |
| 指南 | 终端截图、浏览器截图、GIF 动画 |
| ARCHITECTURE.md | 模块映射、数据流、安全架构 |
| CONTRIBUTING.md | 开发工作流、测试指南、PR 检查清单 |
开发
git clone https://github.com/reeinharddd/snapmcp
cd snapmcp
bun install
bun run build # tsc → dist/
bun test # 317 tests
要求:Node.js ≥ 20 或 Bun ≥ 1.2。CI 通过 GitHub Actions 在 ubuntu / macOS / windows 上运行。
许可证
MIT — 详见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


