README.md•6.22 kB
# TinyPNG MCP Server 使用指南
本项目是一个基于 [Model Context Protocol (MCP)](https://www.npmjs.com/package/@modelcontextprotocol/sdk) 的图片压缩服务器,使用 [TinyPNG API](https://tinypng.com/developers/reference/nodejs) 来优化图片。
## 功能特性
- ✅ 支持批量压缩目录中的所有图片
- ✅ 支持图片格式转换(PNG、JPEG、WebP、AVIF 互转)
- ✅ 支持图片尺寸调整和智能裁剪
- ✅ 支持多种图片格式:`.png`, `.jpg`, `.jpeg`, `.webp`, `.avif`
- ✅ 自动覆盖原始文件(节省存储空间)
- ✅ 详细的压缩报告(文件大小变化、压缩比例)
- ✅ 安全的 API 密钥管理(通过环境变量)
- ✅ 完整的错误处理和日志记录
## 前置环境
需要安装Node.js环境
> Recommend Node.js version >= 20
> [Download Node.js](https://nodejs.org/en/download)
## 安装配置
### 1. 获取 TinyPNG API 密钥
1. 访问 [TinyPNG Developer API](https://tinypng.com/developers)
2. 使用邮箱注册账号
3. 获取免费的 API 密钥(每月 500 次免费压缩)
### 2. 配置 MCP 客户端
创建或修改你的 MCP 配置文件,目前支持的客户端(或命令行工具)有Cursor,gemini-cli,Claude Code,Claude Desktop,Trae...
```json
{
"mcpServers": {
"mcp-tinify-image": {
"command": "npx",
"args": [
"-y",
"mcp-tinify-image"
],
"env": {
"TINIFY_API_KEY": "YOUR_TINIFY_API_KEY"
}
}
}
}
```
## 使用方法
### 可用工具
本 MCP 服务器提供三个核心工具,满足不同的图片处理需求:
| 工具名称 | 主要功能 | 适用场景 |
|---------|----------|----------|
| `minify_image` | 批量压缩图片 | 减少文件大小,优化存储 |
| `resize_image` | 调整图片尺寸 | 生成缩略图,适配不同设备 |
| `convert_image` | 转换图片格式 | Web 优化,兼容性处理 |
#### `minify_image`
压缩指定目录中的所有支持的图片文件。支持嵌套结构。
**参数:**
- `directoryPath` (string): 包含要压缩图片的目录路径
**示例:**
```bash
# 压缩 ./images 目录中的所有图片
minify_image {
"directoryPath": "./images"
}
```
**输出示例:**
```
✅ photo1.jpg: 2048000 → 512000 bytes (75.0% reduction)
✅ screenshot.png: 1024000 → 256000 bytes (75.0% reduction)
❌ corrupted.jpg: Invalid image format
📊 Total compressions used this month: 15
✅ Successfully compressed: 2 images
❌ Failed to compress: 1 images
```
#### `resize_image`
调整指定图片尺寸。
**参数:**
```
{
imagePath: z.string().describe('Path to the image file to resize'),
width: z.number().optional().describe('Target width in pixels'),
height: z.number().optional().describe('Target height in pixels'),
method: z.enum(['fit', 'scale', 'cover', 'thumb']).describe('Resize method'),
outputPath: z.string().optional().describe('Output path for resized image'),
},
```
### method参数模式说明
| 模式 | 说明 | 适用场景 |
|------|------|----------|
| `fit` | 保持宽高比,适配指定尺寸 | 缩略图生成 |
| `scale` | 按比例缩放 | 等比缩放 |
| `cover` | 裁剪填充指定尺寸 | 封面图制作 |
| `thumb` | 智能缩略图模式 | 头像处理 |
**示例:**
```bash
# 调整图片尺寸
@icon-logo.png 帮我修改图片尺寸,高度60宽度60
```
**测试结果:**
```
✅ 调整结果
原图片: icon-logo.png (4.4KB)
新图片: icon-logo-60x60.png (1.9KB)
尺寸: 调整为 60x60 像素
调整方法: fit (保持宽高比)
文件大小减少: 57.3%
```
#### `convert_image`
转换图片格式,支持 PNG、JPEG、WebP、AVIF 格式之间的相互转换。
**参数:**
```javascript
{
imagePath: string, // 源图片文件路径
targetFormats: string | string[], // 目标格式,支持单个或多个格式
backgroundColor?: string, // 可选:透明背景填充色
outputPath?: string // 可选:自定义输出路径
}
```
**支持的格式:**
- `image/png` - PNG 格式
- `image/jpeg` - JPEG 格式
- `image/webp` - WebP 格式
- `image/avif` - AVIF 格式
**示例:**
```bash
# PNG 转 WebP
convert_image {
"imagePath": "./photo.png",
"targetFormats": "image/webp"
}
# 多格式转换(选择最小的)
convert_image {
"imagePath": "./large-image.png",
"targetFormats": ["image/webp", "image/avif"]
}
# 透明 PNG 转 JPEG(添加白色背景)
convert_image {
"imagePath": "./logo.png",
"targetFormats": "image/jpeg",
"backgroundColor": "white"
}
# 自定义输出路径
convert_image {
"imagePath": "./input.png",
"targetFormats": "image/webp",
"outputPath": "./optimized/output.webp"
}
```
**输出示例:**
```
✅ Image converted successfully: logo.png
🔄 image/png → image/webp
📊 Size: 512000 → 128000 bytes (+75.0%)
🎯 Target format(s): image/webp
💾 Saved to: ./logo.webp
📊 Total API calls used: 3
```
**应用场景:**
- **Web 优化**: 将 PNG 转换为体积更小的 WebP/AVIF 格式
- **兼容性处理**: 为旧浏览器提供 JPEG/PNG 备选格式
- **透明处理**: 将透明 PNG 转换为 JPEG 并添加背景色
- **现代格式支持**: 利用 AVIF/WebP 的高压缩比优势
## 支持的图片格式
根据 [TinyPNG 官方文档](https://tinypng.com/developers/reference/nodejs),支持以下格式:
- **PNG** - 便携式网络图形
- **JPEG/JPG** - 联合图像专家组格式
- **WebP** - 现代网络图片格式
- **AVIF** - AV1 图像文件格式
## 限制说明
- **免费账户**: 每月 500 次 API 调用(包括压缩、调整尺寸、格式转换)
- **付费账户**: 根据订阅计划不同
- **文件大小**: 单个文件最大 5MB
- **并发请求**: TinyPNG 有合理的速率限制
- **API 计费规则**:
- 图片压缩(`minify_image`): 每张图片 1 次调用
- 尺寸调整(`resize_image`): 每张图片 1 次调用
- 格式转换(`convert_image`): 每张图片 1 次调用
- 组合操作会累计调用次数
## 相关链接
- [Model Context Protocol SDK](https://www.npmjs.com/package/@modelcontextprotocol/sdk)
- [TinyPNG API 文档](https://tinypng.com/developers/reference/nodejs)