自戒、点検、内省

終わらない反省会をしよう

続・自分のClaudeに提供する"知恵袋" を作っています

retrospective.hatenadiary.com

こちらのアップデート。

ruby-knowledge-db と chiebukuro-mcp を切り離した

前回の時点では、「DBを作る側」と「DBを読む側(MCP サーバー)」が同じリポジトリに入れていました。

整理した結果、「作る責務」と「読む責務」を分けました。シンプルになりました。

読む時の環境依存の設定を dotfiles に追い出した

chiebukuro-mcp 自体には、どの DB を使うかという情報をいっさい含めないようにしました。

設定は ~/chiebukuro-mcp/chiebukuro.json という固定パスに置きます。

複数macで同期する用途です。

ruby-knowledge-db/       ← DBを作る側(オーケストレーター)
chiebukuro-mcp/          ← DBを読む側(MCP サーバー)
~/chiebukuro-mcp/        ← 環境依存設定(dotfiles で管理)
  chiebukuro.json

シンプルになりました。

GitHub - bash0C7/chiebukuro-mcp · GitHub

sqliteのDBファイル群を登録して、MCPサーバーとしてClaude側に提供するというものです。

複数 DB

chiebukuro-mcp の設計で一番気に入っているのが、複数の SQLite DB を chiebukuro.json に並べるだけで、DB ごとのツールが自動で生やす仕組みです。

シンプルに起動時に設定ファイルから動的に登録します。

@databases.each do |db_name, db_config|
  # SELECT 専用クエリツールを登録
  tools << MCP::Tool.define(name: "chiebukuro_query_#{db_name}", ...)

  # semantic_search 設定があればベクトル検索ツールも登録
  tools << MCP::Tool.define(name: "chiebukuro_semantic_search_#{db_name}", ...) if sem_cfg
end

DB のキー名がそのままツール名のサフィックスになります。

何がうれしいか

たとえばいまのわたしの chiebukuro.json にはこんな DB が並んでいます。

{
  "databases": {
    "ruby_knowledge": { ... },
    "long_term_memory": { ... },
    "apple_health":    { ... }
  }
}

サーバーを起動すると Claude からは次のツールが見えます。

ツール名 役割
chiebukuro_query_ruby_knowledge PicoRuby / CRuby の仕様を SQL で引く
chiebukuro_semantic_search_ruby_knowledge 自然言語でRuby知識を検索
chiebukuro_query_long_term_memory わたしの長期記憶を SQL で引く
chiebukuro_semantic_search_long_term_memory 自然言語で長期記憶を検索
chiebukuro_query_apple_health Apple Health のデータを SQL で引く

どのデータを Claude に渡すかは chiebukuro.json に DB を追加するだけという簡易なものです。

また、MCP リソースとして schema://ruby_knowledge のようなスキーマ情報も DB ごとに自動登録されます。Claude はクエリを書く前にスキーマを参照できるので、テーブル構造を別途教える必要がありません。

このペースでいくといろんなSQLiteのDBを作ることになるので、それらをシュッと組み込みたかったという理由です。