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.jsonpermissions.allow には Bash(qmd *) を追加済み。

なぜ重かったか

以下 Claude さんの解説。

QMD は内部で 2 つのローカル ML モデルを動かしている。

モデルサイズ用途
embeddinggemma-300M-Q8_0.gguf314 MBベクトル埋め込み生成
Qwen3-Reranker-0.6B-Q8_0.gguf610 MB検索結果のリランキング

自分の環境は専用 GPU がなく CPU 推論になるので、2 モデル合計で 924 MB がオンメモリに乗る。MCP サーバーとして常駐させていると、起動のたびにこれをロードして複数プロセスを spawn する。qmd query(MCP が使う推奨コマンド)はさらにリランキングまで走らせるので、検索 1 回に数分かかることもあった。

だめじゃん。

試して気づいた

--no-rerank オプションがあるから試してみて」と Claude さんに言われてターミナルで叩いてみたら、体感数秒で結果が返ってきた。

これでよくね?

リランカー 610 MB をスキップするだけでこんなに変わるんか。

それなら「MCP サーバーを経由しないで直接呼べばもっと速いんじゃね?」と思い、さらに MCP なしで試したら同じくさっくり返ってきた。

これでいいんだよ、これで。

MCP をやめた

やったことはシンプルで 3 ステップ。

  1. Claude CLI で QMD プラグインをアンインストール(qmd@qmd を削除)
  2. ~/.claude/settings.jsonpermissions.allowBash(qmd *) を追加
  3. CLAUDE.md に「QMD は qmd query --no-rerank で使う」と追記

Claude はツールとして mcp__qmd__query を呼ぶ代わりに、Bash ツールで qmd query --no-rerank "..." を叩くようになった。「Claude が自動で使えなくなる」というデメリットはあるが、もともと「何か検索したいときに頼む」という使い方だし、プロンプトに「過去の〜な話あったんだけど QMD で検索して」と頼むだけなので実害はない。

まとめ

--no-rerank でも BM25 とベクトル検索の組み合わせは生きているので、「あのセッションでやった話」を引っ張り出す用途では十分実用的。専用 GPU がない環境でも、運用を工夫すれば QMD は使える。

(ちょっと悔しいけどね)