MCP MSSQL サーバー
これは、SQL Serverとのやり取りのためのモデルコンテキストプロトコル(MCP)サーバーです。大規模言語モデル(LLM)がSQLクエリを実行したり、ストアドプロシージャを実行したり、強化されたセキュリティと堅牢性を備えたデータベーススキーマを探索したりできるようになります。
特徴
安全なSQLクエリ実行:SQL Serverデータベースに対して
SELECTクエリを実行します。すべてのクエリは解析および検証され、SELECTステートメントのみが実行されることが保証されます。ストアド プロシージャのサポート: パラメーター化された入力を使用してストアド プロシージャを実行します。
スキーマ探索: パフォーマンス向上のために結果がキャッシュされた状態で、データベース テーブルと列の定義を表示します。
堅牢な接続管理: グローバル接続プールを利用し、再試行ロジックとタイムアウトを設定してデータベース接続を効率的に再利用します。
強化されたセキュリティ:
SQL クエリ解析と
SELECTのみのホワイトリスト。アクセス可能なデータベースをホワイトリストに登録するための
SQL_ALLOWED_DATABASES環境変数。データベース コンテキスト切り替えにおける一般的な SQL インジェクション パターンに対する保護。
直接クエリ内の潜在的に有害なシステム プロシージャまたはコマンドの実行をブロックします。
構成可能なキャッシュ: データベース スキーマ情報は、構成可能な Time-To-Live (TTL) を使用してキャッシュされます。
構造化ログ: 詳細かつ構造化されたアプリケーション ログ用の統合
pinoロガー。Docker 対応: Docker を使用した簡単なデプロイメント。
Related MCP server: MSSQL MCP Server
クイックスタート
Dockerの使用(推奨)
完全な Docker セットアップ手順については、 Docker README を参照してください。
構成
サーバーは環境変数を使用して設定されます。ルートディレクトリに.envファイル( .env.exampleをコピーできます)を作成し、これらの値を設定します。
すべての設定オプションとその設定方法の詳細なガイドについては、 CONFIG参照してください。
カテゴリ | 変数 | 説明 | デフォルト(config.js から) |
繋がり |
| SQL Server のホスト名または IP |
|
| SQL Server ポート |
| |
| SQL Server ユーザー名 |
| |
| SQL Server パスワード | 必須 | |
| 接続するデフォルトのデータベース名 |
| |
安全 |
| 暗号化を有効にする(無効にするには
に設定) |
|
| サーバー証明書を信頼する(無効にするには
に設定) |
| |
| サーバーがアクセスできるデータベースのカンマ区切りリスト。空の場合、アクセス制限は緩和されます(DBユーザーの権限に依存します)。 |
(空のリスト) | |
タイムアウトと再試行 |
| 接続タイムアウト(ミリ秒) |
|
| クエリのリクエストタイムアウト(ミリ秒) |
| |
| 初期接続試行の最大再試行回数 |
| |
| 失敗した接続を再試行するまでの初期遅延(ミリ秒) |
| |
| 接続再試行の最大遅延(ミリ秒)(指数バックオフを使用) |
| |
接続プール |
| プール内の最大接続数 |
|
| プール内の最小接続数 |
| |
| プール内の接続のアイドル タイムアウト (ミリ秒) |
| |
キャッシング |
| スキーマ キャッシュの有効時間 (ミリ秒) |
(5分) |
MCPサーバー |
| MCPサーバーの名前 |
|
| MCP サーバーのバージョン |
| |
ログ記録 |
| pinoロガーのログレベル(例:
、
、
、
、
、
、
)。これは
ではなく、
の
から直接読み込まれます。 |
|
クロードと一緒に使う
この MCP サーバーを Claude CLI に追加するには:
Claude との会話では、次のことができます。
SELECTクエリを実行します。<mcp:execute_query database="YourDatabaseName"> SELECT TOP 10 * FROM YourTable </mcp:execute_query>(デフォルトの
SQL_DATABASEで操作する場合、またはSQL_ALLOWED_DATABASES単一の選択を意味する場合、database属性はオプションです。)ストアド プロシージャを実行します。
<mcp:execute_StoredProcedure database="YourDatabaseName"> { "procedure": "YourSchema.YourProcedureName", "parameters": [ {"name": "Param1", "type": "NVarChar", "value": "SomeValue"}, {"name": "Param2", "type": "Int", "value": 123} ] } </mcp:execute_StoredProcedure>データベース スキーマを探索します。
<mcp:schema> YourDatabaseName </mcp:schema>(
YourDatabaseNameを省略した場合は、環境変数で指定されたSQL_DATABASEがデフォルトになります。)
接続処理
この MCP サーバーは、 DatabaseServiceによって管理されるグローバルで堅牢な接続プール ( mssqlライブラリの組み込みプーリング) を利用します。
効率: 接続が再利用されるため、リクエストごとに新しい接続を確立する際のオーバーヘッドが削減されます。
回復力: 初期接続の確立に指数バックオフを使用した再試行ロジックを実装します。
呼び出し間でセッション状態を保持しない:ユーザーごとのセッションモデルとは異なり、このサーバーは、LLMからの後続のMCP呼び出し(例:2つの別々の
execute_query呼び出し)が、基盤となるデータベース接続と全く同じ接続を使用することを保証しません。したがって、ある呼び出しで作成された一時テーブルやセッション変数などのセッション固有の状態は、別の呼び出しでは使用できない可能性があります。各呼び出しは、セッション状態の観点からアトミックであると考える必要があります。ターゲットデータベースがプールのデフォルトと異なる場合、各操作内でUSE [database]コマンドが発行され、その特定の操作のコンテキストが確保されます。
発達
ローカル開発環境
セキュリティノート
SELECT: サーバーは、SQL 解析を使用して、execute_queryツール経由でSELECTクエリのみを実行できるように厳密に制限します。DML (INSERT、UPDATE、DELETE) および DDL ステートメントはブロックされます。ストアド プロシージャの実行: ストアド プロシージャは権限で許可されたすべてのアクションを実行できますが、その実行は個別に管理されます。
データベースホワイトリスト:
SQL_ALLOWED_DATABASES環境変数を使用して、サーバーが通信できるデータベースを制限します。この機能の詳細とSQL_DATABASEとの連携方法については、DATABASE_WHITELISTING.mdご覧ください。システムプロシージャのブロッキング:一般的なシステムプロシージャ(例:
sp_、xp_)の直接実行、およびRECONFIGUREやWAITFOR DELAYなどのコマンドのexecute_query経由の実行はブロックされます。正当なシステム操作にはストアドプロシージャを使用してください。入力検証:コンテキストスイッチのデータベース名とストアドプロシージャ名は形式検証を受けます。SQL解析により、クエリの検証レイヤーがさらに強化されます。
パラメーター化された入力: ストアド プロシージャのパラメーターは
mssqlライブラリによって処理され、通常は SQL インジェクションを防ぐためにパラメーター化されます。
トラブルシューティング
問題が発生した場合:
コンテナ ログを確認します:
docker logs mssql-mcp(Docker を使用している場合)。ローカルで実行している場合は、サーバーのコンソール出力で pino ログを確認してください。
.envファイル内のすべての必須環境変数、特にSQL_PASSWORD、SQL_SERVER、SQL_USER、およびSQL_DATABASEが正しく設定されていることを確認します。この変数を設定している場合は、アクセスしようとしているデータベースが
SQL_ALLOWED_DATABASESにリストされていることを確認してください。MCP サーバーが実行されている場所から SQL Server インスタンスへのネットワーク接続を確認します。
テスト スクリプト (
test-mcp.sh、test-session-persistence.sh) のレビュー/更新が必要になる可能性があります。
Docker の詳細なトラブルシューティングについては、 Docker README を参照してください。