夏普MCP
](https://www.npmjs.com/package/sharp-mcp)  ](https://nodejs.org/) 
用于图像会话管理和处理的MCP(模型上下文协议)服务器。提供用于在会话中存储图像以及提取图像元数据和颜色的工具。
特性
- 创建会话:将base64图像存储在具有唯一ID的内存会话中
- create_session_by_path:从图像文件路径创建会话(自动base64转换)
- list_session:列出所有活动的映像会话
- get_dimensions:获取图像尺寸和MIME类型
- 选择颜色:从指定区域提取平均颜色
- 拆除背景:使用基于ML的分割从图像中删除背景
- 提取区域:从图像中裁剪矩形区域
- 压缩图像:通过格式转换(JPEG、PNG、WebP)压缩图像
- 使用TypeScript构建类型安全
- 用途 锋利 用于高性能图像处理
安装
NPM
npm install -g sharp-mcp铁匠铺
通过以下方式自动为任何客户端安装Sharp MCP 铁匠铺:
npx -y @smithery/cli@latest install sharp-mcp --client 可用客户端: cursor, claude, vscode, windsurf, cline, zed等等。
MCP客户端集成
Sharp MCP可以与支持模型上下文协议(MCP)的各种AI编码助手和IDE集成。
需求
- Node.js>=v18.0.0
- MCP兼容客户端(Cursor、Claude Code、VS Code、Windsurf等)
Install in Cursor
首选 Settings -> Cursor Settings -> MCP -> Add new global MCP server
将以下配置添加到您的 ~/.cursor/mcp.json 文件:
{
"mcpServers": {
"sharp": {
"command": "npx",
"args": ["-y", "sharp-mcp"]
}
}
}Install in Claude Code
运行此命令:
claude mcp add sharp -- npx -y sharp-mcpInstall in VS Code
将此添加到您的VS Code MCP配置文件中。看 VS代码MCP文档 了解更多信息。
"mcp": {
"servers": {
"sharp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "sharp-mcp"]
}
}
}Install in Windsurf
将此添加到您的Windsurf MCP配置文件中:
{
"mcpServers": {
"sharp": {
"command": "npx",
"args": ["-y", "sharp-mcp"]
}
}
}Install in Claude Desktop
打开Claude Desktop开发人员设置并编辑您的 claude_desktop_config.json 文件:
{
"mcpServers": {
"sharp": {
"command": "npx",
"args": ["-y", "sharp-mcp"]
}
}
}Install in OpenAI Codex
将此添加到您的 codex.toml 或 ~/.codex/config.toml 文件:
[mcp_servers.sharp]
command = "npx"
args = ["-y", "sharp-mcp"]可用工具
创建会话
使用提供的映像有效负载创建新会话,并返回唯一的会话ID。
参数:
image_payload(字符串,必填):Base64编码图像数据description(字符串,可选):图像的可选描述
退货:
{ "sessionId": "img_abc123xyz" }例子:
{
"image_payload": "iVBORw0KGgoAAAANSUhEUgAA...",
"description": "Screenshot of the homepage"
}create_session_by_path
通过从指定的绝对文件路径读取图像来创建新会话。自动将文件转换为base64并验证其是否为有效图像。
参数:
path(string,必填):图像文件的绝对路径description(字符串,可选):图像的可选描述
退货:
{
"sessionId": "img_abc123xyz",
"source_path": "/path/to/image.png",
"file_size": 46849
}例子:
{
"path": "/Users/username/images/screenshot.png",
"description": "Homepage screenshot"
}错误响应:
- 相对路径:
Path must be absolute. Received relative path: "./image.png" - 找不到文件:
File not found: "/path/to/image.png" - 无效图像:
Invalid or corrupted image file: "/path/to/file.txt"
list_session
列出所有活动会话及其会话ID、图像有效载荷和描述。
参数: 无
退货:
[
{
"sessionId": "img_abc123xyz",
"image_payload": "iVBORw0KGgoAAAANSUhEUgAA...",
"description": "Screenshot of the homepage"
}
]get_dimensions
获取会话中存储的图像的维度和MIME类型。
参数:
sessionId(string,必填):从create_session或create_session_by_path返回的会话ID
退货:
{
"width": 1920,
"height": 1080,
"mimeType": "image/png"
}错误响应(无效会话):
Invalid or non-existent session ID. Please call create_session first to obtain a valid session ID.选择颜色
从以指定坐标为中心的方形区域拾取平均颜色。
参数:
sessionId(string,必填):从create_session返回的会话IDx(数字,必填):中心点的X坐标y(数字,必填):中心点的Y坐标radius(数字,可选,默认值:5):采样区域的半径。采样区域将是一个(半径×2)大小的正方形。
退货:
{
"r": 255,
"g": 128,
"b": 64,
"hex": "#FF8040"
}错误响应(超出界限):
Coordinates (2000, 500) exceed image bounds (1920x1080).拆除背景
使用基于ML的分割从图像中删除背景。返回具有透明度的PNG。由...驱动 @imgly/背景移除节点 用于精确的对象检测。
参数:
sessionId(string,必填):从create_session返回的会话IDoutput_path(string,可选):保存输出PNG文件的绝对路径。如果未提供,则返回base64有效载荷。
返回(不带output_path):
{
"image_payload": "iVBORw0KGgoAAAANSUhEUgAA...",
"mime_type": "image/png"
}返回(带output_path):
{
"path": "/path/to/output.png"
}例子:
{
"sessionId": "img_abc123xyz"
}注: 由于下载并缓存了ML模型文件(~10-50MB),第一次运行可能需要更长的时间。
之前和之后:
提取区域
从会话中存储的图像中提取(裁剪)矩形区域。将裁剪后的图像作为文件或base64有效载荷返回。
参数:
sessionId(string,必填):从create_session返回的会话IDx(数字,必填):裁剪区域左上角的X坐标y(数字,必填):裁剪区域左上角的Y坐标width(数字,必填):作物区域的宽度height(数字,必填):作物区域的高度output_path(字符串,可选):保存裁剪图像的绝对路径。如果未提供,则返回base64有效载荷。
返回(不带output_path):
{
"base64": "iVBORw0KGgoAAAANSUhEUgAA...",
"mimeType": "image/png"
}返回(带output_path):
{
"success": true,
"path": "/path/to/cropped.png"
}例子:
{
"sessionId": "img_abc123xyz",
"x": 100,
"y": 50,
"width": 200,
"height": 150,
"output_path": "/path/to/cropped.png"
}错误响应:
- 越界:
Region (100, 50, 200x150) exceeds image bounds (150x100) - 无效坐标:
Invalid coordinates: x and y must be non-negative values. - 无效尺寸:
Invalid dimensions: width and height must be positive values.
压缩图像
压缩具有指定格式和质量的图像。支持JPEG、PNG和WebP格式。将压缩图像作为文件或base64有效载荷返回。
参数:
sessionId(string,必填):从create_session返回的会话IDformat(字符串,可选):输出格式:“jpeg”、“png”或“webp”。如果未指定,则保留原始格式。quality(数字,可选,默认值:80):压缩质量(1-100)。值越高意味着质量越好,但文件大小越大。output_path(string,可选):保存压缩图像的绝对路径。如果未提供,则返回base64有效载荷。
返回(不带output_path):
{
"base64": "iVBORw0KGgoAAAANSUhEUgAA...",
"mimeType": "image/jpeg",
"format": "jpeg",
"originalSize": 245632,
"compressedSize": 98234,
"compressionRatio": "60.01%"
}返回(带output_path):
{
"success": true,
"path": "/path/to/compressed.jpg",
"format": "jpeg",
"originalSize": 245632,
"compressedSize": 98234,
"compressionRatio": "60.01%"
}例子:
{
"sessionId": "img_abc123xyz",
"format": "webp",
"quality": 75,
"output_path": "/path/to/output.webp"
}注: 对于PNG格式,质量参数转换为压缩级别(质量100→ 级别0,质量0→ 9级)。
使用示例
示例1:分析图像
在光标/克劳德代码中:
Read the screenshot at ./screenshot.png, create a session with it,
and tell me its dimensions.示例2:从UI提取颜色
在光标/克劳德代码中:
I have a UI screenshot. Create a session with it and pick the colors
at these coordinates: (100, 50), (200, 150), (300, 200).示例3:获取图像元数据
在光标/克劳德代码中:
Load ./logo.png into a session and get its size and format.示例4:从图像中删除背景
在光标/克劳德代码中:
Create a session with ./product-photo.jpg and remove the background.
Save the result to ./product-transparent.png示例5:压缩和转换图像格式
在光标/克劳德代码中:
Load ./large-image.png into a session and compress it to WebP format
with 75% quality. Save to ./optimized.webp命令行用法
直接运行服务器:
# Using stdio transport (default)
sharp-mcp
# Using HTTP transport
sharp-mcp --transport http --port 5000CLI选项:
--transport:传输类型(默认值:stdio)--port:HTTP传输端口(默认值:5000)
发展
# Install dependencies
npm install
# Run in development mode
npm run dev
# Run tests
npm test
# Build
npm run build
# Type check
npm run typecheck
# Lint
npm run lint建筑
该项目采用模块化架构:
- 服务/:会话存储和图像处理服务
- session-store.ts:内存会话管理 - image-processor.ts:基于Sharp的图像分析
- 工具/:MCP工具实现
- create-session.ts:从base64创建会话 - create-session-by-path.ts:从文件路径创建会话 - list-session.ts:会话列表 - get-image-size.ts:图像维度提取(get_dimensions) - pick-color.ts:颜色提取 - remove-background.ts:基于ML的背景删除 - extract-region.ts:图像裁剪 - compress-image.ts:图像压缩
- utils/:共享公用设施
- validation.ts:会话ID验证
- server.ts:主MCP服务器设置和配置
支持的图像格式
- JPEG(.jpg、.JPEG)
- PNG(.PNG)
- GIF(.GIF)
- WebP(.WebP)
- TIFF(.TIFF)
- AVIF(.AVIF)
许可证
麻省理工学院
贡献
欢迎投稿!请随时提交拉取请求。
作者
choesumin
