mendapi について
mendapiは、上流APIの変更がコードベースに及ぼす影響を検出し、移行案を作成します。ソースコードを端末外へ送らずに影響を調べたいチーム向けで、スキャナーと修正機能はローカルで動作します。
主な機能
- 01API変更フィードをSQLiteに同期
- 02影響するファイル・行・シンボルを特定
- 03検出結果の信頼度を評価
- 04レビュー用の移行差分を作成
- 05修正の適用を選択可能
活用シーン
- 01コードベースへのAPI変更の影響を確認
- 02SDK移行案をレビュー
- 03上流更新前に影響箇所を特定
MCP 対応
stdioのMCPサーバーは、scan、deps、fix、revalidate、changesのツールを公開します。呼び出しはローカルCLIとSQLiteデータベースを使用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| repo | string | はい | スキャン対象のリポジトリへの絶対パスまたは相対パス |
| provider | string | いいえ | 任意:単一のプロバイダーに限定します(例:"stripe") |
| include_prereleases | boolean | いいえ | 任意:プレリリースの変更を含めます(デフォルトは false) |
詳細
mendapi
依存しているすべての API に対応する Dependabot です。 上流の API プロバイダーを監視して破壊的変更を検出し、コードベースをスキャンして影響を特定します。連携が壊れる前に、修正 PR を作成します。
最初の結果まで 30 秒
# In any repo — zero config, zero npm dependencies
npx mendapi sync # one network call: fetch the change feed
npx mendapi scan --out impact.json # local only, from here on
npx mendapi fix --from-report impact.json
sync は上流 API の変更フィードをローカルの SQLite データベースに取り込みます。ネットワークにアクセスする唯一のコマンドで、一度実行すれば完了です(その後は、データを更新したいときに実行してください)。
scan は、実際にコードへ影響する上流の破壊的変更をすべて、ファイル、行、シンボルとともに信頼度スコア付きで報告します。fix はレビュー可能な差分として移行案を作成します。--apply を指定するまで、ファイルには一切変更を加えません。どちらのコマンドも、マシンの外にあるものを読み取ったり書き込んだりすることはありません。
AI コーディングエージェントをお使いですか?1 行の設定で、mendapi を Claude Code の MCP サーバーとして接続できます(Cursor やその他すべての MCP クライアントでも動作します。詳細はこちら)。
claude mcp add mendapi -- npx mendapi mcp
Node.js 22.13 以降が必要です。スキャナー、修正ツール、レビュー CLI にはネットワーク関連のコードが一切含まれておらず、すべてローカルで動作します。
セキュリティモデル(最初にお読みください)
このツールは、ソースコードをマシンの外に出せないチーム向けに設計されています。セキュリティモデルは、よくある質問の項目ではなく、製品そのものです。
- コードがマシンの外に出ることはありません。 スキャナーはローカルまたは CI で動作します。デフォルトでは何もアップロードされません。スキャナー、修正ツール、レビュー CLI にはネットワーク関連のコードが一切含まれていません(これらのファイルにネットワーク関連のプリミティブが現れるとビルドが失敗するテストスイートによって、機械的に保証されています)。
- 報告されるのはメタデータのみで、明示的なオプトインが必要です。 ホスト型ダッシュボードへの結果報告を選択した場合、ペイロードビルダー(
payload.js)は、プロバイダー名、SDK のバージョン、ファイル名、行番号、シンボル名のみを許可リストに基づいて構築します。コードスニペットを含めることは構造上不可能です。ペイロードのスキーマにそのフィールドが存在しないためです。報告には明示的な--report-toフラグが必要で、デフォルトでは有効になりません。 - シークレットを徹底的に秘匿します。 OpenAI、Stripe、AWS、GitHub、Slack、JWT、ベアラートークン、一般的なキーの代入など、15 種類のシークレットパターンを、送信ペイロードのすべてのフィールドから除去します。さらに、禁止されたキーや未加工のシークレットが残っている場合、送信前のアサーションによって例外が発生します。
- 監査可能な設計です。 CLI はオープンソースなので、セキュリティチームが何を読み取り、何が送信されるのか(送信される場合)を、1 行ずつ検証できます。
- GitHub の権限は最小限です。 修正 PR には、選択したリポジトリで
contents:readとpull_requests:writeのみに権限を限定した GitHub App を使用します。管理者権限は決して付与しません。 - セルフホストも可能です。 エンタープライズプランでは、変更フィードを含むスタック全体をファイアウォール内で実行できます。
機能
3 つのコンポーネントが連携して一連の処理を行います。
| コンポーネント | 役割 | 実行場所 |
|---|---|---|
| Watcher | SDK リリースフィードと公式の開発者向け変更履歴を通じて、主要な API プロバイダー 20 社(Stripe、OpenAI、Anthropic、Shopify、Twilio、Slack、GitHub、Google、AWS、Plaid、PayPal、Meta、Cloudflare、Vercel、Supabase、Firebase、Notion、HubSpot、Salesforce、SendGrid)を監視します。各変更を分類(破壊的変更/非推奨/追加/修正/ドキュメントのみ)し、構造化された SQLite データベースに保存します。 | 当社のインフラ(またはお客様のインフラ、セルフホスト) |
| Scanner | 変更データベースを読み取り、リポジトリで実際に使用されているプロバイダーを検出します(SDK のインポート、API ホスト、環境変数などを、単純な grep ではなくコンテキストを考慮して検出)。各破壊的変更の影響を受ける正確なファイル、行、シンボルを特定します。3 段階の信頼度スコアリングと、オプションの LLM によるセマンティックレビューを組み合わせることで、誤検知をほぼゼロに抑えます。 | ローカル(お使いのマシンまたは CI) |
| Fixer | 決定論的な移行ルールパック(例:openai-v3-to-v4、stripe-v7-to-v8)を適用してレビュー可能な差分を作成し、専用ブランチに修正 PR を作成します。コミットメッセージには公式の移行ガイドを引用します。 | デフォルトではローカル、有料プランではホスト型 |
クイックスタート
Node.js 22.13 以降が必要です(組み込みの node:sqlite を使用します)。npm 依存関係はありません。
# Fetch the latest API change feed (the only command that touches the network)
mendapi sync
# Scan the current repo against the breaking-change database (zero config)
mendapi scan
# Or scan a specific repo and save the report
mendapi scan --repo /path/to/your/repo --out impact.json
# Review medium-confidence findings (optional LLM semantic pass)
mendapi review impact.json --pending
# Preview fixes (dry-run: writes a unified diff, changes nothing)
mendapi fix --from-report impact.json
# Create a fix branch + commit + PR-ready description (local only;
# --push is required to actually push, and is never implied)
mendapi pr --repo /path/to/your/repo --from-report impact.json
チェックアウトから実行する場合も、node app/cli.js <command> で同じように動作します。
修正の例
これは実際の出力です。openai-node v3 から v4 への移行パックについて、テストスイートでバイト単位まで固定している正確な差分です。文字列とテンプレートリテラル内で従来の呼び出しに言及している2行に注目してください。ルールはテキストパターンではなく構文木内の呼び出し位置を基準にするため、codemod はどちらも変更しません。
--- a/lib/ai.js
+++ b/lib/ai.js
@@ -1,28 +1,27 @@
// Demo service using the legacy openai-node v3 SDK (pre-v4 breaking change).
// Docs note: openai.createChatCompletion({...}) was the v3 entry point.
-const { Configuration, OpenAIApi } = require('openai');
+const OpenAI = require('openai');
// This string mentions the legacy call and must never be rewritten by the fixer:
const LEGACY_HINT = 'if you still call openai.createChatCompletion( upgrade to v4';
const AUDIT_LOG_LINE = `migrating away from .createEmbedding( for tenant`;
-const configuration = new Configuration({ apiKey: process.env.OPENAI_API_KEY });
-const openai = new OpenAIApi(configuration);
+const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function summarize(text) {
- const response = await openai.createChatCompletion({
+ const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: `Summarize: ${text}` }],
});
- return response.data.choices[0].message.content;
+ return response.choices[0].message.content;
}
async function embed(text) {
- const response = await openai.createEmbedding({
+ const response = await openai.embeddings.create({
model: 'text-embedding-ada-002',
input: text,
});
- return response.data.data[0].embedding;
+ return response.data[0].embedding;
}
module.exports = { summarize, embed };
各移行パックには、このように固定された差分が付属しています。パックの出力がゴールドエビデンスからずれると、ビルドは失敗します。同じバイト一致の保証を備えたものが、さらに6つプロバイダーガイドに埋め込まれています:OpenAI、AWS、Cloudflare、PayPal、Vercel、Stripe、Shopify。
AI コーディングエージェントから利用する(MCP)
mendapi mcp は、stdio 上で Model Context Protocol サーバーを起動します。オフライン優先で、ネットワーク通信はありません。すべてのツール呼び出しは、ローカル CLI をローカルの SQLite データベースに対してのみ実行し、サーバーに npm 依存関係はありません。現行の MCP リビジョン(2026-07-28、リクエストごとの _meta バージョンネゴシエーションと server/discover)に対応し、initialize ハンドシェイク(2025-06-18 / 2025-03-26)を使用する古いクライアントとの完全な後方互換性も維持します。破壊的変更を修正するツールを、単一の時代にしか対応しないものにすべきではないため、両方の時代に対応するサーバーです。
Claude Code(1行):
claude mcp add mendapi -- npx mendapi mcp
Cursor(または JSON 設定の MCP クライアント) — .cursor/mcp.json に追加します:
{
"mcpServers": {
"mendapi": { "command": "npx", "args": ["mendapi", "mcp"] }
}
}
公開されるツール:scan、deps、fix、revalidate、changes — CLI の --json フラグと同じ schema_version 付き JSON です。すべてのツールカタログと自律メンテナンスの手順については、ドキュメントのAI エージェント向けページをご覧ください。
精度が重要な理由
アラート疲れは、このようなツールの役目を果たせなくします。スキャナーでは、すべての検出結果を次のルールで判定します。
- ソースを考慮したエビデンスルール — SDK のリリースが影響するのは、その SDK をインポートしているリポジトリだけです。API エンドポイントに関する変更履歴の項目は、そのホストを呼び出すすべてのユーザーに影響します。
- モノレポ型プロバイダー(Google、AWS)向けのサブ API フィルタリング —
youtubeのリリースで通知されるのは、S3 しか使っていないチームではありません。 - 識別子境界を考慮したシンボル照合 —
getRがgetRelatedArticlesに一致することはありません。 - コンテキストを考慮した環境変数の検出 —
process.env.STRIPE_KEYは対象になりますが、META_REという名前の正規表現定数は対象になりません。
3つの本番リポジトリで実際に使って検証しています。現在のパイプラインでは誤検出はゼロ件です。以前の単純なバージョンでは27件発生していました。
公開データでの測定
実際のプロバイダー仕様書コーパスに対して変更データベースをベンチマークし、すべての計算内容を公開しています。主要な数値はすべて、サイトのビルドゲートがアーカイブされた証拠から再計算するため、レポートの内容がデータと食い違うことはありません。
- Stripe API の 47 バージョンから学んだ、破壊的変更検出のあり方 — 連続する 47 組の仕様書を oasdiff と直接比較し、説明のつかない差異はゼロでした。
- さらに 3 つのプロバイダー、49 組の仕様書、説明のつかない差異はゼロ — Twilio、PayPal、Vercel を対象に同じ監査を実施しました。
- Twilio の仕様書 20 組:一方のエンジンは 358 件、こちらは 142 件を検出し、すべての不一致に理由があります — 2 つのエンジンで検出数に 2.5 倍の差が出る理由と、すべての差異の内訳を説明します。
- Vercel の仕様書 11 組:実際の 12 エンドポイント削除と、破壊的変更を誤って告げたリリースノート — 変更履歴は両方向で誤っていましたが、実際の通信内容に誤りはありませんでした。
- 生の削除 136 件、実際の削除 17 件:仕様書の差分が過剰報告する内容 — アラート疲れを防ぎ、フィードを適切に保つための選別ルールです。
- OpenAI の仕様書変更 821 件、クライアントに影響しうるものは 3 件:正直な否定例 — 問題がないときにそれを伝えてくれるツールの価値です。
ステータス
npm で mendapi(v0.5.6)として公開されています。初期リリースのため、変更データベースと移行パックのレジストリは日々拡充中です。1.0 以前はインターフェースが変更される可能性があります。
ライセンス
CLI は AGPL-3.0-only です(LICENSE を参照)。コードを読み取ったりペイロードを構築したりするすべての行をセキュリティチームが監査できるようにし、ホスト型フォークにも変更の共有を義務付けるため、このライセンスを選択しました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。