SQL Server MCP Server for Windsurf IDE について
C# で書かれた単独の MCP サーバーで、MCP に対応する任意の IDE やクライアントに SQL Server 連携機能を追加します。エディタ内でスキーマを参照し、クエリを実行したい開発者向けです。アクティブなファイルの位置に応じて接続文字列を動的に解決する点が特徴です。
主な機能
- 01SQL Server への接続とスキーマ参照
- 02テーブル、ビュー、列のメタデータ取得
- 03ストアドプロシージャの一覧、定義取得、実行
- 04データベースまたはインスタンス単位での SQL 実行
- 05appsettings.json によるファイル単位の接続上書き
- 06デバッグモードとログ出力先の設定
活用シーン
- 01Windsurf など MCP 対応 IDE からテーブルや列を参照する
- 02エディタ内で SQL クエリを実行し結果を確認する
- 03複数プロジェクトのワークスペースでサブプロジェクトごとに異なるデータベースを使う
MCP 対応
標準入出力上で JSON-RPC 2.0 により通信する MCP サーバーです。get_databases、get_tables、execute_database_query などのデータベース関連ツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SQL Server MCP サーバー
C# で記述されたスタンドアロンの MCP(Model Context Protocol)サーバーで、MCP に準拠したあらゆる IDE またはクライアントに SQL Server 連携機能を提供します。
機能
- SQL Server への接続
- データベーススキーマの調査
- テーブルとビューの確認
- カラムのメタデータの取得
- ストアドプロシージャの一覧表示
- SQL クエリの実行
- ストアドプロシージャの実行
- トラブルシューティング用のデバッグモード
- ログ保存先の設定
- 動的プロジェクト接続リゾルバー:エディターでアクティブなファイルに基づいて、データベース接続文字列を自動的に動的解決して上書きします
前提条件
- .NET 10.0 SDK 以上
- SQL Server インスタンス(ローカルまたはリモート)
- SQL Server クライアントツール
セットアップ
- プロジェクトをビルドします:
dotnet build
-
アプリケーションを設定します:
appsettings.example.jsonをappsettings.jsonにコピーします- SQL Server の詳細情報を使って、
appsettings.jsonの接続文字列などの設定を更新します
{ "ConnectionStrings": { "DefaultConnection": "Server=your-server;Database=master;User ID=your-username;Password=your-password;TrustServerCertificate=True" }, "LogPath": "C:\\Path\\To\\Your\\LogDirectory\\", "DebugMode": "false" } -
IDE/クライアントで MCP サーバーを設定します:
- IDE の MCP 設定ファイル(例:Windsurf、Claude Desktop の設定、または Cline/Cursor の設定)にサーバー設定を追加します。
- コマンドの実行先として、ビルドした実行可能ファイルのパスを指定します:
{ "mcpServers": { "sqlMcpService": { "command": "path/to/your/MCPSqlServer.exe", "args": [], "description": "SQL Server MCP Service" } } } -
GitHub 連携を設定します:
- プロジェクト用の新しい GitHub リポジトリを作成します
git initを使って、プロジェクトディレクトリに新しい Git リポジトリを初期化しますgit remote add origin <repository-url>を使って、GitHub リポジトリをリモートとして追加しますgit push -u origin masterを使って、変更をリモートリポジトリにプッシュします
設定オプション
appsettings.json ファイルには、次の設定オプションがあります:
ConnectionStrings:DefaultConnection:SQL Server の接続文字列LogPath:ログファイルを保存するディレクトリDebugMode:詳細なデバッグログを有効にするには、"true"に設定しますAllowWorkspaceOverride:動的なプロジェクト接続の上書きを無効にするには、"false"に設定します(既定値は"true"です)
動的プロジェクト接続リゾルバー
フォルダーやサブプロジェクトごとに異なるデータベースへ接続するマルチプロジェクトのワークスペースでは、メインの設定を常に更新する必要がなくなります:
- すべてのデータベースツールは、オプションの
currentFilePathパラメーターを受け取ります(通常、アクティブなファイルのパスが IDE クライアントによって自動的に設定されます)。 - サーバーは、ファイルの親フォルダーからディレクトリツリーを上にたどり、最も近い
appsettings.jsonを探します。 - ファイルが見つかった場合、そのファイルから
ConnectionStrings:DefaultConnectionを動的に抽出し、クエリの実行に使用します。 - 設定ファイルが見つからない場合、または
AllowWorkspaceOverrideが"false"に設定されている場合は、起動時に読み込んだ既定の接続文字列を使用します。
公開
アプリケーションは、自己完結型の実行可能ファイルとして公開できます:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
これにより、すべての依存関係を含む単一の実行可能ファイルが作成されます。
プロトコル
MCP サーバーは、標準の JSON-RPC 2.0 Model Context Protocol を使用し、標準入力/出力を介して通信します。
リクエスト形式(tools/call)
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tool-name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}
}
レスポンス形式
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "JSON-serialized tool output"
}
]
}
}
エラーの場合:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Error description"
}
}
対応ツール
1. データベースの一覧表示(get_databases)
システムデータベース以外の、利用可能な SQL Server データベースをすべて一覧表示します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_databases",
"arguments": {}
}
}
2. データベース内のテーブルの一覧表示(get_tables)
指定したデータベース内のテーブルとビューをすべて一覧表示します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_tables",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo"
}
}
}
3. テーブルのカラムの取得(get_columns)
指定したテーブルのすべてのカラムとカラムのメタデータを一覧表示します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_columns",
"arguments": {
"database": "AdventureWorks",
"schema": "Person",
"table": "Person"
}
}
}
4. ストアドプロシージャの一覧表示(get_procedures)
指定したデータベース内のストアドプロシージャをすべて一覧表示します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_procedures",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo"
}
}
}
5. ストアドプロシージャ定義の取得(get_procedure_definition)
ストアドプロシージャの定義を取得します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_procedure_definition",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo",
"name": "uspGetEmployeeManagers"
}
}
}
6. データベースクエリの実行(execute_database_query)
指定したデータベースのコンテキストで SQL クエリを実行します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_database_query",
"arguments": {
"database": "AdventureWorks",
"query": "SELECT TOP 10 * FROM Person.Person"
}
}
}
7. システムクエリの実行(execute_system_query)
サーバーインスタンスレベルで SQL クエリを実行します(データベースコンテキストは不要です)。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_system_query",
"arguments": {
"query": "SELECT name FROM sys.databases"
}
}
}
8. ストアドプロシージャの実行(execute_procedure)
ストアドプロシージャを実行します。
リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_procedure",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo",
"procedure": "uspGetEmployeeManagers",
"parameters": {
"BusinessEntityID": 5
}
}
}
}
IDE / クライアントとの統合
この MCP サーバーは、MCP に準拠する任意の IDE やクライアント(Windsurf、Cursor、Cline、Claude Desktop など)から使用でき、次の操作が可能です。
- データベーススキーマの参照
- SQL クエリの実行と結果の表示
- テーブル名と列名のコード補完
- ストアドプロシージャの実行
- SQL コードスニペットの生成
- データベース構造の分析
コード構成
アプリケーションは次のコンポーネントで構成されています。
Program.cs:メインエントリーポイントとリクエスト処理JsonRpcHandler.cs:JSON-RPC プロトコルを処理し、リクエストをディスパッチします- 設定は
appsettings.jsonから読み込まれます - ログは
LogPath設定で指定されたファイルに書き込まれます
コントリビューション
コントリビューションを歓迎します。お気軽にプルリクエストを送信してください。
- リポジトリをフォークします
- フィーチャーブランチを作成します(
git checkout -b feature/amazing-feature) - 変更をコミットします(
git commit -m 'Add some amazing feature') - ブランチにプッシュします(
git push origin feature/amazing-feature) - プルリクエストを作成します
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細については LICENSE ファイルを参照してください。
エラー処理
一般的なエラーコード:
invalid_request:JSON の形式が不正、または必須フィールドがありませんconnection_failed:SQL Server への接続に失敗しましたmissing_parameter:必須パラメーターが指定されていませんquery_execution_error:SQL クエリの実行中にエラーが発生しましたdatabase_not_found:指定されたデータベースが存在しませんtable_not_found:指定されたテーブルが存在しません
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。