Partager via


Stdio transport pour SQL MCP Server

Important

Le serveur MCP (SQL Model Context Protocol) est disponible dans le Générateur d’API de données version 1.7 et ultérieure.

SQL MCP Server prend en charge deux transports : http streamable pour les scénarios hébergés et cloud, ainsi que stdio pour le développement local et l’intégration directe de l’agent. Cet article traite du stdio transport.

En stdio mode, le générateur d’API de données (DAB) communique entièrement avec un client MCP sur une entrée/sortie standard (stdin/stdout). Aucun serveur HTTP ou port réseau n’est démarré. Le client MCP lance DAB en tant que processus enfant et canalise les messages à l’aide du protocole MCP (Model Context Protocol).

Quand utiliser stdio le transport

Scénario Transport recommandé
Développement local sur une station de travail développeur stdio
VS Code avec GitHub Copilot (mode agent) stdio
Pipelines CI/CD ou automatisation des agents via scripts stdio
Hébergement cloud (Container Apps, App Service) HTTP
Agent AI Foundry avec point de terminaison MCP distant HTTP
Équipes d’agents partageant le même point de terminaison HTTP

Choisissez stdio quand vous souhaitez la configuration locale la plus simple possible sans ports ouverts. Choisissez HTTP lorsque le serveur MCP doit être accessible sur un réseau.

Prerequisites

  • Interface CLI du Générateur d’API de données installée (version 1.7 ou ultérieure)
  • Existant dab-config.json avec MCP activé (voir Configuration requise)
  • Un client compatible MCP (VS Code avec GitHub Copilot, Claude Desktop ou un agent personnalisé)

Configuration nécessaire

Avant d’utiliser stdio le transport, activez MCP dans votre 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
    }
  }
}

Le path champ est utilisé uniquement pour le transport HTTP et est ignoré en stdio mode. Le dml-tools bloc contrôle les opérations de manipulation de données disponibles en tant qu’outils MCP.

Important

Si "mcp": { "enabled": false } ou le mcp bloc est manquant, DAB ne parvient pas à démarrer en stdio mode.

Démarrer en stdio mode

Utilisez l’indicateur --mcp-stdio sur dab start:

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

Pour s’exécuter sous un rôle d’autorisation spécifique :

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

L’argument role:<name> est positionnel et doit immédiatement suivre --mcp-stdio. S’il est omis, le rôle est défini par défaut sur anonymous. Le nom du rôle doit correspondre à un rôle défini dans la permissions section d’au moins une entité de votre configuration.

Comment fonctionne le mode stdio

Lorsqu’il --mcp-stdio est détecté, DAB apporte les modifications suivantes en interne :

Encodage UTF-8 (aucune marque d’ordre d’octet)

Les entrées et sorties de la console sont forcées d'utiliser UTF-8 sans marque d'ordre des octets (BOM). Ce paramètre UTF-8 est requis pour la communication propre JSON-over-stdio , car de nombreux clients MCP rejettent les flux avec préfixe BOM.

Authentification du simulateur

Le fournisseur d’authentification est remplacé par le mode Simulateur , quel que soit le fichier de configuration spécifié. Ce mode simulateur permet d’appliquer directement le rôle spécifié sans un véritable jeton web JSON (JWT) ou un fournisseur d’identité. Le fournisseur de simulateur est conçu pour les scénarios de développement et ne doit pas être utilisé pour sécuriser les points de terminaison HTTP de production, mais il est exactement approprié pour les sessions locales stdio .

Les valeurs suivantes sont appliquées en mémoire et remplacent votre configuration pendant la session :

Clé Valeur
MCP:StdioMode "true"
MCP:Role "<role-name>" ou "anonymous"
Runtime:Host:Authentication:Provider "Simulator"

Aucun écouteur HTTP

L’hôte ASP.NET Core démarre ; tous les services sont enregistrés, mais DAB appelle stdio.RunAsync() au lieu de host.Run(). Aucun port TCP (Transmission Control Protocol) n’est lié. Tous les messages de protocole MCP transitent par stdin/stdout.

Outils MCP disponibles

Les outils suivants sont disponibles en stdio mode, en fonction de votre configuration de dml-tools et des autorisations d'entité :

Outil Description
describe_entities Répertorie les entités disponibles et leurs champs et autorisations
create_record Insère un nouvel enregistrement (tables uniquement)
read_records Lit les enregistrements d’une entité
update_record Met à jour un enregistrement existant
delete_record Supprime un enregistrement existant (tables et vues)
execute_entity Exécute une entité de procédure stockée
aggregate_records Effectue des requêtes de type agrégation sur des tables et des vues

Les outils MCP personnalisés soutenus par des procédures stockées sont également inscrits lorsque vous utilisez --mcp-stdio.

Configurer un client MCP pour stdio

Clients MCP prenant en charge le transport stdio lancent DAB comme sous-processus et transfèrent ses données viastdin/stdout. La syntaxe de configuration du client varie selon le 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"
      ]
    }
  }
}

Enregistrez ce fichier sous le nom .vscode/mcp.json dans votre dossier de projet. VS Code détecte automatiquement la configuration et affiche le serveur dans MCP : Répertorier les serveurs. Étant donné que le client gère le cycle de vie du processus, vous n’avez pas besoin d’exécuter dab start séparément dans un 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", "error"
      ]
    }
  }
}

Combiner avec d’autres dab start options

--mcp-stdio est compatible avec toutes les autres dab start options :

Choix Comportement avec --mcp-stdio
--config Utilise le fichier de configuration spécifié (identique au mode HTTP)
--LogLevel Applique le niveau de journal spécifié (errorrecommandé pour stdio)
dab start \
  --mcp-stdio role:api-reader \
  --config ./dab-config.json \
  --LogLevel Error

Résoudre les problèmes du stdio mode

Failed to start the engine in MCP stdio mode

DAB n’a pas pu démarrer. Vérifiez les éléments suivants :

  • Votre fichier de configuration est valide : exécuter dab validate --config <path>
  • Votre chaîne de connexion à la base de données est correcte et accessible
  • MCP est activé dans votre configuration : "mcp": { "enabled": true }

Autorisation refusée pour des appels de l’outil MCP

Le rôle spécifié par role:<name> ne dispose pas des autorisations requises pour l’entité et l’opération. Vérifiez la permissions section de l’entité appropriée dans votre configuration.

Outils MCP non répertoriés

Soit dml-tools est défini globalement, soit l'entité a false dans ses paramètres "dml-tools": false. Vérifiez également que mcp.enabled est true.

Erreurs de sortie ou d'analyse JSON illisibles.

Vérifiez que rien dans votre code de démarrage n'écrit de texte non JSON dans le flux de sortie standard (stdout) avant le démarrage du serveur MCP. La sortie du journal doit accéder à stderr ou à un fichier journal, et non à stdout. Utilisez --LogLevel pour supprimer les messages de démarrage détaillés si nécessaire.