「AIエージェントを1つ追加するたびに、バックエンドとの繋ぎ込みコードを何本も書き直している…」そんな状況、心当たりありませんか? 🤔

この記事では、MCP(Model Context Protocol)がグルーコードの組み合わせ爆発をどう根本解決するかに絞って深掘りします。MCPの概要や基本的な仕組みが気になる方はまず👇の記事をどうぞ。

MCP(Model Context Protocol)とは?AIが外部ツールと連携できる新標準をわかりやすく解説

本記事はその先、「既存システムへのMCP導入」と「フレームワーク横断での再利用」という実務視点に特化した内容です。

🔥 グルーコード問題の実態:4×9=36本の地獄

AI integration architecture
AI integration architecture / Photo by Mikhail Nilov via Pexels

グルーコード(Glue Code)とは、異なるシステムを繋ぎ合わせるためだけに書かれたアダプターコードのことです。AI開発では次のような状況が頻繁に起きます。

  • AIエージェントが 4つ(分析Bot・要約Bot・通知Bot・レポートBot)
  • バックエンドAPIが 9つ(在庫・CRM・分析・通知・請求・認証・ログ・検索・レポート)
  • → 理論上 4 × 9 = 36本の繋ぎ込みが必要 😱

さらに怖いのは、エージェントが5つ・6つと増えるたびに掛け算で膨らむ点です。バックエンドのAPI仕様が変わるたびに、関係するアダプターを全部直す羽目にもなります。

AIロードマップが行き詰まる原因は「モデルの質」ではなく、このN×M問題(組み合わせ爆発)であることが多いのです。

💡 MCPでN×M→N+Mへ:繋ぎ込み数の試算比較

MCPを導入すると、構造が根本的に変わります。

  • ✅ 各バックエンドを MCPサーバーとして1回だけ公開(9本)
  • ✅ 各エージェントを MCPクライアントとして1回だけ実装(4本)
  • → 合計 9 + 4 = 13本で済む!

36本 → 13本。エージェントやAPIが増えても、追加は「+1」ずつになります。これがMCPが「USBポート方式」と呼ばれる理由です。

🛠 既存バックエンドをMCPサーバー化する移行手順

「既存のREST APIをMCPサーバーに変える」のは、思ったより手順がシンプルです。

ステップ1:既存のビジネスロジックをそのまま関数化する

既存のバックエンド処理をPython関数に切り出します。ここでロジックを書き直す必要はありません。

# 既存バックエンド(例:マーケティング分析API)
# 変更前:FlaskなどのREST APIエンドポイントだったもの

# 既存ロジック関数(ステップ1)
def get_campaign_metrics_logic(campaign_id: str) -> dict:
    """既存DBからキャンペーン指標を取得(ロジックはそのまま流用)"""
    # 実際の処理は既存コードをそのまま使う
    return {
        "campaign_id": campaign_id,
        "clicks": 1024,
        "conversions": 87,
        "cost": 45000
    }

# 既存ロジック関数(ステップ1)
def list_active_campaigns_logic() -> list:
    """アクティブなキャンペーン一覧を返す"""
    return [{"id": "camp_001", "name": "夏季セール"}, {"id": "camp_002", "name": "新商品PR"}]

ステップ2:MCPサーバーとしてラップして公開する

既存関数をMCPの@mcp.tool()デコレータでラップするだけです。

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("marketing-analytics")

# 既存関数をそのままMCPツールとして登録
@mcp.tool()
def get_campaign_metrics(campaign_id: str) -> dict:
    """キャンペーンの指標を取得する"""
    # ステップ1の関数をそのまま呼び出すだけでOK
    return get_campaign_metrics_logic(campaign_id)

@mcp.tool()
def list_active_campaigns() -> list:
    """アクティブなキャンペーン一覧を返す"""
    return list_active_campaigns_logic()

# MCPプロトコルで自動公開
mcp.run()

ここが重要です 👇

  • エージェント側はツールの存在を自動的に発見(ディスカバリ)できる
  • 新しいエージェントを追加しても、サーバー側のコードは変更不要
  • 既存のREST APIと並行稼働させることも可能(段階的移行に便利)

実際にMCPサーバーを自作してみたい方はこちらのチュートリアルが参考になります 👇

MCPサーバーを30分で自作しよう!AIツールを自分で作る入門チュートリアル

🔁 LangChain・LlamaIndex横断での再利用パターン


MCPの最大の強みが「フレームワーク非依存」であることです。AnthropicがMCPをオープン仕様として公開したことで、主要なAIフレームワークが対応を進めています。

一度作ったMCPサーバーを複数フレームワークから使い回すイメージはこうなります。

# ── LangChainエージェントからMCPサーバーを使う例 ──
from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_tool_calling_agent

# MCPサーバーに接続してツール一覧を自動取得
client = MultiServerMCPClient({
    "marketing": {"url": "http://localhost:8000/mcp", "transport": "streamable_http"}
})
tools = await client.get_tools()

# あとは通常のLangChainエージェントと同じ
agent = create_tool_calling_agent(llm=llm, tools=tools, prompt=prompt)
# ── LlamaIndexエージェントから同じMCPサーバーを使う例 ──
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec
from llama_index.agent.openai import OpenAIAgent

# 同じサーバーURLを指定するだけで、ツールを再利用できる
mcp_client = BasicMCPClient("http://localhost:8000/mcp")
tool_spec = McpToolSpec(client=mcp_client)
tools = tool_spec.to_tool_list()

agent = OpenAIAgent.from_tools(tools, verbose=True)

ポイントをまとめると:

  • サーバーは1つのまま、LangChain・LlamaIndex・カスタムエージェントすべてから呼べる
  • ✅ フレームワークを乗り換えてもバックエンド側の改修ゼロ
  • ✅ 社内の複数チームが異なるフレームワークを使っていてもツールを共有できる

さらに発展して、AIエージェントがバックエンド全体をデプロイ・運用する段階まで進んだ事例も出てきています 👇

AIエージェントがバックエンドを丸ごとデプロイ&そのまま運用できる「MCP Server」が登場

📌 まとめ:MCPでグルーコードから解放される

AI統合における「グルーコードの掛け算地獄(N×M問題)」は、MCPを導入することでN+Mの足し算へ劇的に圧縮できます。

  • 🔢 4エージェント × 9API = 36本 → 13本へ削減
  • 🔧 既存バックエンドは関数をラップするだけでMCPサーバー化できる
  • 🔁 LangChain・LlamaIndexなどどのフレームワークからでも再利用可能

既存システムへのAI統合に悩んでいる方にとって、MCPは「バックエンドをいじらずにエージェントを増やせる」という強力な武器になります。ぜひ公式ドキュメントや上記チュートリアルも合わせてチェックしてみてください 🚀

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

もしも

実践Claude Code入門―現場で活用するためのAIコーディングの思考法

AIコーディングの現場活用法を学ぶ一冊

Amazonで見る

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

もしも

Python Web開発実践入門 ―― FastAPIによるWebAPI開発と非同期処理

FastAPIでWebAPI開発を実践的に学ぶ

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。