MCP Serverとは?Claudeをデータベースに一瞬で接続する方法

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

今すぐ試そう:5分でSQLiteに接続

MCPを理解する最短ルートは、実際に手を動かしてみることです。Claude Desktopをインストール済みであれば、コードを一行も書かずに任意のSQLite fileに接続できます。ターミナルで以下のコマンドを実行するだけです:

npx @modelcontextprotocol/server-sqlite --db-path ~/my_data.db

次に、Claude Desktopの設定ファイルを開きます。macOSでは ~/Library/Application Support/Claude/claude_desktop_config.json にあります。Windowsの場合は、 %APPDATA%\Claude\claude_desktop_config.json を探してください。以下の設定を追加します:

{
  "mcpServers": {
    "sqlite": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "/path/to/your/database.db"]
    }
  }
}

Claudeを再起動すると、稲妻のアイコン(MCP)が表示されます。「データベース内のテーブルをリストアップして」と頼んでみてください。Claudeが自動的にSQLを実行し、即座に結果を返してくれます。

MCP Serverとは一体何か?

Anthropicは、AIの限界を打ち破るためのオープン標準としてModel Context Protocol (MCP) を発表しました。Claude 3.5 Sonnetを、密室に閉じ込められた天才の脳だと想像してみてください。MCPは、その脳をデータベース、Google Drive、Slackなどに直接接続するための「USBポート」のような役割を果たします。

以前は、データをCSVにエクスポートして手動でチャットにアップロードする必要がありました。この方法では毎回10〜15分かかるだけでなく、機密データの漏洩リスクもありました。MCPはこの状況を完全に変えます。AIがコンピュータの権限を借りて、リアルタイムかつ安全にデータをクエリできるようになります。

MCPのエコシステムは、主に以下の3つの要素で構成されています:

  • MCP Client: AIとチャットする場所(Claude Desktopや各種IDEなど)。
  • MCP Server: ツール(tools)やデータを提供する仲介プログラム。
  • Local/Remote Data: PostgreSQL、MySQL、内部APIなどの実際のデータ保存場所。

Pythonで独自のMCP Serverを構築する

既存のサーバーは基本的なタスクしか処理できないことが多いです。実際には、独自のビジネスロジックを処理するために、自分でMCP Serverを書く必要があるでしょう。以下は、Pythonの mcp ライブラリを使用して注文検索ツールを作成する方法です。

ステップ1:環境の準備

データベース操作を容易にするために、MCPライブラリとSQLAlchemyをインストールします:

pip install mcp sqlalchemy

ステップ2:サーバーのコードを書く

db_server.py ファイルを作成します。Claudeが必要な時に顧客情報を自分で検索できるように、 query_orders 関数を定義します。

import sqlite3
from mcp.server.fastmcp import FastMCP

# 識別名でサーバーを初期化
mcp = FastMCP("OrderManager")
DB_PATH = "shop_data.db"

@mcp.tool()
def query_orders(customer_name: str) -> str:
    """顧客名に基づいて注文リストを検索します。"""
    conn = sqlite3.connect(DB_PATH)
    cursor = conn.cursor()
    
    # セキュリティのためにパラメータ化クエリを使用
    query = "SELECT id, product, amount FROM orders WHERE customer_name LIKE ?"
    cursor.execute(query, (f"%{customer_name}%",))
    results = cursor.fetchall()
    conn.close()
    
    if not results:
        return "この顧客の注文は見つかりませんでした。"
    
    return "\n".join([f"ID: {r[0]}, 商品: {r[1]}, 金額: {r[2]}" for r in results])

if __name__ == "__main__":
    mcp.run()

ステップ3:Claudeに統合する

作成したPythonファイルを指すように claude_desktop_config.json を更新します:

{
  "mcpServers": {
    "my-custom-db": {
      "command": "python",
      "args": ["/absolute/path/to/db_server.py"]
    }
  }
}

AIをデータベースに接続する際の3つのセキュリティ原則

AIが誤って0.5秒で全データを削除( DROP TABLE など)してしまうのを防ぐため、私は常に以下の3つのルールを適用しています:

1. 読み取り専用(Read-Only)権限の徹底

絶対に root アカウントを使用しないでください。 SELECT 権限のみを持つ専用ユーザーを作成しましょう。これにより、たとえAIがあなたの意図を誤解したとしても、元のデータを変更することはできなくなります。

2. SQLインジェクションの防止

SQL文を生成するために文字列を直接結合しないでください。上記の例のように、常に ? (パラメータ化クエリ)を使用してください。AIを経由したユーザーからの入力にも、悪意のあるコードが含まれている可能性があります。

3. 返却データ量の制御

Claudeには一度に処理できるトークン数に制限があります。データベースに100万行のデータがある場合、すべてを返すとAIがフリーズしてしまいます。パフォーマンスを最適化するために、常にSQL文に LIMIT 20 などを追加しましょう。

実装における実践的なアドバイス

  • デバッグ時の注意点: MCP Serverはバックグラウンドで動作するため、 print() は表示されません。エラーをファイルに記録するには logging ライブラリを使用するか、 mcp-inspector を活用してください。
  • Docstringへのこだわり: Claudeは説明文(例: """顧客名に基づいて注文リストを検索...""")に基づいて実行する関数を決定します。AIがツールを誤用しないよう、詳細な説明を記述しましょう。
  • 複数ソースの組み合わせ: 複数のサーバーを同時に実行できます。Claudeはデータベースから価格を取得しつつ、Googleで為替レートを調べて計算するといったことが可能になります。

MCP Serverを使いこなすことで、AIを単なるチャットボットから「行動できるアシスタント」へと進化させることができます。さらに、本番環境への統合を検討している場合は、セキュリティ面での対策も欠かせません。Claudeが数千行のデータを自らクエリして、数秒でインサイトを見つけ出す様子を目の当たりにするのは、本当に感動的な体験です。

Share: