md-redline
λ§ν¬λ€μ΄ μ¬μ, ν둬ννΈ λ° λμμΈ λ¬Έμλ₯Ό μν μΈλΌμΈ 리뷰 λκΈ λꡬμ λλ€.
λ λλ§λ λ¬Έμμμ ν
μ€νΈλ₯Ό κ°μ‘° νμνκ³ λκΈμ λ¨κΈ°λ©΄, AI μμ΄μ νΈκ° μ΄λ₯Ό μ§μ μ½κ³ μ²λ¦¬ν μ μμ΅λλ€. λκΈμ .md νμΌ μ체μ 보μ΄μ§ μλ HTML λ§μ»€λ‘ μ μ₯λ©λλ€. μ¬μ΄λμΉ΄ νμΌ, λ°μ΄ν°λ² μ΄μ€, μΈλΆ μλΉμ€κ° νμ μμ΅λλ€. λ§ν¬λ€μ΄ νμΌμ΄ μ§μ€μ μμ²(source of truth)μΌλ‘ μ μ§λ©λλ€.
λ΄μ₯λ MCP μλ²λ₯Ό μ¬μ©νλ©΄ μμ΄μ νΈκ° μμ μ€κ°μ κ²ν λ₯Ό μμ²νκ³ **κ²ν 보λ΄κΈ°(Send review)**λ₯Ό ν΄λ¦ν λκΉμ§ μΌμ μ€μ§ν μ μμ΅λλ€. μ¬μ©μκ° νΌλλ°±μ λ¨κΈ°λ©΄ μμ΄μ νΈκ° μ€λ¨λ μ§μ λΆν° μμ μ μ¬κ°ν©λλ€. 볡μ¬-λΆμ¬λ£κΈ°λ 컨ν μ€νΈ μ νμ΄ νμ μμ΅λλ€.
30μ΄ λ§μ μ 체 κ²ν μν¬νλ‘μ° νμΈνκΈ°:
https://github.com/user-attachments/assets/7f493201-3aca-489c-86f0-3a7df454f693
Claude Code, Claude Desktop, Codex CLI, Gemini CLI λ° stdio μλ²λ₯Ό μ§μνλ λͺ¨λ MCP ν΄λΌμ΄μΈνΈμ νΈνλ©λλ€. Sean Groveκ° specs are the new codeμμ μ£Όμ₯νλ―, μ¬μμ μμ΄μ νΈ κΈ°λ° κ°λ°μμ μ£Όμ μμ
λ¨μκ° λκ³ μμ΅λλ€. mdrμ ν΄λΉ μν¬νλ‘μ°μ μ½λ 리뷰μ μ μ¬ν κ²ν λꡬλ₯Ό μ 곡ν©λλ€.
λΉ λ₯Έ μμ
μ μ 쑰건: Node 20 μ΄μ.
npx md-redline /path/to/spec.mdμ΄ λͺ λ Ήμ νμν κ²½μ° λ‘컬 μ±μ μμνκ³ λΈλΌμ°μ μμ μ½λλ€.
λλ μ μμΌλ‘ μ€μΉ:
npm install -g md-redline
mdr /path/to/spec.md # Open a file
mdr /path/to/dir # Open a directory
mdr --stop # Stop the running servermd-redlineμ mdrμ λ³μΉμΌλ‘λ μλν©λλ€.
Related MCP server: mdshare
MCP μ€μ
μμ΄μ νΈκ° μμ μ€κ°μ κ²ν λ₯Ό μμ²ν μ μλλ‘ MCP μλ²λ₯Ό λ±λ‘νμΈμ.
Claude Code λλ Claude Desktop
mdr mcp install # register with both clients (default)
mdr mcp install --claude-code # just Claude Code (via `claude mcp add`)
mdr mcp install --claude-desktop # just Claude Desktop (JSON config file)Codex CLI
codex mcp add md-redline -- mdr mcpGemini CLI
gemini mcp add --scope user md-redline mdr mcp--scope user νλκ·Έκ° μ€μν©λλ€. Geminiλ κΈ°λ³Έμ μΌλ‘ νλ‘μ νΈλ³ λ²μλ₯Ό μ¬μ©νλ―λ‘, νμ¬ λλ ν 리μ λν΄μλ§ mdrμ λ±λ‘ν©λλ€.
κΈ°ν MCP ν΄λΌμ΄μΈνΈ
ν΄λΌμ΄μΈνΈμ MCP μ€μ νμΌμ λ€μ μλ² νλͺ©μ μΆκ°νμΈμ:
{
"mcpServers": {
"md-redline": {
"command": "mdr",
"args": ["mcp"]
}
}
}μ μ 쑰건: mdrμ΄ PATHμ μμ΄μΌ ν©λλ€(μ: npm install -g md-redlineμ ν΅ν΄). ν΄λΌμ΄μΈνΈκ° μ
Έμ PATHλ₯Ό μμνμ§ μκ³ νμ νλ‘μΈμ€λ₯Ό μμ±νλ κ²½μ°, command κ°μΌλ‘ which mdrμ μ λ κ²½λ‘λ₯Ό μ¬μ©νμΈμ.
κ²ν μν¬νλ‘μ°
MCP μ¬μ© μ (κΆμ₯)
λ±λ‘ ν μμ΄μ νΈμκ² κ²ν λ₯Ό μμ²νμΈμ:
"κ³μνκΈ° μ μ mdrμμ docs/specs/feature-x.mdλ₯Ό κ²ν ν΄ μ€."
μμ΄μ νΈκ° mdr_request_reviewλ₯Ό νΈμΆνλ©΄ mdrμ΄ νμΌμ μ΄κ³ , μ¬μ©μκ° ν
μ€νΈλ₯Ό κ°μ‘° νμνκ³ λκΈμ λ¨κΈ΄ ν **κ²ν 보λ΄κΈ°(Send review)**λ₯Ό ν΄λ¦ν©λλ€. μμ΄μ νΈλ νΌλλ°±μ ꡬ쑰νλ ν둬ννΈλ‘ λ°μ λκΈμ μ²λ¦¬νκΈ° μμν©λλ€. κ²ν λ μμ² μ μ νμ μΌλ‘ μ§νλ©λλ€. μμ΄μ νΈλ μ¬μ©μκ° μμ²ν λλ§ μΌμ μ€μ§ν©λλ€.
MCP λ―Έμ¬μ© μ
mdr /path/to/spec.mdλ‘ λ§ν¬λ€μ΄ νμΌμ μ½λλ€.ν μ€νΈλ₯Ό κ°μ‘° νμνκ³ μΈλΌμΈ λκΈμ λ¨κΉλλ€.
νΈλμ€ν ν둬ννΈλ₯Ό 볡μ¬ν©λλ€.
ν둬ννΈλ₯Ό AI μμ΄μ νΈμ λΆμ¬λ£μ΅λλ€.
μμ΄μ νΈκ° νμΌμ νΈμ§νκ³ νΌλλ°±μ μ²λ¦¬ν λ€ μ²λ¦¬λ λκΈ λ§μ»€λ₯Ό μ κ±°ν©λλ€.
diff λ·°μμ κ²°κ³Όλ₯Ό κ²ν ν©λλ€.
μ ν μ¬ν: ν΄κ²° μν¬νλ‘μ°
μ€μ μμ ν΄κ²° λͺ¨λλ₯Ό νμ±ννμ¬ λͺ
μμ μΈ open λ° resolved μνλ‘ μ¬λμ κ²ν λ₯Ό μ§νν μ μμ΅λλ€.
λμ μ¬μ©μ
νμΌ κΈ°λ° AI μμ΄μ νΈλ₯Ό μ¬μ©νμ¬ λ‘컬μμ μ¬μ, ν둬ννΈ λλ λμμΈ λ¬Έμλ₯Ό μμ±νλ λΆλ€
컀λ°νκ±°λ λ λμ λ²μμ κ²ν λ₯Ό μν΄ λ¬Έμλ₯Ό 보λ΄κΈ° μ μ κ²ν νλ ν
μΌλ° νμΌ λ΄μμ ꡬ쑰νλ μΈλΌμΈ νΌλλ°±μ μνλ μ¬λ + μμ΄μ νΈ νΈμ§ 루νμ μλ λͺ¨λ λΆλ€
λΉλͺ©ν
νμ ν λ€μ€ μ¬μ©μ νΈμ§ λκ΅¬κ° μλλλ€.
GitHub PR 리뷰λ₯Ό λ체νμ§ μμ΅λλ€(νμΌμ΄ gitμ μ¬λΌκ°λ©΄ PR 리뷰λ₯Ό μ¬μ©νμΈμ).
μ λ’°ν μ μλ μ½ν μΈ λ₯Ό μν΄ μ€κ³λμ§ μμμ΅λλ€. λ³ΈμΈμ νμΌμ μν λ‘컬 κ°λ° λꡬμ λλ€.
λκΈ μ μ₯ λ°©μ
λκΈμ λ§ν¬λ€μ΄ λ΄λΆμ 보μ΄μ§ μλ HTML λ§μ»€λ‘, μ°Έμ‘°νλ ν μ€νΈ λ°λ‘ μμ μ μ₯λλ―λ‘ μ¬λκ³Ό μμ΄μ νΈ λͺ¨λ λμΌν νμΌμμ μμ ν μ μμ΅λλ€.
Some text <!-- @comment{
"id":"uuid",
"anchor":"highlighted text",
"text":"Rewrite this section to be clearer.",
"author":"User",
"timestamp":"2026-03-26T12:00:00.000Z",
"replies":[]
} -->highlighted text continues here.μ΄ λ°©μμ μ₯μ :
μΌλ° νμΌ μ½κΈ°λ₯Ό ν΅ν΄ AI μμ΄μ νΈκ° νμΈ κ°λ₯
λ§ν¬λ€μ΄ νμΌκ³Ό ν¨κ» μ΄λ κ°λ₯
μΌλ° λ λλ¬(GitHub, VS Code 미리보기)μμλ 보μ΄μ§ μμ
κΈ°λ₯
κ²ν λ° λκΈ
λ λλ§λ ν μ€νΈμ κ³ μ λ μΈλΌμΈ λκΈ (μ€μ²© λκΈ ν¬ν¨)
μ€λ λν λ΅κΈ λ° μ νμ
open/resolvedκ²ν μνλλκ·Έ νΈλ€λ‘ μ‘°μ κ°λ₯ν μ΅μ»€
λ λλ§, μλ³Έ λ° diff λ·°
νλ λλ μ¬λ¬ νμΌμ λν νΈλμ€ν ν둬ννΈ λ³΅μ¬
νμ λ° νΈμ§
μΈμ μ μ§ λ° ν 컨ν μ€νΈ λ©λ΄λ₯Ό μ§μνλ λ€μ€ ν νΈμ§
νμΌ νμκΈ°, μ΅κ·Ό νμΌ λ° κΈ°λ³Έ OS νμΌ μ νκΈ°
λ¬Έμ λ΄ μ°ΎκΈ° (
Cmd+F) λ° μΌμΉ νλͺ© νμμ€ν¬λ‘€ μ€νμ΄κ° ν¬ν¨λ λͺ©μ°¨
λͺ λ Ή νλ νΈ (
Cmd+K), ν€λ³΄λ λ¨μΆν€ λ° μ€μ ν¨λ (Cmd+,)ν¬κΈ° μ‘°μ κ°λ₯ν ν¨λ λ° μ°ν΄λ¦ 컨ν μ€νΈ λ©λ΄
λ λλ§ λ° ν΅ν©
μΈλΆμμ νμΌ λ³κ²½ μ SSEλ₯Ό ν΅ν μ€μκ° μλ‘κ³ μΉ¨
λκΈ μμ±μ΄ κ°λ₯ν ν μ€νΈλ₯Ό ν¬ν¨ν Mermaid λ€μ΄μ΄κ·Έλ¨ λ λλ§
λ‘컬 μ΄λ―Έμ§ μλ² λ λ° λ§ν¬λ€μ΄ νμΌ κ° ν΄λ¦ κ°λ₯ν λ§ν¬
μ¬μ©μ μ μ κ°λ₯ν λκΈ ν νλ¦Ώ
8κ°μ§ ν λ§: Light, Dark, Sepia, Nord, Solarized, GitHub, RosΓ© Pine, Catppuccin
μ§μ νλ«νΌ
macOS: μ§μ
Linux: μ§μ; μμ€ν νμΌ μ νκΈ°λ
zenityνμWindows: μ§μ; μμ€ν νμΌ μ νκΈ°λ PowerShell μ¬μ©
κΆν
κΈ°λ³Έμ μΌλ‘ md-redlineμ ν λλ ν 리μ λͺ¨λ λ§ν¬λ€μ΄ νμΌμ μ½μ μ μμ΅λλ€. mdrμ μ²μ μ€νν λ(λλ trusted-roots κΈ°λ₯μ΄ μλ λ²μ μμ μ
κ·Έλ μ΄λν ν μ²μ μ€νν λ), ν ν΄λκ° ~/.md-redline.jsonμ μ λ’°ν μ μλ λ£¨νΈ λͺ©λ‘μ μΆκ°λ©λλ€. ν λλ ν 리 μΈλΆμ νμΌ(/tmp, λ§μ΄νΈλ λ³Όλ₯¨, μμ€ν
κ²½λ‘)μ μ²μ μ΄ λ OS ν΄λ μ νκΈ°λ₯Ό ν΅ν΄ λͺ
μμ μΈ κΆν λΆμ¬κ° νμν©λλ€. λΆμ¬λ ν΄λλ μ¬μμ νμλ κΈ°μ΅λ©λλ€.
μ격ν ν΄λλ³ λͺ¨λΈμ μ¬μ©νλ €λ©΄ μ€μΉ ν mdr --restrictλ₯Ό ν λ² μ€ννμΈμ. κ·Έλ¬λ©΄ κΈ°λ³Έ μ λ’°κ° μλ ~/.md-redline.jsonμ΄ μμ±λλ©°, νμΌμ μ²μ μ΄ λλ§λ€ κ° ν΄λμ λν΄ λͺ
μμ μΌλ‘ κΆνμ λΆμ¬νκ² λ©λλ€.
νμΌ μ μ₯μ μμμ μ°κΈ° ν μ΄λ¦ λ°κΎΈκΈ°(atomic write-then-rename) λ° mtime κΈ°λ° μΆ©λ κ°μ§λ₯Ό μ¬μ©νμ¬ λμ νΈμ§μΌλ‘ μΈν λ°μ΄ν° μμ€μ λ°©μ§ν©λλ€. Mermaid SVG μΆλ ₯μ λ λλ§ μ DOMPurifyλ₯Ό ν΅ν΄ μ΄κ· λ©λλ€. μ λ’°ν μ μλ νκ²½μμλ§ md-redlineμ μ€ννμΈμ.
κ°λ°
μμ€μμ λΉλ
git clone https://github.com/dejuknow/md-redline.git
cd md-redline
npm install
npm run devViteκ° μΆλ ₯νλ λ‘컬 URL(λ³΄ν΅ http://localhost:5188)μ μ¬μΈμ.
μ€ν¬λ¦½νΈ
npm run dev # Start dev server
npm run lint # Lint
npm test # Production build + unit tests
npm run test:e2e # Playwright E2E tests
npm run build # Production buildμμ΄μ νΈ νκ°
νκ° νλ€μ€λ AI μμ΄μ νΈκ° μΈλΌμΈ λκΈμ μ¬λ°λ₯΄κ² μ½κ³ , μ²λ¦¬νκ³ , μ κ±°νλμ§ ν μ€νΈν©λλ€.
npm run eval:dryλ νκ° ν½μ€μ²λ₯Ό κ²μ¦ν©λλ€.npm run evalμ μ 체 νκ° νλ€μ€λ₯Ό μ€νν©λλ€.μμΈν λ΄μ©μ eval/README.mdλ₯Ό μ°Έμ‘°νμΈμ.
μν€ν μ²
bin/md-redline CLI entry point (invoked as `mdr` or `md-redline`)
server/index.ts Hono server for file I/O, browsing, SSE, and local integrations
src/App.tsx Main application shell
src/components/ Viewer, sidebar, raw view, diff view, TOC, explorer, settings, etc.
src/hooks/ State, persistence, selection, file watching, drag handles, tabs
src/lib/comment-parser.ts Inline comment parsing and mutation helpers
src/markdown/pipeline.ts Markdown rendering pipeline
eval/ Eval harness for agent behavior against inline comments
e2e/ Playwright end-to-end coverageλΌμ΄μ μ€
Maintenance
Tools
Latest Blog Posts
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/dejuknow/md-redline'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
