Semantic search over a Markdown knowledge base, served over MCP.
groove とする本プロジェクトは 0.x を 25 回、kb-mcp という名前でリリースしてきた。この名前の
問題は 2 つあり、どちらも 1.0 が視野に入って初めて blocker になった。
同じことをするプロジェクトに同じ名前を取られている。
github.com/moikas-code/kb-mcp は自身を “cli tool and mcp server to help ai
manage a knowledge base of your code projects” と説明している。同カテゴリ、同名で、
どちらを探した利用者も両方に行き着く。
名前が製品をプロトコルに縛っている。 MCP はこのサーバの読まれ方の一方でしかない。
もう一方はブラウザ — 人が /ui を開いて自分のノートを検索する経路である。-mcp は
機械向けの半分だけを名乗り、人間向けの半分について何も言っていない。そして MCP が
廃れれば、名前だけが指す対象より長く残る。
どちらも新しい問題ではない。変わったのは、この名前がまもなく永続化することだ。 名前はラベルではなく、利用者のファイルシステムに書き込まれる実体である:
.kb-mcp.db 索引
kb-mcp.toml 設定
.kb-mcpignore 除外ファイル
.kb-mcp-eval-history.json eval の履歴
KB_MCP_CONFIG_HOME config home の override
<config_dir>/kb-mcp/<service>/ サービスの config home
1.0 の後に改名すれば、既存のインストールはすべて自分の DB も設定も登録済みサービスも 見失う。両方の名前を面倒見るなら「旧名も探す」層を 1.x の全期間にわたって抱えることに なる。0.x で、かつ明示的に beta である今なら、その層はそもそも要らない。 やるなら今しかなく、その窓は 1.0.0 で閉じる。
.kb-mcpignore は目で切れない。
長さは趣味ではなく実コストである。約 90 語を crates.io / npm / GitHub search に対して実測した。200 でも 404 でもない
応答は UNKNOWN として記録し、結論を出さないようにした。失敗した測定が
「空いている」に見えるのを防ぐためである。
kb-mcp 続投。 crates.io では空いているので、外部要因で強制された改名ではない。
上記 2 点により却下。決定打は GitHub の同カテゴリ衝突。kbase / mdsearch / localrag / kbsearch)。空いてはいるが、
mdsearch は既に事実と違い (PDF と Office に対応済)、localrag は -mcp が
プロトコルに縛るのと同じ形で流行語に縛る。libris / athenaeum / slipbox / microgroove)。slipbox と
microgroove は他プロジェクトが使用中で、microgroove は同名の GitHub リポジトリが
音楽ハードウェア領域に 2 つある。athenaeum は空きだが打てず、略せない。AkaStylus — 「アカシックレコードを読むスタイラス」。全レジストリで空き。
略された Aka が日本語で赤 / 垢、英語で “a.k.a.” に読めるため却下 (docs は英語)。GrooveSeek — 採用。レコードの溝 (groove) とディスクヘッドのシーク (seek)、
すなわち「記録の中から欲しい部分を見つける」の両半分。製品名は GrooveSeek。 crate は grooveseek、コマンドと on-disk 識別子はすべて
groove とする。
crate grooveseek crates.io / npm 空き、GitHub 衝突なし
command groove 同名の標準コマンドなし
files .groove.db groove.toml .grooveignore .groove-eval-history.json
env GROOVE_CONFIG_HOME GROOVE_TRAY_LOG GROOVE_BIN
satellite groove-svc groove-tray (crate 名 = バイナリ名。どちらも publish しない)
製品名と識別子を意図的に分けている。 ripgrep crate が rg というコマンドを
置くのと同じ形である。得られるものは 2 つ。.grooveseekignore では目で切れないものが
.grooveignore なら切れること。そして将来もし製品名を変えても、利用者のディスク上の
ものは 1 つも動かなくてよいこと — 二度目の改名は、今回がそうでないのとは逆に、
無料で済む。
MCP サーバが名乗る名前は CARGO_PKG_NAME 由来の grooveseek のままとする。
serverInfo.name はクライアントに報告される製品識別子であって、パスでも利用者が
打つ文字列でもないので、コマンドではなく製品に従う。
.kb-mcp.db を見つけず、
kb-mcp.toml を読まず、旧名で登録されたサービスも認識しない。これは緩和ではなく
受け入れる判断である。0.x は beta であり、今 互換層を足せばそれを 1.x 全体で
抱えることになる。移行手順は CHANGELOG に置く。KB_MCP_CONFIG_HOME / KB_MCP_TRAY_LOG /
KB_MCP_BIN / KBMCP_BENCH_KB に別名は用意しない。kb-mcp は本プロジェクトを指す。
ADR 0003 がファイル名に kb-mcpignore を残しているのも同じ理由 (説明対象の
ファイルは現在 .grooveignore)。alphabet-h/grooveseek へ移した。 旧 URL への clone /
fetch / push は GitHub のリダイレクトで動き続けるが、同一アカウントで kb-mcp
という名前のリポジトリを作った瞬間にリダイレクトは死ぬので、この名前は今後
使わない。GitHub は Pages の URL をリダイレクトしないため、改名は Pages を
作る前に行っている。