作業報告書 20260206-0000-案件
概要
Electron + Bun をベースにした常駐型 MCP サーバーを構築し、SQLite + sqlite-vec でベクトル検索を提供。llama.cpp を利用した埋め込み生成とテキスト生成を統合。
実施内容
- Electron 常駐アプリ化(トレイ常駐)
- MCP SSE サーバー構築
- sqlite-vec + better-sqlite3 導入
- knex 導入(items テーブル操作)
- llama.cpp 連携(埋め込み/生成)
- ツール分割(db / handlers / tools / client)
- ドキュメント整備(概要/ER/データフロー/OpenAPI)
図(データフロー)
graph TD
A[Client] -->|SSE| B[Express /sse]
B --> C[MCP Server]
C --> D{Handlers}
D -->|embedding| E[llama.cpp]
D -->|add_item| F[knex: items]
D -->|add_item| G[sqlite-vec: vec_items]
D -->|search| G
G --> H[Results]
F --> H
H --> C
追加・更新ファイル
- document/overview.md
- document/openapi.yaml
- src/db.js
- src/llama-client.js
- src/mcp-tools.js
- src/mcp-handlers.js
- src/mcp-server.js
- src/main.js
- src/index.html
- .env
- mcp.json.sample
- .vscode/launch.json
- .vscode/tasks.json
起動手順
bun start
環境変数(例)
LLAMA_CPP_BASE_URL=http://127.0.0.1:8080
LLAMA_CPP_EMBEDDING_MODEL=
LLAMA_CPP_MODEL=
VEC_DIM=3
備考
- REST API は OpenAPI の雛形を作成済み。現状は MCP 経由のツール呼び出しが主。
- アイコンは
src/icon.ico / src/icon.png に配置。
追加作業(テストスイート完成)
実施内容
- 包括的なテストスイート作成(test/ フォルダ)
- 5つのテストモジュール、35テスト、全て成功
- bun:test フレームワーク採用
- 139個の expect() 呼び出しで検証
テストモジュール
-
db.test.js (5テスト)
- データベース初期化・スキーマ検証
- アイテム挿入・取得
- タイムスタンプデフォルト値
-
mcp-tools.test.js (11テスト)
- 5つの MCP ツール定義確認
- スキーマ・入力パラメータ検証
- ベクトル次元チェック(3次元)
-
mcp-handlers.test.js (6テスト)
- エンベッディング次元検証
- 検索結果フィールド完全性
- タイムスタンプ保存・操作
-
llama-client.test.js (9テスト)
- llamaEmbedding() API
- llamaCompletion() API
- エラーハンドリング
- 環境変数使用確認
-
integration.test.js (4テスト)
- 完全なアイテムライフサイクル
- 複数アイテム・メタデータ処理
- データ完全性・並行処理シミュレーション
テスト実行結果
35 pass
0 fail
139 expect() calls
Ran 35 tests across 5 files. [238.00ms]
テスト実行コマンド
bun test # 全テスト
bun test test/db.test.js # DB テストのみ
npm run test:watch # ウォッチモード
npm run test:db # db テスト
npm run test:llama # llama テスト
npm run test:tools # tools テスト
npm run test:handlers # handlers テスト
npm run test:integration # integration テスト
新規ファイル
- test/setup.js - テスト用ユーティリティ
- test/db.test.js - DB テスト
- test/mcp-tools.test.js - ツール定義テスト
- test/mcp-handlers.test.js - ハンドラーテスト
- test/llama-client.test.js - LLama クライアントテスト
- test/integration.test.js - 統合テスト
- test/README.md - テスト概要ドキュメント
- package.json: test スクリプト追加 (7種類)
技術的工夫
- bun:sqlite を使用(テスト環境では better-sqlite3 の代わり)
- 各テストで独立したテーブル・環境設定
- DELETE FROM items で前のテストデータをクリア
- エラーハンドリング(ロックファイルの許容など)
- モック fetch を使用した LLama API テスト