压缩解压服务器

ZIP MCP Server 是一个基于 fastMCP 和 zip.js 的压缩服务器,实现了模型上下文协议(MCP),提供全参数控制的 ZIP 压缩、解压和查询压缩包信息功能。

  • by 7gugu
  • TypeScript
  • 本地部署
  • 16 星标
  • 更新于
在 GitHub 查看 7gugu/zip-mcp

使用说明

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

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!",
});

联系