Skip to main content
Glama

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の使用(推奨)

# Clone the repository (if you haven't already) git clone https://github.com/JubinSaniei/mcp-mssql # cd mcp-mssql # Copy example configuration and edit with your settings cp .env.example .env nano .env # Edit with your SQL Server details and other configurations # Start the Docker container docker-compose up -d

完全な Docker セットアップ手順については、 Docker README を参照してください。

構成

サーバーは環境変数を使用して設定されます。ルートディレクトリに.envファイル( .env.exampleをコピーできます)を作成し、これらの値を設定します。

すべての設定オプションとその設定方法の詳細なガイドについては、 CONFIG参照してください。

カテゴリ

変数

説明

デフォルト(config.js から)

繋がり

SQL_SERVER

SQL Server のホスト名または IP

localhost

SQL_PORT

SQL Server ポート

1433

SQL_USER

SQL Server ユーザー名

sa

SQL_PASSWORD

SQL Server パスワード

必須

SQL_DATABASE

接続するデフォルトのデータベース名

master

安全

SQL_ENCRYPT

暗号化を有効にする(無効にするには

false

に設定)

true

SQL_TRUST_SERVER_CERT

サーバー証明書を信頼する(無効にするには

false

に設定)

true

SQL_ALLOWED_DATABASES

サーバーがアクセスできるデータベースのカンマ区切りリスト。空の場合、アクセス制限は緩和されます(DBユーザーの権限に依存します)。

[]

(空のリスト)

タイムアウトと再試行

SQL_CONNECTION_TIMEOUT

接続タイムアウト(ミリ秒)

30000

SQL_REQUEST_TIMEOUT

クエリのリクエストタイムアウト(ミリ秒)

30000

SQL_MAX_RETRIES

初期接続試行の最大再試行回数

3

SQL_INITIAL_RETRY_DELAY

失敗した接続を再試行するまでの初期遅延(ミリ秒)

1000

SQL_MAX_RETRY_DELAY

接続再試行の最大遅延(ミリ秒)(指数バックオフを使用)

30000

接続プール

SQL_POOL_MAX

プール内の最大接続数

10

SQL_POOL_MIN

プール内の最小接続数

0

SQL_POOL_IDLE_TIMEOUT

プール内の接続のアイドル タイムアウト (ミリ秒)

30000

キャッシング

SQL_SCHEMA_CACHE_TTL

スキーマ キャッシュの有効時間 (ミリ秒)

300000

(5分)

MCPサーバー

MCP_SERVER_NAME

MCPサーバーの名前

MSSQL Server

MCP_SERVER_VERSION

MCP サーバーのバージョン

1.0.0

ログ記録

LOG_LEVEL

pinoロガーのログレベル(例:

fatal

error

warn

info

debug

trace

silent

)。これは

config.js

ではなく、

server.ts

process.env

から直接読み込まれます。

info

クロードと一緒に使う

この MCP サーバーを Claude CLI に追加するには:

# Add the MCP server using the config file claude mcp add-json mssql-mcp "$(cat claude-mcp-config.json)" # To add it globally claude mcp add-json -s user mssql-mcp "$(cat claude-mcp-config.json)" # Start a conversation with Claude using this MCP claude mcp mssql-mcp

Claude との会話では、次のことができます。

  1. SELECTクエリを実行します。

    <mcp:execute_query database="YourDatabaseName"> SELECT TOP 10 * FROM YourTable </mcp:execute_query>

    (デフォルトのSQL_DATABASEで操作する場合、またはSQL_ALLOWED_DATABASES単一の選択を意味する場合、 database属性はオプションです。)

  2. ストアド プロシージャを実行します。

    <mcp:execute_StoredProcedure database="YourDatabaseName"> { "procedure": "YourSchema.YourProcedureName", "parameters": [ {"name": "Param1", "type": "NVarChar", "value": "SomeValue"}, {"name": "Param2", "type": "Int", "value": 123} ] } </mcp:execute_StoredProcedure>
  3. データベース スキーマを探索します。

    <mcp:schema> YourDatabaseName </mcp:schema>

    ( YourDatabaseNameを省略した場合は、環境変数で指定されたSQL_DATABASEがデフォルトになります。)

接続処理

この MCP サーバーは、 DatabaseServiceによって管理されるグローバルで堅牢な接続プール ( mssqlライブラリの組み込みプーリング) を利用します。

  • 効率: 接続が再利用されるため、リクエストごとに新しい接続を確立する際のオーバーヘッドが削減されます。

  • 回復力: 初期接続の確立に指数バックオフを使用した再試行ロジックを実装します。

  • 呼び出し間でセッション状態を保持しない:ユーザーごとのセッションモデルとは異なり、このサーバーは、LLMからの後続のMCP呼び出し(例:2つの別々のexecute_query呼び出し)が、基盤となるデータベース接続と全く同じ接続を使用することを保証しません。したがって、ある呼び出しで作成された一時テーブルやセッション変数などのセッション固有の状態は、別の呼び出しでは使用できない可能性があります。各呼び出しは、セッション状態の観点からアトミックであると考える必要があります。ターゲットデータベースがプールのデフォルトと異なる場合、各操作内でUSE [database]コマンドが発行され、その特定の操作のコンテキストが確保されます。

発達

ローカル開発環境

# Install dependencies npm install # Create and configure your .env file cp .env.example .env nano .env # Run the server directly (requires environment variables to be set) npm start # Run with TypeScript compiler watching for changes npm run dev

セキュリティノート

  • SELECT: サーバーは、SQL 解析を使用して、 execute_queryツール経由でSELECTクエリのみを実行できるように厳密に制限します。DML (INSERT、UPDATE、DELETE) および DDL ステートメントはブロックされます。

  • ストアド プロシージャの実行: ストアド プロシージャは権限で許可されたすべてのアクションを実行できますが、その実行は個別に管理されます。

  • データベースホワイトリストSQL_ALLOWED_DATABASES環境変数を使用して、サーバーが通信できるデータベースを制限します。この機能の詳細とSQL_DATABASEとの連携方法については、 DATABASE_WHITELISTING.mdご覧ください。

  • システムプロシージャのブロッキング:一般的なシステムプロシージャ(例: sp_xp_ )の直接実行、およびRECONFIGUREWAITFOR DELAYなどのコマンドのexecute_query経由の実行はブロックされます。正当なシステム操作にはストアドプロシージャを使用してください。

  • 入力検証:コンテキストスイッチのデータベース名とストアドプロシージャ名は形式検証を受けます。SQL解析により、クエリの検証レイヤーがさらに強化されます。

  • パラメーター化された入力: ストアド プロシージャのパラメーターはmssqlライブラリによって処理され、通常は SQL インジェクションを防ぐためにパラメーター化されます。

トラブルシューティング

問題が発生した場合:

  1. コンテナ ログを確認します: docker logs mssql-mcp (Docker を使用している場合)。

  2. ローカルで実行している場合は、サーバーのコンソール出力で pino ログを確認してください。

  3. .envファイル内のすべての必須環境変数、特にSQL_PASSWORDSQL_SERVERSQL_USER 、およびSQL_DATABASEが正しく設定されていることを確認します。

  4. この変数を設定している場合は、アクセスしようとしているデータベースがSQL_ALLOWED_DATABASESにリストされていることを確認してください。

  5. MCP サーバーが実行されている場所から SQL Server インスタンスへのネットワーク接続を確認します。

  6. テスト スクリプト ( test-mcp.shtest-session-persistence.sh ) のレビュー/更新が必要になる可能性があります。

Docker の詳細なトラブルシューティングについては、 Docker README を参照してください。

-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JubinSaniei/mcp-mssql'

If you have feedback or need assistance with the MCP directory API, please join our Discord server