Skip to main content
Glama
sungreong

Markdown Source Graph MCP

by sungreong

Markdown Source Graph MCP

๐ŸŒ ์›น์‚ฌ์ดํŠธ์—์„œ ๋ณด๊ธฐ

์ฒ˜์Œ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ์—ฌ๊ธฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์„ธ์š”: ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœยท๋„๊ตฌ ๋ชฉ๋กยท์„ค์น˜ ์ˆœ์„œ ์—ด๊ธฐ โ†’

Agent Docs for Markdown์ด ๊ฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— Source Graph๋ฅผ ๋งŒ๋“ค๊ณ , ์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”„๊ฐ€ ํ•˜๋‚˜์˜ Markdown Source Graph MCP๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์„ฑ

Agent Docs for Markdown์ด ๋งŒ๋“  ๋กœ์ปฌ Source Graph๋ฅผ Codex, Claude Code, Gemini CLI์—์„œ ๊ฒ€์ƒ‰ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Docker ๊ธฐ๋ฐ˜ MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

Markdown Source Graph MCP GitHub Pages ์†Œ๊ฐœ ํ™”๋ฉด

Markdown ์›๋ฌธ๊ณผ .mps/source-graph.sqlite๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธ๋ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋ฌธ์„œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ , ๊ฒ€์ƒ‰์šฉ ์บ์‹œ๋งŒ ๋ณ„๋„์˜ Docker ๋ณผ๋ฅจ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

Related MCP server: search-docs

๋จผ์ € ์ฝ์„ ๋ฌธ์„œ

  • ์ฒ˜์Œ ์„ค์น˜๋ถ€ํ„ฐ Codex ๋“ฑ๋ก๊นŒ์ง€: GETTING_STARTED.md

  • Single, Hub, ์˜ค๋ฅ˜ ๋ฐ ์‹ค์ œ E2E ๊ฒ€์ฆ: SCENARIOS.md

  • ์ €์žฅ์†Œ์—์„œ ์ž‘์—…ํ•˜๋Š” ์—์ด์ „ํŠธ ์ง€์นจ: AGENTS.md

  • GitHub Pages ์•ˆ๋‚ด ์‚ฌ์ดํŠธ ์šด์˜: docs/github-pages.md

์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ

MCP ๋„๊ตฌ

์šฉ๋„

search_markdown

์ œ๋ชฉ๊ณผ ๋ณธ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฒฝ๋กœ, excerpt, heading์„ ๋ฐ˜ํ™˜

search_all_markdown

์—ฌ๋Ÿฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๋™์‹œ์— ๊ฒ€์ƒ‰

find_relevant_markdown_roots

์งˆ๋ฌธ์„ ๊ฐ ๋ฃจํŠธ์— ๋Œ€์ž…ํ•ด ์ ํ•ฉํ•œ ์›Œํฌ์ŠคํŽ˜์ด์Šค ํ›„๋ณด์™€ ๊ทผ๊ฑฐ ๋ฐ˜ํ™˜

read_markdown

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์˜ Markdown์„ ์ง€์ •ํ•œ ์ค„ ๋ฒ”์œ„๋งŒ ์ฝ๊ธฐ

get_markdown_links

๋ฌธ์„œ์˜ ๋งํฌ์™€ backlink๋ฅผ Source Graph์—์„œ ์กฐํšŒ

list_markdown_roots

์—ฐ๊ฒฐ๋œ ์›Œํฌ์ŠคํŽ˜์ด์Šค์™€ ์ธ๋ฑ์Šค ์ƒํƒœ ํ™•์ธ

get_source_graph_status

Source Graph ์ข…๋ฅ˜, ๋ฌธ์„œ ์ˆ˜, ์บ์‹œ ์ตœ์‹ ์„ฑ ํ™•์ธ

refresh_markdown_root

ํ˜„์žฌ .mps ์ธ๋ฑ์Šค๋ฅผ MCP ๊ฒ€์ƒ‰ ์บ์‹œ๋กœ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๊ธฐ

๊ฒ€์ƒ‰ํ•  ๋•Œ Source Graph ํŒŒ์ผ์ด ๋ฐ”๋€ ๊ฒƒ์ด ๊ฐ์ง€๋˜๋ฉด ๊ฒ€์ƒ‰ ์บ์‹œ๋Š” ์ž๋™์œผ๋กœ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.

์ „์ฒด ํ๋ฆ„

VS Code์—์„œ Agent Docs for Markdown ์„ค์น˜, ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„ Source Graph ์ƒ์„ฑ, ์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•˜๋‚˜์˜ MCP์— ์—ฐ๊ฒฐํ•ด ๊ฒ€์ƒ‰ํ•˜๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ์ˆœ์„œ

๊ฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ Agent Docs for Markdown์ด ์ž์ฒด .mps/source-graph.sqlite๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•˜๋‚˜์˜ MCP์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜์˜ Hub ๋˜๋Š” Named Multi-root ๋ชจ๋“œ๋กœ ํ—ˆ์šฉํ•  ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” root_id๋กœ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๊ฑฐ๋‚˜ search_all_markdown์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฃจํŠธ๋ฅผ ํ•จ๊ป˜ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค€๋น„ ์‚ฌํ•ญ

1. Agent Docs ํ™•์žฅ ์„ค์น˜์™€ Source Graph ์ƒ์„ฑ

VS Code์—์„œ Marketplace๋ฅผ ์—ด๊ณ  Agent Docs for Markdown์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

code --install-extension datanewbie-labs.markdown-agent-docs

๊ทธ๋‹ค์Œ ๊ฒ€์ƒ‰ํ•  Markdown ํด๋”๋ฅผ VS Code์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋กœ ์—ฝ๋‹ˆ๋‹ค.

  1. Activity Bar์—์„œ Agent Docs๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

  2. Open Graph ๋˜๋Š” ๋ช…๋ น ํŒ”๋ ˆํŠธ์˜ Agent Docs: Open Source Graph๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  3. ์ฒ˜์Œ์ด๋ผ๋ฉด Agent Docs: Initialize Source Graph๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  4. Start Graph๋กœ ์ฒซ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  5. ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์•„๋ž˜ ํŒŒ์ผ์ด ์ƒ๊ฒผ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

<markdown-workspace>/.mps/source-graph.sqlite

๋ถˆํ•„์š”ํ•œ ํด๋”๋Š” .mps/.mpsignore์—์„œ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ์€ Markdown ์ €์žฅ ์‹œ Source Graph๋ฅผ ์ž๋™ ๊ฐฑ์‹ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด MCP๋Š” ๊ฐฑ์‹ ๋œ SQLite์˜ ๋ณ€๊ฒฝ ์‹œ๊ฐ์„ ๊ฐ์ง€ํ•ด ๋‹ค์Œ ๊ฒ€์ƒ‰ ์ „์— ์บ์‹œ๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

2. ์ €์žฅ์†Œ ํด๋ก 

git clone https://github.com/sungreong/markdown-source-graph-mcp.git
cd markdown-source-graph-mcp

3. ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฒฝ๋กœ ์„ค์ •

.env.example์„ .env๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Copy-Item .env.example .env

.env์˜ ๊ฒฝ๋กœ๋ฅผ ์‹ค์ œ Markdown ์›Œํฌ์ŠคํŽ˜์ด์Šค๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. Windows์—์„œ๋Š” ์—ญ์Šฌ๋ž˜์‹œ๋ณด๋‹ค /๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

MARKDOWN_MCP_MODE=single
MARKDOWN_MOUNT_SOURCE=C:/Users/you/Documents/my-markdown-workspace
MARKDOWN_PUBLIC_PATH=C:/Users/you/Documents/my-markdown-workspace
MCP_PORT=8811
  • MARKDOWN_MCP_MODE: ์›Œํฌ์ŠคํŽ˜์ด์Šค ํ•˜๋‚˜๋Š” single, ์ƒ์œ„ ํด๋” ํ•˜๋‚˜์—์„œ ๋™์ ์œผ๋กœ ๊ณ ๋ฅด๋ฉด hub

  • MARKDOWN_MOUNT_SOURCE: Docker์— ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธํ•  ์‹ค์ œ ํด๋”

  • MARKDOWN_PUBLIC_PATH: MCP ์‘๋‹ต์— ํ‘œ์‹œํ•  ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ

  • MCP_PORT: ๋กœ์ปฌ MCP ํฌํŠธ

Single ๋ชจ๋“œ์—์„œ๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ž์ฒด๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋ฉฐ .mps ํด๋”๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

Compose๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๊ฒฝ๋กœ์™€ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

python scripts/check_workspace.py "C:/Users/you/Documents/my-markdown-workspace"

๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ข…๋ฃŒ ์ฝ”๋“œ 2๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

4. Docker Compose ์‹คํ–‰

docker compose up -d --build
docker compose ps

์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Invoke-RestMethod http://127.0.0.1:8811/healthz

status๊ฐ€ ok์ด๊ณ  mps_index_present๊ฐ€ true์ด๋ฉด ์ค€๋น„๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ชป๋๊ฑฐ๋‚˜ ์ง€์›๋˜๋Š” .mps๊ฐ€ ์—†์œผ๋ฉด /healthz๋Š” HTTP 503์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋Š” unhealthy๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋Œ€์‹œ๋ณด๋“œ:

http://127.0.0.1:8811/

5. ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™•์ธํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธฐ

Markdown Knowledge Hub์˜ ์ „์ฒด ์ƒํƒœ, ๋ฌธ์„œ ์ˆ˜, ์ตœ๊ทผ ํ™œ๋™์„ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹œ๋ณด๋“œ

๋Œ€์‹œ๋ณด๋“œ๋Š” ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์—†์ด ๋กœ์ปฌ MCP ์„œ๋ฒ„์—์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ์›Œํฌ์ŠคํŽ˜์ด์Šค์™€ ๋ฌธ์„œ ์ˆ˜, ์ธ๋ฑ์Šค ์ƒํƒœ, ์ตœ๊ทผ MCP ํ˜ธ์ถœ์„ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  ์ƒํƒœ๋Š” 10์ดˆ๋งˆ๋‹ค ์ž๋™ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค.

Markdown ์ง€์‹ ๊ฒ€์ƒ‰

์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•˜๊ณ  Markdown ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ํ™”๋ฉด

  1. ์ง€์‹ ๊ฒ€์ƒ‰ ํƒญ์„ ์—ฝ๋‹ˆ๋‹ค.

  2. ์งˆ๋ฌธ์ด๋‚˜ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  3. ์ „์ฒด ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋˜๋Š” ํŠน์ • ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. ๊ฒ€์ƒ‰์„ ๋ˆ„๋ฅด๋ฉด ์ œ๋ชฉ, ๊ด€๋ จ ๋ณธ๋ฌธ, ํŒŒ์ผ ๊ฒฝ๋กœ, ์›Œํฌ์ŠคํŽ˜์ด์Šค๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ๊ฒฐ๊ณผ๊ฐ€ ๋งŽ์œผ๋ฉด ํ™”๋ฉด ์•„๋ž˜ ํŽ˜์ด์ง€ ๋ฒ„ํŠผ์œผ๋กœ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ ์ƒํƒœ๋ฅผ URL์— ๋‹ด์•„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ์ฆ๊ฒจ์ฐพ๊ธฐ๋กœ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

http://127.0.0.1:8811/?tab=search&q=์ง€์›%20์šฐ์„ ์ˆœ์œ„&root_id=career-signal

MCP ๋„๊ตฌ ์ดํ•ดํ•˜๊ธฐ

MCP ๋„๊ตฌ์˜ ์šฉ๋„, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ, ๊ถŒ์žฅ ์‚ฌ์šฉ ์ˆœ์„œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ ์•ˆ๋‚ด ํ™”๋ฉด

๋„๊ตฌ ์•ˆ๋‚ด ํƒญ์—๋Š” MCP๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๋„๊ตฌ์™€ ์šฉ๋„, ์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” list_markdown_roots โ†’ find_relevant_markdown_roots โ†’ search_markdown ๋˜๋Š” search_all_markdown ์ˆœ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๋ณ„ ํ”„๋กฌํ”„ํŠธ ๋ณต์‚ฌํ•˜๊ธฐ

Codex ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์„ ํƒํ•ด ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กฌํ”„ํŠธ ํ™”๋ฉด

ํ”„๋กฌํ”„ํŠธ ํƒญ์—์„œ Codex, Claude Code, Gemini CLI๋ฅผ ์„ ํƒํ•˜๋ฉด ์„ค์น˜์™€ ์‚ฌ์šฉ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜๋‰˜์–ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ณต์‚ฌ ๋ฒ„ํŠผ์œผ๋กœ ์›ํ•˜๋Š” ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ณต์‚ฌํ•œ ๋’ค ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์— ๊ทธ๋Œ€๋กœ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ด๋ ฅ๊ณผ ์งˆ๋ฌธ ํŒจํ„ด ํƒญ์€ ๊ฒ€์ƒ‰ยทํ•„ํ„ฐยทํŽ˜์ด์ง€ ์ด๋™์„ ์ง€์›ํ•˜๋ฏ€๋กœ ํ˜ธ์ถœ์ด ๋งŽ์ด ์Œ“์—ฌ๋„ ํ•„์š”ํ•œ ๊ธฐ๋ก๊ณผ ์ž์ฃผ ์“ฐ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐํ•ฉ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๊ตฌ, ๊ฒ€์ƒ‰์–ด, root_id, ํŽ˜์ด์ง€, ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๊ณผ ๊ฒฐ๊ณผ ์ˆ˜๋ฅผ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๋Š” ์‚ฌ์šฉ ์ด๋ ฅ ํ™”๋ฉด

๋Œ€์‹œ๋ณด๋“œ ๊ธฐ๋Šฅ๊ณผ ๋กœ์ปฌ ๊ฐ์‚ฌ ๋กœ๊ทธ ๋ณด์กด ์„ค์ •์€ docs/dashboard.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

MCP endpoint:

http://127.0.0.1:8811/mcp

๋กœ๊ทธ์™€ ์ข…๋ฃŒ ๋ช…๋ น:

docker compose logs -f markdown-source-graph-mcp
docker compose down

6. AI ํด๋ผ์ด์–ธํŠธ์— MCP ๋“ฑ๋ก

ํด๋ผ์ด์–ธํŠธ๋ณ„ ์ƒ์„ธ ๊ฐ€์ด๋“œ์™€ ๋ณต์‚ฌ ๊ฐ€๋Šฅํ•œ ์„ค์ • ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

Codex ๋น ๋ฅธ ๋“ฑ๋ก

codex mcp add markdownSourceGraph --url http://127.0.0.1:8811/mcp
codex mcp list

Claude Code ๋น ๋ฅธ ๋“ฑ๋ก

claude mcp add --transport http markdown-source-graph --scope project http://127.0.0.1:8811/mcp
claude mcp list

Gemini CLI ๋น ๋ฅธ ๋“ฑ๋ก

gemini mcp add --transport http --scope project markdown-source-graph http://127.0.0.1:8811/mcp
gemini mcp list

7. ์‚ฌ์šฉ ์˜ˆ์‹œ

์—ฐ๊ฒฐํ•œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

markdown-source-graph MCP๋ฅผ ์‚ฌ์šฉํ•ด "agent evaluation"์„ ๊ฒ€์ƒ‰ํ•ด์ค˜.
๊ด€๋ จ ๋ฌธ์„œ 5๊ฐœ์˜ ๊ฒฝ๋กœ, ์ œ๋ชฉ, ๊ด€๋ จ heading๊ณผ ํ•ต์‹ฌ ๊ทผ๊ฑฐ๋ฅผ ์ •๋ฆฌํ•ด์ค˜.
"MCP tooling"๊ณผ ๊ฐ€์žฅ ๊ด€๋ จ ์žˆ๋Š” ๊ธฐ์ค€ ๋ฌธ์„œ๋ฅผ ์ฐพ๊ณ ,
get_markdown_links๋กœ ๋งํฌ์™€ backlink๋ฅผ ์กฐ์‚ฌํ•ด์„œ ํ•จ๊ป˜ ์ฝ์–ด์•ผ ํ•  ๋ฌธ์„œ๋ฅผ ์•Œ๋ ค์ค˜.
docs/architecture.md๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์ „์— ์ด ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์„œ์™€
์ด ๋ฌธ์„œ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ฐพ์•„ ๋ณ€๊ฒฝ ์˜ํ–ฅ ๋ฒ”์œ„๋ฅผ ์ •๋ฆฌํ•ด์ค˜.

๋” ๋งŽ์€ ๋ณต์‚ฌยท๋ถ™์—ฌ๋„ฃ๊ธฐ ์˜ˆ์‹œ๋Š” examples/prompts/markdown-search.md์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ๊ฒฝ๋กœ๋ฅผ ์งˆ๋ฌธํ•˜๋ฉฐ ์„ค์น˜ํ•˜๋„๋ก ๋งก๊ธฐ๋Š” ํ”„๋กฌํ”„ํŠธ์™€ ํด๋ผ์ด์–ธํŠธ๋ณ„ ์„ค์น˜ยท๋‹ค์ค‘ ๊ฒ€์ƒ‰ยท์šด์˜ ์ ๊ฒ€ ํ”„๋กฌํ”„ํŠธ๋Š” Prompt Pack์— ๋ชจ์•„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ

๊ฐ Markdown ์›Œํฌ์ŠคํŽ˜์ด์Šค์—๋Š” ๊ฐ์ž์˜ .mps ์ธ๋ฑ์Šค๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค. ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„๋กœ Compose ํ”„๋กœ์ ํŠธ ์ด๋ฆ„, ํ™˜๊ฒฝ ํŒŒ์ผ, ํฌํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์—ฌ๋Ÿฌ MCP๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker compose --project-name markdown-research --env-file .env.research up -d --build
docker compose --project-name markdown-wiki --env-file .env.wiki up -d --build

์ž์„ธํ•œ ์˜ˆ์‹œ๋Š” docs/multiple-workspaces.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๊ณตํ†ต ์ƒ์œ„ ํด๋”๊ฐ€ ์—†๋Š” ์›Œํฌ์ŠคํŽ˜์ด์Šค๋งŒ ์ •ํ™•ํžˆ ๊ณจ๋ผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด Named Multi-root ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด C:/app/AI_MONITORING๊ณผ C:/app/interset_monitoring/my_carrer_signal๋งŒ ๊ฐ๊ฐ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •๊ณผ ์งˆ๋ฌธ๋ณ„ ์ž๋™ ์„ ํƒ ํ๋ฆ„์€ docs/multi-root.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์„ ํƒํ•˜๊ธฐ

Hub ๋ชจ๋“œ๋Š” ํ—ˆ์šฉ๋œ ์ƒ์œ„ ํด๋” ํ•˜๋‚˜๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” list_markdown_roots๋กœ ๋ฐœ๊ฒฌ๋œ root_id๋ฅผ ๋ฐ›์€ ๋’ค, ๊ฒ€์ƒ‰ํ•  ๋•Œ ๊ทธ ๊ฐ’์„ ๋ฐ”๊ฟ” ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

MARKDOWN_MCP_MODE=hub
MARKDOWN_MOUNT_SOURCE=C:/Users/you/Documents/ProjectCode
MARKDOWN_PUBLIC_PATH=C:/Users/you/Documents/ProjectCode
MARKDOWN_MCP_DISCOVERY_MAX_DEPTH=4
MCP_PORT=8811
list_markdown_roots๋ฅผ ํ˜ธ์ถœํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ค˜.
๊ทธ์ค‘ root_id="01_2026_EXP/markdown-pattern-studio"์—์„œ "MCP"๋ฅผ ๊ฒ€์ƒ‰ํ•ด์ค˜.

์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ํ›„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž„์˜์˜ ํ˜ธ์ŠคํŠธ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ƒˆ๋กœ ๋งˆ์šดํŠธํ•˜๋Š” ๋ฐฉ์‹์€ Docker์™€ ๋ณด์•ˆ์ƒ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋ฏธ๋ฆฌ ํ—ˆ์šฉํ•œ Hub ๊ฒฝ๋กœ ์•„๋ž˜์˜ ์ƒ๋Œ€ root_id๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •๊ณผ ๋ณด์•ˆ ๋ฒ”์œ„๋Š” docs/hub-mode.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ธ๋ฑ์Šค ๊ฐฑ์‹  ๋ฐฉ์‹

  1. VS Code์—์„œ Markdown์„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  2. Agent Docs๊ฐ€ .mps/source-graph.sqlite๋ฅผ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

  3. ๋‹ค์Œ search_markdown ํ˜ธ์ถœ์—์„œ MCP๊ฐ€ ๋ณ€๊ฒฝ ์‹œ๊ฐ์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  4. MCP๊ฐ€ Docker ๋ณผ๋ฅจ์˜ ๊ฒ€์ƒ‰ ์บ์‹œ๋ฅผ ์ž๋™ ์žฌ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰์‹œ ๊ฐ•์ œ ๊ฐฑ์‹ ํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

refresh_markdown_root๋ฅผ root_id="workspace"๋กœ ์‹คํ–‰ํ•ด์ค˜.

์ด ์ž‘์—…์€ Markdown์ด๋‚˜ .mps๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ˜ธํ™˜์„ฑ

๋‹ค์Œ Source Graph ์‹๋ณ„์ž๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • markdown-agent-docs.source-graph

  • markdown-pattern-studio.source-graph โ€” ์ด์ „ Markdown Pattern Studio ์ธ๋ฑ์Šค

์ง€์› ์Šคํ‚ค๋งˆ ๋ฒ„์ „์€ ํ˜„์žฌ 1์ž…๋‹ˆ๋‹ค.

๋ณด์•ˆ ๋ชจ๋ธ

  • ํฌํŠธ๋Š” 127.0.0.1์—๋งŒ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.

  • Markdown ์›Œํฌ์ŠคํŽ˜์ด์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„์—๋Š” Markdown ์ž‘์„ฑยท์‚ญ์ œ ๋„๊ตฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

  • ๋ณ„๋„์˜ ์ธ์ฆ์€ ์—†์œผ๋ฏ€๋กœ ํฌํŠธ๋ฅผ 0.0.0.0์ด๋‚˜ LAN์— ๊ณต๊ฐœํ•˜์ง€ ๋งˆ์„ธ์š”.

  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์™€ Markdown ๋‚ด์šฉ์€ ์—ฐ๊ฒฐ๋œ AI ํด๋ผ์ด์–ธํŠธ์˜ ์ปจํ…์ŠคํŠธ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • MCP ํ˜ธ์ถœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—๋Š” ๊ฒ€์ƒ‰์–ด์™€ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋กœ์ปฌ /data/audit.sqlite3์— ์ œํ•œ๋œ ๊ฐœ์ˆ˜๋งŒ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ณธ๋ฌธ๊ณผ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ „๋ฌธ์€ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ ํƒญ๊ณผ ํ˜ธ์ถœ ์ด๋ ฅยท๋ณด์กด ์„ค์ •์€ docs/dashboard.md๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ฌธ์ œ ํ•ด๊ฒฐ

waiting_for_index ๋˜๋Š” mps_index_present: false

  • .env์˜ MARKDOWN_MOUNT_SOURCE๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • <์›Œํฌ์ŠคํŽ˜์ด์Šค>/.mps/source-graph.sqlite๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • Agent Docs์—์„œ Initialize Source Graph์™€ Start Graph๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Docker Desktop์—์„œ ํ•ด๋‹น ๋“œ๋ผ์ด๋ธŒ๊ฐ€ ๊ณต์œ  ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Docker Compose๊ฐ€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ•จ

Windows ๊ฒฝ๋กœ๋Š” ๋‹ค์Œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

MARKDOWN_MOUNT_SOURCE=C:/Users/you/Documents/notes

MCP ํด๋ผ์ด์–ธํŠธ์— ๋„๊ตฌ๊ฐ€ ๋ณด์ด์ง€ ์•Š์Œ

  1. http://127.0.0.1:8811/healthz๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  2. MCP URL ๋์— /mcp๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  3. ํด๋ผ์ด์–ธํŠธ์˜ MCP ๋ชฉ๋ก ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  4. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์™„์ „ํžˆ ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜ˆ์ „ ๋‚ด์šฉ์ž„

  • Agent Docs Source Graph๊ฐ€ ๋จผ์ € ๊ฐฑ์‹ ๋๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • get_source_graph_status์—์„œ source_updated_at๊ณผ stale์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • refresh_markdown_root๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements-dev.txt
pytest

Docker ์„ค์ • ๊ฒ€์ฆ:

docker compose config
docker compose build

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

.
โ”œโ”€ src/markdown_source_graph_mcp/  # MCP ์„œ๋ฒ„์™€ Source Graph ์„œ๋น„์Šค
โ”œโ”€ tests/                          # SQLite ํ˜ธํ™˜์„ฑ๊ณผ ๊ฒฝ๋กœ ์•ˆ์ „์„ฑ ํ…Œ์ŠคํŠธ
โ”œโ”€ docs/clients/                   # Codex, Claude Code, Gemini CLI ๊ฐ€์ด๋“œ
โ”œโ”€ docs/dashboard.md               # ์ƒํƒœ ํ™”๋ฉด๊ณผ MCP ํ˜ธ์ถœ ๊ฐ์‚ฌ ์ด๋ ฅ
โ”œโ”€ docs/prompt-pack.md             # ์„ค์น˜ยท์‚ฌ์šฉ ํ”„๋กฌํ”„ํŠธ ์ƒ‰์ธ
โ”œโ”€ docs/github-pages.md            # ๊ณต๊ฐœ ํ”„๋กœ์ ํŠธ ์•ˆ๋‚ด ์‚ฌ์ดํŠธ์™€ ๋ฐฐํฌ ๋ฐฉ์‹
โ”œโ”€ examples/clients/               # ํด๋ผ์ด์–ธํŠธ๋ณ„ ์„ค์ • ํŒŒ์ผ
โ”œโ”€ examples/prompts/setup/         # ๊ณตํ†ตยทํด๋ผ์ด์–ธํŠธ๋ณ„ ์„ค์น˜ ํ”„๋กฌํ”„ํŠธ
โ”œโ”€ examples/prompts/usage/         # ๋‹ค์ค‘ ๊ฒ€์ƒ‰ยท์กฐ์‚ฌยท์šด์˜ ํ”„๋กฌํ”„ํŠธ
โ”œโ”€ scripts/check_workspace.py       # Compose ์‹คํ–‰ ์ „ ๊ฒฝ๋กœยท์ธ๋ฑ์Šค ๊ฒ€์‚ฌ
โ”œโ”€ assets/                          # README ๋Œ€ํ‘œ ์ด๋ฏธ์ง€์™€ ์„ค์น˜ยท๊ฒ€์ƒ‰ ํ๋ฆ„๋„
โ”œโ”€ AGENTS.md                        # ์ž‘์—… ์—์ด์ „ํŠธ์šฉ ํ•„์ˆ˜ ์ง€์นจ
โ”œโ”€ GETTING_STARTED.md               # ์„ค์น˜๋ถ€ํ„ฐ ์ฒซ ์‚ฌ์šฉ๊นŒ์ง€
โ”œโ”€ SCENARIOS.md                     # ์‹คํ–‰ยท์˜ค๋ฅ˜ยทE2E ๊ฒ€์ฆ ์‹œ๋‚˜๋ฆฌ์˜ค
โ”œโ”€ LICENSE                          # MIT License
โ”œโ”€ index.html                       # GitHub Pages ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ ์‚ฌ์ดํŠธ
โ”œโ”€ site/                            # ์†Œ๊ฐœ ์‚ฌ์ดํŠธ ์Šคํƒ€์ผ๊ณผ ๋™์ž‘
โ”œโ”€ Dockerfile
โ”œโ”€ docker-compose.yml
โ”œโ”€ docker-compose.multi.yml          # ์„œ๋กœ ๋–จ์–ด์ง„ ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ์˜ ๋ช…์‹œ์  ๋งˆ์šดํŠธ
โ”œโ”€ .env.example                     # Single ๋ชจ๋“œ ์˜ˆ์‹œ
โ”œโ”€ .env.hub.example                 # Hub ๋ชจ๋“œ ์˜ˆ์‹œ
โ””โ”€ .env.multi.example               # Named Multi-root ์˜ˆ์‹œ

๊ด€๋ จ ๋ฌธ์„œ

๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT License๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides direct access to local documentation files through simple search and overview tools, enabling LLMs to query project-specific markdown documentation without requiring vector databases or RAG pipelines.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to search local Markdown documents using natural language, with automatic indexing and section-level retrieval.
    10
    1 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to search, read, and traverse a local knowledge base of Markdown files using full-text search and relationship graph, reducing token usage.
    MIT