このプロジェクトは、Electron で常駐する MCP サーバーを立ち上げ、SQLite + sqlite-vec を使ってベクトル検索を提供します。MCP への接続は SSE(Server-Sent Events)で行い、埋め込み生成とテキスト生成は llama.cpp を利用します。
better-sqlite3 + sqlite-vecknex(items テーブルの操作に使用)llama.cpp(埋め込み生成・テキスト生成)src/db.js: DB 接続・初期化src/mcp-tools.js: MCP ツール定義src/mcp-handlers.js: ツールの処理src/mcp-server.js: SSE と MCP の接続src/main.js: Electron 起動と常駐処理src/llama-client.js: llama.cpp API クライアントadd_item_text: テキストから埋め込みを生成して保存add_item: ベクトルを直接指定して保存search_text: テキストから埋め込みを生成して検索search_vector: ベクトルで検索llm_generate: llama.cpp でテキスト生成graph TD
A[MCP Client] -->|SSE| B[Express /sse]
B --> C[MCP Server]
C --> D{Tool Handler}
D -->|embedding| L[llama.cpp]
D -->|add_item| E[knex: items]
D -->|add_item| F[sqlite-vec: vec_items]
D -->|search_vector| F
F --> G[Result]
E --> G
G --> C
C --> B
B --> A
erDiagram
items {
INTEGER id PK
TEXT content
TEXT path
TEXT created_at
TEXT updated_at
}
vec_items {
INTEGER id PK
FLOAT embedding[VEC_DIM]
}
items ||--|| vec_items : "id = id"
.env に以下を設定します。
LLAMA_CPP_BASE_URL=http://127.0.0.1:8080 LLAMA_CPP_EMBEDDING_MODEL= LLAMA_CPP_MODEL= VEC_DIM=3
bun start
/sse
/messages
注:
/messagesのペイロードは MCP 仕様に準拠します。
現在は MCP 経由のツール呼び出しが主です。REST API を追加する場合は以下のような構成になります。
POST /api/items
{ "content": "..." }POST /api/search
{ "content": "..." }mcp.json などに以下を設定します。
{
"mcpServers": {
"sqlite-vector-electron": {
"url": "http://localhost:3000/sse"
}
}
}