{"_id":"@caixm/image-compressor-mcp","_rev":"5-3dac48f6bff21e607fdbcedfd82615b7","name":"@caixm/image-compressor-mcp","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.0":{"name":"@caixm/image-compressor-mcp","version":"1.0.0","keywords":["mcp","image","compressor","tinify","png","jpg","jpeg","git"],"author":"","license":"MIT","_id":"@caixm/image-compressor-mcp@1.0.0","maintainers":[{"name":"jinkai123","email":"xujinkai@caixm.cn"}],"dist":{"shasum":"2356c2c15a4f6e532b290736a724a2e5c42c45be","tarball":"https://registry.npmjs.org/@caixm/image-compressor-mcp/-/image-compressor-mcp-1.0.0.tgz","fileCount":4,"integrity":"sha512-j0QwlLOUIvnDI6bH1EU8ku4ijR89Y1aysqcrJ9oupuy4e/KHK2qt4y8kFB+7Dhv9oMqk5w5U+ahAqTPHRzODCg==","signatures":[{"sig":"MEQCIGDJf4qAxReVYfZuWfYXjdmYxdG589YLzehMHxjucxbDAiAKU+ImIy6c+LyYfubOrofRYjlpcnZQZCYnzy4N42MnHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25044},"main":"mcp-server.js","engines":{"node":">=14.0.0"},"scripts":{"start":"node mcp-server.js"},"_npmUser":{"name":"jinkai123","email":"xujinkai@caixm.cn"},"_npmVersion":"10.7.0","description":"图片压缩 MCP 服务 - 自动压缩 Git 仓库中更改的图片或扫描静态资源目录","directories":{},"_nodeVersion":"18.20.4","dependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/image-compressor-mcp_1.0.0_1768302777731_0.8421724590355368","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@caixm/image-compressor-mcp","version":"1.0.1","keywords":["mcp","image","compressor","tinify","png","jpg","jpeg","git"],"author":"","license":"MIT","_id":"@caixm/image-compressor-mcp@1.0.1","maintainers":[{"name":"jinkai123","email":"xujinkai@caixm.cn"}],"bin":{"image-compressor-mcp":"mcp-server.js"},"dist":{"shasum":"4df468a649fc6e3a6988697e8d8e6b2a34910687","tarball":"https://registry.npmjs.org/@caixm/image-compressor-mcp/-/image-compressor-mcp-1.0.1.tgz","fileCount":4,"integrity":"sha512-3SmO4jcYtpK5yeGggiQb4xyvpl/xMGDNPsuP5Uk95RBJTSOYLTmVoeYzz+TGvZGPzvYoq+roFqQLbXkz/tS2MQ==","signatures":[{"sig":"MEUCIEOLedLSChenfixhB1WUSlITrCGDDigELik4ZEcXmAbOAiEAiQOq4yTpOaiJibxX5Obku5hNTZFCcVM2V2imQogo+vw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25111},"main":"mcp-server.js","engines":{"node":">=14.0.0"},"scripts":{"start":"node mcp-server.js"},"_npmUser":{"name":"jinkai123","email":"xujinkai@caixm.cn"},"_npmVersion":"10.7.0","description":"图片压缩 MCP 服务 - 自动压缩 Git 仓库中更改的图片或扫描静态资源目录","directories":{},"_nodeVersion":"18.20.4","dependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/image-compressor-mcp_1.0.1_1768303877054_0.7451541838367919","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@caixm/image-compressor-mcp","version":"1.0.2","keywords":["mcp","image","compressor","tinify","png","jpg","jpeg","git"],"author":"","license":"MIT","_id":"@caixm/image-compressor-mcp@1.0.2","maintainers":[{"name":"jinkai123","email":"xujinkai@caixm.cn"}],"bin":{"image-compressor-mcp":"mcp-server.js"},"dist":{"shasum":"c025b1c81421c647359b75c5a26e9363eb840730","tarball":"https://registry.npmjs.org/@caixm/image-compressor-mcp/-/image-compressor-mcp-1.0.2.tgz","fileCount":97,"integrity":"sha512-M9cjZCuKkTrnoVlIG4CgrpVARkiOxJDi3fnAXOuODjT8bIgR2zR6naY9QrCxZ4Ktv6lE4FAwYp7XDtQFy8iVxA==","signatures":[{"sig":"MEUCIQDbtUL5G7S8qdCfVGUwWD6X92l4bXvEKrBPC7vy3eZRNQIgVn2DWotz/qaoTPTKHrCYT6tGVPWUx58yQruSyFS2PY0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3971994},"main":"mcp-server.js","engines":{"node":">=14.0.0"},"scripts":{"start":"node mcp-server.js"},"_npmUser":{"name":"jinkai123","email":"xujinkai@caixm.cn"},"_npmVersion":"10.7.0","description":"图片压缩 MCP 服务 - 自动压缩 Git 仓库中更改的图片或扫描静态资源目录","directories":{},"_nodeVersion":"18.20.4","dependencies":{"zod-to-json-schema":"^3.23.5","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/image-compressor-mcp_1.0.2_1768304758018_0.7081997726623985","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@caixm/image-compressor-mcp","version":"1.0.3","keywords":["mcp","image","compressor","tinify","png","jpg","jpeg","git"],"author":"","license":"MIT","_id":"@caixm/image-compressor-mcp@1.0.3","maintainers":[{"name":"jinkai123","email":"xujinkai@caixm.cn"}],"bin":{"image-compressor-mcp":"mcp-server.js"},"dist":{"shasum":"5184593bb40904d046d8c5ba2db64418309f53ac","tarball":"https://registry.npmjs.org/@caixm/image-compressor-mcp/-/image-compressor-mcp-1.0.3.tgz","fileCount":4,"integrity":"sha512-Div9ZNL17AtDMjxDlc6ZDkDEFYr7ME3kSdQ86zo0ur58sCz497g2z8zxzzbVH7cdN6hUO3ebKIgyt46QpabdVQ==","signatures":[{"sig":"MEUCIQDiOEfe7SdRiRDU4JvU01lNLSUTnYhmsNHvOmnZbPa+IQIgN8CDl928lvtj2CckjMPziW2qWS3Op2ZLDvOeccmcWn4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25289},"main":"mcp-server.js","engines":{"node":">=14.0.0"},"scripts":{"start":"node mcp-server.js","postinstall":"node -e \"console.log('✅ Dependencies installed successfully')\""},"_npmUser":{"name":"jinkai123","email":"xujinkai@caixm.cn"},"_npmVersion":"10.7.0","description":"图片压缩 MCP 服务 - 自动压缩 Git 仓库中更改的图片或扫描静态资源目录","directories":{},"_nodeVersion":"18.20.4","dependencies":{"zod-to-json-schema":"^3.25.0","@modelcontextprotocol/sdk":"^1.0.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/image-compressor-mcp_1.0.3_1768305232862_0.8415762890223448","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@caixm/image-compressor-mcp","version":"1.0.4","description":"图片压缩 MCP 服务 - 自动压缩 Git 仓库中更改的图片或扫描静态资源目录","main":"mcp-server.js","bin":{"image-compressor-mcp":"mcp-server.js"},"scripts":{"start":"node mcp-server.js","postinstall":"node -e \"console.log('✅ Dependencies installed successfully')\""},"keywords":["mcp","image","compressor","tinify","png","jpg","jpeg","git"],"author":"","license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.4","zod-to-json-schema":"^3.25.0"},"engines":{"node":">=14.0.0"},"_id":"@caixm/image-compressor-mcp@1.0.4","_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-EqxgsqfxPQBM4+aYm7aQ0rdsdNHS9IlS6dpRfX03OV8qRtlVqfEIiD8rk4yPRGofmWWOnqBB57mJPhGgSn/+yw==","shasum":"091f7136e0cb5ec8d0bb7198ada58c226f923100","tarball":"https://registry.npmjs.org/@caixm/image-compressor-mcp/-/image-compressor-mcp-1.0.4.tgz","fileCount":4,"unpackedSize":28822,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIEXy7y7Q9I/RplHnukqiKEuB2HMGfu7X+R18wUiPGmL7AiArUQ6wi7JMnjHRgqSV5oeoKZzgGPYElPdY+g2/ee/2Dw=="}]},"_npmUser":{"name":"jinkai123","email":"xujinkai@caixm.cn"},"directories":{},"maintainers":[{"name":"jinkai123","email":"xujinkai@caixm.cn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/image-compressor-mcp_1.0.4_1773976194526_0.21075194097501182"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-13T11:12:57.637Z","modified":"2026-03-20T03:09:54.829Z","1.0.0":"2026-01-13T11:12:58.172Z","1.0.1":"2026-01-13T11:31:17.186Z","1.0.2":"2026-01-13T11:45:58.378Z","1.0.3":"2026-01-13T11:53:52.997Z","1.0.4":"2026-03-20T03:09:54.708Z"},"license":"MIT","keywords":["mcp","image","compressor","tinify","png","jpg","jpeg","git"],"description":"图片压缩 MCP 服务 - 自动压缩 Git 仓库中更改的图片或扫描静态资源目录","maintainers":[{"name":"jinkai123","email":"xujinkai@caixm.cn"}],"readme":"# 图片压缩 MCP 服务\n\n智能图片压缩 MCP 服务，自动检测 Git 仓库中更改的图片文件并压缩。如果不是 Git 仓库，则扫描常见的静态资源目录并压缩所有图片。\n\n## ✨ 功能特性\n\n- 🤖 **智能检测**：自动判断 Git 仓库或非 Git 仓库\n- 📦 **Git 集成**：自动压缩新增、修改、未跟踪的图片\n- 🎯 **自动扫描**：非 Git 仓库时扫描常见静态资源目录\n- 🔄 **备份保护**：压缩前自动备份，失败可恢复\n- 📊 **简洁报告**：清晰的成功/失败统计\n- 🎨 **格式支持**：支持 PNG、JPG、JPEG 格式\n- ⚡ **高效快速**：使用免费 Tinify API，压缩速度快\n- 🚫 **智能过滤**：自动跳过已删除文件和过大文件\n\n## 🎯 使用场景\n\n### 场景 1：Git 仓库（推荐）\n\n```bash\n# 修改了一些图片\ngit status\n# modified:   src/assets/images/logo.png\n# modified:   src/assets/images/banner.png\n\n# 在 Cursor 中使用 MCP\n# \"压缩图片\"\n# => 自动检测并压缩修改的图片\n```\n\n### 场景 2：新增图片\n\n```bash\n# 添加了新图片\ncp new-image.png src/assets/images/\n\n# 使用 MCP 压缩\n# \"压缩图片\"\n# => 自动检测并压缩新增的图片\n```\n\n### 场景 3：非 Git 仓库\n\n```bash\n# 非 Git 仓库的项目\n# 使用 MCP 压缩\n# \"压缩图片\"\n# => 自动扫描 assets、images 等常见目录并压缩\n```\n\n## 📖 使用说明\n\n### MCP 工具\n\n只有一个工具：`compress_images`\n\n**参数：** 无\n\n**功能：**\n\n- 如果是 Git 仓库：压缩新增、修改、未跟踪的图片\n- 如果不是 Git 仓库：扫描常见静态资源目录并压缩所有图片\n\n**返回格式：**\n\n成功示例：\n\n```text\n✅ 压缩完成\n\n成功: 2 张\n| 文件名 | 原始大小 | 压缩后 | 节省 | 压缩比 |\n|--------|----------|--------|------|--------|\n| logo.png | 120 KB | 85 KB | 35 KB | 29.17% |\n| banner.png | 500 KB | 350 KB | 150 KB | 30.00% |\n\n总计节省: 185 KB (29.68%)\n```\n\n失败示例：\n\n失败示例：\n\n```text\n❌ 压缩失败\n\n失败: 1 张\n- background.jpg: 网络连接超时\n```\n\n混合示例（成功+失败）：\n\n```text\n✅ 压缩完成\n\n成功: 2 张\n| 文件名 | 原始大小 | 压缩后 | 节省 | 压缩比 |\n|--------|----------|--------|------|--------|\n| logo.png | 120 KB | 85 KB | 35 KB | 29.17% |\n| banner.png | 500 KB | 350 KB | 150 KB | 30.00% |\n\n总计节省: 185 KB (29.68%)\n\n❌ 压缩失败\n\n失败: 1 张\n- background.jpg: 网络连接超时\n```\n\n没有图片：\n\n```text\n✅ 没有找到需要压缩的图片文件\n\n检测模式: Git 仓库\n```\n\n## ⚙️ 配置\n\n### 自动扫描的目录（非 Git 仓库）\n\n当检测到非 Git 仓库时，会自动扫描以下目录：\n\n```text\nassets/\nimages/\nimage/\nimg/\nstatic/\npublic/\nresources/\nsrc/assets/\nsrc/images/\nsrc/image/\nsrc/img/\npublic/assets/\npublic/images/\nstatic/assets/\nstatic/images/\n```\n\n**注意：** 如需添加更多目录，请编辑 `mcp-server.js` 中的 `commonImageDirs` 数组（有详细注释）。\n\n### 自动排除的目录\n\n以下目录会被自动跳过：\n\n- `node_modules`\n- `dist`\n- `build`\n- `.git`\n- `config`\n- `coverage`\n- `.next`\n- `.nuxt`\n- `target`\n- `out`\n\n### 文件大小限制\n\n- 默认最大支持 5MB 的图片\n- 超过限制的图片会自动跳过\n\n### 支持的图片格式\n\n- PNG\n- JPG\n- JPEG\n\n## 📁 项目结构\n\n```text\ndevelop-mcp/\n├── mcp-server.js       # MCP 服务器（主文件）\n├── package.json        # 项目配置\n├── README.md          # 本文件\n├── INSTALL.md         # 安装和发布指南\n└── .gitignore        # Git 忽略规则\n```\n\n## 🔧 技术细节\n\n### Git 检测原理\n\n使用 `git status --porcelain` 命令获取更改的文件，解析状态码：\n\n- `M` - Modified（已修改）\n- `A` - Added（已添加）\n- `?` - Untracked（未跟踪）\n- `D` - Deleted（已删除，跳过）\n\n### 压缩流程\n\n1. 检测当前目录是否为 Git 仓库\n2. Git 仓库：获取更改的图片文件\n3. 非 Git 仓库：扫描常见的静态资源目录\n4. 过滤文件：排除过大文件、不支持的格式\n5. 上传到 Tinify API 进行压缩\n6. 下载压缩后的图片\n7. 备份原文件（`.bak`）\n8. 替换为压缩后的文件\n9. 删除备份文件\n10. 返回压缩结果\n\n### 安全性\n\n- 压缩前自动备份原文件\n- 失败时保留原文件\n- 仅处理支持的图片格式\n- 跳过超过大小限制的文件\n- 跳过已删除的文件\n\n## 🚀 安装\n\n详细的安装和发布指南请查看 [INSTALL.md](./INSTALL.md)。\n\n## 📝 团队使用\n\n### 发布到 npm（推荐）\n\n```bash\n# 1. 登录 npm\nnpm login\n\n# 2. 发布\nnpm publish\n```\n\n### 团队成员使用\n\n在项目根目录创建 `.cursor/mcp.json`：\n\n```json\n{\n  \"mcpServers\": {\n    \"image-compressor\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@caixm/image-compressor-mcp\"]\n    }\n  }\n}\n```\n\n然后重启 Cursor，即可使用！\n\n详细步骤请查看 [INSTALL.md](./INSTALL.md)。\n\n## ❓ 常见问题\n\n### Q: MCP 工具不显示？\n\nA:\n\n1. 检查 `.cursor/mcp.json` 配置是否正确\n2. 重启 Cursor IDE\n3. 查看 Help > Open Logs\n\n### Q: 压缩失败？\n\nA:\n\n1. 检查网络连接\n2. Tinify API 可能有频率限制，稍后再试\n3. 查看错误提示信息\n\n### Q: 为什么某些图片没有被压缩？\n\nA: 可能原因：\n\n- 文件超过 5MB 大小限制\n- 文件格式不支持（仅 PNG、JPG、JPEG）\n- Git 仓库中文件已被删除\n- 文件在排除的目录中\n\n### Q: 如何支持更多图片格式？\n\nA: 编辑 `mcp-server.js` 中的 `imgsInclude` 数组：\n\n```javascript\nconst imgsInclude = ['.png', '.jpg', '.jpeg', '.webp', '.gif'];\n```\n\n## 📄 许可证\n\nMIT\n\n## 🙏 致谢\n\n使用 [Tinify](https://tinify.com/) 免费服务进行图片压缩\n","readmeFilename":"README.md"}