内容
一个用 Rust 编写的模型上下文协议(MCP,提供 SVG 到图像的转换工具。
## 功能特点
svg_to_png**: 将 SVG 文本内容转换为 PNG 图像格式
- **svg_to_jpeg**: 将 SVG 文本内容转换为 JPEG 图像格式
- **自动尺寸检测**: 默认使用 SVG 画布尺寸,可选自定义尺寸
- **灵活的输出**: 选择临时文件路径(默认)或 base码数据
- 支持自定义尺寸和 JPEG 质量设置
- 使用 resvg 和 tiny-skia 进行高性能 SVG 渲染
## 快速开始
### 选项 1: NPM(推荐)
```bash
# 全局安装
npm install -g @svg-mcp/svg-mcp
# 或使用 npx 直接运行(无需安装)
npx @svg-mcp/svg-mcp
```
所有平台的二进制文件都自动包含在内 - **无需额外下载**。
### 选项 2: 下载预编译二进制文件
从 [GitHub Releases](https.com/lihongjie0209/svg-mcp/releases) 下载:
- **Windows x64**: `svg-mcp-windows-x64.zip`(MSVC 构建 -)
- **Windows x64 GNU**: `svg-mcp-windows-x64-gnu.zip`(GNU 构建 - - **Linux x64**:-mcp-linux-x64- **macOS Intel**: `svg-mcp-macos.tar.gz`
- ** Apple Silicon**: `svg-macos-arm64.tar.gz`
所有二进制文件都通过 **GitHub Actions** 自动构建,以确保一致的质量。
### 3: 从源代码构建
```bash
# 克隆git://github.com/lihongjie0209/svg-mcp.git
cd svg-mcp
# 为您的平台构建
cargo build --release
# 二进制文件将在:target/release/svg-mcp(或 Windows 上的 .exe)
```
有关详细的构建说明,请 [BUILD_GUIDE.md](BUILD_GUIDE.md)。
Claude Desktop 配合使用
### 使用 NPM 包(推荐)json
{
"mcpServers": {
"verter": {
"command": "npx",
"args": ["@svg-mcp/svg-mcp"]
}
}
}
```
### 使用本地二进制文件
```json
{
"Servers "svg-converter": {
"commandpath/to/svg-mcp "args": []
}
}
```
## 安装方法比较
| 方法 | 优点点 |
|--------|------|| **NPM** | ✅ 轻松安装<br/>✅<br/>✅ 跨/>✅ 无需手动设置<br/>✅ CI 构建 ❌ 需要 Node.js<br/>❌ 包大小较大 |
GitHub 二进制文件** | ✅ 无依赖<br/>✅占用空间<br/>✅ CI 构建质量 | ❌更新<br/>❌ 平台特定下载 |
| **从源代码构建** | ✅ 最新功能<br/>✅ 可定制<br/>✅ 最小尺寸 | ❌ 需要 Rust 工具链<br/>❌ 构建时间<br/>❌ 手动更新 |
### 保证
🏗️ **所有二进制文件都使用 Git CI/CD 构建**:
- ✅ **干净的环境**:在新鲜的 CI 运行器中构建
- ✅ **一致性**:所有平台的构建过程相同
- ✅ **测试**:发布前自动测试
- ✅ **可复制**:源代码与发布版本完全匹配
- ✅ **安全**:在 GitHub 的安全基础设施中构建
## 可用工具
### svg_to_png
将 SVG 文本转换为 PNG格式。
**参数:**
- `svg_content`(字符串):SVG 内容作为 XML 字符串
- `width`(可选数字):输出图像宽度(如果未指定,则使用 SVG 画布宽度)
- `height`数字):输出图像高度(如果未指定,则使用 SVG 画布高度)
- `return_base64`(可选布尔值):是否返回 base64 数据而不是文件路径(默认:false)
**返回:**
```json
{
"file_path": "path/to/temporary/file.png",
"mime_type": "image/png"
}
```
或return_base64` 为 true 时:
```json
{
"base64_data": "base64-encoded-png-data",
"mime_type": "image}
```
### svg_to_jpeg
将 SVG 文本 图像格式。
**参数:**
- `svg_content`):SVG 内容作为 XML 字符串
- `width`():输出图像宽度(如果未指定,则使用 SVG 宽度)
- `height`(可选数字):输出图像高度(如果未指定,则使用 SVG 画布高度)
-`(可选数字):JPEG 质量 1-100(默认:85)
- `return_base64`(可选布尔值):是否返回 base64 数据而不是文件路径(默认:false)
**返回:**
```json
{
"file_path": "path/to/temporary/file.jpg",
"mime_type": "image/jpeg"
}
```
或当 `return_base64` 为 true 时:
```json
{
"base64_data": "base64-encoded-jpeg-data",
"mime_type": "image/jpeg"
}
```
## 示例用法
### 示例 SVG 内容
```xml
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg">
<circle cx="100" cy="100" r="80" fill="blue" stroke="red" stroke-width="4"/>
<text x="100" y="110" text-anchor="middle" fill="white" font-family=" font-size="16">!</text>
</svg>
```
### 转换为 PNG(使用 SVG 原始尺寸)
{
"toolsvg_to_png",
"arguments": {
"svg "<svg width=\"200\" height=\"200\">...</svg>"
}
}
```
### 转换为 PNG 并设置自定义尺寸
```json
{
"tool": "svg_to_png",
"arguments": {
"svg_content": "<svg>...</svg>",
"width": 400,
"height": 400
}
}
```
### 转换为 PNG 并输出 base64
```json
{
"tool": "svg_to_png",
"arguments": {
"svg_content": "<svg>...</svg>",
"return_base64": true
}
}
```
### 转换为 JPEG(使用 SVG 原始尺寸)
```json
{
"tool": "svg_to_jpeg",
"arguments": {
"svg_content": "<svg width=\"200\" height=\"200\">...</svg>",
"quality": 90
}
}
```
### 转换为 JPEG 并设置自定义尺寸和 base64 输出
```json
{
"tool": "svg_to_jpeg",
"arguments": {
"svg_content": "<svg>...</svg>",
"width": 600,
"height": 600,
"quality": 95,
"return_base64": true
}
}
```
## 技术细节
### 架构
- **MCP 协议**:实现模型上下文协议以进行工具集成
- **SVG 渲染**:使用 resvg 和 usvg 进行高质量 SVG 渲染
- **自动尺寸检测**:从 SVG 的 viewBox 或 width/height 属性中提取画布尺寸
- **智能缩放**:在指定自定义尺寸时应用适当的缩放变换
- **图像编码**:支持 PNG 和 JPEG 输出格式
- **异步运行时**:基于 Tokio 构建,以实现高效的异步处理
### 依赖项
- `rmcp`:用于协议实现的 Rust MCP SDK
- `resvg`:SVG 渲染引擎
- `usvg`:SVG 解析和优化
- `tiny-skia`:2D 图形渲染
- `image`:图像编码和处理
- `base64`:数据返回的 base64 编码
- `tempfile`:具有适当文件扩展名的临时文件管理
### 尺寸检测逻辑
1. **默认行为**:从 SVG 的 `width` 和 `height` 属性或 `viewBox` 中提取尺寸
2. **自定义尺寸**:当指定时,SVG 将缩放以适应目标尺寸
3. **长宽比**:保持适当的缩放变换以保留 SVG 外观
### 性能
- 快速的和渲染
- 高效的像素缓冲区处理
- PNG 和 JPEG 格式的
- 可扩展以图像尺寸
- 自动尺寸检测消除了猜测
- 临时文件包含适当的文件扩展名(.png,.jpg)
## 开发
### 本地开发
```bash
# 检查代码
cargo check
cargo clippy
# 运行测试
cargo test
# 本地运行
cargo run
# 为您的平台构建
cargo build --```
### CI/CD 和发布
**所有生产使用 GitHub Actions CI/CD:**
-️ **自动构建**:每次推送和 PR 都会触发构建
- 🔖 **版本发布**:Git 标签会自动创建发布版本
- 📦 **NPM 发布**:发布会自动发布到 NPM
- 🧪 **质量测试**:所有构建都包含自动测试
- 🌐 **多平台**:同时为 Windows、Linux 和 macOS 构建
有关 CI/CD 的详细信息,请参阅 [BUILD_GUIDE.md](BUILD_GUIDE.md)。
### 代码结构
- `src/lib.rs`:核心转换逻辑和 MCP 服务器实现
- `src/main.rs`:服务器入口点和 CLI 接口
- `src/test.rs`:用于功能验证的测试程序
- `.github/workflows/build.yml`:CI/CD 管道定义
##
1. 复刻仓库
2. 创建功能分支
3. 进行更改
如有必要,
5. 提交拉
CI 系统将和测试您在所有平台上的更改。
## 文档 📖 [构建指南](BUILD_GUIDE.md CI/CD 和开发设置
- 📦 [NPM 用法](NPM_USAGE - 详细的 NPM 包- 🔧 [用法指南](USAGE.md) 服务器配置和用法
## 许可证
该项目在 MIT 许可证下获得许可。有关详细信息,请参阅。
## 支持
- 🐛 **问题** [GitHub Issues](https://github.com/lihongjie0209/svg-mcp/issues) 报告错误
- 📥 **下载**:从 [GitHub Releases](https://github.com/lihongjie0209/svg-mcp/releases) 获取二进制文件
- 📦 **NPM**:通过 [npm 包](https://www.npmjs.com/package/svg-mcp) 安装