Service
여기서
에러 메시지는 사용자에게 문제 해결에 필요한 상세 정보를 제공하며, 내부
GitHub - rtuin/mcp-mermaid-validator: A Model Context Protocol server that validates and renders Mermaid diagrams.
rtuin
2026.03.06
·GitHub·by 권준호#LLM#MCP#Mermaid#Node.js#Validator
핵심 포인트
- 1이 프로젝트는 LLM이 Mermaid 다이어그램을 검증하고 렌더링할 수 있도록 돕는 Model Context Protocol (MCP) 서버입니다.
- 2`validateMermaid` 도구를 통해 Mermaid CLI를 활용하여 입력된 다이어그램 구문을 검증하고, 유효한 경우 base64 인코딩된 PNG 이미지를 반환합니다.
- 3TypeScript 기반의 Node.js 애플리케이션으로, Mermaid CLI와의 자식 프로세스 연동을 통해 안정적인 렌더링을 제공하며, 특히 Cursor와 같은 클라이언트 호환성을 위해 PNG 출력 형식을 사용합니다.
mcp-mermaid-validator는 LLM(Large Language Model)이 Mermaid 다이어그램을 검증하고 렌더링할 수 있도록 돕는 MCP(Model Context Protocol) 서버입니다. 이 프로젝트는 TypeScript Node.js 애플리케이션으로 구현되었으며, Mermaid CLI 도구를 활용하여 다이어그램 유효성 검사 및 렌더링 기능을 제공합니다.
핵심 방법론 및 아키텍처:
이 시스템의 핵심 기능은 src/main.ts 파일에 구현된 MCP 서버 컴포넌트에 있습니다. 이 컴포넌트는 다음과 같은 단계로 작동합니다.
- MCP 서버 인스턴스 생성:
@modelcontextprotocol/sdk를 사용하여 MCP 서버 인스턴스를 초기화합니다. validateMermaid도구 등록: MCP 클라이언트가 호출할 수 있는validateMermaid라는 단일 도구를 등록합니다.- 입력 매개변수:
diagram(string 타입의 Mermaid 다이어그램 구문)
- 입력 매개변수:
- Mermaid CLI 연동 (자식 프로세스 방식):
- 수신된 Mermaid 다이어그램 구문은 Node.js의
child_process모듈을 사용하여@mermaid-js/mermaid-cli로 전달됩니다. - 다이어그램 구문은 Mermaid CLI의 표준 입력(
stdin)으로 파이프됩니다. - Mermaid CLI는 입력된 다이어그램 구문을 검증하고, 유효한 경우 PNG 형식으로 렌더링을 시도합니다.
- Mermaid CLI의 표준 출력(
stdout)은 렌더링된 PNG 이미지 데이터(Base64 인코딩)를 반환하고, 표준 에러(stderr)는 유효성 검사 실패 또는 렌더링 과정에서 발생한 에러 메시지를 반환합니다. - 이 자식 프로세스 접근 방식은 주 애플리케이션과의 격리를 제공하고, 상세한 에러 정보 캡처 및 렌더링 파이프라인의 효율적인 처리를 가능하게 합니다.
- 수신된 Mermaid 다이어그램 구문은 Node.js의
- 출력 처리 및 반환:
- 성공 시: Mermaid CLI가 다이어그램을 성공적으로 렌더링하면, 서버는 다음 형식의 JSON 객체를 반환합니다.
json
{
"content": [
{ "type": "text", "text": "Mermaid diagram is valid" },
{ "type": "image", "data": "Base64-encoded PNG string", "mimeType": "image/png" }
]
}여기서
data 필드에는 Base64로 인코딩된 PNG 이미지 데이터가 포함됩니다. PNG 형식을 사용하는 것은 SVG 대비 Cursor와 같은 대부분의 MCP 클라이언트와의 호환성을 높이기 위함입니다.
- 실패 시: Mermaid 다이어그램 구문이 유효하지 않거나 렌더링 과정에서 시스템 에러가 발생하면, 서버는 다음 형식의 JSON 객체를 반환합니다.
json
{
"content": [
{ "type": "text", "text": "Mermaid diagram is invalid" },
{ "type": "text", "text": "Error message" },
{ "type": "text", "text": "Detailed error output (if available)" }
]
}에러 메시지는 사용자에게 문제 해결에 필요한 상세 정보를 제공하며, 내부
try-catch 구조를 통해 유효성 검사 에러와 시스템 에러를 구분하여 처리합니다.기술적 특징:
@modelcontextprotocol/sdk를 통해 AI 도구와의 표준화된 인터페이스를 제공하여 원활한 통합을 가능하게 합니다.- Mermaid CLI와의 상호작용을 위해 Node.js 자식 프로세스를 활용하며, 입력 및 출력 스트림(stdin, stdout, stderr)을 효율적으로 관리합니다.
- 다이어그램 렌더링 출력 형식으로 PNG를 채택하여 광범위한 클라이언트 호환성을 보장합니다.
zod라이브러리를 사용하여 스키마 유효성 검사를 수행하며, 견고한 타입 안전성을 확보합니다.- 단순한 TypeScript 프로젝트 구조를 채택하여 유지 보수와 이해도를 높였습니다.