◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-07-08上級

MCP コネクタを申請・無人運用に回す前に、各ツールを契約テストで確かめる

手元で動いた MCP コネクタをそのまま無人ジョブに繋ぐと、応答形状の誤読や書き込みの二重発火で静かに壊れます。ツール記述・応答契約・冪等性・レイテンシを機械検証する小さなハーネスの作り方を、実測値とともにまとめました。

MCP54Claude API128契約テスト無人運用9TypeScript24

✦ プレミアム記事

手元で一度動いたコネクタを、そのまま夜間の無人ジョブへ繋いだ夜のことでした。翌朝ログを開くと、同じ記事更新の書き込みが 2 回走っていました。ツールの中身は正しく、権限も足りていて、対話で叩いたときは一度も再現しなかったのに、です。

原因はコネクタ側ではなく、その手前にありました。ネットワークが一瞬詰まってクライアントがリトライしたとき、書き込みツールに冪等性がなく、同じ操作が二重に適用されてしまったのです。対話中の私は目の前で結果を見て気づけますが、無人ジョブには見てくれる人がいません。7 月の更新で、作った MCP コネクタを Claude から直接ディレクトリへ申請できるようになりました。誰かに使ってもらう手前、あるいは自分の夜間ジョブに預ける手前で、「手元で動いた」を「契約として保証されている」に引き上げておきたい、と強く思った出来事でした。

その保証を機械で与える小さな契約テストハーネスを、これから TypeScript の MCP SDK で一段ずつ組み立てていきます。

手元で動いたのに、夜のジョブで静かに壊れた

対話でコネクタを叩く確認には、致命的な死角があります。人間が一度ずつ、成功したときの応答だけを見て「動いた」と判断してしまうことです。

無人運用で壊れるのは、たいてい成功パスの外側です。ツールがエラーを isError: true の構造化応答として返したのに、呼び出し側がそれを成功と読み違える。応答の形が前回と微妙に変わっていて、後段のパースが黙って空を掴む。リトライで書き込みが二重に走る。どれも、目の前で一度叩くだけの確認では絶対に表面化しません。

私自身、個人開発で複数の技術ブログの更新をモデルに任せていて、痛感しています。無人ジョブの信頼性は、コネクタが「一番良いときにどう動くか」ではなく、「揺れたときに約束を守るか」で決まります。だからこそ、申請や本番運用に出す手前で確かめるべきは機能の有無ではなく、ツールが守ると宣言した契約そのものです。

契約テストが確かめるべき4つの性質

契約テストは、単体テストとも E2E とも少し違います。コネクタが公開している「約束」を、外側のクライアントの立場から機械的に突き合わせる作業です。無人運用に出す前に、最低限この 4 つを固定します。

性質確かめること破れたときに起きること
自己記述全ツールに説明文と有効な inputSchema があるかモデルがツールを誤用・無視する
応答契約正常系の応答形状が宣言どおりか後段のパースが黙って空を掴む
冪等性書き込みを2回呼んでも副作用が1回かリトライで二重発火する
レイテンシツール別の応答時間が予算内かタイムアウトで無人ジョブが落ちる

順に、実際に動くコードへ落としていきます。以降は @modelcontextprotocol/sdk のクライアントを使い、テスト対象のコネクタへ外側から接続する構成を前提とします。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦MCP コネクタの全ツールを列挙し、説明文と inputSchema の欠落を申請前に自動検出する検証コード
✦書き込みツールの二重発火をセンチネル方式で検知する冪等性テストの実装(p95 レイテンシ計測つき)
✦ツール別の p50/p95 レイテンシから、無人ジョブのタイムアウト予算を根拠を持って決める手順
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-05-20
Claude Agent SDK で複数 MCP サーバを束ねるときのツール名衝突 — 名前空間と動的調停の設計
GitHub MCP と Linear MCP の create_issue が同居したとき、Sonnet 4.6 はどちらを呼ぶか分かりません。複数 MCP を束ねる Claude Agent SDK アプリで踏むツール名衝突の構造、TypeScript で書ける Reconciler の実装、そして本記事に最初に載せた schemaHash が5種類のスキーマ変更を全て見逃していた実測と訂正までをまとめます。
⬡ API & SDK2026-05-04
Bun × Claude API で本番運用するエッジAIサービス — Node.js移行の判断軸と落とし穴を回避する実装パターン
Claude APIをBun上で本番運用するための実装ガイド。Node.jsからの移行判断軸・組み込みSQLite/WebSocketの活用・ストリーミング最適化・典型的な落とし穴の回避策まで、動作するコードと実測値で解説します。
⬡ API & SDK2026-04-25
Claude API × Convex でリアクティブな AI アプリを本番構築する — データフロー設計とエージェントパターン
Convex のリアクティブデータベースと Claude API を組み合わせて、本番運用に耐えるチャット・エージェント系アプリを構築する方法をまとめました。スキーマ設計、Action/Mutation/Query の境界、ストリーミング、ツール状態管理、冷え始めの落とし穴まで、開発現場の判断軸を共有します。