streamable-httpISCupdated 2mo ago
obsidian-mcp-server๋ Obsidian Vault์ Markdown ๋ฌธ์๋ฅผ AI ์์ด์ ํธ๊ฐ ์กฐํํ๊ณ , ๊ด๋ จ ๊ทผ๊ฑฐ๋ฅผ ์ ๋ณํ๊ณ , ์ปจํ ์คํธ๋ก ์์ถํด ํ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ก์ปฌ ์ฐ์ MCP ์๋ฒ์ ๋๋ค.
What can you do with sunub obsidian mcp server?
Obsidian MCP Server
obsidian-mcp-server๋ Obsidian Vault์ Markdown ๋ฌธ์๋ฅผ AI ์์ด์ ํธ๊ฐ ์กฐํํ๊ณ , ๊ด๋ จ ๊ทผ๊ฑฐ๋ฅผ ์ ๋ณํ๊ณ , ์ปจํ
์คํธ๋ก ์์ถํด ํ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ก์ปฌ ์ฐ์ MCP ์๋ฒ์
๋๋ค.
์ด ํ๋ก์ ํธ์์ RAG๋ ํน์ ๋ฒกํฐ DB๋ ๊ฒ์ ์์ง ์ ํ์ ๋ปํ์ง ์์ต๋๋ค. RAG๋ Vault์์ ํ๋ณด ๋ฌธ์๋ฅผ ์ฐพ๊ณ , Agent ์์ ์ ๋ง๋ ๊ทผ๊ฑฐ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ปจํ ์คํธ ์๋์ฐ์ ๋ง๊ฒ ์์ถํด ์ ๊ณตํ๋ Agent Context Pipeline์ ๋๋ค.
ํต์ฌ ๋ฐฉํฅ
- ๋ก์ปฌ ์ฐ์ ๋์: ์ธ๋ถ ์๋น์ค๋ ๋ณ๋๋ก ์ด์ํด์ผ ํ๋ ๊ฒ์ ์์ง ์์ด ์ฌ์ฉ์ ๋จธ์ ์์ Vault ๊ฒ์๊ณผ ์ปจํ ์คํธ ์ค๋น๋ฅผ ์ํํฉ๋๋ค.
- ์ปจํ ์คํธ ์ ๋ณ: ํค์๋ ๊ฒ์๊ณผ ์๋งจํฑ ๊ฒ์์ ๊ฒฐํฉํด Agent์๊ฒ ์ ๊ณตํ ๊ทผ๊ฑฐ ํ๋ณด๋ฅผ ์ฐพ์ต๋๋ค.
- ๋ช ์์ RAG ํตํฉ: ๋ชจ๋ ํ๋กฌํํธ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฒ์์ ๋ถ์ด์ง ์๊ณ , Vault ๊ด๋ จ ๋ช ๋ น์ด๋ ๋๊ตฌ ์ฐธ์กฐ๊ฐ ์์ ๋ ๋ฌธ๋งฅ ์์ง ๊ฒฝ๋ก๋ฅผ ์ฝ๋๋ค.
- ํ ํฐ ์ ์ฝ: ์๋ฌธ ์ ์ฒด๋ฅผ ๋ฐ์ด๋ฃ๊ธฐ๋ณด๋ค excerpt, evidence snippet,
memory_packetํํ๋ก ์์ถํฉ๋๋ค. - ๋ก์ปฌ ๋ชจ๋ธ ๊ธฐ๋ฐ ๊ฒ์:
@huggingface/transformers, LanceDB, local reranker๋ฅผ ์ฌ์ฉํด semantic retrieval์ ๋ก์ปฌ์์ ์ํํฉ๋๋ค.
Elasticsearch ๊ฐ์ ๊ฒ์ ์์ง๋ retrieval backend๋ก ์ฌ์ฉํ ์ ์๋ ๋์์ ๋๋ค. ๋ค๋ง ์ด ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ๋ชฉํ๋ ์ธ๋ถ ์๋น์ค๋ ๋ณ๋ ๊ฒ์ ์์ง์ ์์กดํ์ง ์๋ ๋ก์ปฌ ๋จ๋ ์์ ์ด๋ฏ๋ก, embedded retrieval stack์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ํํฉ๋๋ค.
์ ๊ณต ๊ธฐ๋ฅ
MCP Tools
vaultsearch: ํค์๋์ ์๋ฏธ ๊ธฐ๋ฐ ๊ฒ์์ ๊ฒฐํฉํ ํ์ด๋ธ๋ฆฌ๋ ํ๋ณด ํ์read: ํน์ ๋ ธํธ ๋ณธ๋ฌธ๊ณผ ๋ฉํ๋ฐ์ดํฐ ์กฐํlist_all: Vault ๋ฌธ์ ๋ชฉ๋ก ์กฐํstats: Vault ๋ฐ ์ธ๋ฑ์ค ์ํ ์กฐํcollect_context: ์ฃผ์ ์ ์ฐ๊ด๋ ๋ฌธ์๋ฅผ ์ ๋ณํดmemory_packet์์ฑload_memory: ์ ์ฅ๋ ์ปจํ ์คํธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ ์ท ๋ก๋
generate_property: ๋ฌธ์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก frontmatter ํ๋ณด ์์ฑwrite_property: frontmatter ์ฐ๊ธฐcreate_document_with_properties: ๋ฌธ์ ๋ถ์ ํ ์์ฑ ์์ฑ/์ฐ๊ธฐ 2๋จ๊ณ ์ํฌํ๋ก์ฐorganize_attachments: ๋ฌธ์ ๋ด ์ฒจ๋ถํ์ผ ์ ๋ฆฌ ๋ฐ ๋งํฌ ๊ฐฑ์
Retrieval Pipeline
ํ์ฌ ๊ธฐ๋ณธ retrieval backend๋ ๋ค์ ์์๋ก ๋์ํฉ๋๋ค.
- Keyword Search: ๋ด๋ถ
Indexer๋ก ์ ํํ ๋จ์ด ๋งค์นญ ํ๋ณด๋ฅผ ์ฐพ์ต๋๋ค. - Vector Search: LanceDB์ ๋ก์ปฌ embedding model๋ก ์๋ฏธ์ ์ผ๋ก ์ ์ฌํ ์ฒญํฌ๋ฅผ ์ฐพ์ต๋๋ค.
- RRF Fusion: ํค์๋ ๊ฒฐ๊ณผ์ ๋ฒกํฐ ๊ฒฐ๊ณผ์ ์์๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
- Local Reranking: ์์ ํ๋ณด๋ฅผ reranker๋ก ๋ค์ ํ๊ฐํฉ๋๋ค.
- Compression: ํ์ํ excerpt, source ref, memory packet๋ง Agent context๋ก ์ ๊ณตํฉ๋๋ค.
๋ก์ปฌ embedding/reranking ๋ชจ๋ธ์ด ์ค์น๋์ง ์์ ๊ฒฝ์ฐ ์๋ฒ๋ ํค์๋ ๊ฒ์์ผ๋ก ํด๋ฐฑํฉ๋๋ค.
์ค์น
์๊ตฌ์ฌํญ
- Node.js 22 ์ด์
- ์ ๊ทผ ๊ฐ๋ฅํ Obsidian Vault ์ ๋ ๊ฒฝ๋ก
MCP ์๋ฒ ์ค์น ๋ฐ ๋ชจ๋ธ ์ค๋น
npx @sunub/obsidian-mcp-server setup
์ด ๋ช ๋ น์ ๋ก์ปฌ semantic search์ reranking์ ํ์ํ ๋ชจ๋ธ์ ์บ์์ ์ค์นํฉ๋๋ค.
์ด๋ฏธ ํจํค์ง๋ฅผ ์ค์นํ ํ๊ฒฝ์์๋ ๋ค์์ฒ๋ผ ์คํํ ์๋ ์์ต๋๋ค.
obsidian-mcp-server setup
๋ชจ๋ธ ์ค์น๊ฐ ์์ผ๋ฉด ๊ธฐ๋ณธ ํค์๋ ๊ฒ์์ ๋์ํ์ง๋ง, semantic search์ reranking ํ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MCP ํด๋ผ์ด์ธํธ ์ค์
Claude Desktop, Cursor, Copilot ๋ฑ MCP ํด๋ผ์ด์ธํธ์๋ ๋ค์์ฒ๋ผ ๋ฑ๋กํฉ๋๋ค.
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@sunub/obsidian-mcp-server@latest"],
"env": {
"VAULT_DIR_PATH": "/Users/username/Documents/MyVault"
}
}
}
}
VAULT_DIR_PATH๋ ๋ฐ๋์ ๋ณธ์ธ์ Vault ์ ๋ ๊ฒฝ๋ก๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค.
ํ๊ฒฝ ๋ณ์
| ํ๊ฒฝ๋ณ์ | ๊ธฐ๋ณธ๊ฐ | ์ฉ๋ | ํ์ |
|---|---|---|---|
VAULT_DIR_PATH |
์์ | Obsidian Vault ์ ๋ ๊ฒฝ๋ก | ์ |
LOGGING_LEVEL |
info |
debug, info, warn, error |
์๋์ค |
LLM_API_URL |
http://127.0.0.1:8080 |
CLI UI๊ฐ ์ฌ์ฉํ OpenAI ํธํ ๋ก์ปฌ LLM endpoint | CLI ์ฌ์ฉ ์ |
LLM_CHAT_MODEL |
llama3 |
CLI UI ๋ต๋ณ ์์ฑ ๋ชจ๋ธ๋ช | CLI ์ฌ์ฉ ์ |
MCP ์๋ฒ์ Vault ๊ฒ์/์ฝ๊ธฐ ๋๊ตฌ์๋ VAULT_DIR_PATH๊ฐ ํต์ฌ ์ค์ ์
๋๋ค. LLM_API_URL๊ณผ LLM_CHAT_MODEL์ ์ ์ฅ์์ ํฌํจ๋ ๊ฐ๋ฐ์ฉ CLI UI์์ ๋ํํ ์คํธ๋ฆฌ๋ฐ ๋ต๋ณ์ ๋ฐ์ ๋ ํ์ํฉ๋๋ค.
๊ฐ๋ฐ์ฉ CLI AI Agent UI
์ด ์ ์ฅ์์๋ ํฐ๋ฏธ๋ ๊ธฐ๋ฐ AI Agent UI๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ด CLI๋ npm ํจํค์ง์ ๊ณต๊ฐ bin์ด ์๋๋ผ ์ ์ฅ์ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์คํํ๋ ์ง์
์ ์
๋๋ค.
์ด CLI์ ๋ชฉ์ ์ Obsidian Vault๋ฅผ ๋จ์ํ ๊ฒ์ํ๋ ์์ค์ ๋์ด์, MCP ๋๊ตฌ ํธ์ถ, ์กฐ๊ฑด๋ถ RAG ๊ธฐ๋ฐ ๋ฌธ๋งฅ ์์ง, OpenAI ํธํ LLM endpoint ์คํธ๋ฆฌ๋ฐ ์๋ต์ ํ๋์ ๋ํํ ์์ ํ๋ฆ์ผ๋ก ๋ฌถ๋ ๋ฐ ์์ต๋๋ค. ์ฆ, ๋จ์ํ "์ฑํ UI"๋ง ๊ตฌํํ๋ ๊ณณ์ด ์๋๋ผ, Vault์ ๋๊ตฌ, ๋ชจ๋ธ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ์ค์ผ์คํธ๋ ์ด์ ๋ ์ด์ด์ ๋๋ค.
์ ์ด CLI๊ฐ ํ์ํ๊ฐ
ํ๋ก์ ํธ์ ๋ฌธ์์ ์ค๊ณ ๋ฐฉํฅ์ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด, ์ด CLI๋ ๋ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ์ํํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
- ์ธ๋ถ AI ์๋น์ค ์์กด์ฑ ๊ฐ์: ํ๋ก์ ํธ๊ฐ ๋ก์ปฌ Vault์ ๋ก์ปฌ ๋๊ตฌ๋ฅผ ๋ค๋ฃจ๋ ๋งํผ, ๊ฐ๋ฅํ ํ ๋ก์ปฌ ์คํ ํ๊ฒฝ์์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋๋ก ์งํฅํฉ๋๋ค.
- ๋ฌธ๋งฅ ์์ค ๊ฐ์: Vault ๊ด๋ จ ๋๊ตฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ ์ง๋ฌธ์์๋ ๊ด๋ จ ๋ฌธ์๋ฅผ ์์งํ๊ณ ์์ฝํด LLM์ ํจ๊ป ์ ๋ฌํ ์ ์์ต๋๋ค.
- ํ ํฐ ๋ญ๋น ๊ฐ์:
collect_context๊ธฐ๋ฐ ์์ถ ์์ฝ๊ณผ ๋๋ ์ ๋ ฅ ์คํ๋ก๋ฉ์ ํตํด ๊ธด ๋ฌธ์๋ ๋ํ paste๋ฅผ ๊ทธ๋๋ก ๋ชจ๋ธ์ ๋ฐ์ด๋ฃ์ง ์์ต๋๋ค. - ํฐ๋ฏธ๋ ์ ๋ ฅ ์์ ์ฑ ๊ฐ์ : Raw mode ๊ธฐ๋ฐ ์ ๋ ฅ ํ๊ฒฝ์์ ๋ฐ์ํ๋ paste storm, ๋ค์ค Enter ํธ๋ฆฌ๊ฑฐ, ๋ฒํผ ์ค์ผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ ์ดํฉ๋๋ค.
- ์ฅ์๊ฐ ์ธ์ ์์ ์ฑ ํ๋ณด: ์คํธ๋ฆฌ๋ฐ ์ทจ์, ํ์คํ ๋ฆฌ pruning, scrollback ์์ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๋ ๋๋ง ๋ถ๋ด์ ์ค์ ๋๋ค.
์ด CLI๊ฐ ํ๋ ์ผ
1. ๋ํํ AI ์ธํฐํ์ด์ค
์ฌ์ฉ์๋ ํฐ๋ฏธ๋์์ ์์ฐ์ด๋ก ์ง๋ฌธ์ ์ ๋ ฅํ๊ณ , CLI๋ LLM ์๋ฒ์ ํต์ ํด ๋ต๋ณ์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
- ์๋ต์ ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
- ๋ชจ๋ธ์ thinking ์์ญ์ด ์์ผ๋ฉด ์ค๊ฐ ์ถ๋ก ์ํ๋ ๋ณ๋๋ก ๋ ๋๋งํฉ๋๋ค.
- ์๋ฃ๋ ๋ํ๋ ํ์คํ ๋ฆฌ์ ๋ฐ์ํ๊ณ , ์งํ ์ค ์๋ต์ ๋ณ๋
pending์ํ๋ก ๊ด๋ฆฌํฉ๋๋ค.
2. MCP ๋๊ตฌ ์คํ ์ธํฐํ์ด์ค
CLI๋ MCP ์๋ฒ์ ์ฐ๊ฒฐ๋ ๋๊ตฌ๋ฅผ ํฐ๋ฏธ๋์์ ์ง์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
/search,/read,/stats,/context,/tools๊ฐ์ ์ฌ๋์ ์ปค๋งจ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.- ์ฌ์ฉ์์ ๋ช ์์ ๋ช ๋ น๋ฟ ์๋๋ผ, LLM์ด tool call์ ์์ฑํ์ ๋๋ ์ด๋ฅผ ์คํํ ์ ์๋ ๋ฃจํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฌ๋ฌ MCP ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ , ๊ฐ ์๋ฒ์ ๋๊ตฌ ๋ชฉ๋ก๊ณผ ์ฐ๊ฒฐ ์ํ๋ฅผ ํจ๊ป ๊ด๋ฆฌํฉ๋๋ค.
3. ์กฐ๊ฑด๋ถ RAG ๊ธฐ๋ฐ ๋ฌธ๋งฅ ์ฃผ์
์ด CLI๋ ๋ชจ๋ ์ผ๋ฐ ์ง๋ฌธ์ ๋ํด ์๋์ผ๋ก RAG๋ฅผ ์ํํ์ง๋ ์์ต๋๋ค. ํ์ฌ ๊ตฌํ ๊ธฐ์ค์ผ๋ก๋ ์
๋ ฅ ํ
์คํธ์์ vault ๋๊ตฌ๋ ๊ด๋ จ ์๋ฒ/๋๊ตฌ ์ด๋ฆ์ด ํธ๋ฆฌ๊ฑฐ๋ ๊ฒฝ์ฐ์๋ง Vault ๋ฌธ๋งฅ ์์ง์ ์๋ํ๊ณ , ์ด๋ฅผ <context> ๋ธ๋ก์ผ๋ก ์ ๋ฆฌํด ํ๋กฌํํธ์ ์ฃผ์
ํฉ๋๋ค.
collect_context์ก์ ์ ํ์ฉํด ๊ด๋ จ ๋ฌธ์๋ฅผ ๋ฐฐ์น ๋จ์๋ก ์์งํฉ๋๋ค.memory_packet๊ณผ ๊ณ ์ฐ๊ด ๋ฌธ์ excerpt๋ฅผ ์กฐํฉํด LLM ์ ๋ ฅ์ ๊ตฌ์ฑํฉ๋๋ค.- ๋ฐ๋ผ์ ์ด CLI๋ ํญ์ RAG๊ฐ ๋ถ๋ ์ฑํ ์ฐฝ์ด๋ผ๊ธฐ๋ณด๋ค, ํ์ ์ Vault-aware ๋์์ ์ํํ๋ agent UI์ ๊ฐ๊น์ต๋๋ค.
4. ๋์ฉ๋ ์ ๋ ฅ ์ต์ ํ
๊ธด ์ฝ๋, ๋ก๊ทธ, ๋ฌธ์๊ฐ ๋ถ์ฌ๋ฃ๊ธฐ๋๋ฉด ์ด๋ฅผ ๊ทธ๋๋ก ๋ชจ๋ธ์ ๋ณด๋ด๋ ๋์ ์์ ํ๊ฒ ์ถ์ฝ/์คํ๋ก๋ฉํฉ๋๋ค.
- ํฐ paste๋ ์์ ํ์ผ๋ก ๋ถ๋ฆฌํด ์ ์ฅํฉ๋๋ค.
- LLM์๋ ์ ์ฒด ๋ณธ๋ฌธ ๋์ ํ์ผ ์์น์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ฒ๋ฆฌ ์ง์๋ฌธ์ ์ ๋ฌํฉ๋๋ค.
- ์ด ๋ฐฉ์์ ํ ํฐ ์ฌ์ฉ๋์ ์ค์ด๊ณ , ํ์ํ ๋๋ง ๋๊ตฌ๋ฅผ ํตํด ์๋ฌธ์ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
5. ์คํธ๋ฆฌ๋ฐ ์ค์ฌ ์ฌ์ฉ์ ๊ฒฝํ
CLI UI๋ ์๋ต์ด ๋๋ ๋ค ํ ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๊ตฌ์กฐ๊ฐ ์๋๋ผ, ์์ฑ ์ค์ธ ์ํ๋ฅผ ์ฆ์ ๋ณด์ฌ์ฃผ๋ ํ๋ฆ์ ์ค์ฌ์ผ๋ก ์ค๊ณ๋์ด ์์ต๋๋ค.
- ์ ๋ ฅ ์งํ ๋ฒํผ๋ฅผ ๋น์ ๋ค์ ์์ ์ ์ค๋นํฉ๋๋ค.
- ์ฒซ ํ ํฐ ์ ์๋ thinking/processing ์ํ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ์๋ฃ๋ ๊ธฐ๋ก์ ์ ์ ์์ญ์ผ๋ก ๋๊ธฐ๊ณ , ํ์ฌ ์๋ต๋ง ๋์ ์ผ๋ก ๋ค์ ๋ ๋๋งํฉ๋๋ค.
์ฃผ์ ์คํ ํ๋ฆ
- ์ฌ์ฉ์๊ฐ ๋ฉ์์ง ๋๋ ์ฌ๋์ ์ปค๋งจ๋๋ฅผ ์ ๋ ฅํฉ๋๋ค.
- ์ง๋ฌธ ๋ด์ฉ์์ Vault ๊ด๋ จ ๋๊ตฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋๋ฉด ๊ด๋ จ ๋ฌธ๋งฅ ์์ง์ ์๋ํฉ๋๋ค.
- LLM ์คํธ๋ฆฌ๋ฐ ์์ฒญ์ ์์ํฉ๋๋ค.
- ํ์ ์ MCP ๋๊ตฌ๋ฅผ ํธ์ถํฉ๋๋ค.
- ์๋ต์ ์ค์๊ฐ์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.
- ์๋ฃ๋ ๊ฒฐ๊ณผ๋ฅผ ํ์คํ ๋ฆฌ์ ๋ฐ์ํ๊ณ ๋ค์ ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
์ํคํ ์ฒ ๊ด์ ์์์ ์ญํ
| ์์ญ | ์ญํ | ๋ํ ํ์ผ |
|---|---|---|
| ๋ถํ ๋ฐ ํ๊ฒฝ ํ์ธ | LLM endpoint ํ์ธ, ์ด๊ธฐ ๋ก๋/์๋ฌ ํ๋ฉด ์ ์ด | AppContainer.tsx, ui/LLMHealthChecker.tsx, ui/LLMStatusLoader.tsx |
| MCP ์ฐ๊ฒฐ ๊ด๋ฆฌ | ์ค์ ํ์ผ ๊ธฐ๋ฐ MCP ์๋ฒ ์ฐ๊ฒฐ, ๋๊ตฌ ๋ชฉ๋ก ์์ง, ๋ฉํฐ ์๋ฒ ์ํ ๊ด๋ฆฌ | hooks/useMcpManager.ts, services/McpClientService.ts, config/mcpServersConfig.ts |
| ์ ๋ ฅ ์์คํ | Raw key ์ฒ๋ฆฌ, paste ๋ฒํผ๋ง, ๋ฉํฐ๋ผ์ธ ํธ์ง, ํ์คํ ๋ฆฌ ํ์ | context/KeypressContext.tsx, ui/InputPrompt.tsx, key/ |
| ๋ช ๋ น ๋์คํจ์น | ์ฌ๋์ ์ปค๋งจ๋๋ฅผ MCP ๋๊ตฌ ํธ์ถ๋ก ๋ณํ | hooks/useDispatcher.ts |
| RAG ์ปจํ ์คํธ ์์ง | Vault ๊ด๋ จ ๋๊ตฌ๊ฐ ํธ๋ฆฌ๊ฑฐ๋ ์ง๋ฌธ์์๋ง ๋ฌธ๋งฅ์ ์์งํด ํ๋กฌํํธ์ ์ฃผ์ | hooks/useRagContext.ts |
| LLM ์คํธ๋ฆฌ๋ฐ ๋ฃจํ | ์คํธ๋ฆฌ๋ฐ ์๋ต, tool call ์คํ, thinking ํ์ฑ | hooks/useLlmStream/useLlmStream.ts |
| ๋ ๋๋ง ๋ฐ ์ธ์ ๊ด๋ฆฌ | ํ์คํ ๋ฆฌ ์ถ๋ ฅ, pending ์๋ต ํ์, transient UI ๋ฉ์์ง ๊ด๋ฆฌ | ui/MainContent.tsx, hooks/useHistoryManager.ts |
| ๋๋ ์ ๋ ฅ ์ต์ ํ | ํฐ ๋ถ์ฌ๋ฃ๊ธฐ ์ ๋ ฅ ์คํ๋ก๋ฉ ๋ฐ ์์ ํ์ผ ์ ๋ฆฌ | services/InputOffloadService.ts |
์ค๊ณ ์์น
์ด CLI๋ ๋ค์ ์์น์ ์ค์ฌ์ผ๋ก ์ค๊ณ๋ฉ๋๋ค.
- ์ ๋ ฅ๊ณผ ๋ ๋๋ง์ ๋ถ๋ฆฌ
- ์คํธ๋ฆฌ๋ฐ ์ฐ์ UX
- ์ค์ ํ์ผ ๊ธฐ๋ฐ MCP ์ฐ๊ฒฐ
- ๋๊ตฌ ํธ์ถ๊ณผ ๋ํ ํ๋ฆ์ ํตํฉ
- ํ ํฐ/๋ฉ๋ชจ๋ฆฌ ํจ์จ ์ต์ ํ
- ์ค๋จ ๊ฐ๋ฅ์ฑ๊ณผ ๋ณต๊ตฌ ๊ฐ๋ฅ์ฑ ๋ณด์ฅ
์ ๊ณตํ๋ ์ฃผ์ ๋ช ๋ น
ํ์ฌ ์ฝ๋ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋ณธ ์ ๊ณต๋๋ ๋ํ ์ฌ๋์ ์ปค๋งจ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/search <keyword>: Vault ํ์ด๋ธ๋ฆฌ๋ ๊ฒ์/read "filename": ํน์ ๋ฌธ์ ์ด๋/semantic <query>: ์๋งจํฑ ๊ฒ์/stats: Vault ์ํ ํ์ธ/index: ๋ฒกํฐ ์ธ๋ฑ์ค ๊ฐฑ์/context <topic>: ํ ํฝ ๊ธฐ๋ฐ ๋ฌธ๋งฅ ์์ง/organize <keyword>: ์ฒจ๋ถ ์ ๋ฆฌ ๋๊ตฌ ์คํ/genprop <filename>: frontmatter ์์ฑ ๋๊ตฌ ํธ์ถ/tools: ์ฐ๊ฒฐ๋ MCP ๋๊ตฌ ๋ชฉ๋ก ํ์ธ/help: ๋์๋ง ํ์/clear: ํ๋ฉด/๋ํ ์ํ ์ด๊ธฐํ/quit,/exit: CLI ์ข ๋ฃ
์คํ ๋ฐฉ๋ฒ
ํ์ฌ CLI ์ง์
์ ์ ์ ์ฅ์ ๊ฐ๋ฐ ํ๊ฒฝ์ฉ ์คํ ๋ฐฉ์์
๋๋ค. ํจํค์ง์ bin ์ํธ๋ฆฌ๋ MCP ์๋ฒ์ฉ์ด๋ฉฐ, CLI UI๋ ๋ฃจํธ์์ ๋ณ๋ ์คํฌ๋ฆฝํธ๋ก ์คํ๋ฉ๋๋ค.
์ ์ฅ์ ๋ฃจํธ์์ ์์กด์ฑ์ ์ค์นํ๊ณ ์๋ฒ๋ฅผ ๋จผ์ ๋น๋ํฉ๋๋ค.
npm install
npm run build
์ด ์ ์ฅ์ ๋ฃจํธ์๋ ๊ธฐ๋ณธ mcp-servers.json์ด ํฌํจ๋์ด ์์ผ๋ฉฐ, node ./build/index.js๋ก ์๋ฒ๋ฅผ ์คํํฉ๋๋ค.
๊ทธ ๋ค์ OpenAI ํธํ ๋ก์ปฌ LLM ์๋ฒ๋ฅผ ์คํํฉ๋๋ค. ์๋ฅผ ๋ค์ด llama.cpp์ llama-server๋ฅผ 8080 ํฌํธ์ ๋์ธ ์ ์์ต๋๋ค.
llama-server -m /path/to/model.gguf --port 8080
CLI๋ ๋ค์์ฒ๋ผ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฃผ์ ํ์ฌ ์คํํฉ๋๋ค:
VAULT_DIR_PATH="/Users/username/Documents/MyVault" \
LLM_API_URL="http://127.0.0.1:8080" \
LLM_CHAT_MODEL="llama3" \
npm run cli
MCP ์ค์ ํ์ผ
CLI๋ ์คํ ์ ํ์ฌ ์์ ๋๋ ํฐ๋ฆฌ์์ ๋ค์ ํ์ผ์ ์์๋๋ก ์ฐพ์ต๋๋ค.
mcp-servers.json.mcp-servers.json
์ค์ ํ์ผ์ด ์์ผ๋ฉด ํ๊ฒฝ ๋ณ์ ๊ธฐ๋ฐ fallback์ ์๋ํ์ง๋ง, ๊ฐ์ฅ ์์ ํ ์คํ ๋ฐฉ์์ ์ ์ฅ์ ๋ฃจํธ์์, build/index.js๊ฐ ์ค๋น๋ ์ํ๋ก ์คํํ๋ ๊ฒ์
๋๋ค.
์คํ ์ ์ฃผ์ํ ์
- ์ด CLI ์คํ ๋ฐฉ๋ฒ์ ๊ฐ๋ฐ์ฉ CLI UI ์ง์
์ ๊ธฐ์ค์
๋๋ค. ๋ฐฐํฌ๋
npx @sunub/obsidian-mcp-server๋ MCP ์๋ฒ๋ฅผ ๋์ธ ๋ฟ CLI UI๋ฅผ ์คํํ์ง ์์ต๋๋ค. - CLI๊ฐ MCP ์๋ฒ์ ์ฐ๊ฒฐ๋๋ ค๋ฉด ํ์ฌ ๋๋ ํฐ๋ฆฌ์
mcp-servers.json๋๋.mcp-servers.json์ด ์ ํจํด์ผ ํฉ๋๋ค. VAULT_DIR_PATH๊ฐ ์๊ฑฐ๋ ์๋ชป๋๋ฉด Vault ๊ด๋ จ ๋๊ตฌ๊ฐ ๋์ํ์ง ์์ต๋๋ค.- semantic search์ reranking์ ์ฐ๋ ค๋ฉด ์๋ฒ
setup์ผ๋ก ๋ก์ปฌ ๋ชจ๋ธ์ ์ค์นํด์ผ ํฉ๋๋ค.
์ฃผ์ ์ฌํญ
VAULT_DIR_PATH๊ฐ ์๊ฑฐ๋ ์๋ชป๋๋ฉด Vault ๊ด๋ จ ๋๊ตฌ๊ฐ ๋์ํ์ง ์์ต๋๋ค.- semantic search์ reranking์ ์ฐ๋ ค๋ฉด
setup์ผ๋ก ๋ก์ปฌ ๋ชจ๋ธ์ ์ค์นํด์ผ ํฉ๋๋ค. - CLI UI๋ฅผ ์ฐ๋ ค๋ฉด ๋ณ๋์ OpenAI ํธํ ๋ก์ปฌ LLM ์๋ฒ๊ฐ ์คํ ์ค์ด์ด์ผ ํฉ๋๋ค.
- CLI์ ๋ช
์์ RAG๋
vault๊ด๋ จ ๋ช ๋ น, ์๋ฒ๋ช , ๋๊ตฌ๋ช ์ด ์ ๋ ฅ์์ ํธ๋ฆฌ๊ฑฐ๋ ๋๋ง ์ฌ์ ๋ฌธ๋งฅ ์์ง์ ์๋ํฉ๋๋ค. collect_context๋ ๊ธด ์ฃผ์ ์ ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ ํจํท ์์ฑ์ ์ ํฉํ๊ณ , ๋จ๊ฑด ์กฐํ๋search๋read๊ฐ ๋ ๋จ์ํฉ๋๋ค.- ์ฐ๊ธฐ ๊ณ์ด ๋๊ตฌ๋ Vault ๋ฐ๊นฅ ๊ฒฝ๋ก์ ์ฐ์ง ์๋๋ก ์ฐจ๋จํฉ๋๋ค.
์ฐธ๊ณ ๋ฌธ์
๋ผ์ด์ ์ค
Apache-2.0
Install
Add sunub obsidian mcp server to your client. Pick the one you use.
claude mcp add --transport http sunub-obsidian-mcp-server https://server.smithery.ai/@sunub/obsidian-mcp-server/mcpcodex mcp add sunub-obsidian-mcp-server --url https://server.smithery.ai/@sunub/obsidian-mcp-server/mcp{
"mcpServers": {
"sunub-obsidian-mcp-server": {
"url": "https://server.smithery.ai/@sunub/obsidian-mcp-server/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"sunub-obsidian-mcp-server": {
"type": "http",
"url": "https://server.smithery.ai/@sunub/obsidian-mcp-server/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"sunub-obsidian-mcp-server": {
"url": "https://server.smithery.ai/@sunub/obsidian-mcp-server/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"sunub-obsidian-mcp-server": {
"serverUrl": "https://server.smithery.ai/@sunub/obsidian-mcp-server/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation21/25
- Maintenance16/25
- Trust13/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 57 days ago
- Has a release history
- Repository is not archived
- Licensed ISC
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 1.0.0Latest | Sep 18, 2025 |