Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
SQL MCP Server находится в предварительной версии, и эта документация, и реализация подсистемы подлежит изменению в течение этого ознакомительного периода.
В этом кратком руководстве используется Aspire для создания решения на основе контейнеров. Решение включает в себя:
- База данных SQL с примерами данных
- Сервер контекста модели SQL (MCP), управляемый построителем API данных
- Инспектор MCP для тестирования
Aspire запускает всё для вас, запускает службы, подключает контейнеры, и останавливает службы при закрытии.
Предпосылки
Установите эти средства перед началом работы.
1. .NET 10
На этом шаге вы подготовите компьютер с необходимыми компонентами для этого руководства по быстрому старту.
Это важно
Возможно, у вас уже установлено это средство. Протестируйте, запустив dotnet --version, и убедитесь, что он сообщает о версии 10 или более поздней. Если вы запускаете эту установку и .NET уже присутствует, система обновляется без каких-либо проблем.
Виндоус
winget install Microsoft.DotNet.SDK.10
Или скачать
https://get.dot.net
2. Среда выполнения контейнера
На этом шаге вы установите Docker Desktop для поддержки проекта Aspire.
Это важно
Возможно, у вас уже установлено это средство. Проверьте его, выполнив команду docker --version , чтобы подтвердить доступность Docker. Если вы запускаете эту установку и Docker уже присутствует, она обновляет систему без каких-либо проблем.
Виндоус
winget install Docker.DockerDesktop
macOS
brew install --cask docker
Замечание
Podman также работает, но настройки различаются. Разработчики, которые предпочитают Podman, могут адаптировать эти шаги.
3. Инструменты Aspire и построители API данных
На этом шаге вы создадите файлы проекта Aspire по умолчанию, используемые позже.
Выполните следующие команды:
dotnet new tool-manifest
dotnet tool install aspire.cli
dotnet tool install microsoft.dataapibuilder --prerelease
aspire init
Замечание
SQL MCP Server в настоящее время находится в предварительном выпуске. Использование флага --prerelease гарантирует, что вы получите последнюю версию конструктора API данных со всеми функциями, используемыми в этом кратком руководстве.
При появлении запроса выберите все значения по умолчанию.
Эта команда устанавливает средство и создает следующие файлы.
.
├── .config
│ └── dotnet-tools.json
├── AppHost.cs
└── apphost.run.json
4. Завершение файла AppHost.cs
На этом шаге вы обновляете AppHost.cs на правильный код для запуска этого краткого руководства.
Замените содержимое 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.83-rc")
.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
Выполните эти команды в папке проекта (в той же папке, где AppHost.cs находится).
Синтаксис @env('MSSQL_CONNECTION_STRING') указывает Data API builder считывать строку подключения из переменной среды во время выполнения. Aspire автоматически задает эту переменную при запуске контейнера, поэтому ее не нужно устанавливать локально.
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."
Замечание
Выражение @env(...) — это функция настройки DAB, которая разрешает переменные окружения во время выполнения, а не во время dab init.
dab-config.json содержит созданную литеральную строку @env('MSSQL_CONNECTION_STRING'), которую DAB обрабатывает при запуске контейнера.
Файл dab-config.json настраивает SQL MCP Server для подключения к базе данных и определяет, какие объекты следует предоставлять. В этом случае Products становится доступным.
Эта команда добавляет новый файл в проект
dab-config.json
Это важно
Файл dab-config.json должен находиться в том же каталоге, где выполняется aspire run, поскольку связывание использует относительный путь (./dab-config.json).
При необходимости добавьте описания полей
Эти метаданные могут помочь языковым моделям понять схему.
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"
Тестирование решения
На этом шаге вы запустите среду Aspire и убедитесь, что SQL Server, SQL MCP Server и инспектор MCP работают вместе.
Запустить Aspire
aspire run
Это важно
Убедитесь, что Docker запущен. Для правильной работы Aspire требуется, чтобы узел контейнера функционировал должным образом.
Когда откроется панель мониторинга, вы увидите ссылки для Swagger, MCP и Инспектора.
Ожидаемые URL-адреса
Панель мониторинга Aspire отображает эти ссылки (порты назначаются динамически):
| Resource | Link | Description |
|---|---|---|
| sql-mcp-server | Сваггер | Документация по REST API |
| sql-mcp-server | MCP | Конечная точка MCP (/mcp) |
| Инспектор | Inspector | Пользовательский интерфейс инспектора MCP |
2. Тестирование REST API с помощью Swagger
Выберите Swagger на панели мониторинга.
Попробуйте выполнить GET операцию для товаров. Этот тест подтверждает, что SQL MCP Server запущен и может подключиться к базе данных.
3. Изучение средств MCP
Выберите Инспектор на панели мониторинга.
Try:
-
list_toolsчтобы увидеть доступные средства MCP -
read_recordsдля сущностиProducts
Попробуйте фильтр (пример синтаксиса):
{ "filter": "Price gt 20" }
Этот тест подтверждает работу MCP.
4. Остановить Aspire
Чтобы остановить Aspire, нажмите клавишу Ctrl+C.
Aspire прекращает все службы. Данные SQL Server сохраняются между выполнением, так как код использует .WithDataVolume() и .WithLifetime(ContainerLifetime.Persistent).
Устранение неполадок
Не удается запустить контейнер SQL MCP Server
- Проверьте журналы контейнеров на панели мониторинга Aspire для получения сведений об ошибке
- Убедитесь, что
--configаргумент соответствует ожидаемому синтаксису контейнера DAB (некоторые версии могут использовать--ConfigFileNameвместо этого). - Убедитесь, что
dab-config.jsonсуществует в том же каталоге, в котором выполняется запускaspire run
Скрипт инициализации базы данных не найден
- Убедитесь, что
init-db.sqlнаходится в каталоге проекта AppHost - Убедитесь, что файл включен в проект и копируется в выходные данные при необходимости.
Инспектор MCP не может подключиться
- Убедитесь, что контейнер SQL MCP Server запущен и работоспособен
- Убедитесь, что путь конечной точки MCP (
/mcp) соответствует конфигурации DAB.