ShortPixel Image Optimizer

com.shortpixel.mcp由 mcp.shortpixel.com 發布官方發布者v0.3.0更新於 Oct 24, 2026

Optimize public image URLs via the ShortPixel SPIO API for AI agents

已驗證Streamable HTTP可網頁執行開發者工具媒體與設計

概覽

AI 產生的概覽

一個遠端 MCP 伺服器,讓助理透過 ShortPixel SPIO API 最佳化公開圖片網址,支援壓縮、縮放與格式轉換等選項。

可以做什麼
透過 ShortPixel 最佳化一個或多個公開圖片網址,每次最多 100 個,回傳最佳化後的圖片位址與壓縮比例。可選擇壓縮等級(無損、有損、光澤)、等待時間、放大倍數,以及縮放模式和目標寬高。轉換格式(WebP、AVIF、JPG、PNG、GIF),移除背景,將 CMYK 轉為 RGB,並保留或移除 EXIF 中繼資料。支援依網址個別覆寫參數,並在回應中原樣回傳一個資料清單。
適用情境
適合助理處理網頁圖片時,在對話中直接完成壓縮、縮放、格式轉換或背景移除。也適合每次請求批次最佳化最多 100 個公開圖片網址。
執行需求
遠端端點 mcp.shortpixel.com,使用 Streamable HTTP,終端使用者無需本機安裝。需要 ShortPixel 帳號與 API 金鑰,透過 Authorization 的 bearer 權杖(或 X-ShortPixel-Api-Key 標頭)傳送。圖片網址必須可公開存取。
安裝前請注意
ShortPixel API 金鑰會在每次請求中轉送給上游 SPIO API,應視為機密保管。最佳化會消耗使用者 ShortPixel 帳戶的配額或點數。伺服器會將提供的圖片網址傳送給第三方 API。README 說明預設會記錄 MCP 協定酬載,但 API 金鑰會被遮罩。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 ShortPixel Image Optimizer,將其新增到工作區。
  2. 連接 Authorization token 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/com.shortpixel.mcp%2Foptimize/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "shortpixel-image-optimizer": {
      "type": "http",
      "url": "https://mcp.shortpixel.com/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

ShortPixel MCP Server

Public HTTP MCP server that exposes ShortPixel SPIO image optimization to AI agents (Cursor, Claude Desktop, VS Code, etc.).

Architecture

text
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)

Each request carries the user's own ShortPixel API key. The MCP server does not store user keys — it forwards them to the public SPIO API.

Requirements

  • Node.js 20+
  • npm

Install (server)

bash
npm cinpm run buildcp .env.example .env

Edit .env for server settings (port, allowed hosts, upstream API URL). Do not put user API keys in server .env.

Run

bash
npm start

Endpoints:

PathMethodDescription
/healthGETHealth check (no API key)
/pingGETAuth check — returns ok if API key header is present
/mcpPOSTMCP Streamable HTTP endpoint

Quick test (curl)

Server up, no API key:

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

API key present (simple check):

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

Use http:// (not https://) on port 3000 unless TLS is configured on nginx.

MCP request (important: Streamable HTTP clients must accept both JSON and SSE):

bash
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":{}}'

Authentication

Send the user's ShortPixel API key on every MCP request:

http
Authorization: Bearer <shortpixel_api_key>

Alternative header:

http
X-ShortPixel-Api-Key: <shortpixel_api_key>

Users without a key can get one at shortpixel.com.

Cursor setup (end user)

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

Replace the URL with your deployed host during development (e.g. http://localhost:3000/mcp).

Server environment variables

VariableRequiredDefaultDescription
PORTno3000HTTP listen port
ALLOWED_HOSTSno—Comma-separated Host header allowlist (recommended in production)
SHORTPIXEL_API_URLnohttps://api.shortpixel.com/v2Upstream SPIO API base URL
SHORTPIXEL_PLUGIN_VERSIONnoMCP01Plugin version sent to SPIO
LOG_LEVELnoinfoLog verbosity: debug, info, warn, error
LOG_FORMATnotexttext = human-readable lines; json = structured JSON
LOG_MCP_PROTOCOLnotrueLog inbound/outbound MCP JSON-RPC payloads

For internal ShortPixel development, set SHORTPIXEL_API_URL=https://devapi2.shortpixel.com/v2.

Request logging

Logs go to stdout, which the shortpixel-mcp systemd service redirects to /var/log/shortpixel/mcp.log (npm start shows them directly when running locally).

Default (LOG_FORMAT=text) — narrative flow you can follow:

[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 keeps only high-level app logs and hides MCP payload dumps.

Structured (LOG_FORMAT=json) — one JSON object per line:

EventWhen
http_requestEvery request (method, path, status, duration, MCP method/tool)
spio_requestOutgoing call to SPIO reducer.php
spio_responseSPIO result summary (status, % improvement)
mcp_auth_missingRequest without API key

API keys are masked (****abcd). Full keys are never logged.

Note: The chat prompt never reaches this server. The LLM (inside the MCP client) turns user text into a structured tools/call; the server only sees JSON-RPC arguments and maps them to the SPIO API.

bash
tail -f /var/log/shortpixel/mcp.log# or, running locallynpm start

Set LOG_LEVEL=debug for tools/list and extra HTTP lines.

Deploy

Runs as the shortpixel-mcp systemd service (unit file at /etc/systemd/system/shortpixel-mcp.service), which runs node dist/index.js directly (no pm2) and reads env vars from .env in the project directory (EnvironmentFile=).

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

Re-upload package.json and package-lock.json after each dependency change. If build still fails, run npm ci --include=dev (some servers set NODE_ENV=production which skips devDependencies).

Available MCP tools

ToolDescription
optimize_image_urlsOptimize one or more public image URLs via SPIO reducer API

optimize_image_urls arguments:

  • urls (required): Public image URLs to optimize (max 100)
  • lossy: Compression level (0 lossless, 1 lossy, 2 glossy)
  • wait: Max wait seconds (0 to return immediately, 1-30 to wait)
  • upscale: Upscale factor (0, 2, 3, 4)
  • resize: Resize mode (0 none, 1 outer, 3 inner, 4 smart crop)
  • resize_width, resize_height: Resize target dimensions in pixels
  • cmyk2rgb: Convert CMYK to RGB (1 yes, 0 no)
  • keep_exif: Keep EXIF metadata (1 keep, 0 remove)
  • convertto: Conversion value (+webp, +avif, +webp|+avif, webp|avif, jpg, png, gif)
  • bg_remove: Background removal (1, image URL, or #rrggbbxx)
  • refresh: Force source refetch (1) or use cached optimized data (0)
  • paramlist: Per-URL overrides array (must match urls length)
  • returndatalist: Any array echoed back unchanged in response

Project layout

text
src/index.ts                    HTTP server entry pointsrc/http/auth.ts                API key extraction from requestssrc/mcp/create-mcp-server.ts    Per-request MCP server factorysrc/clients/spio-api-client.ts  ShortPixel SPIO HTTP clientsrc/tools/spio-tools.ts         MCP toolssrc/http/request-log-middleware.ts HTTP request loggingsrc/logging/request-logger.ts    Structured JSON loggersrc/logging/mcp-protocol-log.ts  MCP protocol payload capture/normalize

Naming conventions

KindStyleExample
Fileskebab-casespio-api-client.ts
ClassesPascalCaseSpioApiClient
MethodscamelCaseoptimizeUrls

Scripts

CommandDescription
npm run buildCompile TypeScript to dist/
npm startRun HTTP MCP server
npm run devRun with tsx (no build step)

來源:README.md,提交 a7e387d

工具

0
SourceWeft 尚未讀取此伺服器的工具。

版本歷史

1
  1. v0.3.0最新Sep 16, 2026

評分

已滿足適用檢查項的 75%

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

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分

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

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

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