MCP。Snagit-Snagit的模型上下文协议服务器
A.NET 9 MCP(模型上下文协议)服务器,为AI助手提供对存储在iCloud中的Snagit屏幕截图的访问。
✅ 经过验证的解决方案 -文件路径模式
此实现通过将图像提取到临时文件并返回Claude可以直接读取的文件路径,成功解决了MCP图像令牌限制问题。 任何图像大小都不再有令牌限制错误!
概述
MCP。Snagit使Claude Desktop等AI助手能够直接访问和分析您的Snagit捕获。它会自动处理:
- 在iCloud文档中发现Snagit捕获
- 从.snagx存档文件中提取图像
- 调整图像大小以满足AI模型约束
- 客户端感知格式(Claude Desktop、VS Code等)
特性
核心工具
- list_captures -列出可用的Snagit捕获
- 返回最近捕获的元数据 - 支持按日期范围过滤 - 包括文件大小和时间戳信息
- get_last_capture -检索最近的捕获
- 自动查找最新的.snagx文件 - 提取并返回图像 - 调整大小以适应客户端约束
- get_capture -按文件名获取特定捕获
- 支持部分文件名匹配 - 返回完整图像数据
- get_captures -获取多个捕获
- 接受文件名数组 - 批量处理以提高效率
图像处理
- 自动调整大小 满足克劳德的限制(5MB,8000x8000像素)
- 格式优化 基于检测到的客户端
- 元数据保存 用于捕获上下文
安装
先决条件
- .NET 9.0 SDK或更高版本
- 已安装Snagit(任何平台)
- 访问Snagit捕获文件(.snagx格式)
从源代码构建
# Clone the repository
git clone https://github.com/Bisiar/mcp-snagit.git
cd mcp-snagit
# Restore dependencies
dotnet restore
# Build the project
dotnet build --configuration Release
# Publish as self-contained
dotnet publish -c Release -o published配置
⚠️ 重要: - 更新路径:替换/path/to/your/mcp-snagit/使用克隆此存储库的实际目录。 - Snagit路径:设置SNAGIT_PATH存储Snagit捕获的位置(默认为macOS iCloud位置)。 - 交叉平台的:适用于任何Snagit安装-只需点SNAGIT_PATH到您的捕获目录。
Claude桌面设置
添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"snagit": {
"command": "/usr/local/share/dotnet/dotnet",
"args": [
"/path/to/your/mcp-snagit/published/MCP.Snagit.dll"
],
"env": {
"SNAGIT_PATH": "~/Library/Mobile Documents/iCloud~com~TechSmith~Snagit/Documents",
"MAX_IMAGE_WIDTH": "2048",
"MAX_IMAGE_HEIGHT": "2048",
"MCP_CLIENT_TYPE": "claude-desktop"
}
}
}
}备注:
- 替换
/path/to/your/mcp-snagit/使用克隆此存储库的实际路径。 - macOS:默认值
SNAGIT_PATH以上内容适用于iCloud同步的Snagit捕获。 - 视窗:设置
SNAGIT_PATH到您的Snagit捕获文件夹(例如。,C:\\Users\\YourName\\Documents\\Snagit或类似)。 - 自定义:设置
SNAGIT_PATH到包含以下内容的任何文件夹.snagx文件夹。
环境变量
SNAGIT_PATH-Snagit文档文件夹的路径(可选,默认为macOS iCloud位置)MAX_IMAGE_WIDTH-最大图像宽度(像素)(默认值:2048)MAX_IMAGE_HEIGHT-最大图像高度(像素)(默认值:2048)MCP_CLIENT_TYPE-用于格式优化的客户端类型(claude桌面、vscode等)CACHE_DURATION_MINUTES-缓存提取图像的时间(默认值:15)
使用示例
在克劳德桌面
配置后,您可以使用自然语言:
"Show me my last Snagit capture"
"List my recent screenshots from today"
"Get the capture named 'login-screen'"
"Show me all captures from this morning"直接工具使用
// List recent captures
{
"tool": "list_captures",
"arguments": {
"count": 10,
"startDate": "2025-06-07"
}
}
// Get specific capture - File path mode (default, most efficient)
{
"tool": "get_capture",
"arguments": {
"filename": "2025-06-07_09-52-32.snagx",
"maxWidth": 1920
}
}
// Get specific capture - Reference mode (lightweight)
{
"tool": "get_capture",
"arguments": {
"filename": "2025-06-07_09-52-32.snagx",
"mode": "reference"
}
}
// Get specific capture - Base64 mode (for remote servers)
{
"tool": "get_capture",
"arguments": {
"filename": "2025-06-07_09-52-32.snagx",
"maxWidth": 1920,
"mode": "base64"
}
}图像返回模式
MCP支持三种返回图像的模式:
- 文件路径模式(默认)✅ 推荐 -将图像提取到临时文件并返回路径
- 最有效:图像数据不使用令牌(元数据仅使用约20个令牌) - 适用于任何图像大小:不再出现“超过最大令牌”错误 - 直接访问:Claude使用读取工具直接读取文件 - 自动清理:存储在项目目录中的临时文件 - 完全质量:支持图像大小调整,同时保持质量
- 参考模式 -返回对图像的轻量级引用
- 效率适中(约100个代币作为参考) - 返回用于编程访问的资源URI - 有利于构建MCP资源链
- Base64模式 -将完整图像作为base64数据返回
- 代币重:约40000多个代币,正常截图达到限制 - 与远程MCP服务器兼容 - 仅在文件路径模式不可用时使用
成功案例
在实现文件路径模式后,以前以“响应超过最大允许令牌(25000)”失败的映像现在可以完美工作,无论大小如何。该解决方案优雅、高效,并利用了Claude现有的文件读取功能。
技术细节
文件路径实现
突破性的解决方案将提取的图像存储在 temp_captures MCP项目中的目录:
/path/to/your/mcp-snagit/
├── published/ # MCP server binaries
├── temp_captures/ # Extracted images for Claude
│ ├── snagit_capture_20250608_105234_abc123.png
│ └── snagit_capture_20250608_105445_xyz789.png
└── ...工艺流程:
- MCP从.snagx ZIP文件中提取图像
- 使用SixLabors应用任何请求的大小调整。ImageSharp
- 保存到temp_captures/,文件名唯一
- 返回Claude的文件路径(约20个标记)
- Claude使用读取工具直接访问图像(图像数据不需要额外标记)
文件格式
Snagit.snagx文件是ZIP存档,包含:
thumbnail.png-预览图片{GUID}.json-捕获元数据{GUID}.snagt-其他捕获数据metadata.json-文件元数据
图像处理流水线
- 发现 -扫描Snagit目录中的.snagx文件
- 提取 -解压缩并提取thumbnail.png
- 分析 -检查图像尺寸和大小
- 调整大小 -如果超过限制,请使用高质量算法缩小规模
- 编码 -转换为base64进行传输
- 缓存 -临时存储处理后的图像
客户端检测
服务器尝试通过以下方式检测客户端:
- MCP上下文标头(如果可用)
MCP_CLIENT_TYPE环境变量- 工序名称检查
- 默认为Claude兼容格式
发展
项目结构
/MCP.Snagit
├── Program.cs # Entry point and MCP server setup
├── Tools/
│ └── SnagitTools.cs # Tool implementations
├── Services/
│ ├── SnagitService.cs # Core capture handling logic
│ └── ImageProcessor.cs # Image resizing and optimization
├── Models/
│ └── SnagitCapture.cs # Data models
└── MCP.Snagit.csproj # Project configuration关键依赖关系
ModelContextProtocol-MCP服务器实现SixLabors.ImageSharp-图像处理System.IO.Compression-ZIP文件处理
添加新工具
- 添加方法
SnagitTools与一起上课[McpServerTool]属性 - 使用实现逻辑
SnagitService - 返回JSON序列化结果
- 更新README文档
故障排除
常见问题
- “未找到捕获”
- 验证Snagit是否正在保存到iCloud文档 - 检查 SNAGIT_PATH 环境变量 - 确保文件权限正确
- “图像太大”
- 自动调整大小应该能解决这个问题 - 检查 MAX_IMAGE_WIDTH/HEIGHT 设置 - 验证ImageSharp是否正确安装
- “服务器没有响应”
- 检查克劳德桌面日志: ~/Library/Logs/Claude/ - 核实。NET运行时已安装 - 手动测试服务器(见下文)
手动测试
# Test server initialization
echo '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"1.0.0","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}},"id":1}' | dotnet run
# Test tool discovery
echo '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}' | dotnet run调试模式
设置详细日志记录的环境变量:
export MCP_DEBUG=true安全考虑
- 仅访问指定Snagit目录中的文件
- 没有网络请求或外部API调用
- 图像在内存中处理(无临时文件)
- 尊重系统文件权限
许可证
\[您的许可证在这里\]
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 添加新功能的测试
- 提交拉取请求
参考实现
此MCP服务器可作为处理MCP服务器中大型二进制数据的可靠参考。 文件路径方法解决了当前MCP实现中的一个基本限制,可以适用于:
- PDF文档服务器
- 音频/视频文件服务器
- CAD文件服务器
- 任何处理大型二元资产的MCP
模式很简单:提取→ 保存到临时位置→ 返回文件路径→ 让克劳德直接读。
路线图
- \[x\] 解决令牌限制问题 - ✅ 完成 具有文件路径模式
- \[x\] 与跨平台支持 - ✅ 完成 -可在任何平台上使用自定义
SNAGIT_PATH - \[\]视频捕获支持(Snagit的.mp4)
- \[\]高级搜索过滤器(按内容、标签)
- \[\]批量导出功能
- \[\]与Snagit的注释数据集成
