Dela via


Stdio-transport för SQL MCP Server

Viktigt!

MCP-servern (SQL Model Context Protocol) är tillgänglig i Data API Builder version 1.7 och senare.

SQL MCP Server stöder två transporter: strömmande HTTP för värdbaserade scenarier och molnscenarier och stdio för lokal utveckling och direkt agentintegrering. Den här artikeln beskriver stdio transport.

I stdio-läge kommunicerar Data API Builder (DAB) med en MCP-klient helt över standardindata/utdata (stdin/stdout). Ingen HTTP-server eller nätverksport har startats. MCP-klienten startar DAB som en underordnad process och skickar meddelanden fram och tillbaka med hjälp av MCP (Model Context Protocol).

När du ska använda stdio transport

Scenario Rekommenderad transport
Lokal utveckling på en arbetsstation för utvecklare stdio
VS Code med GitHub Copilot (agentläge) stdio
CI/CD-pipelines eller agentautomatisering med skript stdio
Molntjänster (Container Apps, App Service) HTTP
AI Foundry-agent med fjärr-MCP-slutpunkt HTTP
Team med agenter som delar samma slutpunkt HTTP

Välj stdio när du vill ha den enklaste möjliga lokala installationen utan öppna portar. Välj HTTP när MCP-servern måste kunna nås i ett nätverk.

Förutsättningar

  • Data API Builder CLI installerat (version 1.7 eller senare)
  • En befintlig dab-config.json med MCP aktiverat (se Nödvändig konfiguration)
  • En MCP-kompatibel klient (VS Code med GitHub Copilot, Claude Desktop eller en anpassad agent)

Nödvändig konfiguration

Innan du använder stdio-transport, aktivera MCP i dab-config.json.

"runtime": {
  "mcp": {
    "enabled": true,
    "path": "/mcp",
    "dml-tools": {
      "create-record": true,
      "read-records": true,
      "update-record": true,
      "delete-record": true
    }
  }
}

Fältet path används endast för HTTP-transport och ignoreras i stdio-läge. Blocket dml-tools styr vilka datamanipuleringsåtgärder som är tillgängliga som MCP-verktyg.

Viktigt!

Om "mcp": { "enabled": false } eller om mcp blocket saknas kan DAB inte starta i stdio-läge.

Starta i stdio-läge

Använd --mcp-stdio-flaggan på dab start:

dab start --mcp-stdio --config ./dab-config.json

Så här kör du under en specifik behörighetsroll:

dab start --mcp-stdio role:authenticated --config ./dab-config.json

Argumentet role:<name> är positionellt och måste omedelbart följa --mcp-stdio. Om den utelämnas, blir rollen som standard anonymous. Rollnamnet måste matcha en roll som definierats i permissions avsnittet för minst en entitet i konfigurationen.

Så här fungerar stdio-läge

När --mcp-stdio identifieras gör DAB följande ändringar internt:

UTF-8-kodning (inget byteordningsmärke)

Konsolindata och utdata tvingas till UTF-8 utan byteordningsmärke (BOM). Den här UTF-8-inställningen krävs för ren JSON-over-stdio-kommunikation eftersom många MCP-klienter avvisar BOM-prefixbaserade strömmar.

Simulatorautentisering

Autentiseringsprovidern åsidosättas i simulatorläge , oavsett vad konfigurationsfilen anger. Med det här simulatorläget kan den angivna rollen tillämpas direkt utan en riktig JSON-webbtoken (JWT) eller identitetsprovider. Simulatorprovidern är utformad för utvecklingsscenarier och bör inte användas för att skydda HTTP-slutpunkter för produktion , men det är precis rätt för lokala stdio-sessioner.

Följande värden tillämpas i minnet och åsidosätter konfigurationen under sessionen:

Nyckel Värde
MCP:StdioMode "true"
MCP:Role "<role-name>" eller "anonymous"
Runtime:Host:Authentication:Provider "Simulator"

Ingen HTTP-lyssnare

Den ASP.NET Core-värd startar och alla tjänster registreras, men DAB anropar stdio.RunAsync() i stället för host.Run(). Ingen TCP-port (Transmission Control Protocol) är bunden. Alla MCP-protokollmeddelanden flödar genom stdin/stdout.

Tillgängliga MCP-verktyg

Följande verktyg är tillgängliga i stdio-läge, med dina dml-tools konfigurations- och entitetsbehörigheter:

Verktyg Beskrivning
describe_entities Visar tillgängliga entiteter och deras fält och behörigheter
create_record Infogar ett nytt register (gäller endast tabeller)
read_records Läser poster från en entitet
update_record Uppdaterar en befintlig post
delete_record Tar bort en befintlig databaspost (tabeller och vyer)
execute_entity Kör en lagrad procedurentitet

Anpassade MCP-verktyg som backas upp av lagrade procedurer registreras också när du använder --mcp-stdio.

Konfigurera en MCP-klient för stdio

MCP-klienter som stöder stdio-transport startar DAB som en underprocess och kopplar via dess stdin/stdout. Klientkonfigurationssyntaxen varierar beroende på klient.

VS Code (mcp.json)

{
  "servers": {
    "sql-mcp-server": {
      "type": "stdio",
      "command": "dab",
      "args": [
        "start",
        "--mcp-stdio", "role:anonymous",
        "--config", "{path}/dab-config.json",
        "--LogLevel", "none"
      ]
    }
  }
}

Spara den här filen som .vscode/mcp.json i projektmappen. VS Code identifierar konfigurationen automatiskt och visar servern i MCP: Listservrar. Eftersom klienten hanterar processlivscykeln behöver du inte köra dab start separat i en terminal.

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", "none"
      ]
    }
  }
}

Kombinera med andra dab start alternativ

--mcp-stdio är kompatibel med alla andra dab start alternativ:

Option Beteende med --mcp-stdio
--config Använder den angivna konfigurationsfilen (samma som HTTP-läge)
--LogLevel Tillämpar den angivna loggnivån (none: rekommenderas för stdio)
dab start \
  --mcp-stdio role:api-reader \
  --config ./dab-config.json \
  --LogLevel None

Felsöka läge för stdio

Failed to start the engine in MCP stdio mode.

DAB kunde inte starta. Kontrollera följande:

  • Konfigurationsfilen är giltig: kör dab validate --config <path>
  • Din databas connection string är korrekt och kan nås
  • MCP är aktiverat i konfigurationen: "mcp": { "enabled": true }

Behörighet nekad vid MCP-verktygsanrop

Rollen som anges av role:<name> har inte de behörigheter som krävs för entiteten och åtgärden. Kontrollera avsnittet permissions för den relevanta entiteten i din konfiguration.

MCP-verktyg visas inte

Antingen är dml-tools inställt på false globalt, eller så har entiteten "dml-tools": false i sina mcp inställningar. Kontrollera också att mcp.enabled är true.

Förvrängda utdata eller JSON-parsningsfel

Se till att ingenting i startkoden skriver icke-JSON-text till stdout innan MCP-servern startar. Loggutdata ska gå till stderr eller en loggfil, inte stdout. Använd --LogLevel för att förhindra utförliga startmeddelanden om det behövs.