MCP SQL Server

Integrations

  • Implements database operations using the pyodbc Python library to provide SQL Server interaction capabilities.

MCP SQL サーバー

会話型 AI インターフェースを介して SQL データベース対話ツールを提供する FastMCP サーバー。

概要

このプロジェクトは、会話型AIインターフェースを通じてMS SQL Serverの操作を公開するサーバーを構築します。FastMCPフレームワークを使用してSQLデータのクエリと操作のためのツールを提供し、ユーザーが自然言語でデータベースを操作できるようにします。

特徴

  • SQLクエリを実行して結果を表示する
  • データベース内の利用可能なテーブルを一覧表示する
  • 列情報を使用してテーブル構造を記述する
  • クエリ以外の操作(INSERT、UPDATE、DELETE)を実行する
  • システムで利用可能なODBCドライバを一覧表示する
  • データベース情報とサーバーの詳細を表示する

要件

  • Python 3.7以上
  • pyodbc
  • 非同期
  • FastMCPフレームワーク
  • マイクロソフトSQLサーバー
  • SQL Server 用 ODBC ドライバー 17

インストール

  1. Python の依存関係をインストールします。
pip install pyodbc asyncio fastmcp
  1. Microsoft SQL Server と SQL Server 用の ODBC ドライバー 17 がインストールされていることを確認してください。
  2. スクリプトで接続設定を構成します。
# 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 データベースへの接続を確立します。

利用可能なツール

クエリSQL

SQL クエリを実行し、結果を返します。

query_sql(query: str = None) -> str
  • クエリが指定されていない場合は、デフォルトでSELECT * FROM [dbo].[Table_1]になります。
  • クエリ結果をフォーマットされた文字列として返します

リストテーブル

データベースで使用可能なすべてのテーブルを一覧表示します。

list_tables() -> str
  • テーブル名のリストを文字列として返します

テーブルの説明

特定のテーブルの構造を取得します。

describe_table(table_name: str) -> str
  • table_name : 記述するテーブルの名前
  • 名前やデータ型などの列情報を返します

非クエリ実行

INSERT、UPDATE、DELETE などの非クエリ SQL ステートメントを実行します。

execute_nonquery(sql: str) -> str
  • sql : 実行するSQL文
  • 影響を受けた行数を含む操作結果を返します
  • トランザクション(コミット/ロールバック)を自動的に処理します

リスト_odbc_drivers

システム上で利用可能なすべての ODBC ドライバーを一覧表示します。

list_odbc_drivers() -> str
  • インストールされているODBCドライバのコンマ区切りリストを返します。

データベース情報

接続されたデータベースに関する一般情報を取得します。

database_info() -> str
  • サーバー名、データベース名、SQL Server のバージョン、現在のサーバー時刻、テーブル数を返します。

建築

サーバーは、操作のブロックを回避するために非同期アーキテクチャを使用します。

  1. ライフサイクル管理: app_lifespanコンテキスト マネージャーは、データベース接続のセットアップと破棄を処理します。
  2. 非ブロッキング操作: データベース操作は、メイン イベント ループのブロックを防ぐためにasyncio.get_event_loop().run_in_executor()を使用して別のスレッドで実行されます。
  3. エラー処理: すべての操作には、便利なエラー メッセージによる包括的なエラー処理が含まれます。

エラー処理

サーバーはさまざまなエラー状態を処理します。

  • データベース接続の失敗
  • 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クエリの入力検証を実装することを検討してください。
  • 最小権限の原則に基づいてデータベースユーザーの権限を制限する

トラブルシューティング

よくある問題:

  1. 接続エラー: SQL Server インスタンス名を確認し、実行中であることを確認します
  2. ODBC ドライバー エラー: SQL Server 用 ODBC ドライバー 17 がインストールされていることを確認してください
  3. 権限エラー: アプリケーションを実行している Windows ユーザーが適切な SQL Server 権限を持っていることを確認してください

ライセンス

[ライセンス情報]

接触

[連絡先]

-
security - not tested
F
license - not found
-
quality - not tested

MS SQL データベースとの自然言語による対話を提供する FastMCP サーバー。これにより、ユーザーは会話型 AI インターフェースを通じてデータのクエリ、テーブルの一覧表示、構造の記述、データベース操作の実行が可能になります。

  1. Overview
    1. Features
      1. Requirements
        1. Installation
          1. Usage
            1. Available Tools
              1. query_sql
              2. list_tables
              3. describe_table
              4. execute_nonquery
              5. list_odbc_drivers
              6. database_info
            2. Architecture
              1. Error Handling
                1. Customization
                  1. Security Considerations
                    1. Troubleshooting
                      1. License
                        1. Contact
                          ID: kyi3u1xitg