obsidian-mcp-server

sunub/obsidian-mcp-server

3.3

If you are the rightful owner of obsidian-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

Obsidian MCP Server facilitates seamless interaction with Obsidian vault documents for external applications and AI, enabling easy reading, analysis, and automatic property generation and application.

Tools
4
Resources
0
Prompts
0

Obsidian MCP Server

obsidian-mcp-server๋Š” Model Context Protocol(MCP)์„ ๊ตฌํ˜„ํ•œ ์„œ๋ฒ„๋กœ, ๋กœ์ปฌ Obsidian vault์˜ ๋ฌธ์„œ๋“ค์„ AI ์—์ด์ „ํŠธ๋‚˜ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‰ฝ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Obsidian Vault๋ฅผ ์ด์šฉํ•ด AI๊ฐ€ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ์ง€์‹ ๋ฒ ์ด์Šค(Knowledge Base)๋กœ ํ™•์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•˜๊ณ  ๋ฌธ์„œ ๊ฒ€์ƒ‰, ์š”์•ฝ, ์ •๋ฆฌ์™€ ๊ฐ™์€ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ต์‹ฌ์ ์ธ "๊ธ€์“ฐ๊ธฐ ํ™œ๋™"์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ์ œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜

๋ณธ ์„œ๋ฒ„๋Š” VaultManager์™€ Indexer๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์ถ•๋˜์–ด ๋Œ€๊ทœ๋ชจ Vault์—์„œ๋„ ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • Indexer ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰: ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ๊ฐ€๋ฒผ์šด ์—ญ ์ธ๋ฑ์Šค(Inverted Index)๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ์‹œ ๊ฑฐ์˜ ์ฆ‰๊ฐ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค(O(1)). ์ „์ฒด ํŒŒ์ผ ๋‚ด์šฉ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผ์‹œํ‚ค์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • VaultManager: Vault ๋‚ด์˜ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ฌธ์„œ์˜ ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๊ณ ๊ธ‰ ๋ฌธ์„œ ํƒ์ƒ‰: vault ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰, ์ „์ฒด ๋ชฉ๋ก ์กฐํšŒ, ํŠน์ • ๋ฌธ์„œ ์ฝ๊ธฐ, ํ†ต๊ณ„ ๋ถ„์„ ๋“ฑ ๋‹ค์–‘ํ•œ ํƒ์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • AI ๊ธฐ๋ฐ˜ ์†์„ฑ ์ƒ์„ฑ: generate_property ๋„๊ตฌ๋Š” ๋ฌธ์„œ ๋ณธ๋ฌธ์„ ๋ถ„์„ํ•˜์—ฌ title, tags, summary ๋“ฑ ์ ์ ˆํ•œ frontmatter ์†์„ฑ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ์•ˆ์ „ํ•œ ์†์„ฑ ์—…๋ฐ์ดํŠธ: write_property ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋œ ์†์„ฑ์„ ๊ธฐ์กด frontmatter์™€ ๋ณ‘ํ•ฉํ•˜์—ฌ ํŒŒ์ผ์— ์•ˆ์ „ํ•˜๊ฒŒ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒจ๋ถ€ ํŒŒ์ผ ์ž๋™ ์ •๋ฆฌ: organize_attachments ๋„๊ตฌ๋Š” ๋ฌธ์„œ์™€ ์—ฐ๊ฒฐ๋œ ์ฒจ๋ถ€ ํŒŒ์ผ(์˜ˆ: ์ด๋ฏธ์ง€)์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ๋ฌธ์„œ ์ œ๋ชฉ์— ๋งž๋Š” ํด๋”๋กœ ์ด๋™์‹œํ‚ค๊ณ  ๋งํฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
  • ํ†ตํ•ฉ ์›Œํฌํ”Œ๋กœ์šฐ: create_document_with_properties์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ ๋ถ„์„๋ถ€ํ„ฐ ์†์„ฑ ์ƒ์„ฑ, ํŒŒ์ผ ์—…๋ฐ์ดํŠธ๊นŒ์ง€์˜ ์ „์ฒด ๊ณผ์ •์„ ๋‹จ์ผ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹ ๋ขฐ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ: vitest๋ฅผ ์‚ฌ์šฉํ•œ End-to-End ํ…Œ์ŠคํŠธ์™€ GitHub Actions ๊ธฐ๋ฐ˜์˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์„œ๋ฒ„์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ ๋„๊ตฌ API์˜ ์‘๋‹ต ์Šคํ‚ค๋งˆ๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

๋„๊ตฌ API

obsidian-mcp-server๋Š” MCP ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

vault

Vault ๋‚ด ๋ฌธ์„œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. action ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • list_all: Vault ๋‚ด ๋ชจ๋“  ๋ฌธ์„œ์˜ ๋ชฉ๋ก๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • search: ํ‚ค์›Œ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฌธ์„œ ์ œ๋ชฉ, ๋‚ด์šฉ, ํƒœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • read: ํŠน์ • ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ๊ณ  frontmatter์™€ ๋ณธ๋ฌธ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • stats: Vault ๋‚ด ๋ชจ๋“  ๋ฌธ์„œ์˜ ํ†ต๊ณ„(๋‹จ์–ด, ๊ธ€์ž ์ˆ˜ ๋“ฑ)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

generate_property

๋ฌธ์„œ ๊ฒฝ๋กœ(filePath)๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ํ•ด๋‹น ๋ฌธ์„œ์˜ ๋‚ด์šฉ์„ ๋ถ„์„ํ•˜๊ณ , AI๊ฐ€ ์ถ”์ฒœํ•˜๋Š” frontmatter ์†์„ฑ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

write_property

ํŒŒ์ผ ๊ฒฝ๋กœ(filePath)์™€ JSON ํ˜•์‹์˜ ์†์„ฑ(properties)์„ ์ž…๋ ฅ๋ฐ›์•„, ํ•ด๋‹น ํŒŒ์ผ์˜ frontmatter๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

create_document_with_properties

๋ฌธ์„œ ๋ถ„์„, ์†์„ฑ ์ƒ์„ฑ, ํŒŒ์ผ ์—…๋ฐ์ดํŠธ์˜ ์ „ ๊ณผ์ •์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๋Š” ํ†ตํ•ฉ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

organize_attachments

ํ‚ค์›Œ๋“œ๋กœ ๋ฌธ์„œ๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ๋ฌธ์„œ์— ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ฒจ๋ถ€ ํŒŒ์ผ์„ images/{๋ฌธ์„œ ์ œ๋ชฉ} ํด๋”๋กœ ์ด๋™์‹œํ‚ค๊ณ , ๋ฌธ์„œ ๋‚ด์˜ ๋งํฌ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ

  1. ์ €์žฅ์†Œ ๋ณต์ œ ๋ฐ ์˜์กด์„ฑ ์„ค์น˜:

    git clone https://github.com/sunub/obsidian-mcp-server.git
    cd obsidian-mcp-server
    npm install
    
  2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •: ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .env ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  Obsidian vault์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

    VAULT_DIR_PATH=/path/to/your/obsidian/vault
    
  3. ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ:

    npm run build
    
  4. ์„œ๋ฒ„ ์‹คํ–‰:

    node build/index.js
    

    ์ด์ œ MCP ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜์—ฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ

ํ…Œ์ŠคํŠธ ์‹คํ–‰

vitest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ End-to-End ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

npm test

CI/CD

์ด ํ”„๋กœ์ ํŠธ๋Š” GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. main ๋ธŒ๋žœ์น˜์— push ๋˜๋Š” pull request๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œ์™€ ํ…Œ์ŠคํŠธ๊ฐ€ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.