MDM — Markdown+Media

MDM (Markdown+Media) ![[name:preset | attr=val]] 문법 하나로 이미지, 비디오, 오디오를 마크다운 문서에 자유롭게 임베드하고 제어하는 오픈소스 프로젝트입니다. 링크 주소 GitHub seunghan91/markdown-media · 최신 v0.3.0 (2026-04-16) Playground seunghan91.github.io/markdown-media/playground npm (Native) @markdown-media/core 1.0.0 — napi Node.js 바인딩 npm (WASM) @markdown-media/wasm 0.1.0 — 브라우저/Node 공용 WASM (PDF 포함, 1.5 MB) PyPI mdm-parser 0.1.0 데스크톱 앱 mdm-desktop v0.1.1 — macOS 코드사이닝 + 공증 완료 Chrome 확장 MDM Converter (HWP/PDF/DOCX → Markdown) — 오프라인 WASM, 권한 0개 · 심사 중 MCP 서버 law-check.com/api/mcp — mdm_convert_document · mdm_extract_text · mdm_detect_format 1분 세팅 — 상황별 최단 경로 상황 명령어 / 링크 데스크톱 앱 (GUI) mdm-desktop v0.1.1 에서 DMG 다운로드 → 드래그앤드롭 (공증 완료) Python pip install mdm-parser Node.js (Native) npm install @markdown-media/core 브라우저 / WASM npm install @markdown-media/wasm (PDF 포함 1.5 MB) CLI 파이프 cat file.hwp | hwp2mdm stream --ext hwp --mode body AI Agent (MCP) law-check.com에서 MCP 키 발급 → ~/.claude.json에 gateway 등록 MCP 설정 (Claude Code 예시) { "mcpServers": { "korea-law-hub": { "url": "https://law-check.com/api/mcp", "headers": { "Authorization": "McpKey YOUR_KEY" } } } } 설정 후 재시작하면 mdm_convert_document, mdm_extract_text, mdm_detect_format 3개 tool이 자동 로드된다. ...

2026-03-13 00:00 · 4분 소요 · Seunghan

Tauri 데스크톱 앱에 LaTeX 수식 달기 — KaTeX 버리고 pulldown-latex + MathML 선택한 이유

오픈소스로 공개해둔 HWP/HWPX → Markdown 변환기 MDM(seunghan91/markdown-media)에 Tauri 데스크톱 뷰어를 붙여서 쓰고 있다. 0.3.0에서 HWPX 파서가 수식을 $...$ / $$...$$ LaTeX로 뽑도록 바꿨는데, 정작 뷰어에서는 달러 기호가 그대로 문자로 보였다. 수식 렌더링이 빠진 거다. 고치는 건 단순해 보였다. 마크다운 뷰어에 KaTeX 붙이면 끝. Obsidian, Typora, Zettlr 전부 이렇게 한다. 그런데 막상 조사해보니 2026년 기준 Tauri 같은 데스크톱 앱에서는 더 좋은 경로가 있었다. Rust 한 곳만 만지고 JS/CSS/폰트 번들은 0으로 유지하는 방법. 이 글은 그 선택 과정과, 덤으로 rhwp 프로젝트에 테스트 하네스를 기여하게 된 이야기다. ...

2026-04-17 09:00 · 8분 소요 · Seunghan

HWP 변환기를 MCP 툴로 만들기 — 기존 Gateway에 3줄 추가하는 법

오픈소스로 만든 Rust 문서 변환기 MDM(Markdown-Media)을 AI agent에서 직접 호출할 수 있게 MCP 서버로 노출하는 작업을 했다. 처음엔 @mdm/mcp-server 독립 Node.js 패키지로 만들 생각이었는데, 이미 운영 중인 Korea Law Hub Gateway에 tool 3개 추가하는 쪽이 훨씬 낫다는 결론이 나왔다. 이 글은 그 판단 과정과 실제 구현에서 걸린 지점들을 정리한다. 상황 MDM은 HWP, HWPX, PDF, DOCX, PPTX, XLSX, HTML, CSV, TXT를 Markdown으로 바꾸는 Rust 변환기다. 데스크톱 앱, PyPI 패키지(pip install mdm-parser), CLI 바이너리는 이미 있었다. 남은 건 Claude Code, Cursor, Continue.dev 같은 AI agent에서 MCP 프로토콜로 직접 부르는 경로. ...

2026-04-15 09:00 · 5분 소요 · Seunghan

CanonCode의 Rust 엔진 — .lex 파서부터 조항 충돌 감지까지

CanonCode를 소개하는 이전 글에서 “2,800줄의 코드를 160줄의 명세로 압축했다"는 실험을 다뤘다. 이번에는 그 명세를 읽고 검증하는 엔진의 내부를 파헤친다. 왜 Rust인가, 파싱은 어떻게 하는가, 조항 간 충돌은 어떻게 감지하는가. 설계 결정마다 “다른 선택지도 있었는데 왜 이걸 골랐는지"를 함께 기록한다. 왜 Rust인가 CanonCode의 엔진은 3가지 역할을 한다: .lex 파일 파싱 및 구조 검증 조항 간 의존성 그래프 빌드 헌법-법률 계층 간 충돌 감지 처음에는 TypeScript로 작성했다. Node.js 생태계에 익숙하고, JSON 파싱이 네이티브이니까. 한 달 정도 쓰다가 Rust로 재작성했다. 이유: ...

2026-03-19 00:00 · 7분 소요 · Seunghan
개인정보처리방침 이용약관 면책조항 문의