Claude Code Skills × 自己完結スクリプト — MCP/CLI の先にある「トークン効率」設計
gunta85 さんが、Claude Code の Skill において自己完結スクリプト(Self-contained Scripts)の活用を推奨するポストを投稿しています。
Skill は MCP でも CLI ツールでもなく、Self-contained Script がおすすめ。 外部ライブラリの依存を 1 ファイル内で宣言でき、MCP に比べてトークン消費を劇的に削減できる。
https://x.com/gunta85/status/1929915853508456604
この発言の背景には、mizchi さんによる「MCP はただの CLI/API ラッパーに過ぎない」という指摘もあります。MCP のツール定義だけで数万トークンを消費する問題が顕在化するなか、Agent Skills 仕様が提供する「自己完結スクリプト」は、より効率的な選択肢として注目されています。
Agent Skills とは何か
Agent Skills は、AI エージェントにドメイン知識と実行能力を付与する仕様です。agentskills.io で公開されており、Claude Code をはじめとする複数のエージェントが対応しています。
ディレクトリ構成
.claude/skills/my-skill/
SKILL.md # スキルの説明と使用手順
references/ # 参考ドキュメント(必要時のみ読込)
scripts/ # 自己完結スクリプト
templates/ # テンプレートファイル
プログレッシブ・ディスクロージャ
Agent Skills の設計思想の核心は「段階的な情報開示」です。
| 段階 | 内容 | トークン目安 |
|---|---|---|
| メタデータ | frontmatter(名前・説明・引数) | ~100 トークン |
| 指示文 | SKILL.md 本文 | <5,000 トークン |
| リソース | references/ 配下のファイル | 必要時のみ |
MCP サーバーがツール定義だけで大量のトークンを消費するのに対し、Skills は必要な情報を段階的に読み込むため、コンテキストウィンドウを効率的に使えます。
自己完結スクリプトの仕組み
scripts/ ディレクトリに配置するスクリプトは、依存関係をファイル内で宣言します。外部パッケージマネージャの事前セットアップが不要で、エージェントが即座に実行できます。
Python(PEP 723: Inline Script Metadata)
| |
PEP 723 により、Python スクリプトが依存パッケージを自身の中で宣言できます。uv run --script で自動的に仮想環境を作成し、依存をインストールして実行します。
Bun(自動インストール)
| |
Bun はインポート文を検出すると自動的にパッケージをインストールします。package.json も node_modules も不要です。
Deno(npm: 指定子)
| |
Deno は npm: プレフィックスで npm パッケージを直接参照できます。権限モデルにより --allow-net などを明示的に指定します。
ワンショットコマンド
スクリプトファイルを作成せず、既存ツールを直接呼び出す方法もあります。
| |
uvx、npx、bunx はそれぞれ一時的な環境でツールを実行し、グローバルインストールを汚しません。
MCP のトークン消費問題
MCP(Model Context Protocol)が抱える根本的な問題は、ツール定義のトークンコストです。
数字で見る問題
| 構成 | トークン消費 |
|---|---|
| GitHub MCP サーバー(93 ツール) | ~55,000 トークン(定義だけ) |
| MCP サーバー 3 つスタック | 150,000+ トークン(クエリ前) |
| CLI 代替 | MCP 比で 35 分の 1 に削減 |
93 個のツール定義がコンテキストに常駐するため、実際の質問を処理する前にウィンドウの大部分を消費します。
mizchi さんの指摘
mizchi さんは「MCP はただの CLI/API のラッパー」と指摘し、以下の問題を提起しています。
- MCP サーバーの多くは、既存の CLI コマンドや REST API をラップしているだけ
- ツール定義のオーバーヘッドが大きく、シンプルなタスクには過剰
- エージェントが直接 CLI を呼べるなら、MCP レイヤーは不要な場合が多い
Skills vs MCP vs CLI の使い分け
3 つのアプローチは排他的ではなく、タスクの性質に応じて使い分けます。
| 観点 | Skills(スクリプト) | MCP | CLI 直接呼出 |
|---|---|---|---|
| トークン効率 | 高い(段階的読込) | 低い(全定義常駐) | 高い |
| ドメイン知識 | SKILL.md で付与 | ツール説明に依存 | なし |
| 外部データ接続 | スクリプト内で実装 | プロトコル標準化 | 個別実装 |
| セットアップ | ファイル配置のみ | サーバー起動が必要 | PATH に存在 |
| 再利用性 | リポジトリ共有可能 | サーバー単位で共有 | 環境依存 |
Skills が適するケース:
- プロジェクト固有のワークフロー自動化
- チーム内で共有するコード品質チェック
- ドメイン知識が必要な定型作業(例: デプロイ手順、レポート生成)
MCP が適するケース:
- 外部サービスとのリアルタイム連携(DB、API)
- 複数のエージェント間でのデータ共有
- 認証が必要な外部システムへのアクセス
CLI が適するケース:
- 既存ツールの単純な呼び出し(git, docker, aws)
- 一度きりのアドホック操作
エージェント向けスクリプト設計のベストプラクティス
agentskills.io の仕様では、スクリプトを「エージェントが実行する前提」で設計することを推奨しています。
5 つの設計原則
- 対話的プロンプトを排除 —
input()やreadlineを使わず、全てコマンドライン引数で受け取る --helpを実装 — エージェントがスクリプトの使い方を自己発見できるようにする- 構造化出力 — JSON で結果を返し、エージェントがパースしやすくする
- 冪等性 — 同じ引数で複数回実行しても同じ結果になる設計
- 終了コード — 成功は
0、失敗は非ゼロで、エージェントがエラーを検知できる
| |
実践: Skills スクリプトの導入手順
1. ディレクトリ作成
| |
2. SKILL.md 作成
| |
3. スクリプト配置と権限付与
| |
これだけで、エージェントは /api-health-check のようにスキルを呼び出し、スクリプトを実行できます。
まとめ
- 自己完結スクリプトは、依存関係をファイル内で宣言し、パッケージマネージャの事前設定なしで実行できる
- PEP 723(Python)、Bun 自動インストール、Deno npm: 指定子が、主要な言語でインライン依存宣言を実現している
- MCP のトークン消費問題は深刻で、93 ツールの GitHub サーバーだけで ~55,000 トークンを消費する
- Skills のプログレッシブ・ディスクロージャ設計により、メタデータ ~100 トークンから段階的に情報を読み込み、コンテキストを節約できる
- CLI 直接呼出は MCP 比 35 分の 1 のトークン消費で、単純な操作には最適解
- エージェント向け設計原則(非対話・–help・JSON 出力・冪等性・終了コード)を守ることで、スクリプトの信頼性が向上する
- Skills / MCP / CLI は排他ではなく補完関係にあり、トークン効率・外部連携・ドメイン知識の必要性で使い分ける