mcpField
S
SQL Mini MCP

SQL Mini MCP

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

SQL Mini MCP について

SQL Mini MCPは、SQL Server、MySQL、MariaDBのスキーマ情報や制限付きクエリを扱う、コーディングエージェント向けの読み取り専用MCPサーバーです。設定した個人情報は平文ではなく、エイリアスに結び付いたトークンで返します。

主な機能

  1. 01データベース、テーブル、スキーマの一覧
  2. 02カラム、キー、インデックスの確認
  3. 03ストアドプロシージャ情報と定義の取得
  4. 04検証済みの制限付きSELECTの実行
  5. 05クエリ結果の指定PIIをトークン化

活用シーン

  1. 01開発中のデータベーススキーマ把握
  2. 02指定PIIを明かさないデータクエリ
  3. 03複数データベースのアクセス方針分離

MCP 対応

データベースのナビゲーション、スキーマやストアドプロシージャの確認、制限付きSQLクエリを行う7つの読み取り専用ツールをMCPクライアントに公開します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"proprock-sql-mini": {
"command": "uvx",
"args": [
"sql-mini-mcp"
]
}
}
}
起動コマンドuvx sql-mini-mcp

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

パッケージ
pypisql-mini-mcp1.1.0

ツール

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

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

詳細

sql-safe-mcp

SQL Server、MySQL、MariaDB を扱うコーディングエージェント向けの、PII 安全な読み取り専用 MCP サーバーです。スキーマ情報と安全なクエリを提供し、書き込み可能なツールや、設定した PII 列の平文での露出はありません。

CI Release PyPI Version Python License: MIT

Model Context Protocol compatible MCP Registry: io.github.proprock/sql-safe-mcp

データを読み取り、個人情報を守る。

データを読み取り、個人情報を守る。

コーディングエージェントが正しいコードを書くために必要な、サーバー、データベース、テーブル、列、キー、インデックス、ストアドプロシージャなどのスキーマ情報を提供します。all_pii_safe に設定したエイリアスでは、設定済みの個人データを認証済みトークンの背後に隠したまま、実際の行をクエリすることもできます。

デフォルトで PII 安全。設計上、読み取り専用です。

  • デフォルトで PII 安全 - all_pii_safe サーバーでは、設定した列の値はエイリアスに紐付いた認証済みトークン(pii:v1:...)として返され、平文では返されません。エージェントは、渡されたトークンを使って = や IN で列を射影、カウント、フィルタリングできるため、値を読み取らずにレコードを追跡できます。トークンは別のサーバーエイリアスや別のキーでは機能しません。
  • 設計上、読み取り専用 - 7 つのツールはすべて読み取り専用として注釈されています。データを書き込むツールはなく、サーバーがエージェントの作成した SQL を実行することもありません。メタデータは SQLAlchemy Inspector と固定のカタログクエリから取得され、execute_sql は検証後に再生成した SELECT のみを実行します。
  • 複数サーバーとポリシーの分離 - 1 つの MCP プロセスで、名前付きの複数の SQL Server、MySQL、MariaDB インスタンスを公開できます。各エイリアスは、それぞれ独自の接続、アクセスレベル、さらに有効な場合は PII キーと保護ルールを持ちます。すべてのデータベース操作では明示的なエイリアスを指定します。ネットワーク探索は行いません。

運用上の安全策

  • フェイルクローズ方式 - SQL の検証には許可リストを使用します。不明な構文、解決できないリネージ、サポートされていない保護対象値の型は、推測せず拒否します。検証の証拠はセキュリティモデルに記載されています。
  • アクセスは最小限から - access_level: metadata(デフォルト)では、データベースのナビゲーション情報とテーブル構造を公開します。meta_and_code では、さらにストアドプロシージャを公開します。execute_sql には、専用のキーを持つ明示的な all_pii_safe エイリアスが必要です。データベース権限を主要な制御として維持するため、最小権限のログインを使用してください。
  • シークレットを表に出さない - 接続 URL は YAML に ${NAME} プレースホルダーとともに保存され、環境変数から解決されます。ログやモデルに表示されるエラーに含まれることはありません。
  • コンパクトで予測可能な出力 - オブジェクトを起点とする結果、安定した並べ替え、大文字と小文字を区別しない名前のリテラルフィルター、定義を展開しないストアドプロシージャの一覧を提供します。
  • エージェントが対処できるエラー - 名前があいまいな場合は、候補となるスキーマが表示されます。エラーに接続情報、認証情報、キー、トークン、行が含まれることはありません。
  • 例だけでなく攻撃に対してもテスト済み - SQL と PII の境界は、悪意のあるステートメントを集めた敵対的コーパス、プロパティベーステスト(トークンの分離、改ざんへの耐性)、書き込み可能な実際のログインに対する攻撃の実行と実行前後のスナップショット、ミューテーションテストによって検証されています。結果はSQL 境界の検証に記載されています。
  • 診断可能な障害 - タイムアウトや接続エラーには Reference が付与されます。stderr ログには、同じ参照に対応する接続段階、経過時間、ドライバーエラーが記録され、認証情報は削除されます。ログを参照してください。
ツールアクセス目的
list_servers🟢 読み取り設定済みのサーバーエイリアス
list_databases🟢 読み取り認証情報で表示できるデータベース
list_tables🟢 読み取りスキーマまたは名前で絞り込んだベーステーブル
get_table_definition🟢 読み取り1 つのテーブルの列、キー、制約、インデックス
list_stored_procedures🟢 読み取り定義を含まないストアドプロシージャの一覧。meta_and_code または all_pii_safe が必要
get_stored_procedure🟢 読み取り1 つのストアドプロシージャの定義。meta_and_code または all_pii_safe が必要
execute_sql🟢 読み取りall_pii_safe サーバーで実行する、制限付きの単一の SELECT。保護対象列はトークンを返します

メモ

ステータス: SQL Server はすべてのツールをサポートしています。MySQL と MariaDB(engine: mysql または mariadb、mysql+pymysql URL)もすべてのツールをサポートしています。これらではデータベースがカタログであるため、schema は常に null です。また、execute_sql では TOP の代わりに LIMIT を使用します。architecture.mdを参照してください。

クイックスタート

インストール
uvx sql-safe-mcp

または

pip install sql-safe-mcp

固定されたインターフェースを使う場合は、バージョンを固定してください:uvx sql-safe-mcp==1.5.2。

Python 3.12~3.14、uv(または pip)が必要です。SQL Server に接続する場合は、Microsoft ODBC Driver 18 for SQL Serverも必要です。MySQL と MariaDB では同梱の PyMySQL ドライバーを使用するため、ほかに必要なものはありません。

SQL Server 2022、MySQL 8.4、MariaDB 11.4 で検証済みです(checks.mdを参照)。

エージェントにインストールを頼むこともできます
Install sql-safe-mcp as a stdio MCP server.
Ask whether to install it for this project/workspace or at user level. Then:
detect and preserve the host's existing MCP config;
configure the server to run via uvx sql-safe-mcp;
create a YAML config template with env placeholders only;
add SQL_SAFE_MCP_CONFIG;
report the env variables the user must set.
Do not store secrets or connection data in tracked files or output. Validate with
sql-safe-mcp --check-config once variables are available.
### サーバーを設定する

sql-safe-mcp.example-simple.yaml を sql-safe-mcp.yaml にコピーします。この最小構成では、1 つの SQL Server インスタンスのスキーマメタデータを公開し、行クエリは許可しません。接続 URL 全体は環境変数に保持します。

version: 1
servers:
  reporting:
    engine: sqlserver
    access_level: metadata
    connection_url: "${REPORTING_SQL_URL}"

ここで、reporting はエージェントが server として渡す値です。環境変数が未設定の場合、または engine が URL の方言と一致しない場合、起動時に MCP サーバーが停止します。複数のサーバー、ローカルの PII ルール、共有 PII ルールセット、ログ記録、実行時の制限については、設定リファレンスのコメント付きの例を使用してください。

設定を確認する

YAML ファイルで参照されるすべての環境変数を定義した後、SQL_SAFE_MCP_CONFIG(または --config)でサーバーの設定ファイルを指定し、データベースに接続せずに確認します。

SQL_SAFE_MCP_CONFIG=sql-safe-mcp.yaml uvx sql-safe-mcp --check-config

設定は起動時に検証され、エラーには問題点が示されますが、URL やシークレットは出力されません。認証情報はホスト独自の設定に保持し、絶対にコミットしないでください。サーバーはデータベースアカウントの権限で動作するため、ジョブに必要な最小限のアクセス権を持つ専用ログインを使用してください。

MCP クライアントを接続する

すべてのクライアント設定には SQL_SAFE_MCP_CONFIG と、YAML ファイルで参照される環境変数が必要です。接続 URL と PII キーは MCP ホストの環境または設定に保持し、YAML ファイルやその他の追跡対象ファイルには絶対に含めないでください。

Claude Code
claude mcp add --env SQL_SAFE_MCP_CONFIG=/path/to/sql-safe-mcp.yaml --env REPORTING_SQL_URL=mssql+pyodbc://... --transport stdio sql-safe -- uvx sql-safe-mcp

最後の --env とサーバー名の間には、上記のように少なくとも 1 つ別のオプションを入れてください。そうしないと、CLI は名前を別の KEY=value ペアとして読み取ります。

Claude Desktop

claude_desktop_config.json にサーバーを追加します。

{
  "mcpServers": {
    "sql-safe": {
      "command": "uvx",
      "args": ["sql-safe-mcp"],
      "env": {
        "SQL_SAFE_MCP_CONFIG": "/path/to/sql-safe-mcp.yaml",
        "REPORTING_SQL_URL": "mssql+pyodbc://..."
      }
    }
  }
}
Codex CLI
codex mcp add sql-safe --env SQL_SAFE_MCP_CONFIG=/path/to/sql-safe-mcp.yaml --env REPORTING_SQL_URL=mssql+pyodbc://... -- uvx sql-safe-mcp
その他の stdio ホスト

コマンド uvx、引数 sql-safe-mcp を使用し、SQL_SAFE_MCP_CONFIG と設定ファイルで参照されるすべての環境変数を設定してください。サーバーは MCP メッセージを stdout に書き込み、ログは stderr のみに書き込みます。

PII を保護するクエリ

billing エイリアスの execute_sql では、制限付きの SELECT を 1 つ実行できます。たとえば、次の引数を指定すると、

{
  "server": "billing",
  "database": "Billing",
  "sql": "SELECT CustomerId, Email FROM dbo.Customers"
}

[42, "pii:v1:..."] のような行を返すことができます。エージェントはメールアドレスを読み取らずに、顧客を追跡できます。トークンが受け入れられるのは、同じサーバーエイリアス上の = および IN の述語で使用された場合のみです。FirstName が保護されている場合、SELECT FirstName FROM Users WHERE FirstName = 'Alice' はデータベースに届く前に拒否されます。保護された列のフィルターには、同じエイリアスに対する execute_sql が返した真正な pii:v1:... トークンのみを使用してください。一致するプレフィックスだけでは不十分です。各トークンは認証されてエイリアスに紐付けられた後、検証され、バインドされたデータベース値に変換されます。保護の対象となるのは指定した列のみです。個人データを保持する列をすべて指定してください。

ドキュメント

セキュリティ

MCP 呼び出し元、SQL 入力、データベースメタデータ、行、トークンは信頼できないものとして扱います。データベースの権限が引き続き主要な認可制御であり、このサーバーがその権限を拡大することはありません。制限と検証の証拠を含む、完全なセキュリティモデルをお読みください。脆弱性を報告する場合は、SECURITY.mdに記載された非公開の連絡経路を使用してください。

貢献

セットアップ、チェック、テストコマンド、ブランチとコミットの規約、リリースモデルについてはCONTRIBUTING.mdをご覧ください。サーバーを実行するユーザーに影響する変更はCHANGELOG.mdに記録します。

License

MIT.

コメント

MCP は初めてですか?

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

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