Anthropic MCP導入:LLMと社内システムを「標準プロトコル」で接続する

人工知能(AI)技術は、単にチャットで質問に答えるフェーズを終え、自ら外部データにアクセスしてタスクを遂行する「エージェント」の時代へ突入しました。しかし、開発現場では依然として泥臭い問題が残っています。Slack、GitHub、社内データベース…これらをLLMに接続するたびに、独自の「グルーコード」を書き続ける必要があるという問題です。

2024年11月、Anthropicはこの統合地獄を終わらせるためのオープンスタンダード、Model Context Protocol (MCP) を公開しました。これはAIアプリケーションにとっての「USB-C」を目指すものです。本記事では、マーケティング的な概要は省略し、MCPがどのようにデータパイプラインの断片化を解決するのか、そして実際にPythonを使って独自のMCPサーバーを構築する方法について、エンジニア視点で解説します。

技術的背景:なぜ今MCPが必要なのか

従来のRAG(Retrieval-Augmented Generation)やエージェント開発において、LLMとデータソースの接続は「多対多」の複雑な統合問題でした。Claude、ChatGPT、IDE上のAIアシスタントなど、クライアントが増えるたびに、それぞれのAPI仕様に合わせたコネクタを保守する必要があったのです。

MCPはこの構造を根本から変えます。MCPは、クライアント(AIモデル)とサーバー(データソース)間の通信をJSON-RPCベースで標準化します。これにより、一度MCP準拠のサーバーを作れば、Claude DesktopやCursor、その他のMCP対応クライアントすべてから即座にそのツールやリソースを利用できるようになります。

アーキテクチャの要点: MCPは主にローカルの標準入出力(stdio)またはSSE(Server-Sent Events)を介して通信します。これにより、リモートAPIだけでなく、ローカルファイルシステムやセキュアな社内DBへのアクセスも安全に制御可能です。

The Solution: PythonによるMCPサーバーの実装

ここでは、最も手軽に実装できるPython SDK(mcp)を使用して、社内の特定データをLLMに提供するシンプルなMCPサーバーを構築します。

従来のLangChain Tool定義などと比較して、MCPサーバーとして独立させることで、特定のフレームワークに依存しない再利用可能なコンポーネントとなります。

セットアップと実装

まず、必要なパッケージをインストールします。

pip install mcp

次に、FastMCPを使用して、顧客IDからステータスを返すツールを定義します。

from mcp.server.fastmcp import FastMCP

# サーバーの初期化(名前は任意)
mcp = FastMCP("Internal-CRM-Connector")

# ツールとして公開する関数を定義
# 型ヒントとドキュメンテーション文字列は必須です(LLMがこれらを読み取ってツールを使用するため)
@mcp.tool()
def get_customer_status(customer_id: str) -> str:
    """
    指定された顧客IDに基づいて、現在の契約プランとアクティブ状態を検索します。
    CRMデータベースへの問い合わせをシミュレートしています。
    """
    # 実際の運用ではここでDB接続やAPIリクエストを行います
    # 今回はモックデータを返却
    mock_db = {
        "CUST-001": "Enterprise Plan (Active) - Renewed on 2024-01-01",
        "CUST-002": "Pro Plan (Inactive) - Payment Failed",
        "CUST-999": "Legacy Plan (Active) - Migration Required"
    }
    
    result = mock_db.get(customer_id)
    
    if result:
        return f"Customer {customer_id}: {result}"
    else:
        return f"Error: Customer {customer_id} not found."

if __name__ == "__main__":
    # stdioモードでサーバーを起動(Claude Desktop等からの接続用)
    mcp.run()

接続検証

このスクリプトをserver.pyとして保存し、Anthropicのドキュメントに従ってClaude Desktopの設定ファイル(claude_desktop_config.json)に追記するだけで、Claudeのチャットインターフェースから直接このPython関数を呼び出せるようになります。

セキュリティ上の注意: MCPサーバーは強力な権限を持ち得ます。stdio経由で実行する場合、サーバープロセスはホストマシンのユーザー権限で動作するため、ファイル削除などの危険な操作を行うツールを実装する際は厳重な検証が必要です。

従来手法との比較検証

独自のAPIラッパーを作成する場合と、MCPを採用する場合の違いを整理しました。

比較項目 従来のAPI統合 (Custom Tools) MCP (Model Context Protocol)
再利用性 特定のアプリ(例: LangChainアプリA)専用になりがち Claude、IDE、その他MCP対応クライアントで即座に共有可能
接続方式 HTTP REST APIごとに個別のクライアント実装が必要 標準化されたJSON-RPCプロトコル一本に統一
コンテキスト管理 プロンプトエンジニアリングで手動注入 リソース(Resources)として構造化データを透過的に提供
開発コスト 統合対象×AIモデルの数だけ増加 (N x M) 一度サーバーを作れば全てのAIモデルに対応 (1 x N)

Conclusion

MCPは単なる「新しいプロトコル」ではなく、AI開発におけるインフラストラクチャの標準化に向けた重要なステップです。これまで我々エンジニアは、LLMにデータを食わせるためだけに無数の「配管工事」を行ってきました。MCPの登場により、その労力をアプリケーションの本質的なロジックや価値提供に向けることができるようになります。まずは手元のローカルスクリプトや社内DBへのRead専用インターフェースから、MCPサーバー化を試してみることを強く推奨します。

Post a Comment