これです
https://www.npmjs.com/package/memory-bank-loader-mcp
{
"mcpServers": {
"memory-bank-loader": {
"command": "npx",
"args": [
"-y",
"memory-bank-loader-mcp@latest",
],
}
}
}
作った経緯
- この記事を拝見して「天才じゃん」となった
- 是非使いたいと思ったが、そのまま使える状態では公開されていなさそうだった
- MCPサーバー作成の初挑戦にちょうど良さそうな題材だと思い自作した
工夫したところ
このdescriptionのテキストを工夫した。
AI agentはこのdescriptionを読んでtoolを使用するかどうかを判断している。
最初用意していたdescriptionだとAI agentは自動ではこのtoolを使ってくれず、従来のやり方でmemory-bankを読んでしまっていた。
「このtool使って」と指示すれば使ってくれるのだが、毎回それだとめんどくさい...
Instructionsとかrulesにそこまで書いておけば毎回指示しなくて済むのだろうが、そんなこと書きたくないし...
これについては直接AI agentに「どうしてタスク開始時にmemory-bankを読むときにこのtoolを使わなかったんですか?」みたいなことを聞いて試行錯誤した。
(AI agentはこちらの記事を参考にギャル化されている ギャルとのペアプロが想像以上に楽しかった(VSCodeのカスタム指示))
このdescriptionは例えばclineでは直接システムプロンプトに組み込まれるので、contextを抑えるためにあまり文面が長くない方が良いなとは思いながら作った。
https://github.com/cline/cline/blob/8cd50e7/src/core/prompts/system.ts#L410
(cursorでMCPサーバーをいくつか入れているとtoolが合計で40個までしか登録できないというメッセージが出てくるが、context節約のための制限なのかなと思った。)
課題
- MCPにはresourcesという仕様があるのでtoolじゃなくてこれでも表現できそうな気もしたんだけど、上手く動かなかったので諦めた
- 手元のCline, Roo Codeでgemini 2.5とかで使う分にはほぼこのtool使ってくれているのだが、cursorだとどうも発動率が悪い感じはしている
感想
AI agentにやってほしいことを事前に見越して、あらかじめそれ用のtoolを用意しておいて使ってもらうという挙動は結構面白いなと思った。
今回はmemory-bankの読み込みがそれだったが、他にも活用の道がいろいろあるように感じた。
実質 MCP を作業フローの Custom Instructions として活用したような気がしてます。こういう手法もアリかも
開発のきっかけとなったヘブンさんの記事にこのような言及があったが、同じことを感じた。
例えばgit commit時の文面のフォーマットを指定したい場合、今だとInstructionsとかrulesに記述すると思う。代わりにリポジトリ専用のローカルなMCPサーバー等を作成して、そのフォーマットを実現するためだけの git-commit
toolを作るのもナシではないなと思った。
そうするとフォーマットの詳細はtoolの実装の中に隠蔽することができ、AI agentに対しては「git commit時にはこのtool使ってね」という指示だけしておけば良くなる。
具体的なメリットとして、Instructionsとかrulesにフォーマットの詳細を書かなくてよくなりcontext windowを節約できる。
他の案だと開発環境のセットアップとかもできそう。AI agentに動作確認させるために開発サーバーの起動方法とかをrulesに書いたりしていた場合、そういった指示もtoolに移行して隠蔽することができる。
もっと抽象的な話だとMCPサーバーである必要もあんまりなくて、上記のようなことを実現するscriptを書いておいて、「git commitする場合は./scripts/git-commit.sh
を使ってください。引数はxxxです。」みたいな指示を書いておけば良い。
今回作ったMCPサーバーもこの方式に置き換えできそう。
なのでこういう用途ならMCPサーバーじゃなくてscript書く方式で全然いいじゃんという気はしつつ、どれくらい安定してscript呼び出ししてくれるのかはちょっと気になるところ。
clineのシステムプロンプトを眺めているとMCPサーバーにはそれなりに手厚い説明が用意されており、script方式に比べると特権的な扱いを受ける可能性はある。
MCPサーバーのtoolとして提供していると安定して呼び出ししてくれるけど、script書いて指示するだけだとあんまり指示守ってくれないみたいなことは起きるのかもしれない。