QMD の MCP サーバーをやめて Bash で直接叩くようにした
TL;DR — QMD の MCP サーバーが重すぎたので、プラグインを削除して
qmd query --no-rerankを Bash で直接呼ぶ運用に切り替えた。リランカーなしでも BM25 + ベクトル検索の組み合わせで十分実用的。
以前の記事で QMD を MCP サーバーとして導入した話を書いた。
その後、重さが気になり過ぎて運用を見直した話。
いや、本気で重かったのよ。全然結果が返ってこない。
なにこれとか思って調べたら GPU なしだとこんなもんだろうとのこと。
そうですかぁ…
今の運用
ということでどうしたかというと、Claude さんが過去セッションを検索するときは、MCP ツールではなく Bash コマンドを直接叩くようになった。
qmd query --no-rerank "調べたいキーワード"
CLAUDE.md に「QMD は qmd query --no-rerank で使う」と書いてあるので、Claude さんが自動でこの形式で呼ぶ。settings.json の permissions.allow には Bash(qmd *) を追加済み。
なぜ重かったか
以下 Claude さんの解説。
QMD は内部で 2 つのローカル ML モデルを動かしている。
| モデル | サイズ | 用途 |
|---|---|---|
| embeddinggemma-300M-Q8_0.gguf | 314 MB | ベクトル埋め込み生成 |
| Qwen3-Reranker-0.6B-Q8_0.gguf | 610 MB | 検索結果のリランキング |
自分の環境は専用 GPU がなく CPU 推論になるので、2 モデル合計で 924 MB がオンメモリに乗る。MCP サーバーとして常駐させていると、起動のたびにこれをロードして複数プロセスを spawn する。qmd query(MCP が使う推奨コマンド)はさらにリランキングまで走らせるので、検索 1 回に数分かかることもあった。
だめじゃん。
試して気づいた
「--no-rerank オプションがあるから試してみて」と Claude さんに言われてターミナルで叩いてみたら、体感数秒で結果が返ってきた。
これでよくね?
リランカー 610 MB をスキップするだけでこんなに変わるんか。
それなら「MCP サーバーを経由しないで直接呼べばもっと速いんじゃね?」と思い、さらに MCP なしで試したら同じくさっくり返ってきた。
これでいいんだよ、これで。
MCP をやめた
やったことはシンプルで 3 ステップ。
- Claude CLI で QMD プラグインをアンインストール(
qmd@qmdを削除) ~/.claude/settings.jsonのpermissions.allowにBash(qmd *)を追加- CLAUDE.md に「QMD は
qmd query --no-rerankで使う」と追記
Claude はツールとして mcp__qmd__query を呼ぶ代わりに、Bash ツールで qmd query --no-rerank "..." を叩くようになった。「Claude が自動で使えなくなる」というデメリットはあるが、もともと「何か検索したいときに頼む」という使い方だし、プロンプトに「過去の〜な話あったんだけど QMD で検索して」と頼むだけなので実害はない。
まとめ
--no-rerank でも BM25 とベクトル検索の組み合わせは生きているので、「あのセッションでやった話」を引っ張り出す用途では十分実用的。専用 GPU がない環境でも、運用を工夫すれば QMD は使える。
(ちょっと悔しいけどね)