Freigeben über


Stdio Transport für SQL MCP Server

Von Bedeutung

Der SQL Model Context Protocol (MCP)-Server ist in Daten-API-Generator, Version 1.7 und höher, verfügbar.

SQL MCP Server unterstützt zwei Transporte: streambares HTTP für gehostete und Cloudszenarien sowie Stdio für die lokale Entwicklung und direkte Agent-Integration. In diesem Artikel wird der stdio-Transport behandelt.

Im Stdiomodus kommuniziert der Daten-API-Generator (DAB) mit einem MCP-Client vollständig über die Standardeingabe/Ausgabe (stdin/stdout). Es wird kein HTTP-Server oder Netzwerkport gestartet. Der MCP-Client startet DAB als untergeordneter Prozess und leitet Nachrichten mithilfe des Model Context Protocol (MCP) hin und her.

Wann der Stdio-Transport verwendet werden sollte

Szenario Empfohlener Transport
Lokale Entwicklung auf einer Entwicklerarbeitsstation Stdio
VS-Code mit GitHub Copilot (Agentmodus) Stdio
CI/CD-Pipelines oder Skript-Agent-Automatisierung Stdio
Cloudhosting (Container-Apps, App-Dienst) HTTP
AI Foundry-Agent mit Remote-MCP-Endpunkt HTTP
Teams von Agents, die denselben Endpunkt gemeinsam nutzen HTTP

Wählen Sie "Stdio" aus, wenn Sie das einfachste lokale Setup ohne geöffnete Ports wünschen. Wählen Sie HTTP aus, wenn der MCP-Server über ein Netzwerk erreichbar sein muss.

Voraussetzungen

  • Die CLI des Daten-API-Generators ist installiert (Version 1.7 oder höher)
  • Eine vorhandene dab-config.json mit aktiviertem MCP (siehe Erforderliche Konfiguration)
  • Ein MCP-kompatibler Client (VS Code mit GitHub Copilot, Claude Desktop oder einem benutzerdefinierten Agent)

Erforderliche Konfiguration

Aktivieren Sie MCP, bevor Sie den stdio-Transport in Ihrem dab-config.json verwenden:

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

Das path Feld wird nur für den HTTP-Transport verwendet und wird im Stdiomodus ignoriert. Der dml-tools Block steuert, welche Datenmanipulationsvorgänge als MCP-Tools verfügbar sind.

Von Bedeutung

Wenn "mcp": { "enabled": false } oder der mcp Block fehlt, kann DAB nicht im Stdio-Modus gestartet werden.

Im Stdiomodus starten

Verwenden Sie die --mcp-stdio Kennzeichnung auf dab start:

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

So führen Sie die Ausführung unter einer bestimmten Berechtigungsrolle aus:

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

Das role:<name> Argument ist positional und muss sofort folgen --mcp-stdio. Wenn ausgelassen, wird die Rolle standardmäßig auf anonymous gesetzt. Der Rollenname muss mit einer Rolle übereinstimmen, die im Abschnitt permissions mindestens einer Entität in Ihrer Konfiguration definiert ist.

Funktionsweise des Stdiomodus

Wenn --mcp-stdio erkannt wird, nimmt DAB die folgenden Änderungen intern vor:

UTF-8-Codierung (kein Bytereihenfolgezeichen)

Die Konsoleneingabe und -ausgabe wird zwangsweise ohne Bytereihenfolgenzeichen (BOM) in UTF-8 konvertiert. Diese UTF-8-Einstellung ist für eine saubere JSON-over-Stdio-Kommunikation erforderlich, da viele MCP-Clients BOM-präfixierte Datenströme ablehnen.

Simulatorauthentifizierung

Der Authentifizierungsanbieter wird unabhängig davon, was Ihre Konfigurationsdatei angibt, in den Simulatormodus überschrieben. Mit diesem Simulatormodus kann die angegebene Rolle direkt ohne einen echten JSON-Webtoken (JWT) oder Identitätsanbieter angewendet werden. Der Simulatoranbieter ist für Entwicklungsszenarien konzipiert und sollte nicht zum Sichern von HTTP-Endpunkten in der Produktion verwendet werden– aber genau richtig für lokale Stdiositzungen.

Die folgenden Werte werden im Arbeitsspeicher angewendet und überschreiben Ihre Konfiguration während der Sitzung.

Schlüssel Wert
MCP:StdioMode "true"
MCP:Role "<role-name>" oder "anonymous"
Runtime:Host:Authentication:Provider "Simulator"

Kein HTTP-Listener

Der ASP.NET Core Host wird gestartet, und alle Dienste werden registriert, aber DAB ruft stdio.RunAsync() anstelle von host.Run() auf. Kein Transmission-Control-Protocol (TCP)-Port ist gebunden. Alle MCP-Protokollnachrichten fließen über stdin/stdout.

Verfügbare MCP-Tools

Die folgenden Tools sind im Stdiomodus verfügbar, vorbehaltlich Ihrer dml-tools Konfigurations- und Entitätsberechtigungen:

Werkzeug Beschreibung
describe_entities Listet verfügbare Entitäten und deren Felder und Berechtigungen auf
create_record Fügt einen neuen Datensatz ein (nur Tabellen)
read_records Liest Datensätze aus einer Entität
update_record Aktualisiert einen vorhandenen Datensatz.
delete_record Löscht einen vorhandenen Datensatz (Tabellen und Ansichten)
execute_entity Führt eine Entität für gespeicherte Prozeduren aus.

Benutzerdefinierte MCP-Tools, die von gespeicherten Prozeduren unterstützt werden, werden auch bei Verwendung --mcp-stdioregistriert.

Konfigurieren eines MCP-Clients für Stdio

MCP-Clients, die den stdio-Transport unterstützen, starten DAB als Teilprozess und leiten seine Standard-Ein-/Ausgabe um. Die Clientkonfigurationssyntax variiert je nach Client.

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

Speichern Sie diese Datei als .vscode/mcp.json in Ihrem Projektordner. VS Code erkennt die Konfiguration automatisch und zeigt den Server in MCP: Listenserver an. Da der Client den Prozesslebenszyklus verwaltet, müssen Sie nicht separat in einem Terminal ausführen 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", "none"
      ]
    }
  }
}

Kombinieren mit anderen dab start Optionen

--mcp-stdio ist mit allen anderen dab start Optionen kompatibel:

Option Verhalten mit --mcp-stdio
--config Verwendet die angegebene Konfigurationsdatei (identisch mit dem HTTP-Modus)
--LogLevel Wendet die angegebene Protokollebene an (noneempfohlen für Stdio)
dab start \
  --mcp-stdio role:api-reader \
  --config ./dab-config.json \
  --LogLevel None

Problembehandlung von stdio mode

Failed to start the engine in MCP stdio mode.

DAB konnte nicht gestartet werden. Überprüfen Sie Folgendes:

  • Ihre Konfigurationsdatei ist gültig: ausführen dab validate --config <path>
  • Die Datenbank-Verbindungszeichenfolge ist korrekt und erreichbar.
  • MCP ist in Ihrer Konfiguration aktiviert: "mcp": { "enabled": true }

Berechtigung verweigert für MCP-Toolaufrufe

Die durch role:<name> die Angegebene Rolle verfügt nicht über die erforderlichen Berechtigungen für die Entität und den Vorgang. Überprüfen Sie den permissions Abschnitt der relevanten Entität in Ihrer Konfiguration.

MCP-Tools nicht aufgeführt

Entweder ist dml-tools global auf false festgelegt, oder die Entität hat "dml-tools": false in ihren mcp Einstellungen. Überprüfen Sie außerdem, ob mcp.enabledtrue ist.

Verzerrte Ausgabe oder JSON-Analysefehler

Stellen Sie sicher, dass im Startcode kein nicht-JSON-Text in Stdout geschrieben wird, bevor der MCP-Server gestartet wird. Die Protokollausgabe sollte zu stderr oder einer Protokolldatei wechseln, nicht zu "stdout". Verwenden Sie --LogLevel , um ausführliche Startmeldungen bei Bedarf zu unterdrücken.