2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

モデルコンテキストプロトコル(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の主なコンポーネント

  1. ホスト: Claude DesktopやCursorなどのユーザーインターフェース
  2. クライアント: MCPプロトコルを話し、MCPサーバーにリクエストを転送するソフトウェア(多くの場合、ホストに組み込まれています)
  3. サーバー: 実際の作業を行い、データベースへのクエリや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への追加

  1. Cursor Pro(必須)を開きます
  2. 設定 → MCP に移動します
  3. 「新しいグローバルMCPサーバーを追加」をクリックします
  4. 設定ファイル(~/.cursor/mcp.json)が開きます
  5. 以下の設定を追加します:
{
  "mcpServers": {
    "sqlite-server": {
      "command": "/あなたのプロジェクトへのパス/mcp-env/bin/python",
      "args": ["/あなたのプロジェクトへのパス/sqlite-server.py"],
      "description": "コミュニティデータベースからトップチャッターを取得するシンプルなMCPサーバー"
    }
  }
}
  1. 保存してMCP設定に戻ります
  2. サーバーとそのツールが一覧表示され、サーバーの横に緑の点があることを確認します

Claude Desktopへの追加

  1. Claude Desktopを開きます
  2. 設定 → 開発者 → 設定を編集 に移動します
  3. claude_desktop_config.jsonに同様のサーバーブロックを追加します:
{
  "servers": [
    {
      "name": "コミュニティチャットサーバー",
      "command": "python",
      "args": ["sqlite-server.py"],
      "description": "コミュニティデータベースからトップチャッターを取得するシンプルなMCPサーバー"
    }
  ]
}
  1. 保存して、Claude Desktopを再起動します(新しい設定を読み込むため)

ステップ5: MCPサーバーのテスト(2分)

Cursorでのテスト

  1. Cursorでチャットを開きます
  2. 「データベース内のチャッターの数はいくつですか?」などの質問をします
  3. LLMは外部ツールが必要だと判断し、ツールを実行するための許可を求めます
  4. 許可すると、MCPサーバーがSQLiteデータベースにクエリを実行し、データを返します
  5. AIはチャット内で情報を表示します

Claude Desktopでのテスト

  1. Claude Desktopでチャットを開きます
  2. 「トップチャッターのリストを表示してください」などの質問をします
  3. MCPツールを実行するための許可を求められます
  4. 許可すると、結果が表示されます

MCPサーバーの拡張

基本的なMCPサーバーができたら、さらに機能を追加することができます。例えば:

  1. 新しいチャッターの追加:データベースに新しいチャッターを追加するツールを作成
  2. メッセージ数の更新:既存のチャッターのメッセージ数を更新するツール
  3. 特定のチャッターの検索:名前や他の条件でチャッターを検索するツール

以下は、新しいチャッターを追加するツールの例です:

@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開発ライフをお過ごしください!

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?