mcp-sqlserv
mcp-sqlserv
SQL Server データベースへの読み取り専用アクセスを提供するMCPサーバー — SQLインジェクションを構造的に防止し、Web Admin UI から管理。
Zero raw SQL · Default deny · Bind parameter 100% · 完全な監査
概要
mcp-sqlserv は、AIエージェント(Claude、Cursor、Claude Code、その他あらゆるMCPクライアント)が SQL Server データベースを安全かつ制御された形で読み取ることを可能にします。
クエリはすべてサーバーが構造的に構築します — AI/イエントが生の SQL を書くことは一切ありません。
識別子(テーブル/カラム)は、データベースの実際のメタデータ(
sys.tables、sys.columns)に対して検証されます。値は常に bind parameter → SQLインジェクションは構造的に不可能です。
テーブル単位の権限は デフォルト拒否:明示的な権限がなければ、そのテーブルには触れられません。
すべてのリクエストは監査ログに記録され、キー、ツール、フィルタ、行数、所要時間、ステータスも残ります。
Related MCP server: safedb-mcp
機能
機能 | 説明 |
MCP Streamable HTTP | エンドポイント |
マルチプロジェクト | プロジェクトごとの URL |
API キー | AI コンシューマーごとにキーを作成 / 失効可能 |
OAuth 2.1 | Authorization Code + PKCE、DCR(RFC 7591)、リフレッシュトークンのローテーション、失効 |
SQL Server 接続 | host/port/user/pass(AES-256-GCM で暗号化)、TLS はオプション |
詳細な権限 | テーブルごとに許可対象を設定:データの読み取り、または メタデータの参照。デフォルト = DENY |
監査ログ | 全AIリクエストを記録:キー、ツール、テーブル、フィルタ、行数、所要時間、ステータス |
レート制限 | 1 API キーにつき 60 リクエスト/分(設定可能) |
完全な読み取り専用 | ツールは |
Agent Test | Web UI から Gemini モデルと直接チャットして、エンドツーエンドのテストが可能 |
アーキテクチャ
┌──────────────┐ HTTPS ┌─────────────┐ ┌──────────────────────────────┐
│ AI Agent ├───────────►│ nginx ├─────────►│ mcp-sqlserv (Docker) │
│ (MCP client)│ Bearer │ reverse │ app-net │ Express + MCP + OAuth │
└──────────────┘ token │ proxy+SSL │ work │ │ │ │
└─────────────┘ │ ▼ ▼ │
┌──────────────┐ HTTPS │ SQLite mssql pool │
│ Web Admin UI ├─────────────────────────────────────►│ (data/, keys, │ │
│ (browser) │ REST /api/* │ audit, izin) ▼ │
└──────────────┘ │ ┌──────────┐ │
│ │ SQL Srvr │ │
└──────────────┴──────────┴────┘クイックスタート
# 1. Clone & siapkan environment
git clone https://github.com/<username>/mcp-sqlserv.git
cd mcp-sqlserv
cp .env.example .env # isi ADMIN_USER / ADMIN_PASSWORD (min 8 karakter)
# 2. Build & jalankan
docker compose up -d --build
# 3. Verifikasi
curl http://localhost:4000/healthzサーバーは http://localhost:4444 で実行です — Web Admin UI は /、MCP エンドポイントは /mcp にあります。
環境変数
変数 | デフォルト | 説明 |
|
| サーバーのポート |
|
| SQLite 用フォルダ(compose ではボリュームにマウント) |
|
| Web Admin UI のユーザー |
| 必須 | Web Admin UI のパスワード(8文字以上) |
| 自動 | JWT / 暗号化シークレット(空の場合は自動生成・保存) |
|
| SQL クエリのタイムアウト |
|
| API キーごとのレート制限 |
|
|
|
|
| 認可コードの有効期限(秒) |
|
| アクセスト-クンの有効期限(秒) |
|
| リフレッシューントークンの有効期限(秒、30日) |
利用フロー
Web UI にログイン → DB接続 メニュー → host/port/user/pass/database を入力し、接続テスト を実行します。
Docker コンテナの場合、ホスト上の SQL Server は
host.docker.internalから利用できます。API キー メニュー → キーを作成(表示は一度だけです。必ず保存してください)。
テーブル権限 メニュー → AI に読み取りを許可するテーブルにチェック → 権限を保存。デフォルトは拒否です。
AI エージェントを
https://<domain>/mcpとヘッダーAuthorization: Bearer <api-key>で接続します。
汎用 MCP クライアントの接続
{
"mcpServers": {
"sql-server": {
"url": "https://<domain>/mcp",
"headers": { "Authorization": "Bearer sk-xxxx" }
}
}
}速いテストは curl で:
curl -X POST https://<domain>/mcp \
-H "Authorization: Bearer sk-xxxx" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}'Claude Custom Connector(claude.ai / Desktop)
Customize → Connectors → Add custom connector を開きます。
Remote MCP server URL:
https://<domain>/mcpを設定します。Advanced settings → OAuth Client ID + Secret を、OAuth Clients メニューから入力します (リダイレクト URI:
https://claude.ai/api/mcp/auth_callback)。空のままでも構いません — Claude が Dynamic Client Registration(RFC 759120)により自動登録します。
Add → Connect をクリック → ブラウザでオペレーターのログインページが開きます → アクセスを許可 します。
Claude はリフレッシュトークンを保存し、bearer トークンで MCP ツールを呼び出します。
Claude Code(CLI):
claude mcp add mcp-sqlserv https://<domain>/mcp --transport http \
... # bila client pre-registered: --client-id <id> --client-secret --callback-portOAuth エンドポイント
エンドポイント | 標準 |
| RFC 9728 |
| RFC 8414 |
| RFC 7591(DCR、public + confidential) |
| RFC 6749 + PKCE S256 |
| RFC 6749 / 7636 |
| RFC 7009 |
OAuth のアイデンティティはオペレーターのセッションです。アクセストークンは内部 API キー oauth:<client_id> に対応します。アクセストークンは内部 API キー oauth:<client_id> に対応します。テーブル権限、レート制限、監査も Claude 経由の接続にすべて適用されます。クライアントを失効させると、そのクライアントの全トークンが直ちに無効になります。
MCP ツール
ツール | 機能 |
| 許可されたテーブルと推定行数を一覧表示 |
| カラム、型、 null値、identity、主キー、インデックスを取得 |
| 構造化フィルタ、並べ替え、ページネーションを使用して行を読み取る |
| オプションのフィルタで行数をカウント |
| 主キーで 1 行を取得 |
| サーバー / データベースの情報 |
テーブル名はスキーマプレフィックスなしで指定します(dbo.users ではなく users)。カラムは sys.columns に対して検証され、値は 100% バインドパラメータです。
サポートされる構造化フィルター:eq、neq、lt、lte、gt、gte、like、startsWith、endsWith、in、between、isNull、isNotNull。
セキュリティ
生の SQL はゼロ — AI は構造化クエリビルダーのみ
識別子の許可リスト — 正規表現+実データベース・メタデータの検証
デフォルト拒否 — 権限のないテーブルにはアクセス不可
ハードリミット — クエリあたり最大 1000 行、フィルター 20 個、IN 値 50 個、タイムアウト 30 秒
API キー+レート制限(キーごと)+全リクエストの監査ログ
読み取り専用 — 推奨:SQL Server のユーザーには
GRANT SELECTのみ付与DB パスワードは SQLite に AES-256-GCM 暗号化で保存
デプロイ
app-network ネットワーク上で、nginx をリバースプロキシ(ワイルドカード SSL、ノンバッファリング SSE、Web 向け MCP クライアントへの CORS)として併用し、Docker Compose でデプロイします。
VPS 間の移行
どの VPS でもコードと Docker はそのまま動作しますが、次の2点は Git に含まれません(.gitignore に記載済み)ので、手動で移行する必要があります。
移行対象 | 内容 | 手順 |
| 管理者の認証情報とシークレット | 旧VPSからファイルをコピーするか、 |
| SQLite(APIキー、権限、監査、DB接続情報) |
|
# Di VPS baru
git clone https://github.com/<username>/mcp-sqlserv.git && cd mcp-sqlserv
# Migrasi state dari VPS lama (opsional)
rsync -av vps-lama:/path/mcp-sqlserv/.env .env
rsync -av vps-lama:/path/mcp-sqlserv/data ./data
# Network eksternal harus ada dulu (dipakai docker-compose.yaml)
docker network create app-network # abaikan jika sudah ada
docker compose up -d --build
data/を移行しなくてもサーバーは動作します — Web UI から DB 接続、API キー、テーブル権限を再設定するだけです。
プロジェクト構成
mcp-sqlserv/
├── src/
│ ├── index.ts # Bootstrap Express + routing
│ ├── config.ts # Env config
│ ├── db/storage.ts # SQLite: api_keys, db_config, permissions, audit_log
│ ├── sqlserver/ # Connection pool, metadata (sys.tables), query builder
│ ├── mcp/ # MCP server (per-session) + tools
│ ├── oauth/ # OAuth 2.1: router, PKCE, discovery
│ ├── api/ # REST admin (auth, config, keys, permissions, audit)
│ └── ui/ # SPA vanilla JS (public/)
├── public/ # Web UI admin (tanpa build step)
├── test/ # Test suite keamanan + OAuth + smoke
├── Dockerfile # Multi-stage build (node:20-alpine)
├── docker-compose.yaml # Attach ke app-network, host.docker.internal
└── LICENSE # MIT管理用 REST API
Method | Path | 説明 |
POST |
| 管理者ログイン(httpOnly Cookie) |
GET |
| DB ・キー・権限のステータス |
GET/PUT |
| DB 設定の読み取り / 保存 |
POST |
| 接続テスト |
GET/POST |
| API キーの一覧 / 作成 |
PUT/DELETE |
| 名前変更 / 失効 |
GET/PUT |
| テーブル権限の一覧 / 保存 |
GET |
| 監査ログ |
GET |
| MCP URL の情報 + 設定例 |
GET |
| ヘルスチェック(認証不要) |
テスト
npm run test:smoke # smoke test dasar
npm run test:security # 29 test: injection, permission, limit, pagination, auth
npm run test:oauth # 46 test: discovery, DCR, PKCE, consent, token, refresh, revoketest/oauth.mjs は ポート4100 でサーバーを自ら起動します(データディレクトリは oauth-test-data/)。追加の設定は不要です。
コントリビューション
コントリビューション歓迎です! Issue または Pull Request を開いてください。大きな変更の場合は、まず Issue でご相談ください。このプロダクトの原則は security is the product です — すべてのインターフェース(MCP、UI、Agent テスト)で、読み取り専用、デフォルト拒否、パラメータ化という、同じ基準が維持 される必要があります。
ライセンス
このプロジェクトは MIT License の下で提供されています。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to securely connect to and query Microsoft SQL Server databases with read-only access, schema discovery, and relationship mapping. Features advanced security protections, health monitoring, and bulk operations for production environments.975MIT
- AlicenseAqualityCmaintenanceSecure MCP server for safe, read-only DB access by AI agents, with SQL guardrails, table allowlists, PII masking, and audit logs6347MIT
- AlicenseBqualityDmaintenanceAn MCP server that connects AI assistants to Microsoft SQL Server databases, enabling schema exploration and read-only queries safely.49234MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to connect to Microsoft SQL Server via the MCP protocol, supporting database schema queries, data reading, and arbitrary SQL execution.
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Fattan-malva/mcp-sqlserver'
If you have feedback or need assistance with the MCP directory API, please join our Discord server