🚀 Bun と Electron を使用した常駐型 MCP サーバー。SQLite + sqlite-vec でベクトル検索機能を提供。
| ツール名 | 説明 | 入力 |
|---|---|---|
add_item_text |
テキストから埋め込みを自動生成して保存 | content: string, path?: string |
add_item |
ベクトルを直接指定して保存 | content: string, vector: number[] |
search_text |
テキストから埋め込みを生成して検索 | content: string |
search_vector |
ベクトルで直接検索 | vector: number[] |
llm_generate |
llama.cpp でテキスト生成 | prompt: string, options?: object |
bun 1.3.8 以上git clone <repository-url> cd sqlitevector bun install
.env ファイルを作成(またはコピー):
# 既存の .env をコピー cp .env.example .env # 存在する場合 # または手動作成 cat > .env << 'EOF' LLAMA_CPP_BASE_URL=http://127.0.0.1:8080 LLAMA_CPP_EMBEDDING_MODEL=nomic-embed-text LLAMA_CPP_MODEL=mistral VEC_DIM=3 MCP_PORT=3000 EOF
# Electron アプリとして起動 bun start # ポート指定で起動 MCP_PORT=3001 bun start
アプリケーション起動後、システムトレイに SQLite Vector MCP アイコンが表示されます。
| 変数 | デフォルト | 説明 |
|---|---|---|
MCP_PORT |
3000 |
MCP SSE サーバーのポート |
LLAMA_CPP_BASE_URL |
http://127.0.0.1:8080 |
llama.cpp サーバー URL |
LLAMA_CPP_EMBEDDING_MODEL |
- | 埋め込み用モデル名(例: nomic-embed-text) |
LLAMA_CPP_MODEL |
- | テキスト生成用モデル名(例: mistral) |
VEC_DIM |
3 |
ベクトル次元数(埋め込みモデルと一致させる) |
mcp.json または Claude Desktop など MCP クライアントの設定ファイルに:
{
"mcpServers": {
"sqlite-vector-electron": {
"url": "http://localhost:3000/sse"
}
}
}
// テキストから自動的に埋め込みを生成して保存
await callTool("add_item_text", {
content: "This is a sample document",
path: "/docs/sample.txt"
});
// ベクトルで検索
await callTool("search_vector", {
vector: [0.1, 0.2, 0.3]
});
// テキストで検索(自動的に埋め込みを生成)
await callTool("search_text", {
content: "Similar documents"
});
// llama.cpp でテキスト生成
await callTool("llm_generate", {
prompt: "What is machine learning?",
options: { temperature: 0.7, n_predict: 128 }
});
bun test
bun test test/db.test.js # DB テスト(5テスト) bun test test/mcp-tools.test.js # ツール定義テスト(11テスト) bun test test/mcp-handlers.test.js # ハンドラーテスト(6テスト) bun test test/llama-client.test.js # LLama テスト(9テスト) bun test test/integration.test.js # 統合テスト(4テスト)
bun run test:watch
テスト結果: 35 テスト全て成功 (139 expect calls)
sqlitevector/ ├── src/ │ ├── main.js # Electron 起動・常駐処理 │ ├── mcp-server.js # MCP SSE サーバー │ ├── mcp-tools.js # ツール定義 │ ├── mcp-handlers.js # ツール実装 │ ├── db.js # DB 接続・初期化 │ ├── llama-client.js # llama.cpp API │ └── index.html # GUI ウィンドウ ├── test/ │ ├── setup.js # テスト用ユーティリティ │ ├── db.test.js # DB テスト │ ├── mcp-tools.test.js # ツール定義テスト │ ├── mcp-handlers.test.js │ ├── llama-client.test.js │ ├── integration.test.js │ └── README.md # テスト詳細ドキュメント ├── document/ │ ├── overview.md # アーキテクチャ解説 │ └── openapi.yaml # REST API 仕様 ├── journals/ │ └── 20260206-0000-案件.md # 作業報告書 ├── .env # 環境変数 ├── .gitignore ├── package.json └── README.md (this file)
graph TD
A[MCP Client] -->|SSE| B[Express /sse]
B --> C[MCP Server]
C --> D{Tool Handler}
D -->|embedding| L[llama.cpp API]
D -->|insert| E[knex: items]
D -->|insert| F[sqlite-vec: vec_items]
D -->|search| F
F --> G[Results]
E --> G
G --> C
C --> B
B --> A
items table: ├── id (PRIMARY KEY) ├── content (TEXT) - アイテムテキスト ├── path (TEXT) - ファイルパス参照 ├── created_at (TIMESTAMP) └── updated_at (TIMESTAMP) vec_items table (sqlite-vec): ├── id (PRIMARY KEY) └── embedding (float[VEC_DIM]) - ベクトル
better-sqlite3 compilation errorelectron-rebuild
netstat -an | grep 3000(Windows: netstat -ano | findstr "3000")mcp.json の URL を確認: http://localhost:3000/sse.env の MCP_PORT を確認# llama.cpp サーバーが起動しているか確認 curl http://127.0.0.1:8080/health # .env の LLAMA_CPP_BASE_URL を確認
# DB ファイルをクリア rm -f vector.db test-*.db # テストを再実行 bun test
src/mcp-tools.js で定義src/mcp-handlers.js で実装test/ でテスト作成test/ でテスト作成ベクトル検索は 必ず db.prepare() + raw SQL で実装してください。詳細は document/overview.md を参照。
ISC License - 詳細は LICENSE を参照
プルリクエストを歓迎します!