mcpField
M
mockanything

mockanything

ローカル
shipatmidnight.dev開発ツール16 日前に更新

mockanything について

mockanything は、組み込みパック、OpenAPI 定義、HAR の記録から、状態を持つ API のローカルなツインを実行します。実際のプロバイダーにリクエストを送らずに連携をテストしたい開発者やエージェント向けです。

主な機能

  1. 01パック、仕様、HAR から状態付きツインを作成
  2. 02プロバイダー形式の応答、エラー、Webhookを再現
  3. 03再現可能な障害を含むカオスシナリオ
  4. 04リクエストと状態を確認するローカルダッシュボード
  5. 05CLIとMCPによるツイン操作

活用シーン

  1. 01実際の課金なしで決済フローをテスト
  2. 02Webhook検証をローカルで確認
  3. 03タイムアウトやAPIエラーの処理を検証
  4. 04API仕様や記録からツインを作成

MCP 対応

MCPサーバーを通じて、クライアントはツインの起動・停止、イベントや状態の確認、シナリオやカオスの設定、Webhook管理、テスト時刻の変更を行えます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"shreyassaw5394-mockanything": {
"command": "npx",
"args": [
"-y",
"@shipatmidnight/mockanything"
]
}
}
}
起動コマンドnpx -y @shipatmidnight/mockanything

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@shipatmidnight/mockanything0.2.2

ツール

14

掲載時のツール一覧 · 1 週間前に更新

パラメーター型必須説明
namestringいいえこのツインの名前(デフォルト:その ID)
portintegerいいえポート(デフォルト:空いているポート)
chaosbooleanいいえ
sourcestringいいえ
persistbooleanいいえ再起動後もこのツインのオブジェクトを保持します(~/.mockanything/state に保存)
webhooksarrayいいえwebhook の送信先となる localhost の URL
definitionobjectいいえ

詳細

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初期化 → テスト用チェックアウトページ → 検証、保存済みカードへの請求、顧客、返金ローカルのテストページで承認/拒否
twilioSMS の送信、ステータスコールバック(queued → sent → delivered)、取得、一覧表示、削除+15005550001(無効)、+15005550002(ルーティング不可)、+15005550004(配信停止) …
resend送信、取得、一覧表示、予約、キャンセル、配信、バウンス、苦情イベント[email protected]、[email protected]、[email protected]
githubリポジトリ、イシュー(オープン、編集、クローズ、再オープン)、コメント、プルリクエスト(オープン、マージ)任意の owner/repo を使用でき、初期状態は空です
openaiChat Completions と Responses API(ストリーミングの有無を選択可能)、埋め込み、モデル。返信は定型で [mock] から始まり、モデルは実行されませんシナリオ tool_call、rate_limit、insufficient_quota、context_length_exceeded、server_error
anthropicMessages(ツール使用を含み、ストリーミングの有無を選択可能)、トークン数のカウント、モデル。返信は定型で [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 ディレクトリ内のすべての API2,5282,52837,770 / 37,77090.2%
プロバイダーが公開している最新の仕様(mockanything list)54541,988 / 1,98896.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 などの名称は、それぞれの所有者の商標であり、互換性を示す目的でのみ使用しています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。