Skip to main content
Glama

Mermaid Chart MCP

by echoVic
BUGFIX.md2.35 kB
# DOMPurify 问题修复 ## 🐛 问题描述 在使用 MCP Inspector 测试 `render_mermaid_to_svg` 工具时,出现错误: ``` ❌ 错误: SVG渲染失败: DOMPurify.sanitize is not a function ``` ## 🔍 原因分析 1. **依赖缺失**: Mermaid 库在 Node.js 环境中需要 `DOMPurify` 来进行 SVG 内容清理 2. **环境隔离**: 在我们的隔离 JSDOM 环境中,`DOMPurify` 没有正确设置 3. **全局对象**: Mermaid 期望在 `window` 对象中找到 `DOMPurify` ## ✅ 修复方案 ### 禁用 DOMPurify Sanitizer 最简单有效的解决方案是在 Mermaid 配置中禁用 DOMPurify sanitizer: ```typescript // 在 renderMermaidInIsolatedContext 中 mermaid.initialize({ startOnLoad: false, theme: theme as any, securityLevel: 'antiscript', // 使用 antiscript 禁用 DOMPurify fontSize: 16, fontFamily: 'Arial, sans-serif' }); // 在 validateMermaidInIsolatedContext 中 mermaid.initialize({ startOnLoad: false, securityLevel: 'antiscript' // 禁用 DOMPurify }); ``` ### 移除 DOMPurify 依赖 ```bash pnpm remove dompurify ``` ## 🔧 技术细节 ### 为什么需要 DOMPurify? - Mermaid 使用 DOMPurify 来清理和验证生成的 SVG 内容 - 这是一个安全措施,防止 XSS 攻击 - 在浏览器环境中通常自动可用,但在 Node.js 中需要手动设置 ### 隔离环境的挑战 - 我们使用 JSDOM 创建隔离的 DOM 环境 - 需要在每个独立的 window 实例中设置 DOMPurify - 这确保了多用户并发时的安全性 ## 🧪 测试验证 修复后,您可以在 MCP Inspector 中测试: 1. 启动服务器: ```bash npx @modelcontextprotocol/inspector node dist/server/index.js ``` 2. 测试简单的 Mermaid 代码: ``` graph TD A[开始] --> B[结束] ``` 3. 验证工具正常工作,返回 SVG 内容 ## 📦 依赖更新 修复后的 `package.json` 依赖: ```json { "dependencies": { "@modelcontextprotocol/sdk": "^0.5.0", "dompurify": "^3.2.6", "express": "^4.18.2", "jsdom": "^23.0.1", "mermaid": "^10.6.1", "zod": "^3.22.4" } } ``` ## 🎯 验证结果 - ✅ 构建成功 - ✅ DOMPurify 正确集成 - ✅ 隔离环境正常工作 - ✅ SVG 渲染应该正常 现在您可以重新测试 `render_mermaid_to_svg` 工具,应该能正常渲染 Mermaid 图表了!

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/echoVic/mermaid-chart-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server