SQL Server MCP Server について
SQL Server MCP Serverは、MCP経由でSQL Serverのクエリ実行とスキーマ確認機能をLLMに提供します。データベース利用者やエージェントのワークフロー向けに、クエリツール、キャッシュ付きリソース、SQLインジェクション検証を備えています。
主な機能
- 01SQLクエリとストアドプロシージャの実行
- 02テーブル、ビュー、プロシージャの確認
- 03列、主キー、サンプルデータの取得
- 04スキーマメタデータのキャッシュ
- 05SQLインジェクションの検証
活用シーン
- 01LLM経由でのSQL Serverデータの検索
- 02クエリ前のデータベース構造の確認
- 03パラメーター付きストアドプロシージャの実行
MCP 対応
クエリ、ストアドプロシージャ、スキーマ確認用のMCPツールと、URIで参照できるデータベースリソースを提供します。MCPクライアントはリソースを自動検出して直接アクセスできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SQL Server MCP サーバー
SQL Server データベースを操作するためのツールを提供する Model Context Protocol(MCP)サーバーです。このサーバーを使用すると、LLM は標準化されたプロトコルを介して SQL Server データベースに対するクエリや調査を行えます。
特長
- データベースへのクエリ:SQL クエリを実行し、結果を取得します
- スキーマの調査:テーブル、ビュー、ストアドプロシージャを一覧表示し、テーブルスキーマを確認します
- SQL インジェクションの防止:SQL インジェクション攻撃を防止するための検証機能を内蔵しています
- リソースのキャッシュ:パフォーマンスを向上させるため、メタデータをキャッシュします
はじめに
前提条件
- .NET 10.0 SDK 以降(または Docker)
- SQL Server インスタンス(ローカルまたはリモート)
インストール
オプション 1:Docker(推奨)
.NET をインストールせずに、Docker を使用してサーバーを実行します。
# Build the image
docker build -t tsql-mcp-server .
# Run with connection string
docker run -i tsql-mcp-server --dsn "Server=host.docker.internal;Database=mydb;User Id=sa;Password=mypassword;TrustServerCertificate=True;"
# Run in read-only mode
docker run -i tsql-mcp-server --dsn "..." --read-only
# Run with environment variable
docker run -i -e SQL_CONNECTION="Server=..." tsql-mcp-server --env-var SQL_CONNECTION
注意:
- stdio トランスポートでは
-iフラグが必要です - ホストマシン上の SQL Server に接続するには、
host.docker.internalを使用します - WSL2 ユーザーの場合:
host.docker.internalが解決されない場合は、代わりに--network hostとlocalhostを使用します
オプション 2:.NET ツールとしてインストール
.NET ツールとしてグローバルにインストールします。
dotnet tool install --global tsql-mcp-server
最新バージョンに更新するには:
dotnet tool update --global tsql-mcp-server
オプション 2:ソースからビルド
# Clone the repository
git clone https://github.com/Popplywop/tsql-mcp-server
cd tsql-mcp-server
# Build the project
dotnet build
サーバーの実行
.NET ツールを使用する場合
.NET グローバルツールとしてインストールした場合:
# Using a direct connection string
tsql-mcp-server --dsn "Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
# Using an environment variable
tsql-mcp-server --env-var "SQL_CONNECTION_STRING"
ソースコードを使用する場合
ソースからビルドした場合:
# Using a direct connection string
dotnet run --dsn "Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
# Using an environment variable
dotnet run --env-var "SQL_CONNECTION_STRING"
MCP サーバーの設定
このサーバーを Claude や Model Context Protocol に対応するその他の LLM と使用するには、MCP 設定ファイルで設定する必要があります。
.NET ツールとしてインストールした場合
{
"servers": [
{
"name": "SqlServerMcp",
"command": "tsql-mcp-server",
"args": [
"--dsn",
"Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
]
}
]
}
ソースからビルドした場合
{
"servers": [
{
"name": "SqlServerMcp",
"command": "path/to/tsql-mcp-server.exe",
"args": [
"--dsn",
"Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
]
}
]
}
接続文字列を実際の値に置き換えてください。この設定は、Claude の MCP 統合や、Model Context Protocol に対応するその他の LLM プラットフォームで使用できます。
Docker を使用する場合
{
"mcpServers": {
"sqlserver": {
"command": "docker",
"args": [
"run", "-i", "--rm", "tsql-mcp-server",
"--dsn", "Server=host.docker.internal;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
]
}
}
}
読み取り専用モードにするには、args 配列に "--read-only" を追加します。
機密情報に環境変数を使用する場合
セキュリティを強化するため、接続文字列に環境変数を使用できます。
{
"servers": [
{
"name": "SqlServerMcp",
"command": "tsql-mcp-server",
"args": [
"--env-var",
"SQL_CONNECTION_STRING"
]
}
]
}
コマンドラインオプション
| オプション | 短縮形 | 説明 |
|---|---|---|
--dsn | -d | SQL Server の接続文字列 |
--env-var | -e | 接続文字列を格納する環境変数名 |
--read-only | -r | 読み取り専用モードで実行します(INSERT、UPDATE、DELETE などをブロックします) |
利用可能な MCP ツール
クエリツール
-
ExecuteQuery:データベースに対して SQL クエリを実行し、結果を返します
- パラメーター:
query:実行する SQL クエリcommandTimeout:コマンドのタイムアウト時間(秒)。省略可能ですmaxRows:返す行数の最大値。省略可能です
- パラメーター:
-
ExecuteStoredProcedure:省略可能なパラメーターを指定してストアドプロシージャを実行します
- パラメーター:
schema:スキーマ名(例:'dbo')procedureName:ストアドプロシージャ名parametersJson:パラメーターの JSON オブジェクト。省略可能です(例:{"@param1": "value"})commandTimeout:コマンドのタイムアウト時間(秒)。省略可能ですmaxRows:返す行数の最大値。省略可能です
- パラメーター:
スキーマツール(トークン最適化)
データを取得せずにデータベース構造を調べられる軽量なツールです。
- GetTableColumns:テーブルの列名と型を取得します
- GetTableRowCount:テーブルの行数を取得します
- ListTables:スキーマ内のすべてのテーブルを一覧表示します(行数の表示は省略可能です)
- GetPrimaryKey:テーブルの主キー列を取得します
- GetSampleData:少量のサンプルデータを取得します(最大 20 行)
データベースリソース
サーバーは、リソースベースのアプローチを通じてデータベースのスキーマ情報を提供します。リソースは URI 経由でアクセスし、パフォーマンス向上のために遅延読み込みとキャッシュが行われます。
| リソース URI | 説明 | 読み込み動作 |
|---|---|---|
sqlserver://schemas/{schema_name} | 特定のスキーマに関する情報 | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/tables | スキーマ内のテーブル一覧 | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/views | スキーマ内のビュー一覧 | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/procedures | スキーマ内のストアドプロシージャ一覧 | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/tables/{table_name} | 特定のテーブルに関する詳細情報 | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/views/{view_name} | ビューの列(定義は含まれません) | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/views/{view_name}/definition | ビューの SQL 定義 | リクエスト時に読み込まれます |
sqlserver://schemas/{schema_name}/procedures/{procedure_name} | プロシージャのパラメーター(定義は含まれません) | 初回のリクエスト時に読み込まれ、10 分間キャッシュされます |
sqlserver://schemas/{schema_name}/procedures/{procedure_name}/definition | プロシージャの SQL 定義 | リクエスト時に読み込まれます |
注: トークンの使用量を抑えるため、ビューとプロシージャの定義はデフォルトで除外されています。SQL ソースコードが必要な場合は、/definition エンドポイントを使用してください。
リソースは MCP クライアントによって自動的に検出され、特定のツール呼び出しを行わずに直接アクセスできます。
セキュリティに関する考慮事項
- 適切な権限を持つ SQL Server アカウントを使用してください(最小権限の原則)。
- 接続文字列は安全に保管してください(ソース管理に含めないでください)。
- 接続文字列には環境変数の使用を検討してください。
- データベース接続では TLS/SSL を有効にしてください。
- SQL インジェクションの検証により危険な操作を防ぎ、一般的な攻撃ベクトルから保護します。
使用例
データのクエリ
ExecuteQuery:
query: "SELECT TOP 10 * FROM MyTable"
maxRows: 100
データベースリソースへのアクセス
リソースには URI 経由で直接アクセスできます。
# List all schemas
GET sqlserver://schemas
# Get information about a specific schema
GET sqlserver://schemas/dbo
# List all tables in a schema
GET sqlserver://schemas/dbo/tables
# Get detailed information about a specific table
GET sqlserver://schemas/dbo/tables/Customers
リソースベースのアプローチにより、データベーススキーマを探索して操作するための RESTful な方法が提供されます。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細については、LICENSE.md ファイルを参照してください。
MIT License は、最小限の制限で再利用を認める寛容なライセンスです。元の著作権表示と許諾表示をすべての複製物に記載することを条件として、誰でもソフトウェアを使用、コピー、変更、統合、公開、配布、サブライセンス、および/または販売できます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。