dbatools-mcp-server について
dbatools-mcp-serverは、dbatoolsのPowerShellコマンドをMCPクライアントに公開し、検索、ヘルプ参照、実行を可能にします。ローカルのヘルプ索引に、リスク分類、確認ゲート、永続的なPowerShellセッションを組み合わせています。
主な機能
- 01動詞・名詞・キーワード・リスクで検索
- 02正規化されたヘルプと例の参照
- 03検証とリスクゲート付きのコマンド実行
- 04MCPリソースとしてヘルプを閲覧
- 05永続的なPowerShellセッションの再利用
- 06環境と索引のバージョン不一致を検出
活用シーン
- 01作業に適したdbatoolsコマンドの検索
- 02実行前のパラメーターと例の確認
- 03確認済みのSQL Server管理コマンドの実行
- 04dbatools環境とヘルプ索引の更新状況確認
MCP 対応
コマンド検索、ヘルプ、実行、環境確認のMCPツールを提供し、`dbatools://command/{name}`から構造化ヘルプを公開します。ツールアノテーションでリスクを示し、セーフモードで実行を制御します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y dbatools-mcp-serverDBATOOLS_SAFE_MODESet to 'false' to allow write/destructive dbatools operations. Defaults to true (read-only safe mode).MAX_OUTPUT_ROWSMaximum number of rows returned per command. Defaults to 100. Allowed range: 1–10000.COMMAND_TIMEOUT_SECONDSTimeout in seconds for each dbatools command. Defaults to 60. Allowed range: 5–3600.PWSH_EXEPath to the PowerShell executable. Defaults to 'pwsh'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| noun | string | いいえ | 一致させる名詞の一部(例:Database、Login、AgentJob) |
| verb | string | いいえ | PowerShell の動詞(例:Get、Set、New、Remove、Test) |
| limit | integer | いいえ | 結果の最大数(デフォルトは 50、最大は 200) |
| keyword | string | いいえ | 名前、概要、説明を検索するキーワード |
| riskLevel | enum | いいえ | リスクレベルで絞り込むreadonly | change | destructive |
詳細
dbatools-mcp-server
dbatools PowerShell モジュール向けの Model Context Protocol(MCP) サーバーです。
dbatools のコマンドを MCP ツールとして公開することで、AI アシスタント(GitHub Copilot、Claude など)が dbatools のコマンドを直接検出、説明、実行できるようにします。すべてのメタデータは dbatools 独自の コメントベースのヘルプ から取得されます。
特長
list_dbatools_commands— 動詞、名詞、キーワード、またはリスクレベルでコマンドを検索しますget_dbatools_command_help—Get-Help -Fullから取得した正規化済みの完全なヘルプ(概要、パラメーター、使用例)invoke_dbatools_command— 安全なパラメーター検証、リスク制御、構造化 JSON 出力により、任意の dbatools コマンドを実行しますcheck_dbatools_environment— PowerShell と dbatools のインストール状況、インデックスの鮮度、バージョンの整合性を確認します- ツールアノテーション — 各ツールは
readOnlyHint/destructiveHint/idempotentHint/openWorldHintを宣言するため、MCP クライアント(VS Code など)はツールが呼び出される前に、UI 上でリスクを提示できます - リソース —
dbatools://command/{name}を参照すると、チャット向けのツール応答とは独立して、任意のコマンドの正規化済み完全なヘルプを構造化 JSON として確認できます - 永続 PowerShell セッション —
invoke_dbatools_commandは呼び出しごとに新しいプロセスを起動して dbatools を再インポートする代わりに、dbatools を事前にインポートした、長時間稼働する単一のpwshプロセスを再利用します - バージョン不一致の検出 — インストール済みの dbatools のバージョンがインデックス内のバージョンと異なる場合に警告します
- セーフモード — 読み取り専用でないコマンドを実行するには、明示的に
confirm: trueを指定する必要があります - SQL 認証のサポート — SQL 認証を使用するインスタンスには
SqlCredential: { username, password }を渡します
前提条件
- Node.js 20+
- PowerShell 7+(
pwsh) - dbatools PowerShell モジュール
Install-Module dbatools -Scope CurrentUser
クイックスタート
# 1. Clone the repo
git clone https://github.com/Dataplat/dbatools-mcp-server.git
cd dbatools-mcp-server
# 2. Install Node dependencies
npm install
# 3. Generate the help index from your local dbatools installation
npm run refresh-help
# 4. Build
npm run build
その後、VS Code でフォルダーを開くと、.vscode/mcp.json ファイルによって MCP サーバーが自動的に登録されます。
VS Code への接続
付属の .vscode/mcp.json により、サーバーはローカルの STDIO MCP サーバーとして登録されます。
VS Code でこのフォルダーを開くと、GitHub Copilot の MCP パネルにサーバーが表示されます。
{
"servers": {
"dbatools": {
"type": "stdio",
"command": "node",
"args": ["${workspaceFolder}/dist/server.js"],
"env": {
"DBATOOLS_SAFE_MODE": "true",
"MAX_OUTPUT_ROWS": "100",
"COMMAND_TIMEOUT_SECONDS": "60"
}
}
}
}
設定
すべての設定は環境変数で管理します(.vscode/mcp.json またはシェルで設定します)。
| 変数 | デフォルト | 説明 |
|---|---|---|
PWSH_EXE | pwsh | PowerShell 実行ファイルのパス |
DBATOOLS_SAFE_MODE | true | true の場合、読み取り専用でないコマンドの実行には confirm: true が必要です |
MAX_OUTPUT_ROWS | 100 | コマンド実行ごとに返される最大行数 |
COMMAND_TIMEOUT_SECONDS | 60 | PowerShell プロセスを終了するまでの秒数 |
DBATOOLS_PERSISTENT_SESSION | true | true の場合、invoke_dbatools_command は呼び出しごとに新しいプロセスを起動する代わりに、dbatools を事前にインポートした長時間稼働する単一の PowerShell プロセスを再利用します。呼び出しごとに新しいプロセスを強制するには、false に設定します。 |
ヘルプインデックスの更新
ヘルプインデックス(generated/dbatools-help.json)は、ローカルにインストールされた dbatools モジュールから生成されます。
dbatools を更新するたびに、再実行してください。
Update-Module dbatools -Scope CurrentUser
npm run refresh-help
サーバーは実行時にバージョンの不一致を検出し、インデックスが古い場合に警告します。
リスクレベル
コマンドは動詞に基づいて自動的に分類されます。
| リスクレベル | 動詞 | 動作 |
|---|---|---|
readonly | Get、Test、Find、Compare、… | 常に許可されます |
change | Set、New、Add、Copy、Enable、… | セーフモードでは confirm: true が必要です |
destructive | Remove、Drop、Disable、Reset、… | セーフモードでは confirm: true が必要です |
各リスクレベルは標準の MCP ツールアノテーション(readOnlyHint、destructiveHint、idempotentHint、openWorldHint)に対応しているため、互換性のあるクライアントは、ツールが呼び出される前に UI 上でリスクを表示できます。invoke_dbatools_command は任意のコマンドを実行できる汎用ディスパッチャーであるため、そのアノテーションには保守的に最悪のケース(destructiveHint: true)が反映されます。実際のコマンドごとのリスクは、引き続きセーフモードのゲートによって実行時に適用されます。
リソース
4 つのツールに加えて、サーバーはインデックス化されたすべてのコマンドを dbatools://command/{name}(例:dbatools://command/Get-DbaDatabase)の MCP リソースとして公開し、構造化 JSON 形式で同じ正規化済みヘルプレコードを返します。ツールを呼び出すのではなく、リソースを参照したり、それを根拠として利用したりするクライアントに便利です。参照可能なリソース一覧には PowerShell のエイリアス(例:Mount-DbaDatabase のエイリアスである Attach-DbaDatabase)は含まれません。これらは別のコマンドのヘルプに処理を転送するだけだからです。
永続的な PowerShell セッション
デフォルトでは、invoke_dbatools_command は呼び出しのたびに新しいプロセスを起動して dbatools を再インポートするのではなく、dbatools を事前にインポートした単一の長時間実行 pwsh プロセスを再利用します。これにより、初回以降の各呼び出しで発生していた約 1~2 秒以上のプロセス起動およびモジュールインポートのコストがなくなります。
次の点にご注意ください。
- クラッシュ/タイムアウトからの回復:コマンドがタイムアウトした場合、またはセッションプロセスがクラッシュした場合、そのプロセスは終了されて破棄されます。次の呼び出しでは新しいセッションが自動的に開始されます(インポートコストがもう一度発生します)。失敗の原因となった呼び出しが自動的に再試行されることはありません。
- 呼び出し間の状態:dbatools は PowerShell セッション内で一部の状態(例:
Connect-DbaInstance経由の SMO 接続)をキャッシュします。永続的なセッションでは、以前は呼び出しごとに完全に分離されていた状態が、同一の MCP サーバー実行中のツール呼び出し間で共有されるようになります。各スクリプトは引き続き独自のスコープで実行されるため、通常の変数が呼び出し間で漏れることはありません。影響を受けるのは dbatools 独自の内部キャッシュの動作だけです。
これを無効にして、呼び出しごとに新しいプロセスを起動する動作に戻すには、DBATOOLS_PERSISTENT_SESSION=false を設定します。
SQL 認証
SQL 認証のみを使用するインスタンス(例:Docker)では、SqlCredential パラメーターを使って認証情報を渡します。
{
"SqlInstance": "localhost,1433",
"SqlCredential": { "username": "<SqlLogin>", "password": "YourPassword" }
}
プロジェクト構成
dbatools-mcp-server/
├── src/
│ ├── server.ts # MCP server entry point, tool/resource definitions
│ ├── powershell.ts # One-shot PowerShell process runner, health checks, version detection
│ ├── powershell-session.ts # Persistent PowerShell session (long-lived process, dbatools pre-imported)
│ ├── help-indexer.ts # Help manifest loader and command search
│ ├── tool-registry.ts # Risk classification, tool annotations, safe argument builder
│ └── types.ts # Shared TypeScript interfaces
├── scripts/
│ └── refresh-help.ps1 # Generates generated/dbatools-help.json
├── generated/ # Help index (gitignored, generated locally)
├── .vscode/
│ └── mcp.json # VS Code MCP local server registration
└── dist/ # Compiled output (gitignored)
貢献
貢献を歓迎します。大きな変更を行う場合は、まず issue を作成してください。
このプロジェクトは、dbatools と同じコミュニティ精神を大切にしています。
ライセンス
MIT — © 2026 DataPlat のコントリビューター
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。