用于验证Mermaid图表的Model Context Protocol (MCP)服务器。
实现了一个最小的Python封装,基于https://github.com/mermaid-js/mermaid-cli,以便更简单地开箱即用。
这是一个用于验证Mermaid图表并可选地将其渲染为PNG图像的Python MCP服务器。它使用Mermaid CLI工具进行验证和渲染。
该服务器为LLMs提供结构化的验证结果,包括:
is_valid: true/false),指示Mermaid图表语法是否正确。这使得LLMs能够程序化地验证Mermaid图表语法,理解具体的错误以提供有用的纠正,并可选地接收渲染输出的视觉确认。
还提供了一个简单的Pydantic-AI MCP客户端,使用Gemini模型调用MCP服务器进行测试。
重要:此MCP服务器需要在您的系统上安装Node.js,即使您仅使用服务器组件(而不是客户端)。服务器内部通过子进程调用npx @mermaid-js/mermaid-cli来执行图表验证和渲染。
npm install -g @mermaid-js/mermaid-cli 安装# 全局安装Mermaid CLI
npm install -g @mermaid-js/mermaid-cli
# 验证安装
npx @mermaid-js/mermaid-cli --version
要使用此服务器与MCP客户端(如Claude Desktop),请在您的MCP设置中添加以下配置:
注意:确保已安装Node.js和Mermaid CLI(参见预备条件)后再配置MCP服务器。
克隆此仓库
将以下内容添加到您的MCP客户端配置文件(例如,claude_desktop_config.json)中:
{
"mcpServers": {
"mermaid-validator": {
"command": "uv",
"args": ["run", "/path/to/mermaid_mcp_server.py"],
}
}
}
uv运行服务器uv run运行服务器脚本MCP_TRANSPORT:设置为"stdio"以进行标准输入/输出通信{
"mcpServers": {
"mermaid-validator": {
"command": "uv",
"args": ["run", "/path/to/mermaid_m_服务器.py"],
"env": {
"MCP_TRANSPORT": "stdio",
}
}
}
}
Python封装显著简化了Mermaid CLI的使用,通过抽象复杂的文件处理和命令行参数:
# 创建输入文件
echo "graph TD; A-->B" > diagram.mmd
# 创建puppeteer配置文件
echo '{"args": ["--no-sandbox", "--disable-setuid-sandbox"]}' > puppeteer-config.json
# 使用多个参数运行mermaid-cli
npx @mermaid-js/mermaid-cli -i diagram.mmd -o output.png --puppeteerConfigFile puppeteer-config.json
# 处理输出文件并清理
# 带有图表文本的简单函数调用
result = await validate_mermaid_diagram("graph TD; A-->B")
# 所有文件处理、配置和清理都是自动的
# 返回带有验证状态和base64编码图像的结构化结果
.mmd输入文件.png输出文件并将其转换为base64字符串npx @mermaid-js/mermaid-cli命令及其所有必要标志这种抽象允许用户专注于图表验证和渲染,而无需处理底层文件系统操作和命令行复杂性。
此仓库可以独立使用,以编程方式测试Mermaid MCP验证器的功能。
参见上面的预备条件部分,了解所需依赖项(Node.js、Mermaid CLI和带有uv的Python)。
使用提供的Makefile进行流线型设置:
# 安装所有依赖项(Python + Node.js + Mermaid CLI)
make install
# 运行验证测试
make test
如果您偏好手动设置:
uv syncnpm install -g @mermaid-js/mermaid-cli.env.example复制到.env并填写您的API密钥uv run mermaid_mcp_server.py服务器公开了一个用于验证Mermaid图表的工具:
validate_mermaid_diagram:验证Mermaid图表并返回验证结果diagram_text(必需):要验证的Mermaid图表文本return_image(可选,默认为false):是否返回base64编码的PNG图像重要:默认情况下,工具不会返回base64编码的图像(return_image=false),以保存LLM对话中的上下文长度。Base64编码的图像可以是非常长的字符串(通常10KB-100KB+),对对话可用的上下文产生重大影响。
何时使用每个设置:
return_image=false(默认):仅用于图表验证。快速且上下文高效。return_image=true:仅当您特别需要渲染图像数据时使用。警告:这将消耗大量上下文长度。# 仅验证(大多数情况下的推荐做法)
result = await validate_mermaid_diagram("graph TD; A-->B")
# 返回:MermaidValidationResult(is_valid=True, error_message=None, diagram_image=None)
# 验证并带图像(谨慎使用)
result = await validate_mermaid_diagram("graph TD; A-->B", return_image=True)
# 返回:MermaidValidationResult(is_valid=True, error_message=None, diagram_image="iVBORw0KGgoAAAANSUhEUg...")
项目包括方便的测试命令:
# 运行所有测试
make test
# 或直接运行测试脚本
uv run test_pydantic.py
测试脚本使用Pydantic AI和Gemini模型来验证MCP服务器的功能。