Claude から外部 API を利用する
GitHub の情報で tool_use → HTTP → tool_result を実装する。
最初の API ガイドを終え、client.mjs と external-tool.mjs を同じフォルダーに置きます。公開 GitHub 情報はトークンなしで読めますが、Claude の API 利用量と GitHub の制限は発生します。
1. 小さなツールを定義する
name・description・input_schema を指定します。例では owner と repo のみを受け、任意 URL を許可せず api.github.com に接続します。スキーマがあっても実行側の検証は必要です。定義だけでは API は動きません。
{
"name": "get_github_repository",
"description": "Read public repository metadata",
"input_schema": {
"type": "object",
"properties": {"owner": {"type": "string"}, "repo": {"type": "string"}},
"required": ["owner", "repo"],
"additionalProperties": false
}
}2. アプリがツール要求を実行する
ツール定義をメッセージと送ります。tool_use なら各ブロックの名前と引数を検証し、アプリのコードが HTTP を実行します。必要な情報・URL・取得時刻だけを返します。open_issues_count は PR を含むので問題数だけとは表示しません。
3. 対応する結果を返す
assistant の content 全体を履歴に追加し、直後の user メッセージで全 tool_result を返します。tool_use_id を一致させ、失敗は is_error: true にします。履歴と定義を再送し、上限を設けて end_turn まで続けます。
messages.push({role: "assistant", content: response.content});
messages.push({role: "user", content: [{
type: "tool_result", tool_use_id: call.id, content: result
}]});4. 完整な例を動かして確認
.env で実行し、URL と数値を元のリポジトリで確認します。値は変動します。例は最大 5 ラウンド・各応答 4 呼び出しで、タイムアウトとツールエラーを扱います。外部記述は信頼できないデータとして扱い、書き込みには実行側の認可と確認を追加します。
node --env-file=.env external-tool.mjsサンプルファイルを取得
教材の出力は実行ごとに変わります。前提を確認して結果を検証してください。閲覧だけでは API を呼びません。
練習と確認
成功した呼び出しと存在しないリポジトリへの要求を確認し、失敗が捏造ではなく is_error で返ることを確認します。
終わったら、振り返ってみましょう:
公式資料を読む
CLI の操作は公式文書と照合し、API のサンプルは模擬応答で検証しました。実アカウントでの一連の操作は未実施です。