mockanything について
mockanything は、組み込みパック、OpenAPI 定義、HAR の記録から、状態を持つ API のローカルなツインを実行します。実際のプロバイダーにリクエストを送らずに連携をテストしたい開発者やエージェント向けです。
主な機能
- 01パック、仕様、HAR から状態付きツインを作成
- 02プロバイダー形式の応答、エラー、Webhookを再現
- 03再現可能な障害を含むカオスシナリオ
- 04リクエストと状態を確認するローカルダッシュボード
- 05CLIとMCPによるツイン操作
活用シーン
- 01実際の課金なしで決済フローをテスト
- 02Webhook検証をローカルで確認
- 03タイムアウトやAPIエラーの処理を検証
- 04API仕様や記録からツインを作成
MCP 対応
MCPサーバーを通じて、クライアントはツインの起動・停止、イベントや状態の確認、シナリオやカオスの設定、Webhook管理、テスト時刻の変更を行えます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
14掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| name | string | いいえ | このツインの名前(デフォルト:その ID) |
| port | integer | いいえ | ポート(デフォルト:空いているポート) |
| chaos | boolean | いいえ | |
| source | string | いいえ | |
| persist | boolean | いいえ | 再起動後もこのツインのオブジェクトを保持します(~/.mockanything/state に保存) |
| webhooks | array | いいえ | webhook の送信先となる localhost の URL |
| definition | object | いいえ |
詳細
Mock Anything
API の動作する双子を、1 つのコマンドでマシン上で実行できます。API キーも、サンドボックスへの登録も、料金も不要です。
npx @shipatmidnight/mockanything stripe
# → Stripe twin running at http://localhost:4010/v1
実際の API の代わりにアプリやエージェントをこの URL に向けると、対応するフローでは実際の API と同じように動作します。顧客の作成、テストカードへの請求、署名付き Webhook の取得、返金などを行えます。すべて模擬データであり、アプリからの呼び出しが実際のプロバイダーに到達することはありません。
Mock Anything は固定リストだけでなく、ほとんどの公開 API で動作します(2026-10-29 の測定では、public APIs.guru ディレクトリ内のすべての API が双子として動作しました)。
npx @shipatmidnight/mockanything stripe # a hand-tuned pack
npx @shipatmidnight/mockanything ./openapi.yaml # your own OpenAPI / Swagger file
npx @shipatmidnight/mockanything https://example.com/openapi.json
npx @shipatmidnight/mockanything slack # any name in the public APIs.guru directory (2,500+ APIs)
理由
エージェントは、決済、SMS、メール、開発者向け API を呼び出すコードを日々作成しています。現在これをテストするには、実際のキー(エージェントが支払いを実行したり、実在する人にメッセージを送ったりする可能性があります)、サンドボックス(プロバイダーごとにアカウントとキーが必要で、地域限定のプロバイダーの多くには、そもそも十分な環境がありません)、またはエージェントの予想外の動作ですぐに壊れる手書きのモックが必要です。
双子はモックとは異なります。
- 状態を保持します。 顧客を POST し、その後 GET で取得できます。支払いを返金すると、残高が変わります。何かを削除すると、実際に消えます。
- プロバイダーと同じように動作します。 実際の ID 形式、リストのページネーション、エラー形式、ステータスのライフサイクル(
requires_payment_method → succeeded、queued → sent → delivered)に対応しています。 - Webhook を送信します。 プロバイダーと同じ方式で署名するため、検証コードを変更せずに実行できます。
- 扱いにくいケースにも対応します。 カードの決済拒否、3-D Secure、メールのバウンス、SMS の配信不能、参照 ID の重複、レート制限などを扱えます。
- カオスモード(
--chaos)では、タイムアウト、5xx エラー、429、応答の遅延、Webhook の重複や順序の入れ替わりが発生します。シード値を指定できるため、発生した障害を再現できます。
組み込みパック
テストスイートで各プロバイダーの公式 SDK と照合した、手作業で調整された双子です。
| パック | フロー | テスト値 |
|---|---|---|
stripe | 顧客、PaymentIntents(確定、手動キャプチャ、キャンセル)、返金、Checkout Sessions、Webhook エンドポイント、イベント | pm_card_visa、pm_card_chargeDeclined、pm_card_chargeDeclinedInsufficientFunds、pm_card_threeDSecure2Required … |
paystack | 初期化 → テスト用チェックアウトページ → 検証、保存済みカードへの請求、顧客、返金 | ローカルのテストページで承認/拒否 |
twilio | SMS の送信、ステータスコールバック(queued → sent → delivered)、取得、一覧表示、削除 | +15005550001(無効)、+15005550002(ルーティング不可)、+15005550004(配信停止) … |
resend | 送信、取得、一覧表示、予約、キャンセル、配信、バウンス、苦情イベント | [email protected]、[email protected]、[email protected] |
github | リポジトリ、イシュー(オープン、編集、クローズ、再オープン)、コメント、プルリクエスト(オープン、マージ) | 任意の owner/repo を使用でき、初期状態は空です |
openai | Chat Completions と Responses API(ストリーミングの有無を選択可能)、埋め込み、モデル。返信は定型で [mock] から始まり、モデルは実行されません | シナリオ tool_call、rate_limit、insufficient_quota、context_length_exceeded、server_error |
anthropic | Messages(ツール使用を含み、ストリーミングの有無を選択可能)、トークン数のカウント、モデル。返信は定型で [mock] から始まり、モデルは実行されません | シナリオ tool_use、rate_limit、overloaded、invalid_request、api_error |
mockanything env <pack> を実行すると、公式 SDK を双子に接続するためのスニペットが表示されます。例:
const stripe = new Stripe("sk_test_mockanything", { host: "localhost", port: 4010, protocol: "http" });
その他の API
OpenAPI 3.x または Swagger 2.0 の定義(ファイル、URL、または API 名だけでもかまいません)を Mock Anything に渡すと、仕様を読み取って状態を持つ双子を構築します。
/thingsと/things/{id}は、作成、一覧表示、読み取り、更新、削除ができるコレクションになります。/things/{id}/cancelのようなパスは、オブジェクトのstatus値に対応付けられた状態変更になります。- ネストされたパスはスコープが限定されるため、あるリポジトリの issue が別のリポジトリに表示されることはありません。
- レスポンスのエンベロープ、ページネーションの形式、エラーの形式、認証、OAS 3.1 の Webhook は仕様から読み取られます。
- 仕様に記載のないパスも汎用 REST として動作します(
x-mockanything-fallbackで示されます)。 - 読み取り専用のリソース(API で作成されないもの)は、仕様に沿った形のサンプルオブジェクトを生成して返すため、検索や一覧が空になりません。
推測された内容を確認し、変更できます。
npx @shipatmidnight/mockanything inspect ./openapi.yaml --out twin.yaml # edit twin.yaml
npx @shipatmidnight/mockanything twin.yaml
どれくらいの API が動作しますか?
scripts/coverage.ts を使って 2026-10-29 に測定しました。各仕様から双子を構築し、オブジェクトを作成したあと、すべての操作を呼び出します(API ごとに最大 40 件)。
| ソース | API 数 | 起動した双子 | サーバーエラーなしで完了した呼び出し | 成功した呼び出し |
|---|---|---|---|---|
| 公開されている APIs.guru ディレクトリ内のすべての API | 2,528 | 2,528 | 37,770 / 37,770 | 90.2% |
プロバイダーが公開している最新の仕様(mockanything list) | 54 | 54 | 1,988 / 1,988 | 96.8% |
成功しなかった呼び出しには、適切なエラーが返されます。ほとんどは、作成されていない ID に対する「見つかりません」や、親オブジェクトの欠落です。起動して応答することと、実際の API に一致することは同じではありません。verify で測定できます。
プロバイダーが最新の仕様を公開している人気の API(Square、PayPal、Adyen、Discord、Jira、Cloudflare、Vercel、Supabase、Clerk、Hugging Face など)は、古くなっていることの多いディレクトリではなく、プロバイダー自身が公開しているソースから取得されます。すべての API は mockanything list で確認できます。
公開されている Stripe、Twilio、GitHub、Resend の仕様から直接構築した双子は、手作業での調整なしに、公式 SDK の基本的な作成/読み取り/更新/一覧表示/削除のフローを通過します(scripts/conformance.ts)。
記録から作成する
アプリから実際の API への通信を記録し(ブラウザーの DevTools → Network → 「HAR としてすべて保存」、または HAR を書き出す任意のプロキシを使用)、ファイルから双子を起動します。
npx @shipatmidnight/mockanything ./checkout.har
Mock Anything は、確認したエンドポイント、ID 形式、一覧の形式、ステータスのライフサイクルを再構築します。フィールド名、型、ID 形式、短いステータス/タイプコードのみを保持します。ID は同じ形式の架空の値に置き換えられ、記録に含まれるヘッダー値、Cookie、クエリ値、自由記述テキスト、数値、ブール値が双子にコピーされることはありません。メールアドレス、URL、日付は架空の値に置き換えられます。
仕様がまったくない場合は、エージェントに作成させましょう。MCP ツール twin_from_docs がドキュメントのページを読み取り、短い形式ガイドをエージェントに渡します。エージェントが双子の定義を作成し、twin_start で起動します。
エージェント向け
スキルとして使う(ファイル以外の設定は不要)
skills/mock-anything を ~/.claude/skills/(またはエージェントのスキルフォルダー)にコピーします。その後、エージェントに「Stripe をモックして」「偽の Notion に対してこれをテストして」と伝えるか、仕様、HAR ファイル、ドキュメントのページを指定します。このスキルはコマンドラインのみを使用し、双子を起動して、アプリの接続先を設定し、操作します。
npx @shipatmidnight/mockanything events # requests and webhooks the twin saw
npx @shipatmidnight/mockanything state # objects it holds
npx @shipatmidnight/mockanything scenario card_declined # force an edge case on the next call
npx @shipatmidnight/mockanything chaos 5xx,429 # failures (chaos off to stop)
npx @shipatmidnight/mockanything clock 3d # move time forward
npx @shipatmidnight/mockanything reset
ドキュメントのページしかない API の場合は、npx @shipatmidnight/mockanything docs <url> でページのテキストと双子の形式をエージェントに渡します。エージェントは twin.json を作成し、npx @shipatmidnight/mockanything validate twin.json で検証してから起動します。
MCP
claude mcp add mockanything -- npx -y @shipatmidnight/mockanything mcp
Cursor、Windsurf などの MCP クライアント:
{ "mcpServers": { "mockanything": { "command": "npx", "args": ["-y", "@shipatmidnight/mockanything", "mcp"] } } }
ツール:twin_start、twin_from_docs、twin_env、twin_events、twin_state、twin_scenario、twin_chaos、twin_webhook_add、twin_emit、twin_advance_clock、twin_reset、twin_stop、twin_list、packs_list。
twin_start は、MCP サーバーの作業ディレクトリ内にあり、隠しファイルではない .json、.yaml、.yml、.har ファイルのみを読み込みます。サーバーの環境で MOCKANYTHING_ALLOW_LOCAL=1 を設定しない限り、エージェントによるローカルマシン上の URL へのアクセスは無効です。
エージェントは、キーを求めることなく、「Stripe のツインを起動してチェックアウトを構築し、カードが拒否されるようにして、自分のコードが適切に処理するか確認して」と指示できます。
再起動後もデータを保持する
npx @shipatmidnight/mockanything stripe --persist # ~/.mockanything/state/stripe.json
npx @shipatmidnight/mockanything stripe --state ./twin.json # or a file you choose
オブジェクト、ID カウンター、テスト用クロック、Webhook シークレット、登録済みの Webhook エンドポイントは、変更のたび、およびツインの停止時に保存されます。ファイルを読み取れるのはあなただけです。削除するか、ダッシュボードで「Reset」を押すと、初期状態からやり直せます。エージェントも twin_start と persist: true で同じ機能を利用できます。
ダッシュボード
各ツインにはローカルダッシュボードがあります(アクセストークン付きのリンクは起動時に表示されます)。ライブリクエストとレスポンス、送信した Webhook とその配信状況、ツインに保存された状態、強制するシナリオ、カオス制御を確認できます。
コマンドライン
mockanything <api> start a twin (pack, API name, OpenAPI file or URL)
mockanything list built-in packs
mockanything inspect <api> print the inferred definition (--out file.yaml)
mockanything validate <file> check a twin definition
mockanything env <api> config snippets
mockanything verify <api> how closely the twin matches the real API (your test key)
mockanything running | events | state | scenario [name] | chaos <modes|off> | clock <duration> | reset
mockanything docs <url> | guide build a twin from a docs page
mockanything mcp MCP server over stdio
--port <n> --webhook <url> --allow-webhook-host <host> --cors <origin>
--chaos[=timeout,5xx,slow,429,dup-webhooks,out-of-order] --chaos-rate <0..1> --seed <n>
--persist --state <file> --overrides <file> --json
デフォルトで安全
localhostのみで待ち受けます。ホストを許可しない限り、Webhook の送信先もlocalhostのみに制限されます。- ライブキー(
sk_live_…など)や、実際のカード番号のように見える番号は拒否します。プロバイダーが公開しているテスト値を使用してください。 - テスト用チェックアウトページはシンプルな形式で、「実際の決済ではありません」というバナーが表示され、あなたのマシン上にのみ存在します。
- テレメトリーはありません。外部への通信は、指定した URL への Webhook の送信、指定した API 定義のダウンロード(指定した URL、プロバイダーが公開しているソース、または APIs.guru ディレクトリから)、テストキーを使ったプロバイダーのサンドボックスへの
verify呼び出し、およびnpxでインストールまたは実行するときの npm に限られます。
ツインの忠実度はどの程度ですか?
ツインの品質は、構築の基になった情報の正確さに左右されます。パックは各 API の主要なフローをカバーしますが、すべてのエンドポイントを網羅しているわけではありません。また、推論によるツインは推測を含みますが、その内容を確認して上書きできます。
忠実度は verify で測定できます。自分のテストモードキーを使い、同じスクリプト化された呼び出しをツインとプロバイダーの実際のサンドボックスに対して実行して、ステータスコード、フィールド名、フィールド型、ID 形式、エラーコードを比較します。
npx @shipatmidnight/mockanything verify stripe --key sk_test_... # or set MOCKANYTHING_SANDBOX_KEY
npx @shipatmidnight/mockanything verify paystack --key sk_test_... --out report.md
npx @shipatmidnight/mockanything verify ./openapi.yaml --against https://api.example.com --key ... # read-only list calls
✓ Create a customer 200 / 200 <score>
✓ Declined card (error) 402 / 402 <score>
...
Fidelity <score> status · fields · types · ids and codes
テストモードキーでのみ実行でき(ライブキーは拒否されます)、組み込みスイートが使用するプロバイダー自身の API ホスト以外のホストにキーを送信する前に確認を求めます(確認を省略するには --yes を指定します)。呼び出しはおよそ 1 秒に 1 回行われ、1 回の実行には上限があります。また、サンドボックス内にいくつかのテストオブジェクトを作成します(Stripe スイートでは、作成した顧客を後で削除します)。レポートに記載されるのはフィールドパス、型、コード値のみで、レスポンスデータやキーは含まれません。組み込みスイートは stripe と paystack です。任意のツイン用に独自のスイートも作成できます(packs/verify/ を参照)。Webhook はまだ比較されません。
mockanything list では、各パックの公開スコアと測定日を確認できます。ツインを使って素早く構築、テストし、リリース前の最終確認はプロバイダーのサンドボックスで行ってください。
ツイン定義
組み込みか推論によるものかを問わず、すべてのツインは、単一のエンジンで実行されるプレーンな YAML/JSON 定義です。定義はデータであり、コードを実行することはできません。例は packs/ を、形式は src/mcp/guide.ts を参照してください。
コントリビューション
より多くの API、特に地域固有の API のパックを歓迎します。まず CONTRIBUTING.md をお読みください。パックに含められるのは事実(パス、フィールド、エラーコード、文書化されたテスト値)のみで、ドキュメントの文章やロゴをコピーして含めることはできません。
コミュニティ
質問、アイデア、活用例の共有は、Ship at Midnight Discord へどうぞ。すべてのツールを扱うサーバーで、Mock Anything 専用のチャンネルもあります。
ライセンスと通知
Apache-2.0。詳しくは LICENSE と NOTICE をご覧ください。
Mock Anything は、独立した開発者による無料の非営利な情熱プロジェクトです。シミュレート対象の API を提供するいかなる企業とも、提携、承認、スポンサー関係はありません。Stripe、Paystack、Twilio、Resend、GitHub、OpenAI、Anthropic、Claude などの名称は、それぞれの所有者の商標であり、互換性を示す目的でのみ使用しています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。