Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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.
Le serveur MCP (SQL Model Context Protocol) expose sept outils DML (Data Manipulation Language) aux agents IA. Ces outils fournissent une surface CRUD typée pour les opérations de base de données : création, lecture, mise à jour et suppression d’enregistrements, agrégation de données, ainsi que l’exécution de procédures stockées. Tous les outils respectent le contrôle d’accès en fonction du rôle (RBAC), les autorisations d’entité et les stratégies définies dans votre configuration.
Qu’est-ce que les outils DML ?
Les outils DML (Data Manipulation Language) gèrent les opérations de données : création, lecture, mise à jour et suppression d’enregistrements, agrégation de données, ainsi que l’exécution de procédures stockées. Contrairement à DDL (Data Definition Language) qui modifie le schéma, DML fonctionne exclusivement sur le plan de données dans les tables et vues existantes.
Les sept outils DML sont les suivants :
-
describe_entities- Découvre les entités et les opérations disponibles -
create_record- Insère de nouvelles lignes -
read_records- Requêtes des tables et des vues -
update_record- Modifie les lignes existantes -
delete_record- Supprime les lignes -
execute_entity- Exécute des procédures stockées -
aggregate_records- Effectue des requêtes d’agrégation
Note
La fonctionnalité SQL MCP Server 2.0 décrite dans cette section est actuellement en préversion et peut changer avant la disponibilité générale. Pour plus d’informations, consultez Nouveautés de la version 2.0.
Lorsque les outils DML sont activés globalement et pour une entité, SQL MCP Server les expose via le protocole MCP. Les agents n’interagissent jamais directement avec votre schéma de base de données : ils fonctionnent via la couche d’abstraction du générateur d’API de données.
Les outils
réponse liste_outils
Lorsqu’un agent appelle list_tools, SQL MCP Server retourne :
{
"tools": [
{ "name": "describe_entities" },
{ "name": "create_record" },
{ "name": "read_records" },
{ "name": "update_record" },
{ "name": "delete_record" },
{ "name": "execute_entity" },
{ "name": "aggregate_records" }
]
}
décrire_les_entités
Retourne les entités disponibles pour le rôle actuel. Chaque entrée inclut des noms de champs, des descriptions et des opérations autorisées. Cet outil n’interroge pas la base de données. Au lieu de cela, il lit à partir de la configuration en mémoire générée à partir de votre fichier de configuration.
Important
Les informations dans fields sont dérivées des données describe_entities que vous fournissez dans la configuration. Étant donné que les métadonnées de champ sont facultatives, si vous ne l’incluez pas, les agents voient uniquement les noms d’entités avec un tableau vide fields . Il est recommandé d’inclure à la fois les noms de champs et les descriptions de champs dans votre configuration. Ces métadonnées donnent aux agents davantage de contexte pour générer des requêtes et des mises à jour précises. En savoir plus sur les descriptions de champs ici.
Note
La réponse inclut le champ name et les valeurs description de votre configuration. Les types de données et les indicateurs clés primaires ne sont pas inclus dans la réponse actuelle. Les paramètres de procédure stockée ne sont pas répertoriés. Les agents s’appuient sur des descriptions d’entité et de champ, ainsi que des commentaires sur les erreurs, pour déterminer l’utilisation correcte.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
nameOnly |
booléen | Non | Lorsque true, retourne une liste légère de noms d’entités et de descriptions sans métadonnées de champ. |
entities |
tableau de chaînes de caractères | Non | Limite la réponse aux entités spécifiées. En cas d’omission, toutes les entités compatibles MCP sont retournées. |
Exemple de requête
{
"method": "tools/call",
"params": {
"name": "describe_entities",
"arguments": {
"entities": ["Products"]
}
}
}
Exemple de réponse
{
"entities": [
{
"name": "Products",
"description": "Product catalog with pricing and inventory",
"fields": [
{
"name": "ProductId",
"description": "Unique product identifier"
},
{
"name": "ProductName",
"description": "Display name of the product"
},
{
"name": "Price",
"description": "Retail price in USD"
}
],
"operations": [
"read_records",
"update_record"
]
}
]
}
Note
Les options d’entité utilisées par l’un des outils CRUD et d’exécution DML proviennent directement de describe_entities. La description sémantique interne attachée à chaque outil applique ce flux en deux étapes.
créer_enregistrement
Crée une ligne dans une table. Nécessite une autorisation de création sur l’entité pour le rôle actuel. L’outil valide les entrées par rapport au schéma d’entité, applique les autorisations au niveau du champ, applique des stratégies de création et retourne l’enregistrement créé avec toutes les valeurs générées.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
entity |
ficelle | Oui | Nom de l’entité dans lequel créer un enregistrement. |
data |
objet | Oui | Paires clé-valeur de noms de champs et de valeurs pour le nouvel enregistrement. |
lire_enregistrements
Interroge une table ou une vue. Prend en charge le filtrage, le tri, la pagination et la sélection de champs. L’outil génère un SQL déterministe à partir de paramètres structurés, applique des autorisations de lecture et des projections de champs et applique des stratégies de sécurité au niveau des lignes.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
entity |
ficelle | Oui | Nom de l’entité à partir duquel lire. |
select |
ficelle | Non | Liste séparée par des virgules des noms de champs à retourner (par exemple, "id,title,price"). |
filter |
ficelle | Non | Expression de filtre de style OData (par exemple, "Price gt 10 and Category eq 'Books'"). |
orderby |
tableau de chaînes de caractères | Non | Trier les expressions. Chaque élément est un nom de champ avec une direction facultative (par exemple, ["Price desc", "Name asc"]). |
first |
entier | Non | Nombre maximal d’enregistrements à retourner. |
after |
ficelle | Non | Curseur de continuation d’une réponse précédente pour la pagination. |
Avertissement
Le orderby paramètre doit être un tableau de chaînes, pas une seule chaîne. Le passage d’une valeur de chaîne provoque un UnexpectedError. Utilisez ["Name asc"] au lieu de "Name asc".
Réponse de pagination
Lorsque d’autres résultats sont disponibles, la réponse inclut un after curseur. Transmettez cette valeur en tant que after paramètre dans la requête suivante pour extraire la page suivante.
{
"value": [ ... ],
"after": "W3siRW50aXR5TmFtZ..."
}
La présence du champ indique que d’autres after pages existent. En l'absence de after, vous avez atteint la dernière page.
Important
Les résultats de read_records sont automatiquement mis en cache à l’aide du système de mise en cache du générateur de l'API de données. Vous pouvez configurer la durée de vie (TTL) du cache globalement ou par entité pour réduire la charge de la base de données.
Opérations JOIN
L’outil read_records est conçu pour une seule table ou vue. Par conséquent, les opérations JOIN ne sont pas prises en charge dans cet outil. Cette conception permet d’isoler la responsabilité, d’améliorer les performances et de limiter l’impact sur la fenêtre de contexte de votre session.
Toutefois, les opérations JOIN ne sont pas un cas de périphérie, et le générateur d’API de données (DAB) prend déjà en charge les requêtes sophistiquées via le point de terminaison GraphQL. Pour les requêtes plus complexes, nous vous recommandons d’utiliser une vue au lieu d’une table. Vous pouvez également utiliser l’outil execute_entity pour exécuter des procédures stockées pour encapsuler des requêtes paramétrables.
mise_à_jour_enregistrement
Modifie une ligne existante. Nécessite la présence de la clé primaire et des champs pour effectuer une mise à jour. L’outil valide la clé primaire, applique des autorisations et des stratégies de mise à jour et met à jour uniquement les champs que le rôle actuel peut modifier.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
entity |
ficelle | Oui | Nom de l’entité à mettre à jour. |
keys |
objet | Oui | Paires clé-valeur identifiant l’enregistrement (par exemple). {"id": 42} |
fields |
objet | Oui | Paires clé-valeur de noms de champs et nouvelles valeurs. |
supprimer_enregistrement
Supprime une ligne existante. Nécessite la clé primaire. L’outil valide la clé primaire, applique des autorisations et des stratégies de suppression et effectue une suppression sécurisée avec prise en charge des transactions.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
entity |
ficelle | Oui | Nom de l’entité à supprimer. |
keys |
objet | Oui | Paires clé-valeur identifiant l’enregistrement (par exemple). {"id": 42} |
Note
Certains scénarios de production désactivent cet outil globalement pour limiter largement les modèles. Ce choix vous incombe, et il est important de vous rappeler que les autorisations au niveau de l’entité restent le moyen le plus important de contrôler l’accès. Même avec delete-record activé, si un rôle n’a pas d’autorisation de suppression sur une entité, ce rôle ne peut pas utiliser cet outil pour cette entité.
exécuter_entité
Exécute une procédure stockée. Prend en charge les paramètres d’entrée et les résultats de sortie. L’outil valide les paramètres d’entrée par rapport à la signature de procédure, applique les autorisations d’exécution et transmet les paramètres en toute sécurité.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
entity |
ficelle | Oui | Nom de l’entité de procédure stockée. |
parameters |
objet | Non | Paires clé-valeur de noms et de valeurs de paramètres d’entrée. |
agréger_enregistrements
Effectue des requêtes d’agrégation sur des tables et des vues. Prend en charge les fonctions d’agrégation courantes telles que le nombre, la somme, la moyenne, le minimum et le maximum. L’outil génère un SQL déterministe à partir de paramètres structurés, applique des autorisations de lecture et des projections de champs et applique des stratégies de sécurité au niveau des lignes.
Paramètres
| Paramètre | Catégorie | Obligatoire | Description |
|---|---|---|---|
entity |
ficelle | Oui | Nom de l’entité à agréger. |
function |
ficelle | Oui | Fonction d’agrégation : count, , sumavg, min, ou max. |
field |
ficelle | Oui | Champ à agréger. Utiliser "*" pour count. |
filter |
ficelle | Non | Filtre de style OData appliqué avant l’agrégation. |
distinct |
booléen | Non | Lorsque true, supprime les valeurs dupliquées avant l’agrégation. |
groupby |
tableau de chaînes de caractères | Non | Noms de champs pour regrouper les résultats par (par exemple, ["Category", "Status"]). |
having |
objet | Non | Filtre les groupes par valeur d’agrégation. Utilise des opérateurs : eq, , neq, gtgtelt, lte, in. |
orderby |
tableau de chaînes de caractères | Non | Trier les expressions pour les résultats groupés (par exemple, ["count desc"]). |
first |
entier | Non | Nombre maximal de résultats groupés à retourner. |
after |
ficelle | Non | Curseur de continuation pour la pagination des résultats groupés. |
Exemple : COUNT avec GROUP BY et HAVING
{
"method": "tools/call",
"params": {
"name": "aggregate_records",
"arguments": {
"entity": "Todo",
"function": "count",
"field": "*",
"groupby": ["UserId"],
"having": { "gt": 2 }
}
}
}
L’outil aggregate-records peut être configuré en tant que booléen ou en tant qu’objet avec d’autres paramètres :
{
"runtime": {
"mcp": {
"dml-tools": {
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
La query-timeout propriété spécifie la durée d’exécution maximale en secondes (plage : 1 à 600). Ce paramètre permet d’empêcher les requêtes d’agrégation longues de consommer des ressources excessives.
Configuration du runtime
Configurez globalement les outils DML dans la section runtime de 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
}
}
}
}
Chaque propriété outil sous runtime.mcp.dml-tools accepte true ou false. L’outil aggregate-records prend également en charge un format d’objet avec enabled et query-timeout:
{
"runtime": {
"mcp": {
"enabled": true,
"dml-tools": {
"describe-entities": true,
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": true,
"execute-entity": true,
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
Pour activer ou désactiver tous les outils DML à la fois, définis "dml-tools" sur true ou false.
Utilisation de l’CLI
Définissez des propriétés individuellement à l’aide de l’interface CLI du générateur d’API de données :
dab configure --runtime.mcp.enabled true
dab configure --runtime.mcp.path "/mcp"
dab configure --runtime.mcp.dml-tools.describe-entities true
dab configure --runtime.mcp.dml-tools.create-record true
dab configure --runtime.mcp.dml-tools.read-records true
dab configure --runtime.mcp.dml-tools.update-record true
dab configure --runtime.mcp.dml-tools.delete-record true
dab configure --runtime.mcp.dml-tools.execute-entity true
dab configure --runtime.mcp.dml-tools.aggregate-records.enabled true
dab configure --runtime.mcp.dml-tools.aggregate-records.query-timeout 30
Désactivation des outils
Lorsque vous désactivez un outil au niveau du runtime, il n’apparaît jamais aux agents, quelles que soient les autorisations d’entité ou la configuration du rôle. Ce paramètre est utile lorsque vous avez besoin de limites opérationnelles strictes.
Scénarios courants
- Désactiver
delete-recordpour empêcher la perte de données en production - Désactiver
create-recordpour les points de terminaison de rapports en lecture seule - Désactiver
execute-entitylorsque les procédures stockées ne sont pas utilisées - Désactiver
aggregate-recordslorsque les requêtes d’agrégation ne sont pas nécessaires
Lorsqu’un outil est désactivé globalement, l’outil est masqué de la list_tools réponse et ne peut pas être appelé.
Paramètres de l’entité
Les entités participent automatiquement à MCP, sauf si vous les limitez explicitement. La mcp propriété d’une entité contrôle sa participation MCP. Utilisez le format d’objet pour le contrôle explicite.
Format d’objet
{
"entities": {
"Products": {
"mcp": {
"dml-tools": true
}
},
"SensitiveData": {
"mcp": {
"dml-tools": false
}
}
}
}
Si vous ne spécifiez mcp pas d’entité, les outils DML sont activés par défaut lorsque MCP est activé globalement.
Outils personnalisés pour les procédures stockées
Pour les entités de procédure stockée, utilisez la custom-tool propriété pour inscrire la procédure en tant qu’outil MCP nommé :
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
}
}
}
}
Important
La custom-tool propriété est valide uniquement pour les entités de procédure stockée. La définition de celle-ci sur une table ou une entité d’affichage entraîne une erreur de configuration.
Étendue du contrôle par outil
Les bascules par outil sont configurées uniquement au niveau du runtime global sous runtime.mcp.dml-tools.
Au niveau de l’entité, mcp est une porte booléenne ou un objet avec les propriétés dml-tools et custom-tool.
{
"entities": {
"AuditLogs": {
"mcp": {
"dml-tools": false
}
}
}
}
{
"runtime": {
"mcp": {
"dml-tools": {
"describe-entities": true,
"create-record": true,
"read-records": true,
"update-record": true,
"delete-record": false,
"execute-entity": true,
"aggregate-records": true
}
}
}
}
Un outil est disponible uniquement si activé globalement et si l’entité autorise les outils DML.
Intégration de RBAC
Chaque opération d’outil DML applique vos règles de contrôle d’accès en fonction du rôle. Le rôle d’un agent détermine quelles entités sont visibles, quelles opérations sont autorisées, quels champs sont inclus et si les stratégies au niveau des lignes s’appliquent.
Si le rôle n'autorise que le droit anonymous de lecture sur Products:
-
describe_entitiesne montre queread_recordsdans les opérations -
create_record,update_recordetdelete_recordne sont pas disponibles - Seuls les champs autorisés pour
anonymousapparaissent dans le schéma
Configurez les rôles dans votre dab-config.json:
{
"entities": {
"Products": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["ProductId", "ProductName", "Price"],
"exclude": ["Cost"]
}
}
]
},
{
"role": "admin",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}
Contenu connexe
- Vue d’ensemble de SQL MCP Server
- Ajout de descriptions sémantiques à SQL MCP Server
- Informations de référence sur la configuration du générateur d’API de données (DAB)
- Configuration MCP au niveau de l’entité
- Configuration MCP du runtime
- Deploy SQL MCP Server sur Azure Container Apps
- Nouveautés du Générateur d’API de données version 2.0