mcpField
M
MSSQL MCP Server

MSSQL MCP Server

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

MSSQL MCP Server について

MSSQL MCP Server は、公式 MCP Python SDK(FastMCP)上に構築された SQL Server 向け MCP サーバーで、データベース操作とビジネス分析を支援します。1 つのサーバーで複数の接続を扱え、接続ごとに読み取り専用、タイムアウト、行数上限、書き込み確認を個別に設定できます。

主な機能

  1. 01複数のデータベース接続を各ツールで選択
  2. 02構造化された列と行を返す読み取りクエリ
  3. 03ストアドプロシージャの一覧表示と複数結果セットの実行
  4. 04リソーステンプレートによるオンデマンドのテーブル構造提供
  5. 05SQL の静的検証、読み取り専用モード、行数制限

活用シーン

  1. 01AI アシスタントによる SQL Server データの照会とインサイトの作成
  2. 02本番データベースへの読み取り専用アクセスの提供
  3. 03SQL 作成時のテーブル構造の確認

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"mssql": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
起動コマンドnpx -y @modelcontextprotocol/inspector

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@modelcontextprotocol/inspector

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MSSQL MCP サーバー

English | 中文

概要

MSSQL MCP サーバーは、データベースとのやり取りとビジネスインテリジェンス機能を提供します。このサーバーを使うと、SQL クエリの実行、ビジネスデータの分析、ビジネスインサイトメモの自動生成ができます。
MSSQL に適応させるための変更については、公式ウェブサイトの SQLite を参照してください。

公式 MCP Python SDK(FastMCP)を基盤とし、構造化ツール出力(structuredContent)、ツールアノテーション、リソーステンプレート、エリシテーションベースの書き込み確認に対応する MCP 2025-06-18 仕様をサポートしています。

主な機能:

  • マルチデータベース — dev/staging/prod の接続を1つのサーバーにマウントできます。各ツールには省略可能な database パラメーターがあり、各接続はそれぞれ独自の readonly/query_timeout/max_rows/confirm_writes 設定を持ちます
  • ストアドプロシージャ — シグネチャの一覧表示と、すべての複数結果セットを取得するプロシージャの実行に対応します
  • リソーステンプレート — schema://{database}/{schema}/{table} は必要に応じてテーブル構造を提供し、毎回のツールスキーマのトークン消費を抑えます
  • 安全対策 — SQL の許可リスト、読み取り専用モード、行数制限、クエリタイムアウト、書き込み前の任意のエリシテーション確認

コンポーネント

  • read_query
    • 構造化出力(列/行/行数/切り捨て)を伴う SELECT/WITH クエリを、max_rows の制限内で実行します
  • write_query
    • INSERT、UPDATE、DELETE、または MERGE クエリを実行し、影響を受けた行数を返します
  • create_table
    • データベースに新しいテーブルを作成します
  • list_tables
    • データベース内のすべてのテーブル(スキーマ名+テーブル名)の一覧を取得します
  • list_views
    • データベース内のすべてのビューの一覧を取得します
  • describe_table
    • 特定のテーブルの完全なスキーマ(型、NULL 許容、デフォルト値、主キー、ID 列、外部キー、インデックス)を表示します
  • list_databases
    • 設定済みのデータベース接続(名前、読み取り専用、デフォルトかどうか)を一覧表示します
  • list_procedures
    • パラメーターのシグネチャとともにストアドプロシージャを一覧表示します
  • execute_procedure
    • ストアドプロシージャを実行します(複数の結果セットに対応)
  • append_insight
    • メモリソースに新しいビジネスインサイトを追加します

リソース

  • memo://insights — append_insight によってリアルタイムで更新される、継続的なビジネスインサイトメモ
  • schema://{schema}/{table} — デフォルトデータベースのテーブル構造(JSON:列/主キー/ID 列/外部キー/インデックス)
  • schema://{database}/{schema}/{table} — 名前付きデータベース接続のテーブル構造

リソーステンプレートは必要に応じて取得されます。ツールスキーマとは異なり、毎回 LLM に再送信されないため、長い会話でも簡潔さを保てます。

セキュリティ

すべての SQL は、実行前に静的検証を通過します。

  • read_query は単一の SELECT / WITH ステートメントのみを受け付け、書き込みや EXEC のキーワードを拒否します(例:WITH c AS (...) DELETE FROM t をブロックします)

  • write_query はホワイトリストを使用します(INSERT / UPDATE / DELETE / MERGE のみ)。EXEC、DROP、TRUNCATE、ALTER は拒否されます

  • 複数ステートメントを含むバッチ(; で区切られたもの)は拒否されます

  • trusted_connection: true にすると、Windows 統合認証に切り替わります(接続文字列では Trusted_Connection=yes が使用され、ユーザー名/パスワードは不要です)。false の場合は、設定済みの SQL アカウントのログイン情報を使用します

  • readonly: true にすると、ストアドプロシージャを含むすべての書き込み操作が無効になります(ストアドプロシージャは書き込みを行う可能性のあるブラックボックスです)

  • ストアドプロシージャ名は、{CALL ...} に埋め込む前に、1~3 個のドット区切り識別子であることを厳密に検証します

  • 結果は max_rows 行で切り詰められます。クエリは query_timeout 秒経過後に中止されます

  • confirm_writes: true の場合、状態を変更するすべての操作(write_query による書き込み、create_table、execute_procedure)では、MCP エリシテーションを通じてユーザーに確認を求めます

    ⚠️ 重要な制限:確認には、クライアントが MCP エリシテーションプロトコルを実装している必要があります。エリシテーションに対応していないクライアント(例:TraeWork / Cursor ...)では確認がスキップされ、書き込みが直接実行されます。つまり、そのようなクライアントでは confirm_writes: true による保護は機能しません(スキップの警告はサーバー側でログに記録されます)。すべてのクライアントで確実に書き込みを保護するには、代わりに readonly: true を使用してください(クライアントの機能にかかわらず、すべての書き込みを確実にブロックします)

  • コメントと文字列リテラルは検証前に取り除かれるため、チェックの回避には利用できません

デモ

データベースのテーブルは次のとおりです。列名は標準化されていませんが、AI が自動で対応付けます。SQL 実行中のエラーは自動的に修正されます。

テーブル

以下はデモです。

デモ

動作環境

  • Python 3.10+
  • パッケージ
    • pyodbc>=4.0.39
    • pydantic>=2.0.0
    • mcp>=1.9.0,<2.0.0
  • SQL Server 用 ODBC Driver 17 / 18

使用方法

パッケージのインストール

ソースから:

git clone <this repo>
CD /d ~/mssql-mcp  
pip install -r requirements.txt  

またはパッケージとして(pip >= 21.3):

pip install .
config

config.json を作成します。単一データベース形式:

{
    "database": {
        "driver": "ODBC Driver 17 for SQL Server",
        "server": "server ip",
        "database": "db name",
        "username": "username",
        "password": "password",
        "trusted_connection": false,
        "readonly": false,
        "query_timeout": 30,
        "max_rows": 200,
        "confirm_writes": false
    },
    "server": {
        "name": "mssql-manager",
        "version": "0.2.0"
    }
}

複数データベース形式(推奨 — 接続ごとに独立した設定を使用できます。たとえば、prod を読み取り専用にできます):

{
    "databases": {
        "default": { "server": "localhost", "database": "dev_db", "...": "..." },
        "prod":    { "server": "10.0.0.5", "database": "prod_db", "readonly": true, "...": "..." }
    },
    "default_database": "default",
    "server": { "name": "mssql-manager", "version": "0.2.0" }
}

接続名とデフォルト接続:databases 内のキーが接続名です。LLM は接続を切り替える際に、いずれかのキーを database パラメーターとして渡します。キー名は任意です(いずれかを default とする必要はありません)。default_database は、database が渡されなかった場合に使用する接続を決定します。解決順序は次のとおりです。

  1. default_database: "xxx" が明示的に設定されている場合は、xxx という名前の接続を使用します
  2. それ以外の場合、default という名前の接続が存在すれば、それを使用します
  3. それ以外の場合は、辞書内の最初の接続を使用します

推奨:default_database を明示的に設定し、さらに default という名前の接続も用意して安全策とします。これにより、(反復順序で先頭になる可能性がある)新しい接続を追加しても、デフォルトが意図せず変わることはありません。

設定ファイルの検索順序:MSSQL_MCP_CONFIG 環境変数 → server.py と同じ場所の config.json → 作業ディレクトリ内の config.json。

任意のフィールド(接続ごと):

フィールドデフォルト説明
readonlyfalse読み取り専用モード:すべての書き込み操作(プロシージャを含む)をブロックします
query_timeout30クエリのタイムアウト(秒)
max_rows200結果セットあたりの最大行数。超過分の行は切り捨てられます
confirm_writesfalseすべての状態変更操作(書き込み/CREATE TABLE/プロシージャ)の前に、ユーザーの確認(エリシテーション)を求めます。クライアントが Elicitation に対応している必要があります。未対応のクライアント(例:TraeWork/Cursor)では直接実行されます。確実に保護するには readonly を使用してください
encrypt(なし)Driver 18 用の ODBC 暗号化(true/false)
trust_server_certificatefalse自己署名証明書を信頼します。Driver 18 で役立ちます

環境変数:

変数デフォルト説明
MSSQL_MCP_CONFIG(なし)代替設定ファイルのパス
MSSQL_MCP_LOG_LEVELINFOログレベル(DEBUG/INFO/WARNING/ERROR)
クライアントの設定(Claude Desktop/Cursor/Windsurf など)

一般的な stdio クライアント(Claude Desktop、Cursor、Windsurf、Cline など)は、共通の mcpServers JSON 形式を使用します。Claude Desktop を例に説明します。他のクライアントでは、同じエントリーを各クライアントの MCP 設定ファイルに追加してください。

# add to claude_desktop_config.json. Note:use your path  
{
    "mcpServers": {
        "mssql": {
            "command": "python",
            "args": [
                # your path,e.g.:"C:\\mssql-mcp\\src\\server.py"
                "~/server.py"
            ]
        }
    }
}

パッケージとしてインストールした場合、コマンドは引数なしの mssql-mcp だけで実行できます。

MCP Inspector
# Note:use your path  
npx -y @modelcontextprotocol/inspector python C:\\mssql-mcp\\src\\server.py
テストの実行
pip install pytest
python -m pytest tests -q
  • tests/test_validation.py — SQL/プロシージャ名の検証(データベースは不要)
  • tests/test_config.py — 設定の解析:従来の単一データベースとの互換性、複数データベース、エラーケース(データベースは不要)
  • tests/test_integration.py — src/config.json 内のデータベースに対するエンドツーエンドテスト(書き込みは専用の mcp_upgrade_* テストオブジェクトのみを対象とし、自動的にクリーンアップされます)

プロジェクト構成

mssql-mcp
├── .git
├── .gitignore
├── LICENSE
├── README.md
├── README_en.md
├── README_zh.md
├── imgs
│   ├── table.png
│   └── demo.gif
├── pyproject.toml        (packaging: src/ is installed as the mssql_mcp package)
├── requirements.txt
├── src
│   ├── __init__.py
│   ├── config.json      (gitignored, local database config)
│   └── server.py
└── tests
    ├── test_validation.py
    ├── test_config.py
    └── test_integration.py

ライセンス

MIT ライセンス

コメント

MCP は初めてですか?

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

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