使用说明
ZIP MCP服务器
中文 |英语
项目介绍
ZIP MCP Server是一个基于fastMCP和ZIP.js的压缩服务器,实现了模型上下文协议(MCP)。该项目提供完全参数控制的ZIP压缩、解压缩和查询压缩包信息功能。
特性
- 支持文件和数据的压缩和解压缩
- 支持多文件打包压缩
- 提供压缩级别控制(0-9)
- 支持密码保护和加密强度设置
- 提供压缩包元数据的查询功能
- 解压缩时验证ZIP条目路径,以防止路径遍历写入
安全
版本 1.0.6 稍后修复中的任意文件写入问题 decompress 工具:恶意ZIP条目名称(例如 ../outside.txt)可以预先与输出目录连接,并写入预期的提取根目录之外。提取现在解析一次输出根,验证每个条目路径,并拒绝绝对路径、驱动器号路径、, .. 段以及任何可以转义输出目录的路径。
多亏了 瑞安 (vonbrubeck@gmail.com)负责任地报道这个问题。
项目结构
zip-mcp
├── src
│ ├── index.ts # Application entry point
│ ├── utils
│ │ ├── compression.ts # Compression and decompression implementation
│ │ └── safePath.ts # Safe ZIP entry path validation
├── tsconfig.json # TypeScript configuration file
├── package.json # npm configuration file
└── README.md # Project documentation
安装
您可以使用npm全局安装ZIP MCP服务器:
npm install -g zip-mcp
MCP配置
安装后,您可以在MCP JSON配置中配置ZIP MCP:
{
"mcpServers": {
"zip-mcp": {
"command": "zip-mcp",
"args": []
}
}
}
在AI客户端中配置MCP JSON
- 克劳德客户: https://modelcontextprotocol.io/quickstart/user
- Raycast:需要安装MCP插件
- 光标: https://docs.cursor.com/context/model-context-protocol#configuring-mcp服务器
MCP工具说明
ZIP MCP服务器提供以下工具,可以通过MCP协议调用:
压缩工具(压缩)
将本地文件或目录压缩为ZIP文件。
参数:
input:要压缩的文件或目录的路径(字符串或字符串数组)output:输出ZIP文件的路径options:压缩选项(可选)level:压缩级别(0-9,默认值为5)password:密码保护encryptionStrength:加密强度(1-3)overwrite:是否覆盖现有文件(布尔值)
退货:
- 成功:包含成功信息的文本内容
- 失败:文本内容包含错误信息
解压缩工具(解压缩)
将本地ZIP文件解压缩到指定目录。写入前会验证入口路径,因此无法在外部提取文件 output 通过 .. 或绝对路径。
参数:
input:ZIP文件的路径output:输出目录的路径options:解压缩选项(可选)password:解压缩密码overwrite:是否覆盖现有文件(布尔值)createDirectories:是否创建不存在的目录(布尔值)
退货:
- 成功:包含解压缩结果信息的文本内容
- 失败:文本内容包含错误信息
ZIP信息工具(getZipInfo)
获取本地ZIP文件的元数据信息。
参数:
input:ZIP文件的路径options:选项(可选)password:解压缩密码
退货:
- 成功:包含ZIP文件详细信息的文本内容,包括:
- 文件总数
- 总大小
- 压缩大小
- 压缩比
- 每个文件的详细信息
- 失败:文本内容包含错误信息
测试工具(回声)
返回输入消息以测试服务是否正常运行。
参数:
message:要返回的消息
退货:
- 包含输入消息和当前时间戳的文本内容
例子
使用MCP客户端调用工具的示例:
// Compress files
await client.executeTool("compress", {
input: "/path/to/files/or/directory",
output: "/path/to/output.zip",
options: {
level: 9,
comment: "Test compression",
password: "secret",
overwrite: true,
},
});
// Decompress files
await client.executeTool("decompress", {
input: "/path/to/archive.zip",
output: "/path/to/extract/directory",
options: {
password: "secret",
overwrite: true,
createDirectories: true,
},
});
// Get ZIP info
await client.executeTool("getZipInfo", {
input: "/path/to/archive.zip",
options: {
password: "secret",
},
});
// Test service
await client.executeTool("echo", {
message: "Hello, ZIP MCP Server!",
});
联系
- 电子邮件: gz7gugu@qq.com
- 博客: https://7gugu.com