MCP SQL Server について
MCP SQL Server は、対話型 AI を通じて Microsoft SQL Server データベースを操作する FastMCP サーバーです。クエリ、スキーマ確認、データ変更、接続情報の取得に対応します。
主な機能
- 01SQLクエリを実行して結果を返す
- 02データベースのテーブルを一覧表示
- 03テーブルの列と型を確認
- 04INSERT、UPDATE、DELETEを実行
- 05データベースとサーバーの詳細を表示
- 06インストール済みODBCドライバーを一覧表示
活用シーン
- 01AIインターフェースからデータベースのレコードを検索
- 02テーブル名と列定義を確認
- 03データを変更して影響行数を確認
- 04接続情報と利用可能なODBCドライバーを確認
MCP 対応
MCP クライアントに SQL Server のクエリ、スキーマ確認、データ変更、ドライバー一覧、データベース情報取得のツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP SQL Server
会話型 AI インターフェースを通じて SQL データベースを操作するツールを提供する FastMCP サーバーです。
概要
このプロジェクトでは、会話型 AI インターフェースを通じて MS SQL Server の操作機能を公開するサーバーを作成します。FastMCP フレームワークを使用して SQL データのクエリや操作を行うツールを提供し、ユーザーが自然言語でデータベースを操作できるようにします。
機能
- SQL クエリを実行し、結果を表示
- データベースで利用可能なテーブルを一覧表示
- カラム情報を含むテーブル構造を表示
- クエリ以外の操作(INSERT、UPDATE、DELETE)を実行
- システムで利用可能な ODBC ドライバーを一覧表示
- データベース情報とサーバーの詳細を表示
要件
- Python 3.7+
- pyodbc
- asyncio
- FastMCP フレームワーク
- Microsoft SQL Server
- ODBC Driver 17 for SQL Server
インストール
- Python の依存関係をインストールします。
pip install pyodbc asyncio fastmcp
-
Microsoft SQL Server と ODBC Driver 17 for SQL Server がインストールされていることを確認します。
-
スクリプト内の接続設定を構成します。
# Connection parameters
SERVER = "server\\instance" # Change to your SQL Server instance
DATABASE = "db_name" # Change to your database name
使用方法
サーバーを起動します。
python mcp_sql_server.py
サーバーが初期化され、指定した SQL Server データベースへの接続が確立されます。
利用可能なツール
query_sql
SQL クエリを実行し、結果を返します。
query_sql(query: str = None) -> str
- クエリが指定されていない場合、デフォルトで
SELECT * FROM [dbo].[Table_1]が使用されます - クエリ結果を整形された文字列として返します
list_tables
データベースで利用可能なすべてのテーブルを一覧表示します。
list_tables() -> str
- テーブル名の一覧を文字列として返します
describe_table
指定したテーブルの構造を取得します。
describe_table(table_name: str) -> str
table_name:構造を取得するテーブルの名前- 名前やデータ型などのカラム情報を返します
execute_nonquery
INSERT、UPDATE、DELETE、その他のクエリ以外の SQL 文を実行します。
execute_nonquery(sql: str) -> str
sql:実行する SQL 文- 影響を受けた行数を含む操作結果を返します
- トランザクションを自動的に処理します(コミット/ロールバック)
list_odbc_drivers
システムで利用可能なすべての ODBC ドライバーを一覧表示します。
list_odbc_drivers() -> str
- インストール済みの ODBC ドライバーをカンマ区切りで返します
database_info
接続中のデータベースに関する一般情報を取得します。
database_info() -> str
- サーバー名、データベース名、SQL Server のバージョン、現在のサーバー時刻、テーブル数を返します
アーキテクチャ
このサーバーでは、ブロッキング処理を避けるために非同期アーキテクチャを使用しています。
-
ライフサイクル管理:
app_lifespanコンテキストマネージャーが、データベース接続の確立と終了を処理します。 -
ノンブロッキング処理:データベース操作は
asyncio.get_event_loop().run_in_executor()を使用して別スレッドで実行され、メインのイベントループがブロックされるのを防ぎます。 -
エラー処理:すべての操作に包括的なエラー処理が含まれており、有用なエラーメッセージを提供します。
エラー処理
このサーバーはさまざまなエラー状況に対応します。
- データベース接続の失敗
- SQL クエリの構文エラー
- テーブルが見つからないエラー
- 権限に関する問題
すべてのエラーはログに記録され、適切なエラーメッセージがクライアントに返されます。
カスタマイズ
新しいデータベースツールを追加したり、既存のツールを変更したりするには、既存のツールで使用されているパターンに従います。
@mcp.tool()
async def your_new_tool(ctx: Context, param1: str) -> str:
"""Documentation for your tool"""
try:
conn = ctx.request_context.lifespan_context["conn"]
if conn is None:
return "Database connection is not available."
def your_db_operation():
# Your database operations here
pass
loop = asyncio.get_event_loop()
result = await loop.run_in_executor(None, your_db_operation)
# Process and return results
return "Your result"
except Exception as e:
return f"Error: {str(e)}"
セキュリティに関する考慮事項
- このサーバーは Windows 認証("Trusted_Connection=yes")を使用します
- SQL インジェクションを防ぐため、SQL クエリの入力検証を実装することを検討してください
- 最小権限の原則に基づいてデータベースユーザーの権限を制限してください
トラブルシューティング
よくある問題:
- 接続エラー:SQL Server インスタンス名を確認し、実行中であることを確認してください
- ODBC ドライバーのエラー:ODBC Driver 17 for SQL Server がインストールされていることを確認してください
- 権限エラー:アプリケーションを実行している Windows ユーザーに適切な SQL Server 権限があることを確認してください
ライセンス
[ライセンス情報]
お問い合わせ
[連絡先情報]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。