MCPを使って何かやらせるのではなく、CLIツールを使わせる、というアイデアがめちゃくちゃいいなと思った。
いいところ
- CLIツールをインストールすれば何でもできる
- (例えばghコマンドのように)ユーザ側で認証がしてあれば、ユーザの権限でCLIツールが利用できる
- ツールの使い方をユーザが知っていなくてもなんとかなりがち
わるいところ
- ユーザの権限でCLIツールが使われるので、どこかにおいて自動実行、はちょっと危険な匂い
- CLIツールを準備しないといけない
どうやってやるのか
例えばこういう感じでやると仕上がってしまう。
bqコマンドを使って、20:00〜20:30にリクエストされたユーザのうち、xx機能を使ったユーザを抽出して、result.mdにまとめてください。
- GCPプロジェクト: xxxx
- テーブルスキーマ
- 現在のリポジトリの schema/bq.sql を参照
チームで使うならスキル化してリポジトリに置けば優勝する。claude code君にちゃんと書いてもらったほうがうまく動くと思うが、めちゃくちゃシンプルにはこういう感じ。
---
name: bq-data-analyze
description: Analyzing data using bq command
---
bqコマンドを使ってデータ分析をします。結果をresult.mdにまとめてください。
- GCPプロジェクト: xxxx
- テーブルスキーマ
- 現在のリポジトリの schema/bq.sql を参照
どのようなデータを分析するかはユーザの入力に従ってください。
ghも、gcloudも、kubectlも、terraformも、なんでも使える。
明示的なものはMakefile等でタスクをもりもり書くのがいいと思うが、ある程度、LLM解釈で柔軟にやりたいようなものは、claude skillsにしちゃうのが良さそうだな〜と思った。
claude code以外ではどうしたらいいんだろうか
こういう感じでおよそうまく動くんじゃないだろうか。
ワークフローは .claude/skills に定義されています。
SKILL.mdの先頭を読み取って適切に利用してください。
.cursor/rulesでも同じような感じの気がする。 AGENTS.mdもそうなんだけど、統一されたフォーマットでよしなになるといいなあ。
発展: APIコールを任せる
HTTPなAPIが提供されていれば、そのcurlをAIに任せる。
こうやってデータを取得してください:
curl -d '{...}' https://example.com/
あるいはその呼び出し方をシェルスクリプトに書き出して、スクリプトを読んでください、でもよい。
いやいやそれMCPでいいんじゃない?
そうだね〜〜〜〜〜。明確なメリットデメリットはあんまり想像がつかない。手元で使う分には。
- インストール、セットアップ
- MCPもCLIツールも、どちらもリポジトリに同梱できるし、makeとかで手順をまとめることもできる
- リポジトリ内や組織の標準化としてCLIツールの設定が強制されていれば、既存の資源が再利用できて嬉しい
- 認証
- MCPはだいたいOAuth?
- CLIツールはツールそれぞれな感じ。ログインしてセッションが残るタイプもあれば、トークンを登録するタイプもある
- コンテキスト消費
- MCPは使い方などが書かれる分だけ使っている気がする
- CLIツールがモデルが知識を持っている場合があるので節約出来る可能性がある
- 例: 「bq使って」
- ツールのアップデートにより使い方が変わっている場合はうまく使ってくれないかもしれない
- –helpとかで提供されていれば勝手に読んでくれる印象はある
- 動作速度
- 現代においてはAPI呼び出しがボトルネックになるだろうのでMCPでもCLIツールでも大差ないと思う
- できること
- MCPもだいたい出来ることは同じような気がする
- 安全性
- MCPは関数呼び出しなので、インジェクションされるようなリスクは少なさそう
- CLIツール呼び出し、例えば引数として使いたいものを
foo-bar; rm -rf ~/とか食らう可能性ある
- 結果の整理
-
MCPだと構造化されて返ってきて処理しやすいんじゃないかな
-
CLIツールはそのツールの結果による気はする。十分に流行っていてAIが学習しているツールであれば大差ないと思う
- JSONやYAMLで書き出せればなおよし
-