Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.jsonmit 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.