← 試験の目次へ

Developer Foundations ドメイン8: ツールと MCP(10.6%)

この章で学ぶこと: ツールの実装(ツール利用、関数呼び出し、説明文、エラー処理、クライアント側とサーバー側のツール、承認のパターン、ツールセットのベストプラクティス)、MCP サーバーの開発(作る・配備する・つなぐ、リソース・ツール・プロンプト、stdio などの通信方式、クライアントとサーバー)、エージェントのカスタマイズ(組み込みツール・カスタムツール・Skills・MCP の使い分け)。

スキル 配点 この章の節
ツールの実装(Tool Implementation) 4.4% 第1節
MCP サーバー開発(MCP Server Development) 2.1% 第2節
エージェントのカスタマイズ(Agentic Customization) 4.1% 第3節

本番の53問のうち約6問が出ます。

前の章とつながる部分:


1. ツールの実装(4.4%)

1.1 ツールの定義

ツール利用(関数呼び出し、function calling とも呼ぶ)では、リクエストの tools にツールを並べます。

項目 意味
name ツールの名前。^[a-zA-Z0-9_-]{1,128}$ に合うこと
description 何をするか、いつ使うか、どう動くかの詳しい説明
input_schema 入力のパラメータを決める JSON Schema
input_examples (任意)ツールの使い方を見せる、スキーマに合った入力の例

1.2 ツール定義のベストプラクティス(公式)

ベストプラクティス 内容
説明をとても詳しく書く ツールの性能に効く、いちばん大事な要素。何をするか、いつ使うか(使わないか)、各パラメータの意味、注意点と限界を書く。1つのツールにつき少なくとも3〜4文
複雑なツールには input_examples 入れ子のオブジェクトや形式にうるさいパラメータがあるとき
関係する操作はまとめる create_pr、review_pr、merge_pr を別々に作るより、action パラメータを持つ1つのツールにまとめる。ツールが少ないほど選び間違いが減る
名前に意味のある接頭辞を付ける 複数のサービスにまたがるなら github_list_prs、slack_send_message のように。ツールが増えたときやツール検索で特に大事
結果は情報量の高いものだけ返す 意味があって変わらない ID(slug や UUID)を返し、次の判断に必要な項目だけを入れる。ふくらんだ結果はコンテキストを無駄にする
理由ではなく説明を求める パラメータで「なぜ呼ぶか」を聞くなら、短い説明や根拠を求める。thinking や段階的な推論を求めると reasoning_extraction で拒否されることがある

「まとめる」と「分ける」: Architect Foundations の試験ガイドには、何でもする汎用のツールを目的別のツールに分ける例も出てきます。どちらも目的は同じで、「どのツールを使うべきかがあいまいにならないようにする」ことです。似た操作が別々のツールに散らばって迷うならまとめ、1つのツールの役割が広すぎて使い方がぶれるなら分けます(筆者のまとめ)。

Anthropic のエンジニアリング記事「Writing effective tools for agents」より:

1.3 tool_choice

値 意味
{"type": "auto"}(初期値) ツールを使うかどうかを Claude が決める
{"type": "any"} 必ずどれかのツールを使う
{"type": "tool", "name": "..."} 指定したツールを必ず使う
{"type": "none"} ツールを使わない

注意: any と tool は、手動の extended thinking を使うときや、Claude Opus 5.5・Sonnet 5.5・Fable 5.1 などの新しいモデルでは使えず、エラーになります。そのときは auto と strict: true を組み合わせ、いつそのツールを使うかをプロンプトに書きます(ドメイン5)。

1.4 クライアント側のツールとサーバー側のツール

クライアントツール サーバーツール
実行する場所 自分のアプリ Anthropic のインフラ
例 自分で定義したツール、Anthropic がスキーマを決めたツール(bash、text editor など) web_search、web_fetch、code_execution、tool_search
応答 stop_reason: "tool_use" と tool_use ブロック。自分で実行して tool_result を返す server_tool_use ブロック(ID は srvtoolu_ で始まる)と結果のブロックが同じ応答に入る。tool_result を返す必要はない
長い処理 — サーバー側のループが一時停止すると pause_turn。応答を会話に足して送り直す(ドメイン4)

1.5 ループを任せる: tool runner

SDK の tool runner(ベータ)は、ツールの実行、リクエストと応答のくり返し、会話の状態の管理、型の確認を自動でやってくれます。Python では @beta_tool デコレーターで、型ヒントと docstring からツールを定義できます。

人の承認、独自のログ、条件つきの実行が必要なときは、tool runner ではなく自分でループを書きます(公式の説明)。

1.6 エラー処理

ドメイン4 第2.1節のとおりです。要点だけ:

1.7 承認のパターン

しくみ どう承認するか
自分で書いたループ(Messages API) tool_use を受け取ったら、実行する前に人に確認する(tool runner ではなく手動のループ)
Agent SDK 権限モード(default なら承認のコールバックへ)、allowed_tools / disallowed_tools、ルール(例: Bash(npm *))、フック(ドメイン1)
Agent SDK のカスタムツール TypeScript では、createSdkMcpServer() が返す設定に、ツールごとの permission_policy を足して承認を求めたり止めたりできる
Claude Code 許可・確認・拒否のルール(/permissions)、権限モード、フック(ドメイン7)
MCP サーバー サーバーが elicitation で利用者に追加の情報や確認を求めることができる(第2.3節)

2. MCP サーバーの開発(2.1%)

2.1 MCP のしくみ

MCP(Model Context Protocol)は、AI アプリを外部のツールやデータにつなぐための共通の仕様です。

役割 意味 例
MCP ホスト 1つ以上の MCP クライアントをまとめる AI アプリ Claude Code、Claude Desktop
MCP クライアント 1つの MCP サーバーとの接続を保ち、そこから情報を取ってホストに渡す部品。ホストはサーバーごとに1つのクライアントを作る —
MCP サーバー クライアントに情報や機能を提供するプログラム ファイル、データベース、Sentry などのサーバー

しくみの層:

2.2 通信方式(transport)

方式 しくみ 向いている場面
stdio 同じマシンの中で、標準入出力でプロセス同士が直接やりとりする。ネットワークのむだがない ローカルのサーバー。ふつう1つのクライアントに対応
Streamable HTTP クライアントからサーバーへは HTTP POST、ストリーミングには必要に応じて SSE を使う。bearer トークン、API キー、独自ヘッダーなどの HTTP の認証が使え、MCP はトークンの取得に OAuth を勧めている リモートのサーバー。ふつう多くのクライアントに対応
SSE(古い方式) Claude Code では非推奨。使えるなら HTTP にする 古いサーバー

2.3 サーバーが提供するもの

機能 意味 例 だれが使うかを決める
ツール(Tools) AI アプリが呼んで操作をする関数。データベースへの書き込み、外部 API の呼び出し、ファイルの変更など 航空便を探す、メッセージを送る モデル
リソース(Resources) 読み取り専用で情報を渡すデータ。ファイルの中身、データベースのスキーマ、API の文書など 文書を取り出す、ナレッジベースを見る アプリ
プロンプト(Prompts) 特定のツールやリソースと一緒に使う、あらかじめ作った指示のひな形 旅行の計画、会議のまとめ 利用者

サーバーからクライアントに頼めること:

ツールは tools/list で見つけ、呼び出しの決まりに従って実行されます。

2.4 作る・つなぐ

つなぐ先 方法
Claude Code claude mcp add --transport http <名前> <URL>(リモート)、claude mcp add --transport stdio <名前> -- <コマンド>(ローカル)。Claude に頼むと、リモートの HTTP か ローカルの stdio のサーバーのひな形も作ってくれる
Messages API MCP connector(ベータ)。リクエストに mcp_servers と、それに合う mcp_toolset を tools に入れると、MCP クライアントを自分で作らずにリモートの MCP サーバーにつなげる。全部のツールを使う、許可リスト、拒否リスト、ツールごとの設定ができる。OAuth の bearer トークンにも対応
Agent SDK mcpServers に MCP サーバーを渡す。カスタムツールは、SDK のプロセス内の MCP サーバー(Python の @tool と create_sdk_mcp_server、TypeScript の tool() と createSdkMcpServer)として作る
Managed Agents エージェントに MCP サーバーを宣言する。認証情報はセッションごとに vault を参照して渡す

Claude Code での MCP サーバーの範囲:

範囲 読み込まれる場所 チームと共有 保存先
local このプロジェクトだけ しない ~/.claude.json
project このプロジェクトだけ する(バージョン管理で) プロジェクトのルートの .mcp.json
user 自分の全プロジェクト しない ~/.claude.json

Claude Code での使い方:


3. エージェントのカスタマイズ(4.1%)

組み込みツール、カスタムツール、Skills、MCP の使い分けです。

方法 何をするか 向いている場面 例
組み込みツール Claude Code / Agent SDK に最初からあるツール(Read、Edit、Write、Glob、Grep、Bash、WebSearch、WebFetch など) ファイル、コマンド、Web など、どこでも使う基本の操作 コードを探して直す
サーバーツール(API) Anthropic が動かすツール(web_search、code_execution など) 自分で実行の仕組みを作りたくない 最新の情報の検索
カスタムツール 自分で定義する関数(Messages API の tools、Agent SDK のプロセス内 MCP サーバー) 自分のアプリの中だけで使う、特定の処理 自社の在庫 API を呼ぶ
MCP サーバー 外部のサービスにつなぐ共通の仕様。接続と認証はサーバーが受け持つ 複数のアプリやチームで同じ連携を再利用したい、アプリとは別に保守したい Slack、データベース、ブラウザの操作
Skills 指示・知識・手順・スクリプトのまとまり。必要なときだけ読み込まれる くり返す作業の手順、チームの決まり、参考資料 コードレビューの手順、デプロイの手順、API のスタイルガイド

3.1 MCP と Skills の違い(公式)

3.2 Skills のしくみ(Agent Skills)

段階 いつ読み込むか 量の目安 中身
1: メタデータ 起動時(いつも) 1スキルあたり約100トークン frontmatter の name と description
2: 指示 スキルが使われるとき 5,000トークン未満 SKILL.md の本文
3: 資料とコード 必要になったとき 必要な分だけ 参考ファイル、スクリプト

3.3 選び方の目安

こんなとき 選ぶもの
社内の REST API を、複数の Claude アプリで共有し、アプリとは別に保守したい MCP サーバー
1つのアプリの中だけで、決まった計算や処理を呼びたい カスタムツール
ファイルの読み書き、検索、コマンドの実行 組み込みツール
手順や決まりをくり返し使いたい(毎回プロンプトに書きたくない) Skills
標準的なサービス(課題管理など)とつなぎたい 既存の信頼できる MCP サーバーを先に探す
まとめて配りたい(スキル、フック、サブエージェント、MCP サーバー) プラグイン(ドメイン2 第5.5節)

組み込みツールでは、どんな社内 API にも届くわけではありません。社内のシステムにつなぐには、カスタムツールか MCP サーバーが必要です。


4. 試験に向けたまとめ

問われ方 考え方
ツールの選び間違い 説明を詳しくする(3〜4文以上)、名前に接頭辞、重なりをなくす
ツールが多すぎる 関係する操作をまとめる。よく使う仕事に合わせたツールにする
ツールの結果が大きすぎる 必要な項目だけ、ページ分けや絞り込み
必ずツールを使わせたい any / tool。ただし新しいモデルでは auto + strict + プロンプト
web_search の結果の扱い サーバーツール。tool_result を返さなくてよい。pause_turn に注意
ループを自動にしたい tool runner。承認が必要なら手動のループ
ローカルの MCP サーバー stdio
リモートの MCP サーバー Streamable HTTP(認証は OAuth が勧められる)
ツール・リソース・プロンプト モデルが呼ぶ操作 / アプリが渡す読み取り専用のデータ / 利用者が選ぶひな形
チームで共有する MCP の設定 .mcp.json(project の範囲)、トークンは ${VAR}
API から MCP サーバーを使う MCP connector(mcp_servers と mcp_toolset)
複数アプリで再利用する社内連携 MCP サーバー
くり返す手順の知識 Skills

5. 用語集

用語 意味
関数呼び出し(function calling) ツール利用の別名
クライアントツール / サーバーツール 自分のアプリで動くツール / Anthropic で動くツール
tool runner SDK がツールのループを自動でやるしくみ
MCP ホスト / クライアント / サーバー AI アプリ / 1つのサーバーとの接続 / 機能を提供するプログラム
stdio / Streamable HTTP ローカルの標準入出力 / リモートの HTTP
elicitation MCP サーバーが利用者に追加の情報や確認を求めること
progressive disclosure 必要な分だけ段階的に読み込むこと

出典

第2.1〜2.3節の一部は、MCP の公式サイト(modelcontextprotocol.io)にもとづきます。このサイトは MCP プロジェクトの公式の文書ですが、anthropic.com や claude.com のドメインではありません。第3.3節の選び方の表は、公式の説明を組み合わせたまとめです。内容は上の出典を要約・言い換えたものです(ライセンスに配慮して書き直しています)。