【徹底解説】MCPとAPIの違いとは?

MCP

AIツールを触り始めると、必ずと言っていいほどこの疑問にぶつかります。特に2024年末にAnthropicがMCP(Model Context Protocol)を発表してから、X(旧Twitter)やテック系メディアで「MCP対応」「MCP連携」という言葉を目にする機会が急増しました。

でも、いざ調べてみると「プロトコル」「エンドポイント」「標準化」といった専門用語が並んでいて、「結局、何がどう違うの?」と感じている方も多いのではないでしょうか。

この記事では、MCPとAPIの違いを初心者の方にもわかるように、身近なたとえ話やコードの具体例を交えながら、丁寧に解説していきます。


そもそも「API」とは?

まずは、APIから確認しておきましょう。

APIはApplication Programming Interfaceの略で、日本語に訳すと「アプリケーション・プログラミング・インターフェース」となります。簡単に言えば、ソフトウェア同士が会話するための「共通ルール」のことです。

レストランのメニューに例えると

APIのイメージを掴むために、レストランに例えてみましょう。

あなた(アプリA)がレストランに入って、メニュー(API)を見て「カルボナーラをください」と注文します。キッチン(アプリB)は注文を受けて料理を作り、完成品をあなたに届けてくれます。

このとき、あなたはキッチンの中でどんな調理器具を使っているか、どの順番で食材を入れているかを知る必要はありません。メニューに書かれた形式で注文すれば、ちゃんと料理が届く。これがAPIの基本的な仕組みです。

実際のAPIの例

たとえば、天気予報アプリを作りたいとします。自分で気象観測所を持っている人はほとんどいませんよね。そこで、気象データを提供しているサービスの「API」を使います。

「このURLに、こういう形式でリクエストを送ってくれたら、東京の天気データを返しますよ」

というルールが公開されているので、開発者はそのルール通りにリクエストを送るだけで天気データが手に入ります。

REST API、GraphQL APIなど種類はいくつかありますが、基本的には「決められた形式でリクエストを送ると、決められた形式でレスポンスが返ってくる」という1対1の通信です。


では「MCP」とは?

次に、MCPについて見ていきましょう。

MCPはModel Context Protocolの略で、Anthropic(Claude を開発している会社)が2024年末に発表した、AIモデルが外部のツールやデータソースと接続するための標準プロトコル(通信規格)です。

USBポートに例えると

MCPのイメージは、USBポートがぴったりです。

USBという規格が登場する前は、マウスはPS/2ポート、プリンターはパラレルポート、カメラはシリアルポートと、周辺機器ごとに接続端子がバラバラでした。それぞれ専用のケーブルとドライバが必要で、新しい機器を使うたびに苦労していました。

ところが、USBという統一規格が生まれたことで、マウスもキーボードもカメラもプリンターも、メーカーを問わず同じポートに挿すだけで使えるようになりました。

MCPはまさに、AIにとってのUSBポートです。

「この規格に沿って作れば、どんなツールでもAIに接続できますよ」という共通の差込口を提供してくれます。Slack、Google Calendar、GitHub、データベース——どんなツールでも、MCPの規格に合わせて作られたサーバー(MCPサーバー)があれば、AIはそれを統一的な方法で使えるようになるのです。


MCPとAPIの5つの違い

ここからは、MCPとAPIの具体的な違いを5つのポイントに分けて解説します。

違い①:目的が違う

APIは「ソフトウェア同士がデータをやり取りするための汎用的な仕組み」です。Webアプリ、モバイルアプリ、サーバー間連携など、IT業界のあらゆる場面で使われている、非常に広い概念です。

一方でMCPは「AIモデルが外部のツール・データに安全にアクセスするための専用規格」です。対象がAIとツールの接続に特化しているのが大きな特徴です。

違い②:通信の構造が違う

APIは基本的に「クライアント → サーバー」の1対1通信です。天気APIを叩けば天気データが返る、SlackのAPIを叩けばSlackにメッセージが送れる。シンプルな関係です。

MCPは「AIモデル(ホスト)↔ MCPクライアント ↔ MCPサーバー(ツール群)」という3層構造になっています。この構造により、1つのAIモデルが複数のツールを統一的に管理・利用できるようになっています。

違い③:「誰のため」かが違う

APIは開発者が自分のアプリに外部機能を組み込むために使います。開発者がドキュメントを読み、コードを書いて連携を実装します。

MCPはAIモデル自身が「どんなツールが使えるか」を理解し、自律的に使いこなすために設計されています。ツールの一覧取得、使い方の理解、実行、結果の受け取りまでの一連の流れが標準化されているのです。

違い④:ツールの発見性(ディスカバリ)の有無

従来のAPIでは、新しいAPIを使うたびに開発者が仕様書(ドキュメント)を読んで理解する必要がありました。「このパラメータはstring型で必須で、あのパラメータはinteger型でオプションで……」と、人間が一つひとつ確認する作業です。

MCPでは、AIモデルが接続先のMCPサーバーに「何ができますか?」と問い合わせると、利用可能なツールの一覧とその使い方(スキーマ)が標準フォーマットで自動的に返ってきます。AIが自分でツールの使い方を学べる——これがMCPの画期的なポイントです。

違い⑤:個別実装の要・不要

APIの場合、サービスごとに認証方式・エンドポイント・パラメータ形式がすべて異なるため、連携先が増えるたびに個別の実装が必要です。

MCPの場合、通信のお作法がすべて統一されているため、新しいツールを追加しても、AIの側に特別な個別実装は不要です。MCPサーバーを接続するだけで、すぐに使い始められます。


コードで見る「違い」——これが一番わかりやすい

文章だけだとイメージしにくいと思うので、ここからは実際のコードで比較してみましょう。

お題は「Slackにメッセージを送る」と「Google Calendarから予定を取得する」という2つのタスクです。

従来のAPI:各サービスごとにバラバラの実装が必要

import requests
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build

# ========================================
# Slack API(Slack独自の実装が必要)
# ========================================
def send_slack_message(channel, text):
    response = requests.post(
        "https://slack.com/api/chat.postMessage",  # Slack独自のエンドポイント
        headers={
            "Authorization": "Bearer xoxb-xxxx-xxxx",  # Slack独自の認証形式
            "Content-Type": "application/json"
        },
        json={
            "channel": channel,   # Slack独自のパラメータ名
            "text": text
        }
    )
    return response.json()

# ========================================
# Google Calendar API(また別の実装が必要)
# ========================================
def get_calendar_events():
    creds = Credentials.from_authorized_user_file(  # Google独自の認証方式
        "token.json",
        scopes=["https://www.googleapis.com/auth/calendar.readonly"]
    )
    service = build("calendar", "v3", credentials=creds)  # Google独自のクライアント

    events = service.events().list(      # Google独自のメソッドチェーン
        calendarId="primary",            # Google独自のパラメータ
        maxResults=10,
        singleEvents=True,
        orderBy="startTime"
    ).execute()
    return events.get("items", [])

ご覧のとおり、Slack APIとGoogle Calendar APIでは、認証方式もURLもパラメータの構造もまったく異なります。2つのサービスを使うだけでも、2種類のまったく違うコードを書かなければなりません。

さらに、ここにGitHub APIやNotion APIを追加しようとすると、それぞれまた別の実装が必要になります。連携先が増えるほど、コードの量も複雑さも増していくわけです。

MCP:すべて同じ「お作法」で統一

from mcp import ClientSession
from mcp.client.stdio import stdio_client

# ========================================
# MCPクライアント(共通の実装1つだけ)
# ========================================
class MCPManager:
    def __init__(self):
        self.sessions = {}

    async def connect(self, name, server_command):
        """どのMCPサーバーでも同じ方法で接続"""
        transport = await stdio_client(server_command)
        session = ClientSession(*transport)
        await session.initialize()   # ← どのサーバーでも同じ
        self.sessions[name] = session

    async def call_tool(self, name, tool_name, arguments):
        """どのサーバーでも同じ方法でツール実行"""
        session = self.sessions[name]
        result = await session.call_tool(  # ← 共通のプロトコル
            name=tool_name,
            arguments=arguments
        )
        return result

# ========================================
# 実際の使用
# ========================================
async def main():
    manager = MCPManager()

    # 接続(どのサーバーでも同じ手順)
    await manager.connect("slack", ["npx", "@anthropic/mcp-slack"])
    await manager.connect("gcal",  ["npx", "@anthropic/mcp-google-calendar"])

    # Slackにメッセージ送信
    await manager.call_tool("slack", "send_message", {
        "channel": "#general",
        "text": "Hello!"
    })

    # Google Calendarから予定取得
    await manager.call_tool("gcal", "list_events", {
        "max_results": 10
    })

    # ★ 新しいサービスの追加も同じパターン!
    await manager.connect("github", ["npx", "@anthropic/mcp-github"])
    await manager.call_tool("github", "create_issue", {
        "repo": "my-repo",
        "title": "Bug fix needed"
    })

違いは一目瞭然です。MCPでは connect() で接続して call_tool() で実行する、という同じパターンの繰り返しだけですべてのサービスと連携できます。

Slack、Google Calendar、GitHubの3つを使っていても、書いているコードの構造はまったく同じ。新しいサービスを追加するときも、個別の実装を一から書く必要がありません。

並べてみると、こんなに違う

【従来のAPI】
Slack:   requests.post("https://slack.com/api/...", ...)
Google:  build("calendar", "v3", ...).events().list(...).execute()
GitHub:  requests.post("https://api.github.com/...", ...)
→ 全部バラバラ!認証もURLも形式も違う

【MCP】
Slack:   session.call_tool("send_message",  {...})
Google:  session.call_tool("list_events",   {...})
GitHub:  session.call_tool("create_issue",  {...})
→ 全部同じ!call_tool() に名前と引数を渡すだけ

MCPのもう一つの強み:AIが「自分で使い方を学べる」

コードの統一以上に革命的なのが、AIがツールの使い方を自動で理解できるという点です。

MCPでは、接続先のサーバーに「何ができますか?」と問い合わせると、こんな情報が返ってきます。

tools = await session.list_tools()

# 返ってくるデータのイメージ
# [
#   {
#     "name": "send_message",
#     "description": "Slackチャンネルにメッセージを送信する",
#     "inputSchema": {
#       "type": "object",
#       "properties": {
#         "channel": {"type": "string", "description": "送信先チャンネル"},
#         "text":    {"type": "string", "description": "メッセージ本文"}
#       },
#       "required": ["channel", "text"]
#     }
#   }
# ]

つまり、AIは「send_message」というツールがある、それには「channel」と「text」というパラメータが必要、channelは送信先チャンネルを指定する——ということを自動的に理解できるのです。

従来のAPIでは、開発者がドキュメントを読んで「このパラメータはこう渡す」と一つずつコードに書き下す必要がありました。MCPでは、ツールの説明書(スキーマ)が標準フォーマットで提供されるので、AIが自分で読んで判断できます。

これこそが、MCPが「AIネイティブなプロトコル」と呼ばれる理由です。


よくある誤解:「MCPはAPIの代わりになるもの?」

ここで、よくある誤解を解消しておきましょう。

MCPはAPIを置き換えるものではありません。

MCPサーバーの内部では、実際にはSlack APIやGoogle Calendar APIなど、従来のAPIが呼ばれています。つまり、MCPはAPIの上位レイヤーとして機能しているのです。

イメージとしてはこうです。

ユーザー 「明日の予定を教えて」
  ↓
AIモデル 「Google Calendar MCPサーバーに聞いてみよう」
  ↓
MCPサーバー(内部でGoogle Calendar APIを呼び出す)
  ↓
Google Calendar API が予定データを返す
  ↓
MCPサーバーが結果をMCPの標準形式でAIに渡す
  ↓
AIモデル 「明日は10時から会議、14時からランチの予定があります」

MCPは、バラバラだった各種APIを「AIが統一的に扱える形」にラッピングしている規格と理解するのが正確です。


まとめ:MCPとAPIの違い一覧表

最後に、両者の違いを表で整理しておきます。

比較ポイントAPIMCP
正式名称Application Programming InterfaceModel Context Protocol
何かソフトウェア間の通信ルールAIとツールの接続規格
たとえレストランのメニューUSBポート
主な対象あらゆるソフトウェアAIモデル専用
通信構造1対1が基本1対多を統一管理
ツール発見開発者が手動でドキュメントを読むAIが自動で認識・理解
新規サービス追加個別実装が必要同じパターンで接続可能
相互関係MCPの内部で使われるAPIの上位レイヤー

おわりに

MCPはまだ生まれたばかりの規格ですが、AIとツールの連携方法を根本から変える可能性を秘めています。

従来のAPI連携では「開発者がサービスごとに個別実装を書いて、AIのワークフローに手動で組み込む」という作業が必要でした。MCPの世界では「MCPサーバーを接続するだけで、AIが自律的にツールを認識して使いこなす」という形になります。

大事なのは、MCPはAPIの敵ではなく、APIをAIの世界でより使いやすくするためのラッパーだということです。APIの知識がなくなるわけではなく、むしろAPIを理解していれば、MCPの仕組みもより深く理解できます。

まずはClaude DesktopでMCPサーバーを一つ接続してみるところから始めてみてはいかがでしょうか。「あ、こういうことか!」と実感できるはずです。

この記事が、MCPとAPIの違いを理解するきっかけになれば嬉しいです。

タイトルとURLをコピーしました