Important
SQL モデル コンテキスト プロトコル (MCP) サーバーは、Data API Builder バージョン 1.7 以降で使用できます。
SQL MCP Server では、ホスト型シナリオとクラウド シナリオ用の ストリーミング可能な HTTP と、ローカル開発および直接エージェント統合用 の stdio という 2 つのトランスポートがサポートされています。 この記事では、stdio トランスポートについて説明します。
stdio モードでは、Data API Builder (DAB) は標準の入出力 (stdin/stdout) を介して MCP クライアントと完全に通信します。 HTTP サーバーまたはネットワーク ポートは起動されません。 MCP クライアントは、DAB を子プロセスとして起動し、 モデル コンテキスト プロトコル (MCP) を使用してメッセージを前後にパイプします。
stdio トランスポートを使用する場合
| シナリオ | 推奨されるトランスポート |
|---|---|
| 開発者ワークステーションでのローカル開発 | Stdio |
| vs Code with GitHub Copilot (エージェント モード) | Stdio |
| CI/CD パイプラインまたはスクリプト駆動のエージェントを用いた自動化 | Stdio |
| クラウド ホスティング (Container Apps、App Service) | HTTP |
| リモート MCP エンドポイントを使用した AI Foundry エージェント | HTTP |
| 同じエンドポイントを共有するエージェントのチーム | HTTP |
ポートを開かずに、可能な限り最も簡単なローカル セットアップが必要な場合は、stdio を選択します。 MCP サーバーがネットワーク経由で到達可能である必要がある場合は、HTTP を選択します。
[前提条件]
- Data API Builder CLI がインストールされている (バージョン 1.7 以降)
- MCP が有効になっている既存の ( 必要な構成を参照)
- MCP と互換性のあるクライアント (GitHub Copilot、Claude Desktop、またはカスタム エージェントを含む VS Code)
必要な構成
stdio トランスポートを使用する前に、自分の環境で MCP を有効にします。
"runtime": {
"mcp": {
"enabled": true,
"path": "/mcp",
"dml-tools": {
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": true
}
}
}
フィールドは HTTP トランスポートにのみ使用され、stdio モードでは無視されます。 ブロックは、MCP ツールとして使用できるデータ操作を制御します。
Important
または ブロックがない場合、DAB は stdio モードで開始できません。
stdio モードで開始する
以下でフラグを使用します。
dab start --mcp-stdio --config ./dab-config.json
特定のアクセス許可ロールで実行するには:
dab start --mcp-stdio role:authenticated --config ./dab-config.json
引数は位置引数であり、すぐ後に指定する必要があります。 省略すると、ロールは既定の値に設定されます。 ロール名は、構成内の少なくとも 1 つのエンティティの セクションで定義されているロールと一致する必要があります。
stdio モードのしくみ
が検出されると、DAB は内部的に次の変更を行います。
UTF-8 エンコード (バイト順マークなし)
コンソールの入力と出力は、バイトオーダー マーク (BOM) なしで UTF-8 に強制されます。 この UTF-8 設定は、多くの MCP クライアントが BOM プレフィックス付きストリームを拒否するため、クリーンな JSON オーバー stdio 通信に必要です。
シミュレーター認証
構成ファイルで指定されている内容に関係なく、認証プロバイダーは シミュレーター モードにオーバーライドされます。 このシミュレーター モードでは、実際の JSON Web トークン (JWT) または ID プロバイダーなしで、指定されたロールを直接適用できます。 シミュレーター プロバイダーは開発シナリオ向けに設計されており、運用環境の HTTP エンドポイントをセキュリティで保護するために使用しないでください。ただし、ローカル stdio セッションにはまさに適しています。
次の値がメモリ内に適用され、セッション中に構成がオーバーライドされます。
| 鍵 | 価値 |
|---|---|
MCP:StdioMode |
"true" |
MCP:Role |
または |
Runtime:Host:Authentication:Provider |
"Simulator" |
HTTP リスナーなし
ASP.NET Core ホストが起動し、すべてのサービスが登録されますが、DAB は stdio.RunAsync() ではなく host.Run() を呼び出します。 伝送制御プロトコル (TCP) ポートはバインドされません。 すべての MCP プロトコル メッセージは stdin/stdout を通過します。
使用可能な MCP ツール
stdio モードでは、 の構成とエンティティのアクセス許可に従って、次のツールを使用できます。
| ツール | 説明 |
|---|---|
describe_entities |
使用可能なエンティティとそのフィールドとアクセス許可を一覧表示します |
create_record |
新しいレコードをテーブル限定で挿入します |
read_records |
エンティティからレコードを読み取ります |
update_record |
既存のレコードを更新します |
delete_record |
既存のレコード (テーブルとビュー) を削除します |
execute_entity |
ストアド プロシージャ エンティティを実行します。 |
ストアド プロシージャによってサポートされるカスタム MCP ツールも、 を使用するときに登録されます。
stdio 用に MCP クライアントを構成する
stdio トランスポートをサポートする MCP クライアントは、DAB をサブプロセスとして起動し、その stdin/stdout をパイプ処理します。 クライアント構成の構文はクライアントによって異なります。
VS Code ()
{
"servers": {
"sql-mcp-server": {
"type": "stdio",
"command": "dab",
"args": [
"start",
"--mcp-stdio",
"role:anonymous",
"--config",
"${workspaceFolder}/dab-config.json"
]
}
}
}
このファイルをプロジェクト フォルダー内の として保存します。 VS Code は構成を自動的に検出し、 MCP: List Servers にサーバーを表示します。 クライアントはプロセス ライフサイクルを管理するため、ターミナルでを個別に実行する必要はありません。
Claude Desktop ()
{
"mcpServers": {
"sql-mcp-server": {
"command": "dab",
"args": [
"start",
"--mcp-stdio",
"role:anonymous",
"--config",
"/absolute/path/to/dab-config.json"
]
}
}
}
他の オプションと組み合わせる
は、他のすべての オプションと互換性があります。
| Option | (エンティティ)を使用した動作 |
|---|---|
--config |
指定された構成ファイルを使用します (HTTP モードと同じ) |
--LogLevel |
指定したログ レベルを適用します |
--verbose |
ログ レベルを情報に設定します |
--no-https-redirect |
受け入れられますが、影響はありません。HTTP サーバーは実行されません |
dab start \
--mcp-stdio role:api-reader \
--config ./dab-config.json \
--LogLevel Information
stdio モードのトラブルシューティング
Failed to start the engine in MCP stdio mode.
DAB を開始できませんでした。 次の内容を確認する:
- 構成ファイルが有効です: 実行
- データベース接続文字列は正しく、到達可能です。
- 構成で MCP が有効になっています。
MCP ツール呼び出しでアクセス許可が拒否されました
によって指定されたロールには、エンティティと操作に必要なアクセス許可がありません。 構成内の関連エンティティの セクションを確認します。
MCP ツールが一覧にない
グローバルに設定されているか、エンティティがその設定に値を持っているかのいずれかです。 また、 が されていることを確認します。
文字化けした出力または JSON 解析エラー
MCP サーバーが起動する前に、スタートアップ コードで JSON 以外のテキストが stdout に書き込まれることはありません。 ログ出力は stdout ではなく stderr またはログ ファイルに出力されます。 必要に応じて、 を使用して詳細なスタートアップ メッセージを抑制します。
関連するコンテンツ
- コマンド リファレンス
- SQL MCP Server の概要
- クイックスタート: Visual Studio Code で SQL MCP サーバーを使用する
- SQL MCP Server の認証を構成する
- データ操作ツール