mcpField
M
MsSqlMCP

MsSqlMCP

ローカル
github.com/jdlemesデータベース848 週間前に更新

MsSqlMCP について

MsSqlMCP は、SQL Server の利用者やデータベース管理者がスキーマを調べ、読み取り専用クエリを実行するための MCP サーバーです。stdio と HTTP/SSE に対応し、データを変更する操作をブロックします。

主な機能

  1. 01テーブルと列の検出
  2. 02リレーションとストアドプロシージャの確認
  3. 03検証済み SELECT クエリの実行
  4. 04stdio と HTTP/SSE に対応
  5. 05Windows サービスとしての配置

活用シーン

  1. 01未知のデータベーススキーマの調査
  2. 02読み取り専用クエリ結果の取得
  3. 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 モードで実行すると、次のエンドポイントを利用できます。

エンドポイントメソッド説明
/sseGETMCP プロトコル用の SSE ストリーム
/sse/toolsGET使用可能なすべてのツールを一覧表示します
/sse/invokePOSTツールを呼び出します
例: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": {}}'

トラブルシューティング

サービスが起動しない
  1. C:\Services\MsSqlMCP\logs\ のログを確認します
  2. appsettings.json の接続文字列を確認します
  3. SQL Server にサービスアカウントからアクセスできることを確認します
  4. 手動で実行してエラーを確認します:C:\Services\MsSqlMCP\MsSqlMCP.exe --http-only
接続の問題
  1. SQL Server が実行中であることを確認します
  2. SQL Server のポート(1433)のファイアウォールルールを確認します
  3. Windows 認証を使用している場合は、サービスアカウントにデータベースへのアクセス権があることを確認します
ポートがすでに使用されている

appsettings.json でポートを変更します。

{
  "Urls": "http://localhost:5001"
}

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。