mcp-mysql-server について
Python と FastMCP で構築された、stdio 経由でローカル MySQL データベースを操作・調査するサーバーです。接続設定、スキーマ確認、SQL クエリ、行の挿入に対応し、ローカル開発での利用を想定しています。
主な機能
- 01データベース接続のテスト
- 02テーブル一覧とスキーマの確認
- 03テーブルデータの読み取り
- 04テーブルへの行の挿入
- 05カスタム SQL の実行
活用シーン
- 01開発中のローカル MySQL スキーマ確認
- 02MCP ツール経由でのレコード読み取りや挿入
- 03stdio を使ったデータベース作業の自動化
MCP 対応
stdio 経由で、MySQL 接続テスト、テーブルとスキーマの確認、データの読み書き、SQL 実行ツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-mysql-server
FastMCP に基づく、標準入出力(stdio)経由でローカルの MySQL データベースを操作するためのシンプルな Python スクリプトです。
概要
mcp-mysql-server は、ローカルの MySQL データベースに対してクエリを実行し、スキーマを調べるためのコマンドラインインターフェースを提供します。軽量なスクリプトベースの操作が適しているローカル開発環境で、使いやすいように設計されています。このスクリプトは、コマンドと結果の受け渡しに標準入出力を使用するため、ほかのコマンドラインツールやワークフローと簡単に連携できます。
特長
- クエリの実行: SQL の SELECT 文を実行し、結果をシンプルで読みやすい形式で表示します。
- データ操作: write_table ツールを使って、テーブルにデータを挿入します。
- スキーマの確認: 以下の情報を含む、データベーススキーマの情報を取得します。
- list_tables ツールを使って、すべてのテーブルを一覧表示します。
- get_table_schema を使って、指定したテーブルのカラムとデータ型を表示します。
- 接続テスト: データベースへの接続をテストし、サーバー情報を取得します。
- アクセス制御の設定: 設定を通じて接続パラメーター(ホスト、ユーザー、パスワード、データベース)を指定し、データベースへのセキュアなアクセスを可能にします。
- stdio インターフェース: 標準入力でコマンドを受け取り、標準出力で結果を返すため、スクリプトや自動化に適しています。
- ローカル環境での利用に重点: ローカル開発環境での利用に最適化されています。
はじめに
前提条件
- システムに Python 3.x がインストールされていること。
- ローカルの MySQL サーバーインスタンスが起動していること。
- 必要な Python ライブラリ(requirements.txt ファイルを使ってインストール):
pip install -r requirements.txt
インストール
- リポジトリをダウンロードするか、ローカルマシンにクローンします。
設定
-
スクリプトと同じディレクトリに設定ファイル(例:
config.ini)を作成するか、スクリプトの実行時にパスを指定します。設定ファイルは次の形式にします。[mysql] host = localhost port = 3306 # Optional, defaults to 3306 user = your_mysql_user password = your_mysql_password database = your_database_name注: 指定する MySQL ユーザーに、実行する操作に必要な権限があることを確認してください。
使い方
次のコマンドを実行し、設定ファイルへのパスを指定します。
python mcp-mysql-server.py --config config.ini
このスクリプトは、MySQL データベースを操作するための以下のツールを公開します。
test_connection:データベースへの接続をテストし、サーバー情報を返します。list_tables:現在のデータベースにあるすべてのテーブルを一覧表示します。read_table:指定したテーブルのすべてのデータを読み取り、返します。write_table:指定したテーブルに新しい行のデータを挿入します。get_table_schema:指定したテーブルのスキーマ(カラム定義)を返します。execute_sql:カスタム SQL クエリを実行し、結果を返します。
プロジェクト構成
mcp-mysql-server.py:MySQL MCP サーバーの実装を含むメインスクリプトconfig.ini:MySQL 接続パラメーターの設定ファイルrequirements.txt:Python の依存関係一覧changes.log:プロジェクトに加えられた変更のログ
Docker のサポート
このプロジェクトは、Docker Compose を使って Docker コンテナで実行できます。構成には以下が含まれます。
- サンプルデータを含む MySQL コンテナ
- MCP MySQL Server コンテナ
Docker での実行
- Docker と Docker Compose がシステムにインストールされていることを確認します。
- このリポジトリをクローンします。
- リポジトリのルートから、次を実行します。
docker-compose up -d
これにより、以下が実行されます。
- サンプルデータ(users テーブルと posts テーブル)を含む MySQL サーバーを起動します。
- MySQL データベースに接続された MCP MySQL Server を起動します。
Docker の設定
Docker で実行する場合は、MySQL コンテナを参照する専用の設定ファイル(config.docker.ini)を使用します。
テスト
機能が正しく動作することを確認するために、単体テストが用意されています。テストではモックを使用し、実際のデータベース接続を不要にしています。
ローカルでテストを実行する
# Make a copy of the main script with underscore naming
cp mcp-mysql-server.py mcp_mysql_server.py
# Run the tests
python -m unittest tests.py
Docker でテストを実行する
docker-compose -f docker-compose.test.yml up --build
これにより、テスト用コンテナがビルドされ、その内部で単体テストが実行されます。
開発
このツールを拡張したい開発者は、MCP ツールを追加して新しい機能を実装できます。各ツールは、特定のデータベース操作を処理する @mcp.tool() デコレーター付きの Python 関数です。
新しいツールを追加する例:
@mcp.tool()
def my_new_tool(param1: str, param2: int) -> dict:
"""
Documentation for the new tool.
"""
connection = create_mysql_connection()
cursor = connection.cursor()
try:
# Your tool implementation here
return {"result": "success"}
finally:
cursor.close()
connection.close()
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。