コンテンツにスキップ

JSON Schema → Tool Use 変換 (Claude / OpenAI / Gemini)

JSON Schema や手書きのパラメータ定義から、Anthropic Claude の tool_use、OpenAI の function calling、Google Gemini の function declaration の各形式を自動生成。フォーム UI で 0 から組み立てるか、既存スキーマを貼って 3 形式すべてに同時変換。

完全無料 登録不要 ブラウザ完結 5 言語対応 ダークモード
複数ツール + Resources / Prompts まとめて MCP Server にするなら 🧬 MCP Server 雛形 →

            

使い方: 各 SDK の tools 配列にこの JSON を入れる

📖 つまずきやすいポイント

JSON Schema や手書きのパラメータ定義から、Claude の tools、OpenAI の function calling、Gemini の function declarations それぞれの形式へ変換します。処理はブラウザ内で完結します。形式を揃えただけでは、モデルがそのツールを正しく呼んでくれるとは限りません — 呼ぶかどうかを決めているのは JSON の構造ではなく、description に何が書いてあるかです。

ケース 何が起きるか どうする
モデルがツールを呼んでくれない description が短すぎるか、「何をするか」しか書いていないのが原因です。"天気を取得する" だけでは、モデルはいつ呼ぶべきかを判断できません。似た機能のツールが複数あるとき、区別がつかず一方に偏る、あるいはどちらも呼ばない、という挙動になります。パラメータ側の description が空なのも同じ影響を与えます。 description には「いつ使うか」と「いつ使わないか」を書いてください。「ユーザーが特定の都市の現在の天気を尋ねたときに使う。過去の気象データや天気予報には使わない (それには get_forecast を使う)」のように、境界を明示するのが最も効きます。各パラメータにも、単位・書式・例を書いてください — "date" ではなく "日付。YYYY-MM-DD 形式。例: 2026-07-26" です。
引数の型が守られない "type": "integer" と書いても、文字列の "3" が返ってくることがあります。数値と文字列の境界、null の扱い、日付の書式は、スキーマだけでは完全には強制されません。ネストの深いオブジェクトや、oneOf / anyOf のような分岐を含むスキーマでは、精度がさらに落ちます。 受け取った引数は必ずアプリケーション側で検証してください — zod や pydantic のようなバリデータを通し、失敗したらエラーをツールの結果としてモデルに返すのが定石です。「date は YYYY-MM-DD 形式である必要があります。受け取った値: 2026/07/26」と返せば、モデルは訂正して呼び直します。あわせて、スキーマは浅く保ってください — ネストを 2 段までに抑え、複雑な分岐は複数のツールに分けるほうが、結果的に精度が出ます。
ツールを増やすほど精度が落ちる ツール定義はすべて毎回のリクエストの入力に含まれます。20 個も定義すれば、それだけで数千トークンが固定費として乗り、しかも似た説明が並ぶほどモデルの選択は不安定になりますget_user / fetch_user / load_user_data が同居していれば、人間でも選べません。 1 リクエストに渡すツールは、その場面で必要なものだけに絞ってください。会話の状態や画面ごとにツールセットを切り替えるのが実用的です。名前が似ているものは統合するか、名前で用途が一意に分かるように改名してください — search_users_by_email のように、何をどう探すかまで名前に入れると衝突しなくなります。トークン量は トークンカウンターで測れます。

3 社の形式は似ていますが、入れ子の位置が違います。Claude は input_schema にスキーマを直接置き、OpenAI は function.parameters の下に、Gemini は functionDeclarations[].parameters の下に置きます。加えて、Gemini は JSON Schema の一部のキーワードしかサポートしていません$refadditionalProperties のように、他社では通るものが落ちることがあります。移植したら必ず実際に 1 回呼び出して、引数が期待どおり届くか確かめてください。形式が受理されることと、意図どおり動くことは別です。

📖 使い方

  1. 1
    フォームか JSON で入力
    「フォーム入力」で 0 から組み立てるか、「JSON Schema 貼付」で既存定義を変換
  2. 2
    プロバイダ選択
    Anthropic / OpenAI / Gemini を切り替えて即比較
  3. 3
    SDK にコピペ
    生成された JSON をそのまま tools[] に

❓ よくある質問

3 形式の違いは?
Anthropic は input_schema、OpenAI は parameters、Gemini は parameters (snake_case 一部) などフィールド名と nesting が違う。中身の JSON Schema は概ね共通
strict mode は?
OpenAI のみ strict: true で厳密スキーマ準拠。Anthropic / Gemini は常に best-effort
複数ツール?
現状 1 ツールずつ。配列にしたい場合は複数回生成して結合
🐛 このツールで問題が発生しましたか?

完全無料・登録不要。再現手順だけでも結構です。届いたご報告は運営者に直接届き、修正の参考にします。

※ 不具合再現のため、ブラウザ情報 (UA / 画面サイズ / 言語 / URL) を自動で送信します