Important
SQL モデル コンテキスト プロトコル (MCP) サーバーは、Data API Builder バージョン 1.7 以降で使用できます。
このクイック スタートでは、アスパイアを使用してコンテナー ベースのソリューションを構築します。 このソリューションの内容は次のとおりです。
- サンプル データを含む SQL データベース
- データ API ビルダーを利用した SQL モデル コンテキスト プロトコル (MCP) サーバー
- テスト用 MCP インスペクター
Aspireがすべてを実行し、サービスを開始してコンテナを接続し、Aspireを終了するとサービスを停止します。
[前提条件]
開始する前に、これらのツールをインストールします。
1. .NET 10
この手順では、このクイックスタートに必要な前提条件を満たすマシンを準備します。
Important
このツールは既にインストールされている可能性があります。 を実行してテストし、バージョン 10 以降が報告されたことを確認します。 このインストールを実行し、.NETが既に存在する場合は、問題を引き起こさずにシステムを更新します。
- Windows
- macOS
winget install Microsoft.DotNet.SDK.10
2. コンテナー ランタイム
この手順では、Docker Desktop をインストールして、アスパイア プロジェクトをサポートします。
Important
このツールは既にインストールされている可能性があります。 を実行してテストし、Docker が使用可能であることを確認します。 このインストールを実行し、Docker が既に存在する場合は、問題を引き起こさずにシステムを更新します。
- Windows
- macOS
winget install Docker.DockerDesktop
注
Podman も機能しますが、セットアップは異なります。 Podman を好む開発者は、これらの手順を調整できます。
3. Aspire と Data API ビルダー ツール
この手順では、後で使用する既定のアスパイア プロジェクト ファイルを作成します。 次のコマンドを実行してください:
dotnet new tool-manifest
dotnet tool install aspire.cli
dotnet tool install microsoft.dataapibuilder
aspire init
注
SQL MCP Server の機能は、Data API Builder バージョン 1.7 以降で使用できます。
メッセージが表示されたら、すべての既定値を選択します。
このコマンドを実行すると、ツールがインストールされ、次のファイルが作成されます。
.
├── .config
│ └── dotnet-tools.json
├── AppHost.cs
└── apphost.run.json
4. AppHost.cs ファイルを完成する
この手順では、 を正しいコードで更新して、このクイック スタートを実行します。 の内容を次のコードに置き換えます。
#:sdk Aspire.AppHost.Sdk@13.0.2
#:package Aspire.Hosting.SqlServer@13.0.2
#:package CommunityToolkit.Aspire.Hosting.McpInspector@9.8.0
using System.ComponentModel;
using Aspire.Hosting;
using Aspire.Hosting.ApplicationModel;
var builder = DistributedApplication.CreateBuilder(args);
var db = AddSqlServer(builder);
WithSqlCommander(db);
var mcp = AddMcpServer(db);
WithMcpInspector(mcp);
await builder.Build().RunAsync();
IResourceBuilder<SqlServerDatabaseResource> AddSqlServer(IDistributedApplicationBuilder builder) => builder
.AddSqlServer("sql-server").WithDataVolume()
.AddDatabase("sql-database", "productsdb")
.WithCreationScript(SqlScript("productsdb"));
IResourceBuilder<ContainerResource> WithSqlCommander(IResourceBuilder<SqlServerDatabaseResource> db) => db
.ApplicationBuilder.AddContainer("sql-cmdr", "jerrynixon/sql-commander", "latest")
.WithImageRegistry("docker.io")
.WithHttpEndpoint(targetPort: 8080, name: "http")
.WithEnvironment("ConnectionStrings__db", db)
.WithParentRelationship(db)
.WaitFor(db)
.WithUrls(x =>
{
x.Urls.Clear();
x.Urls.Add(new() { Url = "/", DisplayText = "Commander", Endpoint = x.GetEndpoint("http") });
});
IResourceBuilder<ContainerResource> AddMcpServer(IResourceBuilder<SqlServerDatabaseResource> db) => db
.ApplicationBuilder.AddContainer("sql-mcp-server", "azure-databases/data-api-builder", "1.7")
.WithImageRegistry("mcr.microsoft.com")
.WithHttpEndpoint(targetPort: 5000, name: "http")
.WithEnvironment("MSSQL_CONNECTION_STRING", db)
.WithBindMount("dab-config.json", "/App/dab-config.json", true)
.WaitFor(db)
.WithUrls(x =>
{
x.Urls.Clear();
x.Urls.Add(new() { Url = "/swagger", DisplayText = "Swagger", Endpoint = x.GetEndpoint("http") });
});
IResourceBuilder<McpInspectorResource> WithMcpInspector(IResourceBuilder<ContainerResource> mcp) => mcp
.ApplicationBuilder.AddMcpInspector("mcp-inspector")
.WithMcpServer(mcp)
.WithParentRelationship(mcp)
.WaitFor(mcp)
.WithUrls(x =>
{
x.Urls[0].DisplayText = "Inspector";
});
string SqlScript(string db) => $"""
CREATE DATABASE {db};
GO
SELECT *
INTO {db}.dbo.Products
FROM (VALUES
(1, 'Action Figure', 40, 14.99, 5.00),
(2, 'Building Blocks', 25, 29.99, 10.00),
(3, 'Puzzle 500 pcs', 30, 12.49, 4.00),
(4, 'Toy Car', 50, 7.99, 2.50),
(5, 'Board Game', 20, 34.99, 12.50),
(6, 'Doll House', 10, 79.99, 30.00),
(7, 'Stuffed Bear', 45, 15.99, 6.00),
(8, 'Water Blaster', 35, 19.99, 7.00),
(9, 'Art Kit', 28, 24.99, 8.00),
(10,'RC Helicopter', 12, 59.99, 22.00)
) AS x (Id, Name, Inventory, Price, Cost);
ALTER TABLE {db}.dbo.Products
ADD CONSTRAINT PK_Products PRIMARY KEY (Id);
""";
このコードでは、次のリソースを構成します。
.
├── SQL Server (sql)
│ └── SQL Database (productsdb)
└── SQL MCP Server (sql-mcp-server)
└── MCP Inspector (inspector)
アスパイア リソースとその接続を示す図。
5. dab-config.json ファイルを作成する
プロジェクト フォルダー ( があるのと同じフォルダー) で次のコマンドを実行します。
@env('MSSQL_CONNECTION_STRING') 構文は、実行時に環境変数から接続文字列を読み取るように Data API ビルダーに指示します。 この変数はコンテナーの起動時に自動的に設定されるため、ローカルで設定する必要はありません。
dab init --database-type mssql --connection-string "@env('MSSQL_CONNECTION_STRING')" --host-mode Development --config dab-config.json
dab add Products --source dbo.Products --permissions "anonymous:read" --description "Toy store products with inventory, price, and cost."
注
式は、中ではなく、実行時に環境変数を解決する DAB 構成機能です。 生成された には、コンテナーの起動時に DAB によって解決されるリテラル文字列 が含まれています。
ファイルは、データベースに接続するように SQL MCP Server を構成し、公開するオブジェクトを識別します。 この場合、 が公開されます。
このコマンドは、新しいファイルをプロジェクトに追加します。
dab-config.json
Important
バインド マウントは相対パス () を使用するため、 ファイルは、を実行するのと同じディレクトリに存在する必要があります。
必要に応じて、フィールドの説明を追加します。 このメタデータは、言語モデルがスキーマを理解するのに役立ちます。
dab update Products --fields.name Id --fields.primary-key true --fields.description "Product Id"
dab update Products --fields.name Name --fields.description "Product name"
dab update Products --fields.name Inventory --fields.description "Units in stock"
dab update Products --fields.name Price --fields.description "Retail price"
dab update Products --fields.name Cost --fields.description "Store cost"
ソリューションのテスト
この手順では、アスパイア環境を実行し、SQL Server、SQL MCP Server、MCP Inspector が連携していることを確認します。
1. Aspire を開始する
aspire run
Important
Docker が実行されていることを確認します。 アスパイアでは、コンテナーホストが適切に動作する必要があります。
ダッシュボードが開くと、Swagger、MCP、Inspector のリンクが表示されます。
実行中の環境を示す [アスパイア] ダッシュボードのスクリーンショット。
必要な URL
[アスパイア] ダッシュボードには、次のリンクが表示されます (ポートは動的に割り当てられます)。
| Resource | Link | Description |
|---|---|---|
| sql-mcp-server | Swagger | REST API のドキュメント |
| sql-mcp-server | MCP | MCP エンドポイント () |
| インスペクター | インスペクター | MCP インスペクター UI |
2. Swagger を使用して REST API をテストする
ダッシュボードから Swagger を選択します。
製品の 操作を試してください。 このテストでは、SQL MCP Server が実行されており、データベースに接続できることを確認します。
3. MCP ツールを調べる
ダッシュボードから [インスペクター] を選択します。
Try:
- 利用可能な MCP ツールを表示するには
- エンティティの場合
フィルターを試す (構文の例):
{ "filter": "Price gt 20" }
このテストでは、MCP が動作していることを確認します。
4. ストップアスパイア
アスパイアを停止するには、 を押します。
Aspireはすべてのサービスを停止します。 コードでは .WithDataVolume() と .WithLifetime(ContainerLifetime.Persistent) を使用するため、SQL Serverデータは実行間で保持されます。
トラブルシューティング
SQL MCP Server コンテナーの起動に失敗する
- エラーの詳細については、アスパイア ダッシュボードのコンテナー ログを確認します
- 引数が DAB コンテナーの予期される構文と一致するかどうかを確認します (一部のバージョンでは、代わりに を使用する場合があります)
- を実行するのと同じディレクトリに存在することを確認します
データベース初期化スクリプトが見つかりません
- が AppHost プロジェクト ディレクトリ内にあるかどうかを確認する
- ファイルがプロジェクトに含まれていることを確認し、必要に応じて出力にコピーします
MCP Inspector が接続できない
- SQL MCP Server コンテナーが実行されていて正常であることを確認する
- MCP エンドポイント パス () が DAB 構成と一致するかどうかを確認する
関連コンテンツ
- SQL MCP Server の概要
- SQL MCP Server のデータ操作ツール
- SQL MCP Server へのセマンティック記述の追加