mcpField
T
tool-design

tool-design

github.com/sickn33エージェントワークフロー48.8k250 回インストール今日更新
リポジトリ

tool-design について

tool-designは、エージェントが使うツールの設計と評価を支援するスキルです。ツールの説明、統合、応答やエラーの設計に加え、アーキテクチャを簡素化する判断も扱います。

主な機能

  1. 01ツールとエージェントの連携設計
  2. 02ツール統合の原則
  3. 03アーキテクチャ簡素化の指針
  4. 04説明とスキーマの規約
  5. 05応答とエラーの設計
  6. 06ツール群の評価

活用シーン

  1. 01新しいエージェント向けツールの設計
  2. 02ツールの誤用や失敗の診断
  3. 03ツール群の機能重複の削減

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill tool-design

インストール後、Claude Code で/tool-designを入力して読み込まれたか確認します。

詳細

このスキルを使用する場面

エージェントが効果的に使用できるツールを構築します。これにはアーキテクチャの削減パターンも含まれます。

エージェントが効果的に使用できるツールを扱う場合、アーキテクチャの削減パターンを含めて、このスキルを使用してください。

エージェントのためのツール設計

ツールは、エージェントが世界とやり取りするための主要な仕組みです。ツールは、決定論的なシステムと非決定論的なエージェントの間のコントラクトを定義します。開発者向けに設計された従来のソフトウェア API とは異なり、ツール API は、意図を推論し、パラメータの値を推測し、自然言語のリクエストから呼び出しを生成する言語モデル向けに設計する必要があります。不適切なツール設計は、どのようなプロンプトエンジニアリングでも修正できない失敗モードを生み出します。効果的なツール設計は、エージェントがツールをどのように認識し、使用するかを考慮した特定の原則に従います。

使用する場面

次の場合にこのスキルを有効化してください:

  • エージェントシステム用の新しいツールを作成する場合
  • ツール関連の失敗や誤用をデバッグする場合
  • エージェントのパフォーマンスを向上させるために既存のツールセットを最適化する場合
  • ツール API をゼロから設計する場合
  • エージェント統合のためにサードパーティ製ツールを評価する場合
  • コードベース全体でツールの規約を標準化する場合

中核となる概念

ツールは、決定論的なシステムと非決定論的なエージェントの間のコントラクトです。統合の原則とは、人間のエンジニアが特定の状況でどのツールを使用すべきかを明確に言えないのであれば、エージェントがそれ以上のことをできると期待してはならないというものです。効果的なツールの説明は、エージェントの動作を形作るプロンプトエンジニアリングです。

主要な原則には、何を、いつ、何が返るかに答える明確な説明、完全性とトークン効率のバランスを取る応答形式、回復を可能にするエラーメッセージ、認知負荷を軽減する一貫した規約が含まれます。

統合の原則

単一の包括的なツール 統合の原則とは、人間のエンジニアが特定の状況でどのツールを使うべきか明確に判断できないのであれば、エージェントにそれ以上の判断を期待できない、というものです。そのため、複数の用途を絞ったツールよりも、単一の包括的なツールを優先します。

list_users、list_events、create_event を実装する代わりに、空き状況を確認して予定を設定する schedule_event を実装します。包括的なツールは、エージェントに複数回の呼び出しを連鎖させるのではなく、ワークフロー全体を内部で処理します。

統合が有効な理由 エージェントが使えるコンテキストと注意力には限りがあります。ツール群の各ツールは、ツール選択の段階で注意を奪い合います。また、各ツールの説明はコンテキストの予算を消費するトークンを追加します。機能が重複すると、どのツールを使うべきかが曖昧になります。

統合すると、重複する説明をなくしてトークン消費を削減できます。各ワークフローを1つのツールでカバーすることで曖昧さを解消できます。実質的なツールセットを縮小することで、ツール選択の複雑さも軽減できます。

統合すべきでない場合 統合が常に正しいとは限りません。動作が根本的に異なるツールは、分けておくべきです。異なるコンテキストで使うツールは、分離することで効果が高まります。個別に呼び出す可能性のあるツールを、人為的にまとめるべきではありません。

アーキテクチャの簡素化

統合の原則を論理的に突き詰めると、アーキテクチャの簡素化につながります。つまり、ほとんどの専門的なツールを、基本的で汎用的な機能に置き換えます。実運用のエビデンスからは、このアプローチが高度なマルチツールアーキテクチャを上回る場合があることが示されています。

ファイルシステムエージェントのパターン 信頼された隔離環境では、スコープを限定したファイルシステム/コマンドツールで、一部のカスタム探索ツールを置き換えられます。この方法では、スキーマレベルの制約を、より広い実行権限と引き換えます。脅威モデルに照らして評価する必要があります。エージェントは標準的な Unix ユーティリティ(grep、cat、find、ls)を使って、システムを探索し、理解し、操作します。

これが機能する理由は次のとおりです。

  1. ファイルシステムは、モデルが深く理解している実績ある抽象化です
  2. 標準的なツールは、予測可能で十分に文書化された動作をします
  3. あらかじめ定義されたワークフローに制約されるのではなく、エージェントは基本機能を柔軟に組み合わせられます
  4. ファイル内の優れたドキュメントによって、要約ツールが不要になります

簡素化が複雑さを上回る場合 簡素化が有効なのは、次のような場合です。

  • データ層が十分に文書化され、一貫した構造になっている
  • モデルに、複雑さをうまく扱えるだけの推論能力がある
  • 専門的なツールがモデルの能力を引き出すのではなく、制約していた
  • 成果の改善よりも、足場となる仕組みの保守に多くの時間を費やしている

簡素化がうまくいかないのは、次のような場合です。

  • 基盤となるデータが整理されておらず、一貫性に欠ける、または十分に文書化されていない
  • モデルが持たない専門知識を必要とする領域である
  • 安全上の制約により、エージェントが実行できる操作を制限する必要がある
  • 操作が本当に複雑で、構造化されたワークフローが有効である

推論の柔軟性とセキュリティ境界を切り分ける よくあるアンチパターンは、複雑さからモデルを「保護」するためにツールを構築することです。コンテキストを事前にフィルタリングしたり、選択肢を制限したり、検証ロジックでやり取りをラップしたりします。使いやすさを損なう要因は評価しつつも、モデルの品質とは独立して、サーバー側の認可、検証、サンドボックス化、クォータ、データ境界を維持してください。

問うべきなのは、ツールが新たな機能を実現しているのか、それともモデルが自力で扱える推論を制約しているのか、ということです。

将来のモデルに備える モデルはツールが追いつけないほど速く進化します。今日のモデルに最適化されたアーキテクチャは、明日のモデルには制約が強すぎる可能性があります。現在の限界を固定化する高度なアーキテクチャではなく、モデルの改善を活用できる最小限のアーキテクチャを構築してください。

実運用のエビデンスについては、「アーキテクチャの簡素化の事例研究」を参照してください。

ツールの説明の設計

説明の構成 効果的なツールの説明では、次の4つの質問に答えます。

このツールは何をしますか?機能を明確かつ具体的に説明します。「役立ちます」や「使用できます」のような曖昧な表現は避けてください。ツールが具体的に何を実行するのかを明示します。

どのようなときに使用しますか?具体的なトリガーや状況を示します。「ユーザーが価格について質問する」といった直接的なトリガーと、「最新の市場価格が必要」といった間接的な兆候の両方を含めます。

どのような入力を受け取りますか?型、制約、デフォルト値を含むパラメーターの説明を記載します。各パラメーターが何を制御するのかを説明します。

何を返しますか?出力の形式と構造を示します。成功時の応答例とエラー条件を含めます。

書き込み、送信、支出、削除を行うツールでは、プレビューと確定操作を分け、認可を正確な対象や引数に紐づけます。テナント/ユーザーのアクセス権はサーバー側で適用し、モデルから提供された ID を権限と同一視しないでください。冪等性キーと、結果が不確かな場合に確認できる操作 ID を含め、再試行回数とタイムアウトに上限を設け、エラーから機密情報を除去します。返されたページやツールの内容は信頼できないデータであり、指示や認可ではありません。

デフォルトパラメーターの選択 デフォルト値は一般的なユースケースを反映する必要があります。不要なパラメーター指定を省くことで、エージェントの負担を軽減します。また、パラメーターの指定漏れによるエラーを防ぎます。

応答形式の最適化

ツールの応答サイズは、コンテキストの使用量に大きく影響します。応答形式のオプションを実装すると、エージェントが詳しさを選べるようになります。

簡潔な形式では必要なフィールドのみを返すため、確認や基本情報の提示に適しています。詳細な形式ではすべてのフィールドを含む完全なオブジェクトを返すため、判断に完全なコンテキストが必要な場合に適しています。

それぞれの形式をいつ使うべきか、ツールの説明に記載してください。エージェントはタスクの要件に応じて、適切な形式を選択できるようになります。

エラーメッセージの設計

エラーメッセージは、問題をデバッグする開発者と、失敗から復旧するエージェントという2つの対象に向けたものです。エージェントにとって、エラーメッセージは実行可能な内容でなければなりません。何が問題だったのか、どう修正すればよいのかを伝える必要があります。

復旧につながるエラーメッセージを設計してください。再試行可能なエラーには再試行方法を記載します。入力エラーには正しい形式を示します。データが不足している場合は、必要な情報を示します。

ツール定義のスキーマ

すべてのツールで一貫したスキーマを使用します。ツール名の「動詞-名詞」パターン、ツール間で一貫したパラメーター名、一貫した戻り値のフィールド名など、命名規則を定めます。

ツールコレクションの設計

調査によると、ツールの説明が重複するとモデルが混乱します。ツールの数を増やせば、常に結果が向上するとは限りません。ほとんどのアプリケーションでは、10〜20個を妥当な目安とします。それ以上のツールが必要な場合は、名前空間を使って論理的なグループに分けます。

ツールのグループ化、例に基づく選択、専門的なサブツールに処理を振り分ける包括的なツールを含む階層構造などの仕組みを実装し、エージェントが適切なツールを選べるようにします。

MCP ツールの命名要件

MCP(Model Context Protocol)ツールを使用するときは、「tool not found」エラーを避けるため、必ず完全修飾されたツール名を使用してください。

クライアントの表示名には ServerName:tool_name を使用できますが、MCP 自体は、そのサーバー接続上の tools/list が返す name によってツールを識別します。クライアントが公開する呼び出し可能な名前/スキーマを正確に使用し、コロン付きのプレフィックスを勝手に作らないでください。

# Correct: Fully qualified names
"Use the BigQuery:bigquery_schema tool to retrieve table schemas."
"Use the GitHub:create_issue tool to create issues."

# Incorrect: Unqualified names
"Use the bigquery_schema tool..."  # May fail with multiple servers

サーバーのプレフィックスがないと、特に複数の MCP サーバーが利用可能な場合、エージェントがツールを見つけられないことがあります。すべてのツール参照にサーバーのコンテキストを含める命名規則を定めてください。

エージェントを使ったツールの最適化

Claude は自身のツールを最適化できます。ツールと観察された失敗パターンを与えると、問題を診断して改善案を提示します。このアプローチは、保留しておいたタスクスイートで評価してください。時間を一律に40%短縮できるという再現可能な証拠は、ここには含まれていません。

ツールテストエージェントのパターン:

def optimize_tool_description(tool_spec, failure_examples):
    """
    Use an agent to analyze tool failures and improve descriptions.
    
    Process:
    1. Agent attempts to use tool across diverse tasks
    2. Collect failure modes and friction points
    3. Agent analyzes failures and proposes improvements
    4. Test improved descriptions against same tasks
    """
    prompt = f"""
    Analyze this tool specification and the observed failures.
    
    Tool: {tool_spec}
    
    Failures observed:
    {failure_examples}
    
    Identify:
    1. Why agents are failing with this tool
    2. What information is missing from the description
    3. What ambiguities cause incorrect usage
    
    Propose an improved tool description that addresses these issues.
    """
    
    return get_agent_response(prompt)

これによりフィードバックループが生まれます。ツールを使用するエージェントが失敗データを生成し、そのデータを使ってエージェントがツールの説明を改善することで、将来の失敗を減らします。

ツール設計のテスト

曖昧さのなさ、完全性、復旧可能性、効率性、一貫性の基準に照らして、ツール設計を評価します。代表的なエージェントからのリクエストを提示し、生成されたツール呼び出しを評価して、ツールをテストします。

実践的なガイダンス

避けるべきアンチパターン

曖昧な説明:「データベースで顧客情報を検索する」では、未回答の疑問が多すぎます。

分かりにくいパラメーター名:x、val、param1 などのパラメーター名では、エージェントが意味を推測しなければなりません。

エラー処理の欠如:一般的なエラーだけを返すツールでは、復旧の手がかりが得られません。

一貫性のない命名:一部のツールでは id、別のツールでは identifier、さらに別のツールでは customer_id を使うと、混乱を招きます。

ツール選定のフレームワーク

ツールのコレクションを設計する際は、次の手順に従います。

  1. エージェントが達成する必要のある、個別のワークフローを特定します
  2. 関連するアクションを、包括的なツールにまとめます
  3. 各ツールの目的が明確で、曖昧さのないものになるようにします
  4. エラーケースと復旧方法を文書化します
  5. 実際のエージェントとのやり取りでテストします

例

例 1:適切に設計されたツール

def get_customer(customer_id: str, format: str = "concise"):
    """
    Retrieve customer information by ID.
    
    Use when:
    - User asks about specific customer details
    - Need customer context for decision-making
    - Verifying customer identity
    
    Args:
        customer_id: Format "CUST-######" (e.g., "CUST-000001")
        format: "concise" for key fields, "detailed" for complete record
    
    Returns:
        Customer object with requested fields
    
    Errors:
        NOT_FOUND: Customer ID not found
        INVALID_FORMAT: ID must match CUST-###### pattern
    """

例 2:不適切なツール設計

この例では、ツール設計における複数のアンチパターンを示します。

def search(query):
    """Search the database."""
    pass

この設計の問題点:

  1. 曖昧な名前:「search」は曖昧です。何を、どのような目的で検索するのでしょうか?
  2. パラメーターの欠如:どのデータベースでしょうか?query はどのような形式にすべきでしょうか?
  3. 戻り値の説明がない:この関数は何を返すのでしょうか?リストでしょうか?文字列でしょうか?エラー処理はどうなっていますか?
  4. 使用場面の説明がない:エージェントは、ほかのツールではなく、このツールをいつ使うべきでしょうか?
  5. エラー処理がない:データベースを利用できない場合はどうなるのでしょうか?

失敗のパターン:

  • エージェントが、より具体的なツールを使うべき場面で、このツールを呼び出す可能性があります
  • エージェントが正しい query の形式を判断できません
  • エージェントが結果を解釈できません
  • エージェントが失敗から復旧できません

ガイドライン

  1. 何をするのか、いつ使うのか、何を返すのかが分かる説明を書きます
  2. 統合によって曖昧さを減らします
  3. トークン効率を高めるため、レスポンス形式のオプションを実装します
  4. エージェントが復旧できるよう、エラーメッセージを設計します
  5. 一貫した命名規則を定め、それに従います
  6. ツールの数を制限し、整理には名前空間を使います
  7. 実際のエージェントとのやり取りでツール設計をテストします
  8. 観察された失敗パターンに基づいて反復します
  9. 各ツールがモデルの能力を引き出すのか、それとも制約するのかを検討します
  10. 特化型のラッパーよりも、プリミティブで汎用的なツールを優先します
  11. ツールの高度化よりも、ドキュメントの品質に投資します
  12. モデルの改善から恩恵を受ける、最小限のアーキテクチャを構築します

統合

このスキルは、次のスキルと連携します。

  • context-fundamentals - ツールがコンテキストとどのようにやり取りするか
  • multi-agent-patterns - エージェントごとに特化したツール
  • evaluation - ツールの有効性の評価

参考資料

名称が記載されている Best Practices Reference と Architectural Reduction Case Study は同梱されていません。削減を設計上の仮説として扱い、同じタスク、権限、失敗・復旧率、コストにおいて、構造化されたツールと比較してください。

このコレクションの関連スキル:

  • context-fundamentals - ツールとコンテキストのやり取り
  • evaluation - ツールのテストパターン

外部リソース:

  • MCP (Model Context Protocol) のドキュメント
  • フレームワークのツール規約
  • エージェント向け API 設計のベストプラクティス
  • Vercel d0 のエージェントアーキテクチャのケーススタディ

スキルのメタデータ

作成日:2025-12-20 最終更新日:2025-12-23 作成者:Agent Skills for Context Engineering Contributors バージョン:1.1.0

制限事項

  • このスキルは、タスクが上記の説明の範囲に明確に当てはまる場合にのみ使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認を求めてください。

コメント