Obsidian MCP Server

Obsidian MCP Server

Enables management and semantic search of an Obsidian vault via MCP, with features like adding notes, listing recent notes, and resetting the database using persistent Chroma DB storage.

Category
访问服务器

README

Obsidian MCP Server

MCP (Model Context Protocol) サーバーによるObsidian Vaultの管理と検索を可能にするRAG対応システム

🚀 主な改善点

1. Chroma DBによる永続化

  • メモリベースのベクターストアからChroma DBに移行
  • Embeddingの永続化により、再起動時の再計算を回避
  • 分散環境での利用が可能

2. 差分更新システム

  • ファイルごとのコンテンツハッシュによる変更検出
  • 更新日時とハッシュの二重チェックで確実な差分検出
  • 変更されたファイルのみEmbedding再作成

3. キャッシュシステム

  • .embedding-cache.jsonによる状態管理
  • ファイルごとのメタデータ(更新日時、ハッシュ、Document ID)を保存
  • 起動時に前回の状態から差分のみ更新

4. 重複防止とID管理

  • 決定的なDocument ID生成により重複を防止
  • ファイルパスとチャンクインデックスから一意のIDを生成
  • 同じコンテンツは常に同じIDを持つ

5. 初期化の最適化

  • キャッシュ存在時は変更ファイルのみ読み込み
  • 初回起動とそれ以降で異なる処理パス
  • メモリ使用量を削減

📊 パフォーマンス改善

Before(問題点)

  • 起動時に全ファイルのEmbedding再作成
  • ファイル変更時に全Vector Store再構築
  • OpenAI APIの大量呼び出しによるコスト増大
  • 同じチャンクが重複して追加される問題

After(改善後)

  • 起動時は変更ファイルのみEmbedding作成
  • ファイル変更時は該当ファイルのみ更新
  • APIコールを最小限に削減(最大90%削減)
  • 決定的なID生成により重複を完全に防止
  • 2回目以降の起動時間を大幅に短縮(数秒以内)

🛠 セットアップ

1. Chroma DBのセットアップ

# Dockerでの起動(推奨)
docker run -d -p 8000:8000 chromadb/chroma

# または、ローカルインストール
pip install chromadb
chroma run --host localhost --port 8000

2. 環境変数の設定

# 必須
OPENAI_API_KEY=your-openai-api-key
OBSIDIAN_VAULT_PATH=/path/to/your/vault

# オプション(デフォルト: http://localhost:8000)
CHROMA_URL=http://localhost:8000

3. インストール

npm install
npm run build

4. MCPクライアントの設定

Claude Desktop の場合 (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "obsidian-vault": {
      "command": "node",
      "args": ["/path/to/obsidian-mcp-server/dist/index.js"],
      "env": {
        "OBSIDIAN_VAULT_PATH": "/path/to/your/obsidian/vault",
        "OPENAI_API_KEY": "sk-your-openai-api-key",
        "CHROMA_URL": "http://localhost:8000"
      }
    }
  }
}

📝 機能

1. search_vault - セマンティック検索

{
  "query": "プロジェクト管理",
  "max_results": 5
}
  • RAG対応でコンテキストを考慮した検索
  • 類似度スコア付きの結果返却

2. add_note - ノート追加

{
  "title": "2024年プロジェクト計画",
  "content": "## 概要\n\n今日の会話で決定した内容...",
  "tags": ["project", "2024", "planning"]
}
  • 自動的にfrontmatterとタグを付与
  • 重複ファイル名の自動処理

3. list_recent_notes - 最近のノート一覧

{
  "limit": 10
}
  • 最近更新されたノートの一覧表示

4. reset_database - データベースリセット

{
  "confirm": true
}
  • ベクターデータベースの完全リセット
  • キャッシュのクリアと全ファイルの再インデックス
  • 不整合が発生した場合の復旧用

🔧 技術スタック

  • TypeScript: 型安全な実装
  • Chroma DB: ベクターデータベース(永続化対応)
  • LangChain: Embedding・ベクター検索フレームワーク
  • OpenAI Embeddings: text-embedding-3-small
  • MCP SDK: Model Context Protocol実装
  • Chokidar: ファイル監視

📂 ディレクトリ構造

obsidian-mcp-server/
├── src/
│   └── index.ts         # メインサーバー実装
├── dist/                # ビルド出力
├── package.json
├── tsconfig.json
└── README.md

🔍 技術仕様

ベクターストア

  • 埋め込みモデル: OpenAI text-embedding-3-small
  • チャンクサイズ: 1000文字
  • オーバーラップ: 200文字
  • 永続化: Chroma DB

キャッシュシステム

  • キャッシュファイル: .embedding-cache.json
  • 保存場所: Vaultディレクトリ内
  • 内容: ファイルハッシュ、更新日時、Document ID
  • 更新タイミング: ファイル変更検出時に自動更新

Document ID管理

  • ID生成方式: MD5ハッシュ(ファイルパス + チャンクインデックス)
  • 重複防止: 決定的なID生成により同一チャンクの重複を防止
  • 一貫性: 同じファイルの同じチャンクは常に同じIDを持つ

ファイル監視

  • .obsidianなどの隠しディレクトリは除外
  • マークダウンファイル(.md)のみを対象
  • リアルタイムでファイルの変更を検知

🚨 注意事項

  • Chroma DBが起動していることを確認してください
  • 初回起動時は全ファイルのEmbedding作成のため時間がかかります
  • .embedding-cache.jsonはVaultディレクトリに自動生成されます
  • 大規模なVault(1000ファイル以上)の場合、初回起動に数分かかる場合があります
  • 2回目以降の起動は差分のみ処理するため高速です(通常数秒以内)
  • データベースの不整合が発生した場合はreset_databaseツールを使用してください

🐛 トラブルシューティング

Chroma DBに接続できない

# Dockerが起動しているか確認
docker ps | grep chroma

# 起動していない場合
docker run -d -p 8000:8000 chromadb/chroma

ベクターストアが初期化されない

  • OpenAI APIキーが正しく設定されているか確認
  • Vault内にマークダウンファイルが存在するか確認

キャッシュが効かない

  • .embedding-cache.jsonの権限を確認
  • ディスク容量が十分にあるか確認

重複エントリが発生する場合

// reset_databaseツールを使用してリセット
{
  "tool": "reset_database",
  "confirm": true
}
  • データベースとキャッシュを完全にリセットして再構築
  • 全ファイルの再インデックスが実行される

パフォーマンスの問題

  • 初回起動が遅い: 全ファイルのEmbedding作成のため正常な動作です
  • 2回目以降も遅い: キャッシュが正しく動作していない可能性
    • .embedding-cache.jsonが存在するか確認
    • ファイルの読み書き権限を確認

📄 ライセンス

MIT

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选