mcpField
S
ShortPixel Image Optimizer

ShortPixel Image Optimizer

远程服务
shortpixel.com媒体与设计02 天前更新

关于 ShortPixel Image Optimizer

ShortPixel MCP 服务将 ShortPixel SPIO 图片优化能力提供给 AI Agent,适用于需要批量处理公开图片 URL 的工作流。它通过 HTTPS 接收用户自己的 API 密钥,并转发请求;密钥不会由服务存储。

主要功能

  1. 01优化一个或多个公开图片 URL
  2. 02设置压缩级别与缩放尺寸
  3. 03转换图片格式并处理背景
  4. 04调整 EXIF 与 CMYK 设置
  5. 05支持每个 URL 单独覆盖参数

适用场景

  1. 01为网页图片批量压缩
  2. 02将图片转换为 WebP 或 AVIF
  3. 03为图片设置尺寸或移除背景

MCP 相关

通过 Streamable HTTP 向 MCP 客户端提供 `optimize_image_urls` 工具。每次请求需携带用户的 ShortPixel API 密钥,服务将参数转发至 SPIO API。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.shortpixel.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.shortpixel.com/mcp需要授权

工具

1
参数类型必填说明
urlsarray是要优化的公共图像 URL,1 到 100 个。每个 URL 都必须可通过 http(s) 访问,且无需身份验证
waitinteger否每次 API 调用的最长等待秒数:0=立即返回,1-30=等待处理
lossyinteger否压缩级别:0=无损(无画质损失,文件较大),1=有损(文件最小),2=高质量压缩(近乎无损,最适合摄影作品)
resizeenum否调整尺寸模式:0=无,1=外部(填充),3=内部(适应),4=智能裁剪0 | 1 | 3 | 4
refreshenum否优化前重新获取源文件:1=是,0=有缓存时使用缓存0 | 1
upscaleenum否图像放大倍数:0=关闭,2=2 倍,3=3 倍,4=4 倍0 | 2 | 3 | 4
cmyk2rgbenum否将 CMYK 图像转换为 RGB,以确保在网页上正确显示:1=是,0=否0 | 1
bg_removeany否移除图像背景:1=设为透明;图像 URL=替换为该图像;#rrggbbxx=填充颜色及 Alpha 值
converttostring否转换为其他格式,例如 +webp、+avif、+webp|+avif、webp|avif、jpg、png、gif。留空表示不转换
keep_exifenum否保留相机和 GPS 数据等 EXIF 元数据:1=保留,0=移除以减小文件体积0 | 1
paramlistarray否按索引设置每个 URL 的参数覆盖值;如果提供,长度必须与 urls 相同
resize_widthinteger否目标宽度(像素),在 resize > 0 时使用
resize_heightinteger否目标高度(像素),在 resize > 0 时使用
returndatalistarray否在 API 响应中原样回显的任意数组,供调用方关联数据

详细介绍

ShortPixel MCP 服务

公共 HTTP MCP 服务,向 AI Agent(Cursor、Claude Desktop、VS Code 等)提供 ShortPixel SPIO 图像优化功能。

架构

AI client (Cursor, Claude, …)
    │
    │  MCP over HTTPS (Streamable HTTP)
    ▼
https://mcp.shortpixel.com/mcp
    │
    │  user's API key in Authorization header
    ▼
ShortPixel SPIO API (api.shortpixel.com)

每个请求都携带用户自己的 ShortPixel API 密钥。MCP 服务不会存储用户密钥,而是将其转发至公共 SPIO API。

要求

  • Node.js 20+
  • npm

安装(服务端)

npm ci
npm run build
cp .env.example .env

编辑 .env 配置服务设置(端口、允许的主机、上游 API URL)。请勿将用户 API 密钥放入服务端 .env。

运行

npm start

端点:

路径方法描述
/healthGET健康检查(无需 API 密钥)
/pingGET身份验证检查 — 如果存在 API 密钥标头,则返回 ok
/mcpPOSTMCP Streamable HTTP 端点
快速测试(curl)

服务已启动,无 API 密钥:

curl http://mcp.shortpixel.com:3000/health

存在 API 密钥(简单检查):

curl -i -H "Authorization: Bearer YOUR_API_KEY" http://mcp.shortpixel.com:3000/ping

除非已在 nginx 上配置 TLS,否则请在端口 3000 上使用 http://(而非 https://)。

MCP 请求(重要:Streamable HTTP 客户端必须同时接受 JSON 和 SSE):

curl -s -N -X POST http://mcp.shortpixel.com:3000/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

身份验证

每次 MCP 请求都发送用户的 ShortPixel API 密钥:

Authorization: Bearer <shortpixel_api_key>

备用标头:

X-ShortPixel-Api-Key: <shortpixel_api_key>

没有密钥的用户可在 shortpixel.com 获取。

Cursor 设置(终端用户)

{
  "mcpServers": {
    "shortpixel": {
      "url": "https://mcp.shortpixel.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_SHORTPIXEL_API_KEY"
      }
    }
  }
}

开发期间,请将 URL 替换为已部署的主机(例如 http://localhost:3000/mcp)。

服务端环境变量

变量必需默认值描述
PORT否3000HTTP 监听端口
ALLOWED_HOSTS否—以逗号分隔的 Host 标头允许列表(生产环境推荐)
SHORTPIXEL_API_URL否https://api.shortpixel.com/v2上游 SPIO API 基础 URL
SHORTPIXEL_PLUGIN_VERSION否MCP01发送至 SPIO 的插件版本
LOG_LEVEL否info日志详细程度:debug、info、warn、error
LOG_FORMAT否texttext = 易读的文本行;json = 结构化 JSON
LOG_MCP_PROTOCOL否true记录传入和传出的 MCP JSON-RPC 载荷

ShortPixel 内部开发时,设置 SHORTPIXEL_API_URL=https://devapi2.shortpixel.com/v2。

请求日志

日志输出到 stdout;shortpixel-mcp systemd 服务会将其重定向到 /var/log/shortpixel/mcp.log(在本地运行时,npm start 会直接显示日志)。

默认值(LOG_FORMAT=text) — 可跟踪的叙述式流程:

[2026-06-30 15:01:53] [1/5] → CLIENT | HTTP POST /mcp | JSON-RPC request: "initialize" (client connects) | id: 0
           {
             "jsonrpc": "2.0",
             "method": "initialize",
             "id": 0,
             "params": { ... }
           }
[2026-06-30 15:01:53] [1/5] ← SERVER | HTTP POST /mcp 200 | JSON-RPC response: "initialize" (client connects)
[2026-06-30 15:01:53] [2/5] → CLIENT | HTTP POST /mcp | JSON-RPC request: "notifications/initialized" (session ready, no response body expected) | id: null
[2026-06-30 15:01:53] [2.5/5] → CLIENT | HTTP POST /mcp | JSON-RPC request: "tools/list" (client asks which tools exist) | id: 1
[2026-06-30 15:01:53] [2.5/5] ← SERVER | HTTP POST /mcp 200 | JSON-RPC response: "tools/list" (client asks which tools exist) | tools discovered: optimize_image_urls
[2026-06-30 15:02:18] [3/5] → CLIENT | HTTP POST /mcp | JSON-RPC request: "tools/call" (client runs a tool) | id: 2 | tool: "optimize_image_urls"
[2026-06-30 15:02:18] [4/5] MCP → SPIO API: POST reducer.php (args mapped to SPIO payload) | ...
[2026-06-30 15:02:35] [5/5] MCP ← SPIO API: Success | reduction: 27.41% | optimized: http://api.shortpixel.com/f/...-lossy.jpg | original: ...
[2026-06-30 15:02:35] [3/5] ← SERVER | HTTP POST /mcp 200 | JSON-RPC response: "tools/call" (client runs a tool) | tool: optimize_image_urls
           { "jsonrpc": "2.0", "id": 2, "result": { ... } }
[2026-06-30 15:02:35]     ✓ round-trip done (16.3s)

LOG_MCP_PROTOCOL=false 会仅保留较高层级的应用日志,并隐藏 MCP 载荷转储。

结构化(LOG_FORMAT=json) — 每行一个 JSON 对象:

事件发生时机
http_request每个请求(方法、路径、状态、耗时、MCP 方法/工具)
spio_request发往 SPIO reducer.php 的调用
spio_responseSPIO 结果摘要(状态、改进百分比)
mcp_auth_missing请求未携带 API 密钥

API 密钥会被掩码处理(****abcd)。绝不会记录完整密钥。

注意: 聊天提示词不会到达此服务。LLM(位于 MCP 客户端内)会将用户文本转换为结构化的 tools/call;服务端只能看到 JSON-RPC 参数,并将其映射到 SPIO API。

tail -f /var/log/shortpixel/mcp.log
# or, running locally
npm start

设置 LOG_LEVEL=debug 可查看 tools/list 和额外的 HTTP 日志行。

部署

以 shortpixel-mcp systemd 服务运行(单元文件位于 /etc/systemd/system/shortpixel-mcp.service),该服务直接运行 node dist/index.js(不使用 pm2),并从项目目录中的 .env 读取环境变量(EnvironmentFile=)。

cd /web/mcp.shortpixel.com   # liveVPS; a separate host from the rest of the PHP stack
npm ci
npm run build
# edit .env directly on the server (not deployed - gitignored)
sudo systemctl restart shortpixel-mcp
sudo systemctl status shortpixel-mcp

每次依赖项变更后,重新上传 package.json 和 package-lock.json。如果构建仍然失败,请运行 npm ci --include=dev(某些服务器会设置 NODE_ENV=production,从而跳过 devDependencies)。

可用的 MCP 工具

工具描述
optimize_image_urls通过 SPIO reducer API 优化一个或多个公开图片 URL

optimize_image_urls 参数:

  • urls(必填):要优化的公开图片 URL(最多 100 个)
  • lossy:压缩级别(0 无损,1 有损,2 光泽)
  • wait:最长等待秒数(0 立即返回,1-30 等待)
  • upscale:放大倍数(0、2、3、4)
  • resize:调整大小模式(0 无,1 外部,3 内部,4 智能裁剪)
  • resize_width、resize_height:调整后的目标尺寸,单位为像素
  • cmyk2rgb:将 CMYK 转换为 RGB(1 是,0 否)
  • keep_exif:保留 EXIF 元数据(1 保留,0 移除)
  • convertto:转换格式(+webp、+avif、+webp|+avif、webp|avif、jpg、png、gif)
  • bg_remove:移除背景(1、图片 URL 或 #rrggbbxx)
  • refresh:强制重新获取源文件(1),或使用缓存的优化数据(0)
  • paramlist:针对每个 URL 的覆盖参数数组(长度必须与 urls 一致)
  • returndatalist:响应中原样回传的任意数组

项目结构

src/index.ts                    HTTP server entry point
src/http/auth.ts                API key extraction from requests
src/mcp/create-mcp-server.ts    Per-request MCP server factory
src/clients/spio-api-client.ts  ShortPixel SPIO HTTP client
src/tools/spio-tools.ts         MCP tools
src/http/request-log-middleware.ts HTTP request logging
src/logging/request-logger.ts    Structured JSON logger
src/logging/mcp-protocol-log.ts  MCP protocol payload capture/normalize

命名约定

类型风格示例
文件kebab-casespio-api-client.ts
类PascalCaseSpioApiClient
方法camelCaseoptimizeUrls

脚本

命令描述
npm run build将 TypeScript 编译到 dist/
npm start运行 HTTP MCP 服务
npm run dev使用 tsx 运行(无需构建步骤)

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。