はじめに
モデルコンテキストプロトコル(Model Context Protocol、以下MCP)は、大規模言語モデル(LLM)がデータソースや外部ツールと標準化された方法で接続するためのオープンプロトコルです。MCPサーバーを構築することで、Claude、GPTなどのAIアシスタントに新しい能力を追加し、データベースへのクエリ、APIとの連携、ファイル操作など、さまざまなタスクを実行できるようになります。
このチュートリアルでは、わずか15分でPythonを使用してシンプルなMCPサーバーを構築する方法を紹介します。今回はSQLiteデータベースに接続してデータを取得する基本的なサーバーを作成していきましょう。
前提条件
- Python 3.7以上がインストールされていること
- 基本的なPythonの知識
- コマンドライン(ターミナル)の基本操作ができること
- Claude DesktopまたはCursorなどのMCPをサポートするクライアントアプリケーション(テスト用)
MCPとは何か、なぜ必要なのか?
GPTやClaudeなどのLLMは、テキスト生成が得意ですが、基本的には単語の次の単語を予測しているだけで、外部世界のデータを取得したり、操作したりすることはできません。MCPはこの問題を解決し、AIアシスタントが外部リソースにアクセスするための標準化されたインターフェイスを提供します。
MCPは、USBポートのようなものと考えることができます。USBがさまざまな周辺機器を接続するための標準インターフェイスであるように、MCPはAIアプリケーションがさまざまなデータソースやツールに接続するための標準インターフェイスです。
MCPの主なコンポーネント
- ホスト: Claude DesktopやCursorなどのユーザーインターフェース
- クライアント: MCPプロトコルを話し、MCPサーバーにリクエストを転送するソフトウェア(多くの場合、ホストに組み込まれています)
- サーバー: 実際の作業を行い、データベースへのクエリやAPI呼び出しなどの機能を提供するソフトウェア(今回作成するのはこれです)
15分でMCPサーバーを構築する手順
ステップ1: 環境のセットアップ(2分)
まず、Pythonの仮想環境を作成し、必要なライブラリをインストールします。
# 仮想環境の作成
python -m venv mcp-env
# 仮想環境の有効化(Windowsの場合)
# mcp-env\Scripts\activate
# 仮想環境の有効化(macOS/Linuxの場合)
source mcp-env/bin/activate
# MCPライブラリのインストール
pip install mcp
ステップ2: サンプルデータベースの準備(1分)
このチュートリアルでは、SQLiteデータベースを使用して、コミュニティのチャットユーザーに関するデータを扱います。サンプルデータベースを作成しましょう。
# SQLiteをインストール(必要な場合)
pip install sqlite3
community.db
という名前のデータベースを作成するか、以下のPythonスクリプトを実行してサンプルデータを生成します:
import sqlite3
# データベース接続
conn = sqlite3.connect('community.db')
cursor = conn.cursor()
# テーブル作成
cursor.execute('''
CREATE TABLE IF NOT EXISTS chatters (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
messages INTEGER NOT NULL
)
''')
# サンプルデータ挿入
sample_data = [
('田中太郎', 156),
('佐藤花子', 237),
('鈴木一郎', 89),
('高橋美咲', 321),
('伊藤健太', 175)
]
cursor.executemany('INSERT INTO chatters (name, messages) VALUES (?, ?)', sample_data)
# 変更を保存して接続を閉じる
conn.commit()
conn.close()
ステップ3: MCPサーバーの作成(5分)
次に、sqlite-server.py
というファイルを作成し、以下のコードを入力します:
# sqlite-server.py
from mcp.server import mcptool
from mcp.server import FastMCP
import sqlite3
# MCPサーバーを初期化(わかりやすい名前をつける)
mcp = FastMCP("コミュニティチャットデータ")
# SQLiteデータベースからトップチャッターを取得するためのツールを定義
@mcptool(mcp)
def get_top_chatters():
"""メッセージ数でソートされたトップチャッターを取得する"""
# SQLiteデータベースに接続
conn = sqlite3.connect('community.db')
cursor = conn.cursor()
# メッセージ数でソートされたチャッターを取得するクエリを実行
cursor.execute("SELECT name, messages FROM chatters ORDER BY messages DESC")
results = cursor.fetchall()
conn.close()
# 結果を辞書のリストとしてフォーマット
chatters = [{"name": name, "messages": messages} for name, messages in results]
return chatters
# MCPサーバーをローカルで実行
if __name__ == '__main__':
mcp.run()
このシンプルなMCPサーバーは、get_top_chatters
というツールを定義し、SQLiteデータベースに接続してデータを取得し、読みやすい形式で返します。
ステップ4: Cursor(またはClaude Desktop)への統合(5分)
Cursorへの追加
- Cursor Pro(必須)を開きます
- 設定 → MCP に移動します
- 「新しいグローバルMCPサーバーを追加」をクリックします
- 設定ファイル(
~/.cursor/mcp.json
)が開きます - 以下の設定を追加します:
{
"mcpServers": {
"sqlite-server": {
"command": "/あなたのプロジェクトへのパス/mcp-env/bin/python",
"args": ["/あなたのプロジェクトへのパス/sqlite-server.py"],
"description": "コミュニティデータベースからトップチャッターを取得するシンプルなMCPサーバー"
}
}
}
- 保存してMCP設定に戻ります
- サーバーとそのツールが一覧表示され、サーバーの横に緑の点があることを確認します
Claude Desktopへの追加
- Claude Desktopを開きます
- 設定 → 開発者 → 設定を編集 に移動します
-
claude_desktop_config.json
に同様のサーバーブロックを追加します:
{
"servers": [
{
"name": "コミュニティチャットサーバー",
"command": "python",
"args": ["sqlite-server.py"],
"description": "コミュニティデータベースからトップチャッターを取得するシンプルなMCPサーバー"
}
]
}
- 保存して、Claude Desktopを再起動します(新しい設定を読み込むため)
ステップ5: MCPサーバーのテスト(2分)
Cursorでのテスト
- Cursorでチャットを開きます
- 「データベース内のチャッターの数はいくつですか?」などの質問をします
- LLMは外部ツールが必要だと判断し、ツールを実行するための許可を求めます
- 許可すると、MCPサーバーがSQLiteデータベースにクエリを実行し、データを返します
- AIはチャット内で情報を表示します
Claude Desktopでのテスト
- Claude Desktopでチャットを開きます
- 「トップチャッターのリストを表示してください」などの質問をします
- MCPツールを実行するための許可を求められます
- 許可すると、結果が表示されます
MCPサーバーの拡張
基本的なMCPサーバーができたら、さらに機能を追加することができます。例えば:
- 新しいチャッターの追加:データベースに新しいチャッターを追加するツールを作成
- メッセージ数の更新:既存のチャッターのメッセージ数を更新するツール
- 特定のチャッターの検索:名前や他の条件でチャッターを検索するツール
以下は、新しいチャッターを追加するツールの例です:
@mcptool(mcp)
def add_new_chatter(name: str, messages: int):
"""新しいチャッターをデータベースに追加する"""
conn = sqlite3.connect('community.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO chatters (name, messages) VALUES (?, ?)", (name, messages))
conn.commit()
conn.close()
return {"status": "success", "message": f"{name}がメッセージ数{messages}で追加されました"}
よくある質問
MCPサーバーの目的は何ですか?
MCPサーバーは、LLMが外部データソースやツールと連携するためのブリッジとして機能します。データベースへのクエリ、APIの呼び出し、ファイル操作など、AIだけでは実行できないタスクをLLMが実行できるようにします。
なぜPythonでMCPサーバーを構築するのですか?
Pythonは、豊富なライブラリエコシステムと簡潔な構文により、MCPサーバーの構築に理想的な言語です。データ操作、API呼び出し、ファイル操作など、多くのタスクを簡単に実装できます。
MCPサーバーはどのように安全性を確保していますか?
MCPサーバーは、アクセス制御やRBAC(ロールベースのアクセス制御)などの機能を使って安全性を確保できます。また、SQLインジェクションなどの一般的な攻撃を防ぐために、適切な入力検証とサニタイズを実装することが重要です。
まとめ
このチュートリアルでは、わずか15分でPythonを使用してシンプルなMCPサーバーを構築する方法を学びました。MCPは、LLMが外部データソースやツールと連携するための強力なプロトコルであり、AIアシスタントの能力を大幅に拡張します。
基本的なデータベース連携のサーバーから始めることで、MCPの基本的な概念と実装方法を理解することができました。ここで得た知識を基に、より複雑なMCPサーバーを構築し、AIアシスタントにより多くの機能を追加することができます。
是非このチュートリアルを出発点として、MCPの可能性を探求し、あなた独自のAIツールエコシステムを構築してください。MCPを活用することで、AIアシスタントの能力を大幅に拡張し、より多くのタスクを自動化することができるでしょう。
それでは、楽しいMCP開発ライフをお過ごしください!