既存 SaaS API を MCP サーバー化する設計パターン — Block (Square) 事例から学ぶ受託開発の指針 2026 | GH Media
URLがコピーされました

既存 SaaS API を MCP サーバー化する設計パターン — Block (Square) 事例から学ぶ受託開発の指針 2026

URLがコピーされました
既存 SaaS API を MCP サーバー化する設計パターン — Block (Square) 事例から学ぶ受託開発の指針 2026

「自社の REST API を AI エージェントから使えるようにしたい」——4 月以降、この相談が急増しています。きっかけは、Block(旧 Square)が決済・在庫管理 API 全体を MCP 対応させた事例です。販売事業者が「先月のフィッシュタコスの売上を教えて」と Claude に話しかけると、Square API 経由で売上分析が返ってくる——この体験が現場で衝撃を持って受け止められました。

ProofX の調査記事 でも報告されているように、海外フィンテックを起点に「既存の業務 API を MCP サーバーで包み直す」動きが本格化しています。本記事では、手元の REST/GraphQL API を MCP サーバー化するときの設計パターンを、受託案件の指針として整理します。

なぜ「API ラッパー」では不十分か

「OpenAPI 仕様から MCP サーバーを自動生成すればいい」——最初に皆が考える解決策ですが、ほぼ確実に失敗します。理由は 3 つあります。

  1. ツール数が爆発する:1 つの SaaS で数百のエンドポイントを持つことは珍しくなく、AI エージェントがツール選定で迷子になる
  2. スキーマが冗長:OpenAPI のレスポンスをそのまま渡すと、トークン消費が一気に膨らむ
  3. 副作用の説明がない:「DELETE /users/{id}」が”何を”消すのかは、ドキュメントを読まないと分からない

私たちが Drizzle ORM への移行ガイド で書いたように、「機械が読みやすい」と「AI が動きやすい」はイコールではありません。MCP サーバー化では、ツール定義を人間がユースケース起点で設計し直す必要があります。

4 つの設計パターン

弊社が受託で MCP サーバー化を進めるとき、案件特性に応じて次の 4 パターンから選定します。

パターン A: ユースケース集約型(推奨)

複数 API を 1 つのツールに集約し、ユースケース単位で公開します。

// NG: 自動生成された薄いラッパー
tools: [
  "get_customer", "get_order", "get_invoice",
  "list_payments", "list_refunds", "list_disputes" // … 100 個続く
]

// OK: ユースケース集約
tools: [
  {
    name: "summarize_customer_billing",
    description: "顧客の請求状況サマリ(請求・入金・未収・係争中)を取得",
    arguments: { customer_id: "string", period: "string?" }
  }
]

「summarize_customer_billing」の中で、内部的に複数 API を順に叩いて整形します。AI からは 1 ツールに見え、トークン消費もレスポンスも最小化できます。

パターン B: SDK ラッパー方式

公式 SDK が成熟している API(Stripe / Salesforce / GitHub など)は、SDK の関数を MCP ツールとして再エクスポートします。

import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_KEY);

server.tool("create_customer", async (args) => {
  return await stripe.customers.create(args);
});

メリットは認証・リトライ・レート制限を SDK に任せられる点。デメリットはツール数の爆発で、これは事前にホワイトリストを決めて緩和します。

パターン C: GraphQL クエリビルダ型

GraphQL API を持つ社内サービスは、MCP に「クエリ片」を渡してもらうのが効率的です。フィールドを AI に選ばせ、必要なデータだけ取得します。

server.tool("graphql_query", {
  description: "社内 GraphQL に対し、許可されたフィールドのみクエリ実行",
  schema: ALLOWLISTED_SCHEMA,
});

ただしクエリ深度や計算量に制限を必ず入れてください。AI が悪気なく N+1 クエリを生成して、本番 DB を落とす事故が実例として報告されています。

パターン D: イベントストリーム型

Webhook や SSE で AI に「状況の変化」を渡すケース。MCP の Resource として実装し、定期的に AI にコンテキストを供給します。在庫アラート・障害通知などに向きます。

トークン節約のスキーマ整形

API が返す JSON をそのまま AI に渡すと、トークンが致命的に膨らみます。MCP サーバー側で 3 段階の整形を入れるのが定石です。

整形ステップ削減率の目安
不要フィールド除去30〜50%created_at_unix など重複情報を捨てる
列挙値の短縮10〜20%"PAYMENT_STATUS_SUCCEEDED""ok"
表形式への要約50〜80%100 件のレコードを Markdown テーブル 5 行に要約

私たちが pgvector の本番運用ガイド で書いたコスト最適化の考え方は、MCP サーバーのレスポンス整形にもそのまま適用できます。

HITL(人間承認)が必須の操作を設計する

破壊的・金銭的・対外的な操作は、MCP ツールに「確認待ち」状態を持たせる設計が安全です。

server.tool("send_invoice", async (args, ctx) => {
  if (!ctx.userApproved) {
    return {
      kind: "approval_required",
      summary: `${args.customer} に ¥${args.amount} の請求書を送ります`,
      approval_token: issueApprovalToken(args),
    };
  }
  return await invoiceClient.send(args);
});

クライアントの UI 側で「承認ボタン」を表示し、承認後に approval_token を添えて再呼び出しします。この設計は Anthropic Computer Use を業務に組み込むガイド でも触れた、エージェントに対する HITL の標準手法です。

受託案件の型

API → MCP サーバー化を起点とした案件で、いま動きやすい型は次の 3 つです。

案件の型期間単価帯提供物
ユースケース MCP 設計 + 実装6〜10 週間400〜800 万円ツール仕様・実装・テスト
既存 SDK の MCP ラップ3〜5 週間200〜400 万円ホワイトリスト + ラッパー
MCP ホスティング基盤構築8〜12 週間600〜1,500 万円認証・監査・スケーリング

ホスティング基盤までセットで取れると、運用フェーズも含めた長期パートナー化が成立します。

まとめ — API は「叩かれる」から「AI に呼ばれる」へ

これまで API は人間(フロントエンド・バッチ)から叩かれる前提で設計されてきました。しかし MCP の登場で、「AI エージェントから自然言語で呼ばれる」を前提にした再設計が必要になっています。

弊社では、SaaS API の MCP サーバー化、MCP ホスティング基盤構築、ユースケース設計支援をワンストップで提供しています。「自社 API をエージェント時代に対応させたい」というご相談は、お問い合わせフォーム からお声がけください。

URLがコピーされました

グリームハブ株式会社は、変化の激しい時代において、アイデアを形にし、人がもっと自由に、もっと創造的に生きられる世界を目指しています。

記事を書いた人

鈴木 翔

鈴木 翔

技術の可能性に魅了され、学生時代からプログラミングとデジタルアートの分野に深い関心を持つ

関連記事