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 stdio Modus 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 man stdio Transport verwendet
| 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, wann 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
Bevor Sie den Transport verwenden stdio , aktivieren Sie MCP in Ihrem dab-config.json:
"runtime": {
"mcp": {
"enabled": true,
"path": "/mcp",
"dml-tools": {
"describe-entities": true,
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": true,
"execute-entity": true,
"aggregate-records": true
}
}
}
Das path Feld wird nur für den HTTP-Transport verwendet und wird im stdio Modus 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.
Starten im stdio Modus
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.
Wie stdio funktioniert
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 für die Sicherung von HTTP-Endpunkten in der Produktion verwendet werden – aber es ist genau richtig für lokale stdio Sitzungen.
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 durch stdin/stdout.
Verfügbare MCP-Tools
Die folgenden Tools sind im stdio Modus 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. |
aggregate_records |
Führt Aggregationsabfragen für Tabellen und Ansichten 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 Transport stdio unterstützen, starten DAB als Unterprozess und leiten die Ausgabe über stdin/stdout weiter. 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", "error"
]
}
}
}
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", "error"
]
}
}
}
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 (errorempfohlen für stdio) |
dab start \
--mcp-stdio role:api-reader \
--config ./dab-config.json \
--LogLevel Error
Problembehandlungsmodus stdio
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.