MsSqlMCP について
MsSqlMCP は、SQL Server の利用者やデータベース管理者がスキーマを調べ、読み取り専用クエリを実行するための MCP サーバーです。stdio と HTTP/SSE に対応し、データを変更する操作をブロックします。
主な機能
- 01テーブルと列の検出
- 02リレーションとストアドプロシージャの確認
- 03検証済み SELECT クエリの実行
- 04stdio と HTTP/SSE に対応
- 05Windows サービスとしての配置
活用シーン
- 01未知のデータベーススキーマの調査
- 02読み取り専用クエリ結果の取得
- 03MCP クライアントへのデータベース調査機能の提供
MCP 対応
stdio または HTTP/SSE 経由で、スキーマ調査と読み取り専用 SQL のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MsSqlMCP
SQL Server データベースのスキーマ検査と読み取り専用クエリの実行を行う MCP サーバーです。
機能
- 読み取り専用アクセス:データの変更を防ぐため、すべてのクエリを検証します(INSERT、UPDATE、DELETE、DROP、EXEC などはブロックされます)
- スキーマの検出:テーブル、列、リレーションシップ、ストアドプロシージャ
- SQL の実行:安全な SELECT クエリのみ
- デュアルトランスポート:stdio と HTTP/SSE プロトコルの両方をサポート
- Windows サービス:本番環境へのデプロイ向けに、Windows サービスとして実行できます
- MCP プロトコル:VS Code Copilot、Claude Desktop、その他の MCP クライアントと互換性があります
前提条件
- .NET 10(または、軽微な調整を加えた .NET 9)
- SQL Server
アーキテクチャ
このプロジェクトでは、依存性注入を用いて SOLID 原則に従っています。
MsSqlMCP/
├── Program.cs # Entry point with DI and dual transport
├── SchemaTool.cs # MCP tool definitions
├── Interfaces/
│ ├── IConnectionFactory.cs # SQL connection abstraction
│ ├── IQueryExecutor.cs # Query execution abstraction
│ ├── ISchemaRepository.cs # Schema queries abstraction
│ └── ISqlQueryValidator.cs # Query validation abstraction
├── Services/
│ ├── SqlConnectionFactory.cs # Connection management
│ ├── SafeQueryExecutor.cs # Validated query execution
│ ├── SchemaRepository.cs # Schema query implementation
│ └── ReadOnlySqlQueryValidator.cs # Security validation (27 blocked keywords)
└── Tests/
└── ReadOnlySqlQueryValidatorTests.cs # 42 security tests
構成
接続文字列
appsettings.json を編集します。
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=(local);Initial Catalog=YourDatabase;Encrypt=False;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Urls": "http://localhost:5000"
}
実行
コンソールモード(開発)
# Run with both stdio and HTTP transports
dotnet run
# Run with HTTP transport only (for debugging)
dotnet run -- --http-only
テストの実行
dotnet test --filter "FullyQualifiedName~Tests"
MCP クライアントの構成
オプション 1:stdio トランスポート(VS Code)
VS Code の settings.json に追加します。
{
"mcp": {
"servers": {
"MsSqlMCP": {
"type": "stdio",
"command": "dotnet",
"args": ["run", "--project", "c:\\path\\to\\MsSqlMCP.csproj"]
}
}
}
}
オプション 2:HTTP トランスポート(VS Code)
まず、サーバーを起動します。
dotnet run -- --http-only
次に、VS Code の settings.json に追加します。
{
"mcp": {
"servers": {
"MsSqlMCP": {
"type": "http",
"url": "http://localhost:5000/sse",
"autoApprove": [
"get_tables",
"get_columns",
"get_relationships",
"execute_sql",
"get_store_procedure"
]
}
}
}
}
オプション 3:Claude Desktop
claude_desktop_config.json に追加します。
{
"mcpServers": {
"MsSqlMCP": {
"command": "dotnet",
"args": ["run", "--project", "c:\\path\\to\\MsSqlMCP.csproj"]
}
}
}
使用可能なツール
| ツール | 説明 | 必須パラメーター |
|---|---|---|
GetTables | データベース内のすべてのテーブル名を取得します | なし |
GetColumns | 指定したテーブルの列(フィールド)を取得します | tableName |
GetRelationships | テーブル間の外部キーリレーションシップを取得します | なし |
GetStoreProcedure | ストアドプロシージャの定義を取得します | spName |
ExecuteSql | 読み取り専用の SELECT クエリを実行します | sqlQuery |
すべてのツールで、同じ SQL Server インスタンス内の別のデータベースをクエリするためのオプションパラメーター databaseName を指定できます。
セキュリティ
ExecuteSql ツールでは SELECT クエリのみが許可されます。次のステートメントはブロックされます。
- DML:INSERT、UPDATE、DELETE、MERGE、TRUNCATE
- DDL:CREATE、ALTER、DROP
- DCL:GRANT、REVOKE、DENY
- 実行:EXEC、EXECUTE、SP_EXECUTESQL、XP_
- その他:BACKUP、RESTORE、BULK、OPENROWSET、OPENQUERY、OPENDATASOURCE
Windows サービスのインストール
1. アプリケーションを発行する
開発マシンで実行します。
cd c:\path\to\MsSqlMCP
dotnet publish -c Release -r win-x64 --self-contained true
次の場所にファイルが作成されます:bin\Release\net10.0\win-x64\publish\
2. サーバーにコピーする
publish フォルダーの内容をサーバーにコピーします。
Source: bin\Release\net10.0\win-x64\publish\*
Destination: C:\Services\MsSqlMCP\
3. サーバーで構成する
C:\Services\MsSqlMCP\appsettings.json を編集し、SQL Server の接続文字列を設定します。
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=YOUR_SQL_SERVER;Initial Catalog=YOUR_DATABASE;Encrypt=False;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Urls": "http://localhost:5000"
}
4. サービスをインストールする
管理者として PowerShell を開き、次を実行します。
# Create the Windows Service
sc.exe create MsSqlMCP binPath= "C:\Services\MsSqlMCP\MsSqlMCP.exe --http-only" start= auto DisplayName= "MsSql MCP Server"
# Add description
sc.exe description MsSqlMCP "Model Context Protocol server for SQL Server database inspection"
# Create logs directory
mkdir C:\Services\MsSqlMCP\logs -Force
# Start the service
net start MsSqlMCP
# Verify status
sc.exe query MsSqlMCP
5. インストールを確認する
# Check service status
Get-Service -Name MsSqlMCP
# Test the endpoint
Invoke-RestMethod -Uri "http://localhost:5000/sse/tools"
サービス管理コマンド
# Stop service
net stop MsSqlMCP
# Start service
net start MsSqlMCP
# Restart service
net stop MsSqlMCP; net start MsSqlMCP
# Uninstall service
net stop MsSqlMCP
sc.exe delete MsSqlMCP
ファイアウォールの構成(リモートからアクセスする場合)
# Allow inbound traffic on port 5000
New-NetFirewallRule -DisplayName "MsSqlMCP" -Direction Inbound -Port 5000 -Protocol TCP -Action Allow
HTTP API エンドポイント
HTTP モードで実行すると、次のエンドポイントを利用できます。
| エンドポイント | メソッド | 説明 |
|---|---|---|
/sse | GET | MCP プロトコル用の SSE ストリーム |
/sse/tools | GET | 使用可能なすべてのツールを一覧表示します |
/sse/invoke | POST | ツールを呼び出します |
例:HTTP 経由でツールを呼び出す
curl -X POST http://localhost:5000/sse/invoke \
-H "Content-Type: application/json" \
-d '{"Tool": "GetTables", "Params": {}}'
Invoke-RestMethod -Uri "http://localhost:5000/sse/invoke" -Method POST -ContentType "application/json" -Body '{"Tool": "GetTables", "Params": {}}'
トラブルシューティング
サービスが起動しない
C:\Services\MsSqlMCP\logs\のログを確認しますappsettings.jsonの接続文字列を確認します- SQL Server にサービスアカウントからアクセスできることを確認します
- 手動で実行してエラーを確認します:
C:\Services\MsSqlMCP\MsSqlMCP.exe --http-only
接続の問題
- SQL Server が実行中であることを確認します
- SQL Server のポート(1433)のファイアウォールルールを確認します
- Windows 認証を使用している場合は、サービスアカウントにデータベースへのアクセス権があることを確認します
ポートがすでに使用されている
appsettings.json でポートを変更します。
{
"Urls": "http://localhost:5001"
}
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。