ai.smithery/sunub-obsidian-mcp-server
Search your Obsidian vault to quickly find notes by title or keyword, summarize related content, aβ¦
Ask AI about ai.smithery/sunub-obsidian-mcp-server
Powered by Claude Β· Grounded in docs
I know everything about ai.smithery/sunub-obsidian-mcp-server. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Obsidian MCP Server
obsidian-mcp-serverλ Obsidian Vaultμ Markdown λ¬Έμλ₯Ό AI μμ΄μ νΈκ° μ‘°ννκ³ , κ²μνκ³ , μμ½ν μ μκ² ν΄μ£Όλ MCP μλ²μ
λλ€.
MCP ν΄λΌμ΄μΈνΈμ μ°κ²°ν΄ μμ΄μ νΈμκ² ν ν° μ¬μ©λμ μ μ΄νλ©΄μ Vault λ΄μ©μ μ‘°νν μ μκ² ν©λλ€.
llama.cpp κΈ°λ° λ‘컬 LLM(μλ² λ©Β·μ±ν ·리λνΉ)κ³Ό μ°λνλ©΄ μΈλΆ API μμ΄ μμ ν λ‘컬μμ Vault RAGλ₯Ό ꡬμΆνκ³ κ΅¬λν μ μμ΅λλ€.
무μμ ν μ μλ
- ν€μλ κΈ°λ° λ
ΈνΈ κ²μ (
vault,action="search") - νΉμ λ
ΈνΈ μ΄λ (
vault,action="read") - Vault μ 체 λ¬Έμ λͺ©λ‘ μ‘°ν (
vault,action="list_all") - Vault μν μ‘°ν (
vault,action="stats") - RAG κΈ°λ° κ²μ (
vault,action="search_vault_by_semantic") - LLM μλ²(llama.cpp) μ°λ νμ - μ 체 μμΈ νΈλ¦¬κ±° (
vault,action="index_vault_to_vectordb") - frontmatter μλ μμ± μ μ (
generate_property) - frontmatter μ€μ λ°μ (
write_property) - μ΄λ―Έμ§ 첨λΆνμΌ μ 리 (
organize_attachments)
μ¬μ μ£Όμμ¬ν
μ΄ μλ²λ Vault λ΄μ©μ ν΄λΌμ΄μΈνΈμ λ ΈμΆν©λλ€. μ΄μ νκ²½μμ μ μ€ν μ¬μ©νμΈμ.
- μ λ’°ν μ μλ AI μμ΄μ νΈμ μ°κ²°νμ§ λ§μΈμ.
- Vault κ²½λ‘(
VAULT_DIR_PATH)λ μ΅μ κΆνμΌλ‘ μ ννμΈμ. - μ‘°νλμ΄ ν° Vaultλ
maxOutputChars,limitλ₯Ό μ‘°μ ν΄ ν ν° λΉμ©μ ν΅μ νμΈμ. vaultμ‘μ κΈ°λ³Έ μμΆ λͺ¨λλbalancedμ λλ€.
μ€μ νμΈμ¬ν
1. Vault κ²½λ‘: VAULT_DIR_PATHμλ λ°λμ μ λ κ²½λ‘λ₯Ό μ
λ ₯ν΄μΌ ν©λλ€.
# β
μ¬λ°λ₯Έ μμ (macOS / Linux)
VAULT_DIR_PATH="/Users/username/Documents/MyVault"
# β
μ¬λ°λ₯Έ μμ (Windows β μμ¬λμ μ΄μ€μΌμ΄ν)
VAULT_DIR_PATH="C:\\Users\\username\\Documents\\MyVault"
# β
μ¬λ°λ₯Έ μμ (WSL)
VAULT_DIR_PATH="/mnt/c/Users/username/Documents/MyVault"
# β μλͺ»λ μμ β μλ κ²½λ‘λ μλ² μμ μ μ€λ₯ λ°μ
VAULT_DIR_PATH="~/Documents/MyVault"
VAULT_DIR_PATH="./vault"
2. Node.js μꡬμ¬ν: Node.js 22 μ΄μμ΄ μ€μΉλμ΄ μμ΄μΌ ν©λλ€.
node --version # v22.0.0 μ΄μ νμΈ
νκ²½λ³μ μ 체 μ€μ μμ
MCP ν΄λΌμ΄μΈνΈ μ€μ (mcpServers.env) λλ μ
Έ νκ²½λ³μλ‘ μ£Όμ
ν©λλ€.
μλ§¨ν± κ²μ·리λνΉ κΈ°λ₯μ μ¬μ©νμ§ μμ κ²½μ° VAULT_DIR_PATHλ§ νμμ
λλ€.
μ΅μ μ€μ (κΈ°λ³Έ λκ΅¬λ§ μ¬μ©)
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@sunub/obsidian-mcp-server@latest"],
"env": {
"VAULT_DIR_PATH": "/abs/path/to/your/vault"
}
}
}
}
μ 체 μ€μ (μλ§¨ν± κ²μ + 리λνΉ ν¬ν¨)
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@sunub/obsidian-mcp-server@latest"],
"env": {
"VAULT_DIR_PATH": "/abs/path/to/your/vault",
"LOGGING_LEVEL": "info",
"LLM_API_URL": "http://127.0.0.1:8080",
"LLM_EMBEDDING_API_URL": "http://127.0.0.1:8081",
"LLM_EMBEDDING_MODEL": "nomic-embed-text",
"LLM_CHAT_MODEL": "llama3",
"LLM_RERANKER_API_URL": "http://127.0.0.1:8082",
"VAULT_METRICS_LOG_PATH": "/abs/path/to/vault-metrics.ndjson"
}
}
}
}
κ° λ³μκ° μ°κ²°λλ μλ²λ μλμ κ°μ΅λλ€:
| νκ²½λ³μ | κΈ°λ³Έκ° | μν | νμ μ¬λΆ |
|---|---|---|---|
VAULT_DIR_PATH | β | Obsidian Vault μ λ κ²½λ‘ | νμ |
LOGGING_LEVEL | info | λ‘κ·Έ μμ€ (debug / info / warn / error) | μ ν |
LLM_API_URL | http://127.0.0.1:8080 | llama-server μ±ν μλν¬μΈνΈ | μ ν |
LLM_EMBEDDING_API_URL | http://127.0.0.1:8081 | llama-server μλ² λ© μλν¬μΈνΈ (λ²‘ν° μμΈ νμ) | μ ν |
LLM_EMBEDDING_MODEL | nomic-embed-text | μλ² λ© λͺ¨λΈλͺ | μ ν |
LLM_CHAT_MODEL | llama3 | μ±ν λͺ¨λΈλͺ | μ ν |
LLM_RERANKER_API_URL | http://127.0.0.1:8082 | llama-server 리λ컀 μλν¬μΈνΈ (λ―Έμ€μ μ ν΄λ°±) | μ ν |
VAULT_METRICS_LOG_PATH | β | μλ΅ μμΆΒ·ν ν° λ©νΈλ¦ JSONL κΈ°λ‘ κ²½λ‘ | μ ν |
LLM_EMBEDDING_API_URLμ΄ μμΌλ©΄search_vault_by_semanticκ³Όindex_vault_to_vectordbκ° λμνμ§ μμ΅λλ€.
LLM_RERANKER_API_URLμ μλ²κ° μμΌλ©΄ μ€λ₯ μμ΄ ν΄λ°±(μλ μ λ ¬ μ μ§)λ©λλ€.
μμνκΈ° (λΉ λ₯Έ μ€μ )
1) κ³΅ν΅ μꡬμ¬ν
- μ΅μ μ€μ μ
VAULT_DIR_PATH(Vault μ λ κ²½λ‘)μ λλ€. - MCP μ€ν μ체λ λ°°ν¬ ν¨ν€μ§ κΈ°μ€μΌλ‘ λ§μΆ° μ€λͺ
ν©λλ€.
- λ°°ν¬ ν¨ν€μ§(
npx) μ¬μ© (κΆμ₯) - λ‘컬
build/index.jsλ κ°λ°/λλ²κΉ λͺ©μ
- λ°°ν¬ ν¨ν€μ§(
- λ‘컬 μ€νμ λ§μ§λ§ μΉμ (5)μμ λΆλ¦¬ μλ΄ν©λλ€.
- Vault κ²½λ‘κ° μμΌλ©΄ μμμ΄ μ€ν¨ν©λλ€.
- μλ μμλ 볡λΆμΌλ‘ λ°λ‘ μ¬μ©ν μ μλλ‘ μ 리νμ΅λλ€.
2) λ°°ν¬ ν¨ν€μ§ (npx) μ€μ
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@sunub/obsidian-mcp-server@latest"],
"env": {
"VAULT_DIR_PATH": "/abs/path/to/your/vault",
"LOGGING_LEVEL": "info"
}
}
}
}
CLI μ§μ μ€ν:
npx -y @sunub/obsidian-mcp-server@latest --vault-path /abs/path/to/your/vault --logging-level info
3) MCP Client configuration
ν΄λΌμ΄μΈνΈλ³ UIκ° λ€λ₯΄λλΌλ command/args/envμ κΈ°λ³Έ ννλ λμΌν©λλ€.
λ°°ν¬ ν¨ν€μ§ κΈ°μ€ ν΅μ¬:
command="npx",args=["-y","@sunub/obsidian-mcp-server@latest"],env.VAULT_DIR_PATH
Codex
`.codex/config.toml`μ μλμ²λΌ λ±λ‘ν©λλ€.[mcp_servers.obsidian]
command = "npx"
args = ["-y", "@sunub/obsidian-mcp-server@latest"]
env = { VAULT_DIR_PATH = "/abs/path/to/your/vault" }
Copilot CLI
copilotμ€ν/mcp add- μλ κ° μ λ ₯
- Server name:
obsidian - Server Type:
[1] Local - Command:
npx -y @sunub/obsidian-mcp-server@latest - Environment:
{ "VAULT_DIR_PATH": "/abs/path/to/your/vault" }
Copilot / VS Code
λ²μ λ³ JSON ν€ μ΄λ¦μ΄ λ€λ₯Ό μ μμΌλ―λ‘(μ: servers/mcpServers), νλ‘μ νΈ λ¬Έμμ λ§μΆ° μ μ©νμΈμ.
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": ["-y", "@sunub/obsidian-mcp-server@latest"],
"env": { "VAULT_DIR_PATH": "/abs/path/to/your/vault" }
}
}
}
Cursor
Cursor Settings β MCP β New MCP Serverμμ λ±λ‘ν©λλ€.
{
"obsidian": {
"command": "npx",
"args": ["-y", "@sunub/obsidian-mcp-server@latest"],
"env": { "VAULT_DIR_PATH": "/abs/path/to/your/vault" }
}
}
β» μΌλΆ λ²μ μ μλ² μλ³ ν€λͺ μ΄ λ€λ₯Ό μ μμΌλ μ€μ νλ©΄ μλ΄μ λ§μΆ° λΆμ¬λ£μΌμΈμ.
Gemini CLI
ν¨ν€μ§ μ€μΉν μμ:
gemini mcp add obsidian npx -y @sunub/obsidian-mcp-server@latest --vault-path /abs/path/to/your/vault
β» μΌλΆ Gemini λ²μ μ --vault-path μ§μμ΄ λ€λ₯Ό μ μμΌλ―λ‘, gemini mcp addμ μ΅μ λ¬Έμλ₯Ό νμΈνμΈμ.
4) μμ± μμ μ€μ
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": [
"-y",
"@sunub/obsidian-mcp-server@latest"
],
"env": {
"VAULT_DIR_PATH": "/path/to/obsidian-vault",
"VAULT_METRICS_LOG_PATH": "/path/to/vault-metrics.ndjson",
"LOGGING_LEVEL": "info",
"LLM_API_URL": "http://127.0.0.1:8080",
"LLM_EMBEDDING_API_URL": "http://127.0.0.1:8081",
"LLM_EMBEDDING_MODEL": "nomic-embed-text",
"LLM_CHAT_MODEL": "llama3",
"LLM_RERANKER_API_URL": "http://127.0.0.1:8082"
}
}
}
}
```json
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": [
"-y",
"@sunub/obsidian-mcp-server@latest"
],
"env": {
"VAULT_DIR_PATH": "/path/to/obsidian-vault",
"VAULT_METRICS_LOG_PATH": "/path/to/vault-metrics.ndjson",
"LOGGING_LEVEL": "info",
"LLM_API_URL": "http://127.0.0.1:8080",
"LLM_EMBEDDING_API_URL": "http://127.0.0.1:8081",
"LLM_EMBEDDING_MODEL": "nomic-embed-text",
"LLM_CHAT_MODEL": "llama3",
"LLM_RERANKER_API_URL": "http://127.0.0.1:8082"
}
}
}
}
κ° λ³μμ μν κ³Ό κΈ°λ³Έκ°μ μ¬μ μ£Όμμ¬ν β νκ²½λ³μ μ 체 μ€μ μμλ₯Ό μ°Έκ³ νμΈμ.
μλ§¨ν± κ²μ (RAG) μ€μ
ν€μλ κ²μ μΈμ μλ―Έ κΈ°λ° λ²‘ν° κ²μμ μ¬μ©νλ €λ©΄ μλ² λ© μλ²κ° νμν©λλ€.
νμ±ν 쑰건
LLM_EMBEDDING_API_URLμ΄ κ°λ¦¬ν€λ μλ²κ° μ€ν μ€μ΄μ΄μΌ ν©λλ€.
μμΌλ©΄ search_vault_by_semanticκ³Ό index_vault_to_vectordbκ° λμνμ§ μκ³ ,
useRagContextλ μλμΌλ‘ ν€μλ κ²μμΌλ‘ ν΄λ°±λ©λλ€.
# ecosystem.config.cjs κΈ°μ€ β μλ² λ© μλ² λ¨λ
μμ
pm2 start ecosystem.config.cjs --only llama-embedding-server
μ΄κΈ° μμΈ μ€ν
μλ² μ°κ²° ν μ²μ ν λ²μ μ 체 μμΈμ μ§μ νΈλ¦¬κ±°ν΄μΌ ν©λλ€.
"Vault μ 체λ₯Ό μ¬μμΈν΄μ€."
λ΄λΆ λμ:
{
"mcpServers": {
"obsidian": {
"command": "npx",
"args": [
"-y",
"@sunub/obsidian-mcp-server@latest"
],
"env": {
"VAULT_DIR_PATH": "/path/to/obsidian-vault",
"VAULT_METRICS_LOG_PATH": "/path/to/vault-metrics.ndjson",
"LOGGING_LEVEL": "info",
"LLM_API_URL": "http://127.0.0.1:8080",
"LLM_EMBEDDING_API_URL": "http://127.0.0.1:8081",
"LLM_EMBEDDING_MODEL": "nomic-embed-text",
"LLM_CHAT_MODEL": "llama3",
"LLM_RERANKER_API_URL": "http://127.0.0.1:8082"
}
}
}
}
μ΄νμλ νμΌ λ³κ²½ μ VaultWatcherκ° μλμΌλ‘ μ¦λΆ μμΈν©λλ€ (mtime κΈ°λ°).
μμΈ μ μ₯ μμΉ
{VAULT_DIR_PATH}/.obsidian/vector_cache/ β LanceDB λ°μ΄ν° λλ ν°λ¦¬
- μ§μ μμ ν΄λ 무방ν©λλ€. λ€μ
index_vault_to_vectordbνΈμΆ μ μ¬μμ±λ©λλ€. LLM_EMBEDDING_MODELμ λ³κ²½νλ©΄ μλ² μμ μ μλμΌλ‘ μ 체 μ¬μμΈμ΄ λ°μν©λλ€ (INDEX_VERSION λλ λͺ¨λΈλͺ λΆμΌμΉ κ°μ§).
κ²μ μ λ΅ νλ¦
μ¬μ©μ μ§λ¬Έ
β
βΌ
search_vault_by_semantic (λ²‘ν° μ μ¬λ κ²μ β 리λνΉ)
β κ²°κ³Ό μμ
βΌ
vault.search (ν€μλ ν΄λ°±)
β κ²°κ³Ό μμ
βΌ
컨ν
μ€νΈ μμ΄ LLM μλ΅
μ²ν¬Β·ν ν° νλΌλ―Έν° (νμμ μ μ©)
| νλͺ© | κ° | λΉκ³ |
|---|---|---|
| μ²ν¬ ν¬κΈ° | 500 tokens | tiktoken cl100k κΈ°μ€ |
| μ²ν¬ μ€λ²λ© | 50 tokens | |
| μλ² λ© μ΅λ ν ν° | 500 tokens | μ΄κ³Ό μ λΉλ‘ μλΌλ |
| μλ² λ© μ λμ΄ | search_document: {text} | nomic-embed-text νμ |
| λ²‘ν° μ°¨μ | 768 | nomic-embed-text μΆλ ₯ ν¬κΈ° |
| IVF-PQ μΈλ±μ€ μμ± | 256κ° λ¬Έμ μ΄μ | λ―Έλ§μ΄λ©΄ λΈλ£¨νΈν¬μ€λ‘ λμ |
| λμ μλ² λ© μμ² | μ΅λ 3 | Semaphore μ ν |
μμ ν λΉ λ₯Έ κ²μ¦
μ°κ²°μ΄ λλλ©΄ μλ 3κ°μ§λ§ λ¨Όμ νμΈνμΈμ.
λ¬Έμκ° μ μ΄λ¦¬λλΌλ μ΄λμ μ€ν¨νλμ§ λ°λ‘ μ’ν μ μμ΅λλ€.
- Vault μν νμΈ
"Vault μνλ₯Ό μμ½ν΄μ€."
μμ λ΄λΆ λμ:
{
"method": "tools/call",
"params": {
"name": "vault",
"arguments": { "action": "stats" }
}
}
μ μ λμ μ μλ΅μ totalFiles, isInitialized, vaultPathκ° λ€μ΄κ°λλ€.
- κ²μ μΈλ±μ€ νμΈ
"λ
ΈνΈ μ λͺ©μ 'MCP'κ° λ€μ΄κ° λ¬Έμλ§ 5κ° μ°Ύμμ€."
μμ λ΄λΆ λμ:
{
"method": "tools/call",
"params": {
"name": "vault",
"arguments": {
"action": "search",
"keyword": "MCP",
"limit": 5
}
}
}
searchμμ κ²°κ³Όκ° λΉμ΄ μμΌλ©΄ μΈλ±μ±/κ²½λ‘ λλ ν€μλ λ²μλ₯Ό μμ¬ν©λλ€.
- λ¬Έμ μ½κΈ° νμΈ
"νΉμ λ
ΈνΈ νλλ₯Ό μ½μ΄μ€."
μμ λ΄λΆ λμ:
{
"method": "tools/call",
"params": {
"name": "vault",
"arguments": {
"action": "read",
"filename": "μ: μ΄λ€ λ¬Έμ μ΄λ¦"
}
}
}
filenameμ΄ ν리면 { "error": "Document not found: ..." }κ° μ€κ³ , read λμ list_allμΌλ‘ ν보λ₯Ό λ¨Όμ νμΈνλ©΄ ν΄κ²°μ΄ λΉ λ¦
λλ€.
search, list_all, load_memoryλ quiet κΈ°λ³Έκ°μ΄ trueλΌμ κΈ°λ³Έ μλ΅μ΄ κ°λ΅ν΄μ§ μ μμ΅λλ€.
νμνλ©΄ quiet: false, includeContent: true, excerptLength(λλ maxOutputChars)λ₯Ό ν¨κ» μ¨μ μμΈλ₯Ό νμΈνμΈμ.
μ¬μ© μμ
MCPλ₯Ό μ΄λ»κ² νΈμΆνλμ§λ³΄λ€ βλ¬΄μ¨ λμμ νλ €κ³ νλμ§βκ° λ μ€μν©λλ€.
λ§ν¬λ€μ΄ λ¬Έμμ μμ±λμ΄ μλ 첨λΆνμΌμ μ 리νλ λμ μμ :
https://github.com/user-attachments/assets/eb74ec05-09f7-4632-a22c-666b7e844147
- νΉμ λ¬Έμλ₯Ό λμμΌλ‘ λ¬Έμμ μμ±λλ μλ μ΄λ―Έμ§ μ²¨λΆ νμΌμ μ 리ν΄λ¬λΌκ³ μꡬν κ²½μ° ν΄λΉ
imagesν΄λ λ΄λΆμ ν΄λΉ νμΌμ μ΄λ¦μΌλ‘ ν΄λλ₯Ό μμ±νμ¬ μ 리ν©λλ€. - μ 리λ λ¬Έμλ κΈ°μ‘΄μ μμ±λμ΄ μλ λ¬Έμμ μ°κ²°μ΄ κΉ¨μ§μ§ μλλ‘
imagesν΄λλ₯Ό κΈ°μ€μΌλ‘ μ°κ²°μ μ λ°μ΄νΈ ν©λλ€.
μ§μ μ€νμ© μ§λ¬Έ μμ:
README.mdμμμμνκΈ° (λΉ λ₯Έ μ€μ )μMCP Client configurationλΆλΆλ§ μ°Ύμμ€.docs/tools-usage-guide.mdμvaultμ€μ μμλ§ μ½κ³ μ 리ν΄μ€.docs/tool-reference.mdμμvaultμcollect_contextνλΌλ―Έν°λ§ μ°Ύμμ€.docs/tools-usage-guide.mdμμMCP μλ²μ€μ λΈλ‘λ§ μ 리ν΄μ€.
μμ°μ΄ μμλ μλμ²λΌ ꡬ체μ μΌλ‘ μ°λ©΄ λκ΅¬κ° λ μ ννκ² λμν©λλ€.
"README.mdμ μμνκΈ° λΆλΆμμ μ€ν λͺ λ Ή μμλ§ μ°Ύμμ€""docs/tools-usage-guide.mdμμ vault κ΄λ ¨ μ¬μ© μμλ§ μ°Ύμμ λΉκ΅ν΄μ€""docs/tool-reference.mdμ vault.read νλΌλ―Έν° μ€λͺ λ§ μ½μ΄μ€"
vaultλ μ¬μ©μ μ§λ¬Έμ ν λλ‘ λ΄λΆμ μΌλ‘ λ§€νλμ΄ νΈμΆλλ©°, μ€μ νλ¦μ μλμ²λΌ λμν©λλ€.
README.mdμ μμνκΈ° (λΉ λ₯Έ μ€μ )μμ npx μμλ§ λ³΄μ¬μ€
β ν΅μ¬ ν€μλλ§ μΆμΆν΄vault.searchκ° λ¨Όμ νΈμΆλ©λλ€.docs/tool-reference.mdμ collect_context νλΌλ―Έν°λ§ μ½μ΄μ€
β λ¨Όμ vault.readλ‘ λ¬Έμμ ν΄λΉ λΆλΆμ μ½κ³ , νμ μvault.collect_contextλ‘ μ 리ν©λλ€.docs/tools-usage-guide.mdμμ frontmatter μ²λ¦¬ κ³Όμ μ μ½μ΄μ€
β λ¬Έμ μμΉλ₯Όvault.readλ‘ μ°Ύμ λ€generate_property/write_property/create_document_with_propertiesλ₯Ό μμ°¨ νΈμΆν μ μμ΅λλ€.
λμνλ λꡬμ νΈμΆ νλ¦μ μ¬μ© μμ(λꡬ νΈμΆ νλ¦)μμ ꡬ체 JSON μμμ ν¨κ» νμΈνμΈμ.
λ±λ‘λ λꡬ
- Obsidian Tools (8 actions)
vaultsearchreadlist_allstatscollect_contextload_memorysearch_vault_by_semanticindex_vault_to_vectordb
generate_propertywrite_propertycreate_document_with_propertiesorganize_attachments
μμΈν μ¬μ© κ·μ½
- λꡬ μμΈ λμ, νλΌλ―Έν° κΈ°λ³Έκ°, μ€μ μλ΅ νμμ Tool Referenceμμ νμΈνμΈμ.
vaultλ νλμ MCP toolμ΄κ³actionκ°μΌλ‘ μ€μ λμμ΄ λΆκΈ°λ©λλ€. μ€νκ° κ°μ₯ νν μ€ν¨ μμΈμ λλ€.- λκ·λͺ¨ Vaultμμλ
collect_contextλ₯Όscope="all",maxDocsλ₯Ό μκ² μμν΄ λ¨κ³μ μΌλ‘ νμ₯νμΈμ.
