
Model Context Protocol(MCP)でAIエージェントを拡張する実践ガイド:Claude・ChatGPT対応
お疲れ様です!IT業界で働くアライグマです!
先日、私のチームでClaude Desktopを使ったコードレビュー支援ツールを作ろうとした際、「GitHubのPR情報を直接読み込めたら便利なのに」という話になりました。当時は、PRの内容をコピー&ペーストでClaude Desktopに貼り付けていたため、複数のPRをレビューする際に非常に手間がかかっていました。調べてみると、Model Context Protocol(MCP)を使えば、AIエージェントに独自の機能を追加できることが分かりました。
「AIエージェントにカスタム機能を追加したいが、どこから手をつければいいか分からない」「Claude DesktopやChatGPTで自社のデータベースやAPIを使いたい」「MCPの仕様は理解したが、実装例が少なくて困っている」——こうした悩みを抱えている開発者は多いのではないでしょうか。
私自身、プロダクトマネージャーとしてAI機能の企画に関わる中で、MCPの登場によってAIエージェントの拡張性が飛躍的に向上したことを実感しています。本記事では、MCPを使ってAIエージェントにカスタム機能を追加する実践的な手順を、サーバー構築から実用例まで解説します。
Model Context Protocol(MCP)とは何か
Model Context Protocol(MCP)は、AIエージェントと外部システムを接続するための標準プロトコルです。Anthropicが2024年11月に発表し、Claude Desktop、ChatGPT Desktop、Cursor、VS Codeなど、主要なAIツールが対応を進めています。
MCPの最大の特徴は、「サーバー」という概念でAIエージェントの機能を拡張できる点です。例えば、GitHubサーバーを作れば、AIがPR情報を読み込んでコードレビューを支援できます。データベースサーバーを作れば、AIが自然言語でSQLクエリを生成してデータを取得できます。
従来、AIエージェントに独自機能を追加するには、各ツールごとに異なるプラグイン形式を学ぶ必要がありました。MCPはこれを標準化し、一度作ったサーバーを複数のAIツールで使い回せるようにしました。Anthropic Skillsで始めるAIエージェント開発:Tool Useとの違いと実装パターンでも触れていますが、AIエージェントの拡張性は今後のプロダクト開発において重要な要素になります。
MCPサーバーの3つの機能
MCPサーバーは、主に以下の3つの機能を提供します。
Resources(リソース)はファイルやデータベースレコードなど、AIが読み込めるデータを提供します。Tools(ツール)はAIが実行できる関数を提供し、例えばGitHubにIssueを作成したり、Slackにメッセージを送信したりできます。Prompts(プロンプト)は定型的なプロンプトテンプレートを提供します。
ChatGPT/LangChainによるチャットシステム構築実践入門のようなLLMアプリケーション開発の書籍でも、外部システム連携の重要性が強調されています。MCPはこの連携を標準化し、開発者の負担を大幅に軽減します。

MCPサーバーの基本構造と実装パターン
標準入出力を使った通信の仕組み
MCPサーバーを実装する前に、基本構造を理解しておくことが重要です。MCPサーバーは、標準入出力(stdio)を使ってAIクライアントと通信する仕組みになっています。これにより、Pythonで書いたサーバーをClaude DesktopやCursorから呼び出せます。
公式のPython SDKであるmcpパッケージを使うと、サーバー実装が大幅に簡略化されます。以下は、最小限のMCPサーバーの構造です。
from mcp.server import Server
from mcp.server.stdio import stdio_server
app = Server("my-server")
@app.list_resources()
async def list_resources():
return [Resource(uri="file://data.json", name="Data")]
@app.list_tools()
async def list_tools():
return [Tool(name="search", description="Search data")]
if __name__ == "__main__":
stdio_server(app)
この構造を理解すれば、Resources、Tools、Promptsの3つの機能を自由に組み合わせて、AIエージェントに必要な機能を追加できます。CursorとOllamaで構築するローカルRAG環境:プライベートドキュメントを活用したAIコーディング支援でも触れていますが、AIツールへのカスタムデータ連携は開発効率を大きく向上させます。
単一機能型と統合型の実装パターン
実装パターンとしては、単一機能型(1つのAPIやデータソースに特化)と統合型(複数のデータソースを統合)の2つがあります。初めて実装する場合は、単一機能型から始めることをおすすめします。ソフトウェアアーキテクチャの基礎のようなアーキテクチャ設計の書籍でも、小さく始めて段階的に拡張する重要性が説かれています。

実装例:GitHub PR情報を取得するMCPサーバー
環境構築とパッケージインストール
ここでは、実際にGitHub PR情報を取得するMCPサーバーを実装します。このサーバーを使えば、AIがPRのタイトル、説明、変更ファイル一覧などを読み込んで、コードレビューのサポートができます。
まず、必要なパッケージをインストールします。
pip install mcp PyGithub
サーバー実装とResource定義
次に、MCPサーバーを実装します。以下のコードは、GitHub APIを使ってPR情報を取得し、Resourceとして提供する例です。
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp.types import Resource, TextContent
from github import Github
import os
app = Server("github-pr-server")
gh = Github(os.getenv("GITHUB_TOKEN"))
@app.list_resources()
async def list_resources():
repo = gh.get_repo("owner/repo")
prs = repo.get_pulls(state="open")
return [
Resource(
uri=f"github://pr/{pr.number}",
name=f"PR #{pr.number}: {pr.title}",
mimeType="text/plain"
)
for pr in prs[:10]
]
@app.read_resource()
async def read_resource(uri: str):
pr_number = int(uri.split("/")[-1])
repo = gh.get_repo("owner/repo")
pr = repo.get_pull(pr_number)
content = f"""Title: {pr.title}
Description: {pr.body}
Files changed: {pr.changed_files}
Commits: {pr.commits}
"""
return TextContent(text=content)
if __name__ == "__main__":
stdio_server(app)
このサーバーをClaude Desktopから使うには、設定ファイル(macOSの場合は~/Library/Application Support/Claude/claude_desktop_config.json)に以下を追加します。
{
"mcpServers": {
"github-pr": {
"command": "python",
"args": ["/path/to/github_pr_server.py"],
"env": {
"GITHUB_TOKEN": "your_token_here"
}
}
}
}
Claude Desktopを再起動すると、AIがGitHub PR情報を読み込めるようになります。GitHub Copilot Custom Agentsで.mdファイルから独自エージェントを作る実践ガイドでも触れていますが、AIツールのカスタマイズは開発ワークフローの効率化に直結します。
実装時のポイントは、エラーハンドリングとレート制限への対応です。GitHub APIにはレート制限があるため、キャッシュを活用するか、リクエスト頻度を制御する必要があります。リファクタリング(第2版)のようなコード品質の書籍でも、エラーハンドリングの重要性が強調されています。

主要AIツールでのMCP対応状況と設定方法
各AIツールの設定ファイル
MCPサーバーを実装したら、実際にAIツールから使えるように設定します。ここでは、主要なAIツールでのMCP対応状況と設定方法を解説します。
Claude Desktopは、MCPの発表元であるAnthropicが提供するツールで、最も充実したMCP対応を提供しています。設定ファイルは~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または%APPDATA%\Claude\claude_desktop_config.json(Windows)に配置します。
Cursorは、.cursor/mcp.jsonに設定を記述します。Claude Desktopと同じJSON形式で、複数のMCPサーバーを登録できます。CursorでローカルLLMを使う完全ガイド:Ollama連携からカスタムモデル設定まででも触れていますが、Cursorのカスタマイズ性は非常に高く、開発ワークフローに合わせた柔軟な設定が可能です。
ChatGPT Desktopも、最近MCPサポートを追加しました。設定方法はClaude Desktopと類似していますが、一部の機能に制限があります。
以下のグラフは、主要AIツールのMCP対応状況を示したものです。Claude Desktopが最も充実していますが、他のツールも急速に対応を進めています。
セキュリティとアクセス制御
実運用では、セキュリティとアクセス制御に注意が必要です。MCPサーバーは標準入出力を通じてAIツールと通信するため、機密情報を扱う場合は環境変数での認証情報管理や、アクセス権限の適切な設定が重要です。安全なウェブアプリケーションの作り方(徳丸本)のようなセキュリティの書籍でも、外部システム連携時の認証・認可の重要性が強調されています。

トラブルシューティングとベストプラクティス
よくあるトラブルと解決方法
MCP実装でよく遭遇するトラブルと解決方法を紹介します。
サーバーが認識されない場合、まず設定ファイルのJSON形式が正しいか確認します。カンマの位置やクォートの種類(ダブルクォート必須)を確認し、JSONバリデーターでチェックすると良いでしょう。また、Pythonスクリプトのパスが絶対パスになっているか、実行権限があるかも確認します。
レスポンスが遅い場合、APIリクエストのキャッシュを実装することで改善できます。例えば、GitHub PR情報は頻繁に変わらないため、5分程度のキャッシュを設けることで、レスポンス速度が大幅に向上します。
エラーハンドリングとログ出力
エラーハンドリングは、MCPサーバーの安定性に直結します。外部APIの呼び出しが失敗した場合でも、AIツールにエラー情報を適切に返すことで、ユーザー体験が向上します。Pydantic v2のバリデーション設計:型安全なAPIとLLMアプリケーションの実装パターンでも触れていますが、型安全な実装はエラーの早期発見に繋がります。
ベストプラクティスとしては、ログ出力の充実が重要です。MCPサーバーは標準入出力を使うため、デバッグ情報はファイルに出力する必要があります。達人プログラマーのようなプログラミングの基礎を扱う書籍でも、適切なログ出力の重要性が説かれています。

まとめ
Model Context Protocol(MCP)を使えば、AIエージェントに独自の機能を追加し、自社のデータベースやAPIと連携させることができます。本記事では、MCPの基本概念から、実際のGitHub PR情報取得サーバーの実装、主要AIツールでの設定方法、トラブルシューティングまでを解説しました。
短期的には、まず公式のPython SDKを使って簡単なResourceサーバーを実装し、Claude DesktopやCursorから動作確認することをおすすめします。1つのデータソースに特化した単一機能型サーバーから始めることで、MCPの仕組みを理解できます。
中長期的には、複数のデータソースを統合した統合型サーバーや、Toolsを活用した双方向連携(AIからSlackにメッセージを送信するなど)を実装することで、AIエージェントの活用範囲が大きく広がります。
MCPは、AIエージェントの拡張性を標準化する重要なプロトコルです。一度作ったサーバーを複数のAIツールで使い回せるため、開発コストを抑えながら、チーム全体の開発効率を向上させることができます。
まずは、自分のプロジェクトで最も頻繁にアクセスするデータソース(GitHub、Notion、社内データベースなど)を1つ選び、MCPサーバーを実装してみましょう。










