GitHub - rtuin/mcp-mermaid-validator: A Model Context Protocol server that validates and renders Mermaid diagrams.
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 서버 컴포넌트에 있습니다. 이 컴포넌트는 다음과 같은 단계로 작동합니다.

  1. MCP 서버 인스턴스 생성: @modelcontextprotocol/sdk를 사용하여 MCP 서버 인스턴스를 초기화합니다.
  2. validateMermaid 도구 등록: MCP 클라이언트가 호출할 수 있는 validateMermaid라는 단일 도구를 등록합니다.
    • 입력 매개변수: diagram (string 타입의 Mermaid 다이어그램 구문)
  3. Mermaid CLI 연동 (자식 프로세스 방식):
    • 수신된 Mermaid 다이어그램 구문은 Node.js의 child_process 모듈을 사용하여 @mermaid-js/mermaid-cli로 전달됩니다.
    • 다이어그램 구문은 Mermaid CLI의 표준 입력(stdin)으로 파이프됩니다.
    • Mermaid CLI는 입력된 다이어그램 구문을 검증하고, 유효한 경우 PNG 형식으로 렌더링을 시도합니다.
    • Mermaid CLI의 표준 출력(stdout)은 렌더링된 PNG 이미지 데이터(Base64 인코딩)를 반환하고, 표준 에러(stderr)는 유효성 검사 실패 또는 렌더링 과정에서 발생한 에러 메시지를 반환합니다.
    • 이 자식 프로세스 접근 방식은 주 애플리케이션과의 격리를 제공하고, 상세한 에러 정보 캡처 및 렌더링 파이프라인의 효율적인 처리를 가능하게 합니다.
  4. 출력 처리 및 반환:
    • 성공 시: 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 프로젝트 구조를 채택하여 유지 보수와 이해도를 높였습니다.