3行でいうと

  • AIはツールの中身を見ず、名前、説明、引数の形(JSONスキーマ)だけで選びます。Anthropicは説明の詳しさを「性能に最も効く要因」と書き、OpenAIは「初めて見る人が、モデルに見える情報だけで使えるか」を確かめる目安にしています。
  • 個数の指針は、公式ごとに数字があります。OpenAIは「最初の時点で20個未満」を弱い目安とし、Anthropicは「30〜50個を超えると選び間違いが増える」と書いて、多い場合は必要なものだけ後から読み込む仕組み(tool search)を勧めています。
  • 結果の返し方とエラーの返し方も、定義の一部として設計します。必要な項目だけ返す、エラーには「何が失敗し、次に何をするか」を書く、というのが公式の共通点です。

この記事は、公式の文書を読んでまとめたもので、実際に使って確かめた記録ではありません。数字や仕様は2026年10月22日に読み直しました。モデルや機能の名前は、変わることがあります。

先に結論

前提:ツール定義とは何か

ツール呼び出し(関数呼び出し)は、AIが「この関数をこの引数で呼んでほしい」という依頼を返し、実行は自分のプログラムが行う仕組みです。仕組みそのものは別の記事で扱っています。ここでは、依頼の前に渡す「ツール定義」に絞ります。

定義の主な部品は、名前、説明、引数の形です。引数の形は、JSONスキーマ(データの形を書く決まった書式)で書きます。公式の文書で、呼び方が少し違います。

Anthropic OpenAI Google(Gemini) MCP(仕様)
名前 name。使える文字は英数字、_、-で、1〜128字 関数の名前 一意の名前。下線かキャメルケースを勧める name(一意の識別子)と、任意の表示用title
説明 description 関数と引数の説明 description。サンプルでは、引数の説明に日付の書式の例を入れている description
引数 input_schema JSONスキーマ。strictを指定できる parameters。サンプルではenumで値を限っている inputSchema。出力の形のoutputSchemaも任意で書ける
例 input_examples(任意) 例を足すと役立つが、推論型のモデルでは悪影響もありうる、と注意 読んだ範囲では記載なし 読んだ範囲では記載なし

MCPは、AIとツールをつなぐ共通の決まりです。ここで見るのは、その仕様のうち「ツール」の節です。読んだのは2025-06-18版と2026-07-28版です。10月22日に仕様のトップページを開くと、2026-07-28版の各ページが案内されていたので、あわせて読みました(どちらが正式に「最新」と呼ばれているかは、読んだページには書かれていませんでした)。

公式の指針を並べる

読んだ文書から、共通して出てくる指針を8つに分けました。表の「誰が書いているか」は、読んだ範囲で確かめられたものだけです。

指針 中身 誰が書いているか
1. 説明は詳しく 何をするか、いつ使うか、いつ使わないか、各引数の意味、返さない情報まで書く Anthropic(「最も重要な要因」。目安は3〜4文以上)、OpenAI(目的、引数の書式、出力の意味)
2. 数を絞る・まとめる 関連する操作を1つのツールにまとめる Anthropic、OpenAI、Anthropicの技術記事
3. 名前をそろえる サービスや資源ごとに接頭辞を付ける。引数名の曖昧さをなくす Anthropic、Anthropicの技術記事
4. 不正な状態を作れない形に enumや入れ子の構造で、矛盾した呼び出しを防ぐ。「オンとオフの2つの真偽値」は矛盾を許してしまう OpenAI(Gemini、MCPもenumや型の例を載せる)
5. 分かっている値は、AIに埋めさせない 前の手順で分かっているorder_idなどは、コード側で渡す OpenAI
6. 結果は必要な項目だけ 意味の分かる固定の識別子(スラッグやUUID)を使い、次に必要な項目だけ返す。詳細版と簡潔版を選ばせる Anthropic、Anthropicの技術記事
7. エラーは次の行動が分かるように 「失敗」ではなく「何が失敗し、何をするか」を書く Anthropic、Anthropicの技術記事、MCP(エラーの2系統)
8. 評価で確かめる 実際に近い課題で、正答率や呼び出しの無駄を測り、記録を見て直す Anthropicの技術記事

1つの定義の書き方の例

以下は、Anthropicの文書が説明する形式に合わせて、この記事で作った例です(実行はしていません)。2つを比べると、公式の指針のどこを直したかが分かります。

{"name": "search", "description": "検索する",
 "input_schema": {"type": "object", "properties": {"q": {"type": "string"}}}}
{"name": "orders_search",
 "description": "注文の一覧から、条件に合うものを探す。注文番号や顧客IDが分かっているときは使わず、orders_getを使う。返すのは注文ID、状態、合計金額だけで、商品の明細は含まない。結果は新しい順に最大20件。",
 "input_schema": {"type": "object",
  "properties": {
   "customer_id": {"type": "string", "description": "顧客ID(例: cus_1234)"},
   "status": {"type": "string", "enum": ["pending", "shipped", "cancelled"], "description": "注文の状態"}},
  "required": ["customer_id"]}}

直した点は、名前の接頭辞(指針3)、いつ使うか・使わないか・返さないものを書いたこと(指針1)、enumで状態を限ったこと(指針4)です。なお、「最大20件」「返すのは3項目」は、この例のための仮の数字です。

数と選び間違い

OpenAIの文書は、最初の時点で使える関数は20個未満が目安で、これは「弱い目安」だとしています。多い場合は、tool searchで必要なものだけ後から読み込む方法がありますが、OpenAIでは対応は新しいモデル(gpt-5.4以降)に限られる、と書かれています。

Anthropicのtool searchの文書は、より具体的な数字を出しています。ツール定義だけで約55,000トークンを使いうる例が書かれています。ツールが30〜50個を超えると選ぶ精度が落ちる、とも書いています。使う目安は、ツールが10個以上、定義が1万トークンを超える、複数のMCPサーバーをまとめている(原文は200個以上のツールを例に挙げる)、といった場合です。逆に、10個未満や、毎回すべてを使う場合は、通常の呼び出しのほうが向く、とあります。

見立てです。「ツールを減らす」は、機能を削ることではありません。似た操作をまとめる、使わない定義を出さない、後から読み込む、のどれで減らすかを選ぶ話だと思います。

結果とエラー

Anthropicの技術記事は、ツールの結果を、人が読んで意味が分かる項目にするよう勧めています。response_formatという引数で詳細版と簡潔版を選ばせると、簡潔版は約3分の1のトークンで済んだ例がある、と書かれています。結果が長いときの対策も具体的で、ページを分ける、範囲を指定する、絞り込む、切り詰める、を既定値つきで用意することです。同社のClaude Codeは、ツールの結果を既定で25,000トークンまでに制限している、と書いています。

エラーについて、Anthropicの文書は、tool_resultにis_error: trueを付けて返す形を示しています。引数が足りない、または不正なとき、Claudeは通常2〜3回、直して再試行してから謝る、とあります。不正な入力を防ぐには、strict: true(厳密モード)を使う、とも書かれています。

MCPの仕様は、エラーを2系統に分けています。未知のツールや不正な引数などは、通信の決まり(JSON-RPC)のエラーとして返し、外部APIの失敗や業務の都合などは、結果の中でisError: trueとして返します。どちらに入れるかは、自分のツールの設計で決めます。なお、2026-07-28版は分け方の説明が変わっています。通信の決まりのエラーは、未知のツール、要求の形が壊れている場合、サーバーの不具合とされ、日付の書式違いや値の範囲外のような入力の検査の失敗は、isError: trueの側に入れて、AIが自分で直せるようにする、と書かれています。2025-06-18版では、不正な引数は通信の決まりのエラーの例に挙がっていました。

精度以外にかかるもの

公式の数値の一覧(2026年10月22日に確認)
項目 内容 出どころ
ツール名の形式(Anthropic) ^[a-zA-Z0-9_-]{1,128}$ Anthropic「Define tools」
input_examplesのトークン 単純な例で約20〜50、入れ子の例で約100〜200。スキーマに合わない例は400エラー 同上
ツール使用の固定の説明文のトークン数(左の数字がauto/none、右の数字がany/toolの場合) Opus 5.5、Sonnet 5.5、Haiku 5.5:286/406。Opus 5:286/406。Sonnet 5:354/474。Haiku 4.5:496/588(ほかのモデルもあり) Anthropic「Tool use overview」
関数の個数(OpenAI) 最初の時点で20個未満が弱い目安 OpenAI「Function calling」
tool searchの検索結果 既定で最大5件。limitは1〜1万。遅延読み込み(defer_loading: true)にするツールは1リクエストで最大1万個。少なくとも1つは遅延させない Anthropic「Tool search tool」
選び間違いが増える個数(Anthropic) 30〜50個を超えると 同上
ツールの結果の既定の上限(Claude Code) 25,000トークン Anthropicの技術記事
tool_choiceと他の機能 Anthropicでは、anyとtoolは、手動の拡張思考とは併用できない(エラー)。Opus 5.5、Sonnet 5.5、Fable 5.1、Mythos 5.1では400エラー。tool_choiceを変えると、プロンプトキャッシュのメッセージ部分が無効になる Anthropic「Define tools」

数字は、モデルと時期で変わります。使う日に公式のページで確かめてください。

自分で確かめる手順(見立て)

公式の評価の考え方を、小さな仕事に落とした見立てです。

  1. 実際に近い課題を作る。Anthropicの技術記事は数十件を挙げています。最初は少なくても、同じ手順は使えます。複数のツール呼び出しを要する課題を混ぜ、正解は確かめられる形にする。
  2. 課題ごとに、正答、呼び出しの回数、トークン量、エラーを記録する。
  3. 記録を読む。同じ呼び出しの無駄が多ければ、ページ分けや上限を見直す。引数の間違いが多ければ、説明や例を直す。
  4. 直したら、もう一度測る。技術記事は、合わせ込みすぎを避けるために、直すときに使わなかった課題(取っておいた課題)でも確かめるよう勧めています。

よくある失敗・つまずき

気をつけること

出典

更新履歴

一部の出典は読めなかったため、その部分は前のままです。