Api Testing MCP について
Api Testing MCPは、ローカルや公開 API、サードパーティ APIをテストする開発者向けのMCPサーバーです。リクエスト実行、アサーション、フロー、スキーマに基づくモックデータ生成、負荷テストを備え、結果をローカルにJSONで保存します。
主な機能
- 01認証と変数に対応したHTTPリクエスト
- 02構造化されたレスポンス検証
- 03複数ステップのリクエストフロー
- 04OpenAPIのインポートとモックデータ生成
- 05負荷テストとレスポンス比較
- 06再利用可能なコレクションと環境
活用シーン
- 01エンドポイントの状態、フィールド、所要時間の確認
- 02ログインやCRUDのリクエスト連鎖のテスト
- 03OpenAPIスキーマに基づくリクエスト生成
- 04環境間でのAPIレスポンス比較
MCP 対応
リクエスト、検証、フロー、OpenAPIインポート、負荷テスト、コレクション管理などのAPIテストツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
42掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| method | enum | はい | HTTP メソッドGET | POST | PUT | PATCH | DELETE | HEAD | OPTIONS |
| url | string | はい | エンドポイントの URL。/ で始まる場合、現在アクティブな環境の BASE_URL が先頭に付加されます。{{variables}} に対応しています。 |
| headers | object | いいえ | キーと値のペア形式の HTTP ヘッダー |
| body | any | いいえ | リクエスト本文(JSON)。{{variables}} に対応しています。 |
| query | object | いいえ | キーと値のペア形式のクエリパラメーター |
| timeout | number | いいえ | タイムアウト(ミリ秒、既定値:30000) |
| auth | object | いいえ | 認証設定 |
| auth.type | enum | はい | 認証タイプbearer | api-key | basic |
| auth.token | string | いいえ | Bearer 認証用トークン |
| auth.key | string | いいえ | API キーの値 |
| auth.header | string | いいえ | API キーのヘッダー名(デフォルト:X-API-Key) |
| auth.username | string | いいえ | Basic auth のユーザー名 |
| auth.password | string | いいえ | Basic auth のパスワード |
| verbosity | enum | いいえ | コンテキストトークンを節約するため、レスポンスの詳細度を制御します。デフォルト:'normal'。 - 'minimal':status、method、url、elapsed_ms、および本文の先頭 200 文字のみ。 使用場面:ヘルスチェック(/health、/ping)、ステータスのポーリングループ、結果を待たない POST/DELETE、 ジョブの完了待ち、または呼び出しが成功したかどうかだけを確認したい場合。 節約量:full と比べて約 95% のトークン。 - 'normal'(デフォルト):フィルタリングされたヘッダー(Date、Server、CF-*、Set-Cookie などを除外)と、 max_body_bytes まで切り詰めた本文を返し、'body_truncated' フラグを付けます。 使用場面:CRUD、エラーメッセージの確認、API コントラクトの調査など、ほとんどのデバッグ。 節約量:full と比べて約 75% のトークン。 - 'full':完全なレスポンスを変更せずに返します。 使用場面:CORS/キャッシュ/認証ヘッダーのデバッグ、完全な確認が必要な大きな本文、 またはユーザーがすべての表示を求めた場合。節約なし。 レスポンスが切り詰められていて、さらに必要な場合は、'full' で再実行するよりも inspect_last_response({call_id}) を優先してください。minimal | normal | full |
| only_fields | array | いいえ | 本文から必要な内容が明確にわかっている場合に使える、「full」の軽量な代替手段です。 指定したドットパスのみを返します。配列インデックスとワイルドカードに対応しています。 例:["data.id"]、["user.email", "user.role"]、["items[*].id", "meta.total"]。 必要なフィールドを維持しながら、通常は full と比べて 95% 以上削減できます。 |
| max_body_bytes | integer | いいえ | verbosity='normal' の場合の本文の最大サイズ(バイト、デフォルト:2048)。minimal/full では無視されます。 |
詳細
@cocaxcode/api-testing-mcp
API テスト向け、最も包括的な MCP サーバーです。以上。
MCP ツール 42 個 · 設定不要 · あらゆる MCP クライアントで動作
概要 · 話しかけるだけ · インストール · 機能 · ツールリファレンス · ストレージ · アーキテクチャ
クイック概要
API テスト向けの、最も包括的な MCP サーバーです。ツール 42 個、設定不要で、他に並ぶものはありません。単なるリクエスト送信ツールではありません。アサーション付き HTTP リクエスト、変数抽出を伴う複数ステップのフロー、スキーマを考慮したモックデータを使った OpenAPI のインポート、パーセンタイル指標を備えた負荷テスト、環境間のレスポンス比較、一括テストランナー、再利用可能なコレクション、ディレクトリスコープと永続的なデフォルト設定を備えた環境グループ、Postman のインポート/エクスポート、cURL エクスポートに対応する、包括的なテストワークベンチです。すべて自然な会話だけで操作できます。アカウントも、クラウドも、生成ファイルも不要です。すべてインラインで実行され、所有者であるあなたが管理できるプレーンな JSON として保存されます。
話しかけるだけ
ツール名やパラメーターを覚える必要はありません。やりたいことを説明すれば、AI が適切なツールを選びます。
"Create a group called my-project and add this directory as scope"
"Set up a dev environment with BASE_URL http://localhost:3000"
"Switch to prod for this session"
"Set dev as the default environment"
"Import my API spec from /api-docs-json"
"Show me all user endpoints"
"GET /users"
"Create a user with random data"
"Verify that DELETE /users/5 returns 204"
"Login as admin, extract the token, then fetch dashboard stats"
"How fast is /health with 50 concurrent requests?"
"Run all my saved smoke tests"
"Compare the users endpoint between dev and prod"
"Export the create-user request as curl"
"Export my collection to Postman"
OpenAPI 仕様をインポートしていれば、AI はすべてのエンドポイント、必須フィールド、有効な列挙値を把握しています。「ブログ記事を作成して」と伝えると、スキーマを読み取ってリクエストを正しく組み立てるため、推測する必要はありません。
インストール
Claude Code
claude mcp add --scope user api-testing -- npx -y @cocaxcode/api-testing-mcp@latest
Claude Desktop
設定ファイルに追加します(macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json)。
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
Cursor / Windsurf
プロジェクトのルートにある .cursor/mcp.json または .windsurf/mcp.json に追加します。
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
VS Code / Codex CLI / Gemini CLI
VS Code — .vscode/mcp.json に追加します。
{
"servers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
Codex CLI(OpenAI):
codex mcp add api-testing -- npx -y @cocaxcode/api-testing-mcp@latest
または、~/.codex/config.toml に追加します。
[mcp_servers.api-testing]
command = "npx"
args = ["-y", "@cocaxcode/api-testing-mcp@latest"]
Gemini CLI — ~/.gemini/settings.json に追加します。
{
"mcpServers": {
"api-testing": {
"command": "npx",
"args": ["-y", "@cocaxcode/api-testing-mcp@latest"]
}
}
}
クイックスタート
インストール後、相対パスが自動的に解決されるよう、環境を設定します。
"Create an environment called dev with BASE_URL http://localhost:3000"
API に Swagger/OpenAPI 仕様がある場合は、インポートします。
"Import my API spec from http://localhost:3000/api-docs-json"
「環境を一覧表示して」 と入力して確認します。作成した環境が表示されます。
機能
HTTP リクエスト
ヘッダー、クエリパラメーター、JSON ボディ、認証、{{variable}} の補間に対応した任意の HTTP メソッドを送信できます。相対 URL は BASE_URL を基準に自動解決されます。
"POST to /api/users with name Jane and email [email protected] using my bearer token"
対応:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS — Bearer/API Key/Basic 認証 — カスタムタイムアウト。
圧縮モード(v0.13+)
AI エージェントは、コンテキストウィンドウに取り込まれるすべてのバイトに対してコストを負担します。デフォルトでは、request はデバッグに必要な情報を損なうことなく、トークンを70〜95%削減した圧縮レスポンスを返すようになりました。圧縮は、次の3つのオプションパラメーターで制御できます。
| パラメーター | 値 | 動作 |
|---|---|---|
verbosity | 'minimal' / 'normal'(デフォルト)/ 'full' | 詳細レベルを制御します |
only_fields | ['user.id', 'items[*].name'] | 指定したボディパス(ドット記法+ワイルドカード)のみを返します |
max_body_bytes | 数値(デフォルトは2048) | 'normal'モードでのボディサイズの上限です |
モード:
minimal—status、timing、size_bytes、ボディの先頭200文字のみを返します。ヘルスチェック、ポーリングループ、または結果を待たない呼び出しに最適です。トークンを約95%削減します。normal(デフォルト)— フィルタリング済みのヘッダー(Date、Server、CF-*、Set-Cookieなどを除外)と、max_body_bytesで切り詰めたボディを返します。デバッグ用途の約80%をカバーします。トークンを約75%削減します。full— レスポンス全体を変更せずに返します。すべてのヘッダーまたはボディ全体が明示的に必要な場合に使用します。
5 KBのJSONレスポンスでの一般的な削減量(約1,500トークン):
| モード | 消費トークン数 | 削減率 |
|---|---|---|
full | 約1,500 | 0%(基準) |
normal | 約300〜400 | 約75% |
minimal | 約50〜80 | 約95% |
only_fields: ['data.id'] | 約30 | 約98% |
curl、WebFetch、その他の標準的な代替手段との実測値による直接比較については、以下の標準的な代替手段をご覧ください。
完全なレスポンスの取得: 各圧縮レスポンスにはcall_idが含まれます。後からボディ全体が必要になった場合は、inspect_last_response({ call_id })を呼び出してください。リクエストを再実行する必要はありません。これはrequest、assert、flow_runの各ステップで機能します。レスポンスは20件のリングバッファに保持され、.api-testing/last-responses/に1時間のTTLで保存されます。
// Example: normal (default) response
{
"call_id": "k3m9a2xp",
"status": 200,
"statusText": "OK",
"method": "GET",
"url": "https://api.example.com/users/1",
"timing": { "total_ms": 142 },
"size_bytes": 5324,
"headers": { "content-type": "application/json" },
"body": { "id": 1, "email": "...", "...": "..." },
"body_truncated": true,
"hint": "Body truncated to 2048 bytes (full size: 5324B). Call inspect_last_response({ call_id: \"k3m9a2xp\" }) for the full body.",
"tokens_saved_estimate": 820
}
標準的な代替手段:実際のトークンコスト
api-testingが利用できない場合にClaude Codeで使える標準的な手段(Bash+curl、WebFetchなど)と、このMCPを比較します。
要約: 生のcurlと比べて、requestはモードに応じてコンテキストトークンを**65〜97%**削減し、デバッグ情報は失われません。GET /api/v1/blogを実際に呼び出し、8件の投稿(約8.7 KBのJSON、レスポンスヘッダー19件)を返すケースで測定しました。
| エージェントの呼び出し方法 | MCPを使用? | 消費トークン数 | curlとの比較 |
|---|---|---|---|
Bash+curl(生の標準出力) | ❌ 標準機能 | 約2,170 | 基準 |
WebFetch(LLMによる要約) | ❌ 標準機能 | 約400〜800 | −65%、ただし認証/環境変数/レスポンス検査には非対応 |
request、verbosity=full | ✅ MCP | 約2,170 | 0%(curlと同じ、圧縮なし) |
request verbosity=normal(デフォルト) | ✅ MCP | 約750 | −65% |
request verbosity=minimal | ✅ MCP | 約50 | −97% |
request with only_fields: ["data[*].id","data[*].title"] | ✅ MCP | 約190 | −91% |
この表の数値が上記の「圧縮モード」セクションと若干異なるのは、この数値が実際のレスポンス1件に基づいているのに対し、前の表は5 KBの合成レスポンスでの一般的な削減量を示しているためです。傾向と桁数は同じです。
補足:
- デフォルトのモード(
normal)では、設定を変更しなくてもすでに65%削減されます。ノイズの多いヘッダー(Date、Server、CF-*、Set-Cookieなど)をフィルタリングし、ボディを2048バイトで制限します。 only_fieldsは、配列インデックスとワイルドカードに対応したドットパス(items[*].name)を受け付け、指定したフィールドのみを返します。- このMCPには、
{{variable}}による補間、保存済み環境、認証スキーマ、フロー、Postmanのインポート/エクスポート、サーバーに再リクエストせずにボディ全体を取得できるinspect_last_responseなど、標準機能には直接相当するものがない機能もあります。 - 登録されたMCPはそれぞれ、セッションごとに約300〜600トークンの固定オーバーヘッド(指示ブロック+ツール名)を追加します。一般的な損益分岐点は、セッションあたり1〜2回の実際の呼び出しです。
アサーション
構造化された合否結果でレスポンスを検証します。
"Verify that GET /api/health returns 200, body.status is ok, and responds in under 500ms"
PASS — 3/3 assertions passed
status === 200
body.status === "ok"
timing.total_ms < 500
10 個の演算子:eq、neq、gt、gte、lt、lte、contains、not_contains、exists、type
リクエストフロー
ステップ間で変数を抽出しながらリクエストを連鎖させます。認証フローや CRUD シーケンスに最適です。
"Login as [email protected], extract the access token, then use it to fetch all users"
ツールが実行する内容
flow_run({
steps: [
{
name: "login",
method: "POST",
url: "/auth/login",
body: { email: "[email protected]", password: "SecurePass#99" },
extract: { "TOKEN": "body.access_token" }
},
{
name: "get-users",
method: "GET",
url: "/api/users",
headers: { "Authorization": "Bearer {{TOKEN}}" }
}
]
})
OpenAPI のインポート
URL またはローカルファイル(JSON および YAML)から仕様をインポートします。インポートすると、AI はすべてのエンドポイント、パラメーター、スキーマを把握します。
"Import my API spec from http://localhost:3000/api-docs-json"
"Import the spec from ./openapi.yaml"
"What parameters does POST /users expect?"
$ref の完全な解決、および allOf、oneOf、anyOf に対応した OpenAPI 3.x をサポートします。OpenAPI 2.0 は部分的にサポートしています。
モックデータの生成
OpenAPI スキーマから現実的なテストデータを生成します。型、フォーマット(email、uuid、date-time)、列挙型、必須フィールドに準拠します。
"Generate mock data for creating a user"
{
"email": "[email protected]",
"name": "Test User 73",
"password": "TestPass123!",
"role": "admin"
}
負荷テスト
N 件のリクエストを同時に送信し、パフォーマンス指標を取得します。
"How fast is the health endpoint with 50 concurrent requests?"
LOAD TEST — GET /api/health
Requests: 50 concurrent
Successful: 50 | Failed: 0
Req/sec: 23.31
Min: 45ms | Avg: 187ms
p50: 156ms | p95: 412ms | p99: 523ms
Max: 567ms
レスポンスの差分比較
2 つのリクエストを実行し、レスポンスをフィールドごとに比較します。リグレッションの検出や環境間の比較に役立ちます。
"Compare the users endpoint between dev and prod"
一括テスト
コレクションに保存されたすべてのリクエストを実行し(またはタグで絞り込み)、概要を取得します。
"Run all my saved smoke tests"
BULK TEST — 8/8 passed | 1.2s total
health — GET /health → 200 (45ms)
list-users — GET /users → 200 (123ms)
create-post — POST /blog → 201 (89ms)
login — POST /auth/login → 200 (156ms)
コレクション
リクエストをタグ付きで保存して再利用します。リグレッションテストスイートを作成できます。
"Save this request as create-user with tags auth, smoke"
"List all requests tagged smoke"
環境
環境には変数(BASE_URL、トークン、API キーなど)が保存され、コンテキストごとに分離されます。システムには 3 つの基本概念があります。
グループ。 グループは環境をまとめ、ディレクトリに関連付けます。グループには、その環境を共有する N 個のスコープ(ディレクトリ)と、デフォルト環境が 1 つあります。グループ内に環境を作成すると、その環境はグループに属します。グループのスコープとなっているディレクトリに cd すると、その環境が自動的に利用可能になります。
デフォルト。 グループのスコープに入ると、デフォルト環境が自動的に有効になります。セッションをまたいで保持されるため、エディターを再起動したり、ターミナルを開き直したりしても、デフォルト環境はそのままです。一度設定すれば、あとは意識する必要はありません。
アクティブ。 アクティブ環境は、現在の変数解決に使用されている環境です。スコープに入るとデフォルト環境が設定されますが、いつでも切り替えられます。アクティブ環境の選択はセッション内でのみ有効で、再起動するとデフォルト環境に戻ります。
グローバル環境(グループに関連付けられていない環境)も引き続き利用できます。グローバル環境を有効にするには env_switch による明示的な切り替えが必要で、セッションをまたいで保持されません。
実用例:
"Create a group called my-api"
"Add this directory as scope to my-api"
"Create a dev environment with BASE_URL http://localhost:3000" <- auto-joins group, auto-default
"Create a prod environment with BASE_URL https://api.example.com"
"List environments" <- shows dev (active, default) and prod
"Switch to prod" <- session only
"Set prod as default" <- persists
自動補間。 URL、ヘッダー、クエリパラメーター、リクエストボディに含まれる {{variable}} は、リクエストの送信前にアクティブ環境に基づいて解決されます。BASE_URL を一度設定すれば、相対パスはすべてそのまま機能します。
認証情報がマシンの外に出ることはありません。 環境ファイルは ~/.api-testing/ にプレーンな JSON として保存されます。クラウドに同期されることも、エクスポートに埋め込まれることも、git で追跡されることもありません。トークンとシークレットは、本来あるべき場所、つまりあなたの管理下にあるディスク上に保管されます。
Postman のインポートとエクスポート
Postman を双方向でサポートしています。Postman と AI ワークフローの間をシームレスに移行できます。
"Import my Postman collection from ./exported.postman_collection.json"
"Export my collection to Postman"
"Export the dev environment for Postman"
インポートの詳細
コレクション: Postman v2.1 形式。フォルダーはタグになります。フォルダーまたはコレクションレベルから認証設定を継承します。raw JSON、x-www-form-urlencoded、form-data のボディに対応しています。
環境: value よりも currentValue を優先します。無効な変数はスキップします。activate フラグを任意で指定できます。
エクスポートの詳細
コレクション: リクエストはタグごとにフォルダーにまとめられます。認証設定は Postman のネイティブ形式に変換されます。{{variables}} はそのまま保持されます。
環境: すべての変数が、Postman 互換形式で enabled: true としてエクスポートされます。
ネイティブ形式でのエクスポートとインポート
コレクションと環境を、持ち運び可能な .atm/ フォルダーにエクスポートします。チームと共有したり、プロジェクト間でコピーしたりできます。
"Export my collection and dev environment"
your-project/
└── .atm/
├── collection.json
└── dev.env.json
注: 初回のエクスポート時に、
.atm/が.gitignoreに自動的に追加されます。
cURL エクスポート
保存したリクエストを、変数を展開済みのすぐに貼り付けて使える cURL コマンドに変換します。
"Export the create-user request as curl"
curl -X POST \
'https://api.example.com/users' \
-H 'Authorization: Bearer eyJhbGci...' \
-H 'Content-Type: application/json' \
-d '{"name":"Jane","email":"[email protected]"}'
ツールリファレンス
10 カテゴリにわたる 42 個のツール:
| カテゴリ | ツール | 数 |
|---|---|---|
| リクエスト | request | 1 |
| 検査 | inspect_last_response | 1 |
| テスト | assert | 1 |
| フロー | flow_run | 1 |
| コレクション | collection_save、collection_list、collection_get、collection_delete | 4 |
| 環境 | env_create、env_list、env_set、env_get、env_switch、env_rename、env_delete、env_spec、env_project_clear、env_project_list | 10 |
| グループ | env_group_create、env_group_list、env_group_delete、env_group_add_scope、env_group_remove_scope、env_set_default、env_set_group | 7 |
| API 仕様 | api_import、api_spec_list、api_endpoints、api_endpoint_detail | 4 |
| モック | mock | 1 |
| ユーティリティ | load_test、export_curl、diff_responses、bulk_test、export_collection、import_collection、export_environment、import_environment、export_postman_collection、import_postman_collection、export_postman_environment、import_postman_environment | 12 |
ヒント: ツールを直接呼び出す必要はありません。実行したい内容を説明すれば、AI が適切なツールを選びます。
ストレージ
すべてローカルに保存されます。データベースも、クラウド同期も、テレメトリーもありません。すべてのデータは ~/.api-testing/ にプレーンな JSON ファイルとして保存され、いつでも読み取り、バックアップ、削除できます。
~/.api-testing/
├── groups/ # Environment groups with scopes and defaults
├── environments/ # Environment variables — tokens, keys, passwords
├── collections/ # Saved requests (shareable, no secrets)
├── specs/ # Imported OpenAPI specs
└── project-envs.json # Session-only active environments (cleared on restart)
グローバルストレージとプロジェクトのエクスポート。 ~/.api-testing/ ディレクトリは、認証情報を保存する個人用のグローバルストアであり、認証情報が外部に出ることはありません。コレクションや環境をエクスポートすると、プロジェクトのルートにある .atm/ に保存されます。このフォルダーは初回のエクスポート時に .gitignore に自動追加されますが、コミットすることを選んだ場合でも、認証情報は ~/.api-testing/ に保存されたままで、.atm/ にコピーされることはありません。シークレットを漏らすことなく、.atm/ のエクスポートをチームと安全に共有できます。
デフォルトのストレージパスを変更します:
{
"env": { "API_TESTING_DIR": "/path/to/custom/.api-testing" }
}
警告:
API_TESTING_DIRを Git リポジトリ内のパスに変更する場合は、認証情報がプッシュされないよう、.api-testing/を.gitignoreに追加してください。
アーキテクチャ
src/
├── index.ts # Entry point (shebang + StdioServerTransport)
├── server.ts # createServer() factory
├── tools/ # 42 tool handlers (one file per category)
│ ├── request.ts # HTTP request (1)
│ ├── inspect.ts # inspect_last_response (1)
│ ├── assert.ts # Assertions (1)
│ ├── flow.ts # Request chaining (1)
│ ├── collection.ts # Collection CRUD (4)
│ ├── environment.ts # Environments + groups (17)
│ ├── api-spec.ts # OpenAPI import/browse (4)
│ ├── mock.ts # Mock data generation (1)
│ ├── load-test.ts # Load testing (1)
│ └── utilities.ts # curl, diff, bulk, import/export (11)
├── lib/ # Business logic (no MCP dependency)
│ ├── http-client.ts # fetch wrapper with timing
│ ├── storage.ts # JSON file storage engine (atomic writes)
│ ├── compress.ts # Response compression + verbosity modes
│ ├── response-cache.ts # Ring buffer + disk cache for inspect
│ ├── schemas.ts # Shared Zod schemas (HttpMethodSchema, AuthSchema)
│ ├── url.ts # BASE_URL resolution
│ ├── path.ts # Dot-notation accessor (body.data.0.id)
│ ├── interpolation.ts # {{variable}} resolver
│ └── openapi-parser.ts # $ref + allOf/oneOf/anyOf resolution
└── __tests__/ # 10+ test suites, 171 tests
スタック: TypeScript(strict)・MCP SDK・Zod・Vitest・tsup
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。