Partager via


Configurer des outils MCP personnalisés pour les procédures stockées

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.

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.

SQL MCP Server expose des tables et des vues par le biais d’outils DML (Generic Data Manipulation Language). Pour les procédures stockées, vous pouvez aller plus loin : définir custom-tool: true sur l’entité afin que la procédure apparaisse dans la liste des outils MCP en tant qu’outil nommé et conçu à usage. Les agents IA le découvrent par nom, consultez sa description et appelez-le directement, sans SQL requis.

Important

Les noms d’outils personnalisés sont dérivés du nom de l’entité, mais convertis en snake_case. Par exemple, une entité nommée GetProductById devient get_product_by_id dans la liste des outils MCP. Utilisez le nom snake_case lors de l’appel de l’outil. Le nom de l’entité PascalCase n’est pas accepté comme nom d’outil.

Le reste de cet article montre comment ajouter, configurer et tester un outil MCP personnalisé soutenu par une procédure stockée.

Prerequisites

  • Générateur d’API de données version 2.0 ou ultérieure
  • Base de données SQL Server avec au moins une procédure stockée
  • Existant dab-config.json avec MCP activé
  • Interface CLI DAB installée

Activer MCP dans votre configuration

Si ce n’est déjà fait, activez MCP dans la section runtime.

dab configure --runtime.mcp.enabled true

Cela ajoute ce qui suit à votre dab-config.json:

{
  "runtime": {
    "mcp": {
      "enabled": true
    }
  }
}

Ajouter la procédure stockée en tant qu’outil personnalisé

Utiliser dab add avec --source.type stored-procedure et --mcp.custom-tool true.

dab add GetProductById \
  --source dbo.get_product_by_id \
  --source.type "stored-procedure" \
  --permissions "anonymous:execute" \
  --mcp.custom-tool true

Cela produit l’entité suivante dans dab-config.json:

{
  "entities": {
    "GetProductById": {
      "source": {
        "object": "dbo.get_product_by_id",
        "type": "stored-procedure"
      },
      "graphql": {
        "enabled": true,
        "operation": "mutation",
        "type": {
          "singular": "GetProductById",
          "plural": "GetProductByIds"
        }
      },
      "rest": {
        "enabled": true,
        "methods": [
          "post"
        ]
      },
      "permissions": [
        {
          "role": "anonymous",
          "actions": [
            {
              "action": "execute"
            }
          ]
        }
      ],
      "mcp": {
        "custom-tool": true
      }
    }
  }
}

Important

La custom-tool propriété est valide uniquement sur les entités de procédure stockée. Le placement de cette entité sur une table ou une vue entraîne une erreur de configuration au démarrage du système.

Ajouter une description pour améliorer la précision de l’agent

Sans description, les agents ne voient que le nom GetProductByIdtechnique . Avec une description, ils comprennent ce qu’il fait et quand l’utiliser.

dab update GetProductById \
  --description "Returns full product details including pricing and inventory for a given product ID"
{
  "entities": {
    "GetProductById": {
      "description": "Returns full product details including pricing and inventory for a given product ID",
      "source": {
        "object": "dbo.get_product_by_id",
        "type": "stored-procedure"
      },
      "fields": [],
      "graphql": {
        "enabled": true,
        "operation": "mutation",
        "type": {
          "singular": "GetProductById",
          "plural": "GetProductByIds"
        }
      },
      "rest": {
        "enabled": true,
        "methods": [
          "post"
        ]
      },
      "permissions": [
        {
          "role": "anonymous",
          "actions": [
            {
              "action": "execute"
            }
          ]
        }
      ],
      "mcp": {
        "custom-tool": true
      }
    }
  }
}

Vérifier que l’outil apparaît dans la liste des outils

Démarrez DAB et appelez le tools/list point de terminaison MCP pour confirmer que l’outil est inscrit.

dab start

Lorsqu’un client MCP appelle tools/list, la réponse inclut votre outil personnalisé en même temps que les outils DML :

{
  "tools": [
    {
      "name": "get_product_by_id",
      "description": "Returns full product details including pricing and inventory for a given product ID",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
  ]
}

Note

Le nom de l’outil utilise snake_case (par exemple, get_product_by_id pour l’entité GetProductById ). Actuellement, le inputSchema renvoie vide properties. Les agents s’appuient sur la description de l’outil et describe_entities pour déterminer les paramètres appropriés.

Configurer plusieurs outils personnalisés

Vous pouvez inscrire plusieurs procédures stockées en tant qu’outils personnalisés dans la même configuration.

dab add SearchProducts \
  --source dbo.search_products \
  --source.type "stored-procedure" \
  --permissions "anonymous:execute" \
  --mcp.custom-tool true \
  --description "Full-text search across product names and descriptions"

dab add GetOrderSummary \
  --source dbo.get_order_summary \
  --source.type "stored-procedure" \
  --permissions "authenticated:execute" \
  --mcp.custom-tool true \
  --description "Returns order totals and line item counts for a given customer"

Contrôler quels rôles peuvent appeler l’outil

Les outils personnalisés respectent le même contrôle d’accès en fonction du rôle (RBAC) que toutes les autres entités DAB. Définissez l’entité permissions pour restreindre les rôles pouvant exécuter la procédure.

{
  "entities": {
    "GetOrderSummary": {
      "source": {
        "object": "dbo.get_order_summary",
        "type": "stored-procedure"
      },
      "graphql": {
        "enabled": true,
        "operation": "mutation",
        "type": {
          "singular": "GetOrderSummary",
          "plural": "GetOrderSummarys"
        }
      },
      "rest": {
        "enabled": true,
        "methods": [
          "post"
        ]
      },
      "permissions": [
        {
          "role": "authenticated",
          "actions": [
            {
              "action": "execute"
            }
          ]
        }
      ],
      "mcp": {
        "custom-tool": true
      }
    }
  }
}

Lorsqu’un agent appelle avec le rôle anonymous, get_order_summary ne s'affiche pas dans tools/list et toute tentative directe de tools/call génère une erreur de permission.

Désactiver un outil personnalisé sans le supprimer

Définissez custom-tool sur false pour masquer l’outil aux agents sans supprimer l’entité.

dab update GetProductById \
  --mcp.custom-tool false

L’entité reste dans la configuration et vous pouvez la réactiver ultérieurement en définissant --mcp.custom-tool true.