Tool Use とは
AIモデルが外部ツール(関数)を呼び出す機能です。モデルが「いつ」「どのツールを」「どんな引数で」呼ぶかを判断し、構造化されたJSONで呼び出しを返します。開発者はその結果を実行してモデルに返却します。
Function Calling
OpenAI系のTool Useに相当する呼称です。定義されたJSON Schemaに基づいて関数呼び出しを生成します。Anthropic Claude、OpenAI GPT、Google Geminiなど主要モデルが対応しています。
MCP
Model Context Protocolは、Tool Useをさらに一歩進めた標準プロトコルです。サーバー・クライアントアーキテクチャで、ツール・リソース・プロンプトを統一的に管理し、再利用可能なインテグレーションを実現します。
直接呼び出し
アプリケーションから直接REST APIを呼び出すシンプルなパターン。小規模プロジェクトに最適。認証管理やエラーハンドリングを自前で実装する必要があります。
ミドルウェア経由
バックエンドサーバーを中間層として配置するパターン。認証情報の隠蔽、レート制限の管理、レスポンスの加工が可能。本番運用に推奨されるアプローチです。
MCP経由
MCPサーバーを介してAPI連携するパターン。ツール定義の標準化、認証の一元管理、複数モデルでの再利用が可能。2026年のモダンなAIアプリ開発で急速に普及しています。
Webhook / Bot連携による通知自動化が主な用途です。Incoming Webhookで簡易通知、Bot Token APIで双方向のインタラクション、Socket Modeでリアルタイムイベント受信が可能。AIアプリからの通知・レポート配信、チャットボット構築に最適です。
決済統合とサブスクリプション管理の業界標準です。Payment Intents APIで安全な決済フロー、Billing APIでサブスク管理、Webhook経由でのリアルタイムイベント通知に対応。PCI DSS準拠を最小限の実装で実現できます。
ファイル操作自動化のための強力なAPIです。ファイルのアップロード・ダウンロード・検索、共有設定の管理、Google Docs/Sheets/Slidesとの連携が可能。AIアプリでのドキュメント自動生成やRAG用データソースとして活用されています。
日本国内で9,600万人以上が利用するLINEプラットフォームでのBot開発APIです。プッシュメッセージ・リプライメッセージ・リッチメニュー・Flex Messageに対応。WebhookでユーザーイベントをリアルタイムLに受信し、AIチャットボットを構築できます。
CI/CD連携とPR自動レビューの中核です。REST API v3とGraphQL API v4を提供。Issues、Pull Requests、Actions、Webhookをプログラマティックに操作可能。AIによるPRの自動レビュー、Issue分析、リリース自動化などに活用されています。
-
1
Claude Desktop / Claude Codeの準備
Claude DesktopまたはClaude Codeをインストールします。MCPサーバーとの接続には、設定ファイル(claude_desktop_config.json)でサーバー定義を追加します。
-
2
MCPサーバーの追加
公式レジストリまたはGitHubからMCPサーバーを取得します。npxコマンドやDocker経由での起動が一般的です。複数サーバーの同時接続も可能です。
-
3
設定ファイルへの追記
claude_desktop_config.jsonのmcpServersセクションにサーバー定義を追加します。コマンド、引数、環境変数(API キー等)を指定します。
-
4
接続確認とテスト
Claude Desktopを再起動し、ツールアイコンから利用可能なMCPツールが表示されることを確認します。実際にツールを呼び出してテストを行います。
{
"name": "search_documents",
"description": "Search documents by keyword and return matching results",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search keyword or phrase"
},
"limit": {
"type": "number",
"description": "Max number of results (default: 10)",
"default": 10
}
},
"required": ["query"]
}
}
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
},
"slack": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-slack"],
"env": {
"SLACK_BOT_TOKEN": "xoxb-your-token-here"
}
}
}
}
ファイルシステム
ローカルファイルの読み書き・検索が可能。指定ディレクトリ内のファイル操作をAIモデルが直接実行できます。セキュリティのためサンドボックス化されたアクセスを提供。
データベース
PostgreSQL、SQLite、MongoDBなど主要DBへの接続サーバー。SQLクエリの実行、スキーマ確認、データ分析をAIが直接行えます。読み取り専用モードも設定可能。
Slack / Discord
メッセージの送受信、チャンネル管理、ユーザー情報の取得が可能。AIチャットボットの構築や、コミュニケーションデータの分析に活用されています。
Web / ブラウザ
Webページのスクレイピング、ブラウザ自動操作(Puppeteer / Playwright)、API呼び出しを行うサーバー群。最新情報の取得やWebアプリのテスト自動化に使用。
開発ツール
GitHub、GitLab、Jira、Linear等の開発ツール連携。Issue管理、PR操作、CI/CDパイプラインの制御をAIモデルから実行できます。
データ分析
Google Sheets、Notion、Airtable等のデータソース連携。データの取得・更新・分析をAIが統合的に実行し、インサイトを生成します。
-
!
認証情報の管理: MCPサーバーに渡すAPIキーやトークンは、環境変数で管理し、設定ファイルに直接記載しないこと。.envファイルや秘密管理サービス(AWS Secrets Manager等)を活用しましょう。
-
✓
最小権限の原則: MCPサーバーに与えるアクセス権限は最小限に。ファイルシステムサーバーでは許可するディレクトリを限定し、DBサーバーでは読み取り専用アクセスを基本とします。
-
!
入力の検証: MCPサーバー側でAIモデルから受け取る入力を必ずバリデーションしましょう。SQLインジェクションやパストラバーサルなどの攻撃を防ぎます。
-
✓
監査ログ: MCPサーバーの操作をすべてログに記録し、何がいつ実行されたかを追跡可能にします。異常な操作パターンを検出するためのモニタリングも推奨です。
-
✓
ネットワーク分離: MCPサーバーは信頼できるネットワーク内で実行し、外部からの直接アクセスを防ぎます。Docker等でのコンテナ化による隔離も有効です。
-
!
Human-in-the-Loop: 破壊的な操作(ファイル削除、データ変更等)は、AIモデルが自動実行する前にユーザーの確認を要求する仕組みを実装しましょう。
OAuth 2.0 / 2.1
ユーザー認可を伴うAPI連携の標準。Slack、Google Drive等で使用。OAuth 2.1ではPKCEが必須化され、暗黙フローが非推奨に。アクセストークンの自動更新を実装しましょう。
APIキー
シンプルな認証方式。Stripe、OpenAI等で使用。ヘッダーまたはクエリパラメータで送信。環境変数で管理し、フロントエンドに露出させないこと。ローテーション計画を必ず策定。
JWT(JSON Web Token)
ステートレスな認証トークン。GitHub App等で使用。ペイロードに有効期限・権限スコープを含む。署名検証で改竄を検出。RS256アルゴリズムを推奨。
短命トークン
有効期限が短い(数分〜数時間)トークン。漏洩リスクを最小化。リフレッシュトークンと組み合わせて使用。STS(Security Token Service)パターンで動的に発行。
async function fetchWithRetry(url, options, maxRetries = 3) { for (let attempt = 0; attempt <= maxRetries; attempt++) { try { const response = await fetch(url, options); if (response.status === 429 || response.status >= 500) { throw new Error(`HTTP ${response.status}`); } return response; } catch (error) { if (attempt === maxRetries) throw error; // Exponential backoff with jitter const baseDelay = Math.pow(2, attempt) * 1000; const jitter = Math.random() * baseDelay; await new Promise(r => setTimeout(r, baseDelay + jitter)); } } }
Closed(正常)
通常稼働状態。リクエストはそのまま外部APIに転送されます。失敗が閾値(例: 5回連続失敗)を超えるとOpen状態に遷移します。成功数・失敗数をカウントして監視します。
Open(遮断)
外部APIへのリクエストを遮断し、即座にフォールバック応答を返します。一定時間(例: 30秒)経過後にHalf-Open状態へ遷移。障害中のAPIへの無駄なリクエストを防止します。
Half-Open(試行)
限定的にリクエストを通して回復を確認します。成功すればClosed状態に復帰、失敗すればOpen状態に戻ります。段階的な回復により、障害からの安全な復旧を実現します。
-
✓
トークンバケット: 一定レートでトークンが補充されるバケットを実装。リクエスト時にトークンを消費し、不足時は待機。バーストにも対応可能なアルゴリズムです。
-
✓
レスポンスヘッダー監視: X-RateLimit-Remaining、X-RateLimit-Reset等のヘッダーを監視し、制限に達する前にリクエスト頻度を自動調整します。429応答時はRetry-Afterヘッダーに従います。
-
✓
リクエストキューイング: 高頻度のAPI呼び出しをキューに蓄積し、レート制限内で順次処理。優先度付きキューを使えば、重要なリクエストを優先的に処理できます。
-
✓
キャッシュ活用: 同一リクエストの結果をキャッシュし、API呼び出し回数を削減。TTL(Time to Live)を適切に設定し、データの鮮度とAPI消費量のバランスを取ります。
// Abstract provider interface interface NotificationProvider { send(message: string, channel: string): Promise<void>; getChannels(): Promise<Channel[]>; } // Slack implementation class SlackProvider implements NotificationProvider { async send(message: string, channel: string) { await this.client.chat.postMessage({ channel, text: message }); } } // LINE implementation class LineProvider implements NotificationProvider { async send(message: string, channel: string) { await this.client.pushMessage({ to: channel, messages: [{ type: "text", text: message }] }); } } // Usage - easily swap providers const provider = getProvider(config.notificationService); await provider.send("Deploy completed!", "#releases");
構造化エラー
APIエラーは統一フォーマットで返却しましょう。エラーコード、メッセージ、HTTPステータス、リクエストIDを含め、クライアント側での適切なハンドリングを可能にします。
フォールバック
外部APIが応答しない場合のフォールバック戦略を必ず用意します。キャッシュされたデータの返却、デグレードされた機能の提供、ユーザーへの適切なエラーメッセージ表示を実装します。
監視とアラート
API呼び出しのレイテンシー、エラー率、成功率をメトリクスとして収集します。閾値を超えた場合にアラートを発報し、SLAの維持と障害の早期検出を実現します。
ログ戦略
リクエスト/レスポンスのログを構造化JSONで出力します。機密情報のマスキング、リクエストIDによるトレーサビリティ、ログレベルの適切な設定が重要です。