Dela via


Snabbstart: Använda SQL MCP Server med .NET Aspire

Viktigt!

SQL MCP Server är en förhandsversion och den här dokumentationen och motorimplementeringen kan komma att ändras under den här utvärderingsperioden.

Den här snabbstarten använder Aspire för att skapa en containerbaserad lösning. Lösningen innehåller:

  • En SQL-databas med exempeldata
  • En MCP-server (SQL Model Context Protocol) som drivs av Data API Builder
  • MCP-inspektör för testning

Aspire kör allt åt dig, startar tjänster och ansluter containrar och stoppar tjänster när du stänger det.

Diagram som visar Aspire-lösningen med SQL Server, SQL MCP Server och MCP Inspector.

Förutsättningar

Installera dessa verktyg innan du börjar.

1. .NET 10

I det här steget förbereder du datorn med de krav som krävs för den här snabbstarten.

Viktigt!

Du kanske redan har det här verktyget installerat. Testa det genom att köra dotnet --version och bekräfta att det rapporterar version 10 eller senare. Om du kör den här installationen och .NET redan finns uppdaterar den systemet utan att orsaka några problem.

Windows

winget install Microsoft.DotNet.SDK.10

Eller ladda ned

https://get.dot.net

2. Containerkörning

I det här steget installerar du Docker Desktop för att stödja Aspire-projektet.

Viktigt!

Du kanske redan har det här verktyget installerat. Testa det genom att köra docker --version för att bekräfta att Docker är tillgängligt. Om du kör den här installationen och Docker redan finns uppdaterar den systemet utan att orsaka några problem.

Windows

winget install Docker.DockerDesktop

macOS

brew install --cask docker

Anmärkning

Podman fungerar också, men konfigurationen varierar. Utvecklare som föredrar Podman kan anpassa de här stegen.

3. Aspire- och Data API Builder-verktyg

I det här steget skapar du standardprojektfilerna för Aspire som används senare.

Kör följande kommandon

dotnet new tool-manifest
dotnet tool install aspire.cli
dotnet tool install microsoft.dataapibuilder --prerelease
aspire init

Anmärkning

SQL MCP Server är för närvarande i förhandsversion. --prerelease Med hjälp av flaggan får du den senaste versionen av Data API Builder med alla funktioner som används i den här snabbstarten.

När du uppmanas till det väljer du alla standardvärden.

Det här kommandot installerar verktygen och skapar följande filer

.
├── .config
│   └── dotnet-tools.json
├── AppHost.cs
└── apphost.run.json

4. Slutför filen AppHost.cs

I det här steget uppdaterar AppHost.cs du med rätt kod för att köra den här snabbstarten.

Ersätt innehållet i AppHost.cs med följande

#: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);
    """;

Den här koden konfigurerar följande resurser

.
├── SQL Server (sql)
│   └── SQL Database (productsdb)
└── SQL MCP Server (sql-mcp-server)
    └── MCP Inspector (inspector)

Diagram som visar Aspire-resurser och deras anslutningar.

5. Skapa din dab-config.json-fil

Kör dessa kommandon i projektmappen (samma mapp där AppHost.cs finns).

Syntaxen @env('MSSQL_CONNECTION_STRING') anger Data API Builder att läsa anslutningssträngen från en miljövariabel under körning. Aspire anger den här variabeln automatiskt när den startar containern, så du behöver inte ange den lokalt.

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."

Anmärkning

Uttrycket @env(...) är en DAB-konfigurationsfunktion som löser miljövariabler vid körning, inte under dab init. Den genererade dab-config.json innehåller den bokstavliga strängen @env('MSSQL_CONNECTION_STRING'), som DAB löser när containern startar.

Filen dab-config.json konfigurerar SQL MCP Server för att ansluta till databasen och identifierar vilka objekt som ska exponeras. I det här fallet Products exponeras.

Det här kommandot lägger till en ny fil i projektet

dab-config.json

Viktigt!

Filen dab-config.json måste finnas i samma katalog där du kör aspire run, eftersom bindmonteringen använder en relativ sökväg (./dab-config.json).

Du kan också lägga till fältbeskrivningar

Dessa metadata kan hjälpa språkmodeller att förstå ditt schema.

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"

Testa din lösning

I det här steget kör du din Aspire-miljö och bekräftar att SQL Server, SQL MCP Server och MCP Inspector fungerar tillsammans.

1. Starta Aspire

aspire run

Viktigt!

Kontrollera att Docker körs. Aspire kräver att containervärden fungerar korrekt.

När instrumentpanelen öppnas visas länkar för Swagger, MCP och Inspector.

Skärmbild av Aspire-instrumentpanelen som visar den körande miljön.

Förväntade URL:er

På Aspire-instrumentpanelen visas dessa länkar (portar tilldelas dynamiskt):

Resource Länk Description
sql-mcp-server Swagger REST API-dokumentation
sql-mcp-server MCP MCP-slutpunkt (/mcp)
inspektör Inspektör Användargränssnitt för MCP-inspektör

2. Testa REST-API:et med Swagger

Välj Swagger på instrumentpanelen.

Prova åtgärden GET för Produkter. Det här testet bekräftar att SQL MCP Server körs och kan ansluta till databasen.

3. Utforska MCP-verktygen

Välj Kontroll på instrumentpanelen.

Try:

  • list_tools för att se tillgängliga MCP-verktyg
  • read_recordsför entiteten Products

Prova ett filter (exempelsyntax):

{ "filter": "Price gt 20" }

Det här testet bekräftar att MCP fungerar.

4. Stoppa Aspire

Tryck på Ctrl+Cför att stoppa Aspire.

Aspire stoppar alla tjänster. SQL Server-data bevaras mellan körningar eftersom koden använder .WithDataVolume() och .WithLifetime(ContainerLifetime.Persistent).

Felsökning

SQL MCP Server-containern startar inte

  • Kontrollera containerloggarna på Aspire-instrumentpanelen för felinformation
  • Kontrollera att --config argumentet matchar DAB-containerns förväntade syntax (vissa versioner kan användas --ConfigFileName i stället)
  • Se till att dab-config.json det finns i samma katalog där du kör aspire run

Det går inte att hitta databasinitieringsskriptet

  • Verifiera init-db.sql finns i AppHost-projektkatalogen
  • Kontrollera att filen ingår i projektet och kopieras till utdata om det krävs

MCP-inspektören kan inte ansluta

  • Bekräfta att SQL MCP Server-containern körs och är felfri
  • Kontrollera att MCP-slutpunktssökvägen (/mcp) matchar DAB-konfigurationen