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