Herramientas del lenguaje de manipulación de datos (DML) en SQL MCP Server

Importante

Sql Model Context Protocol (MCP) Server está disponible en Data API Builder versión 1.7 y posteriores.

Sql Model Context Protocol (MCP) Server expone siete herramientas de lenguaje de manipulación de datos (DML) a agentes de IA. Estas herramientas proporcionan una interfaz tipada para operaciones CRUD en bases de datos: creación, lectura, actualización y eliminación de registros, agregación de datos, además de la ejecución de procedimientos almacenados. Todas las herramientas respetan el control de acceso basado en rol (RBAC), los permisos de entidad y las directivas definidas en la configuración.

¿Qué son las herramientas DML?

Las herramientas DML (lenguaje de manipulación de datos) controlan las operaciones de datos: crear, leer, actualizar y eliminar registros, agregar datos, además de ejecutar procedimientos almacenados. A diferencia de DDL (lenguaje de definición de datos) que modifica el esquema, DML funciona exclusivamente en el plano de datos de las tablas y vistas existentes.

Las siete herramientas DML son:

  • describe_entities - Detecta entidades y operaciones disponibles.
  • create_record - Inserta nuevas filas.
  • read_records - Consultas de tablas y vistas
  • update_record - Modifica las filas existentes.
  • delete_record - Elimina las filas.
  • execute_entity - Ejecuta procedimientos almacenados
  • aggregate_records - Realiza consultas de agregación

Nota:

La funcionalidad de SQL MCP Server 2.0 descrita en esta sección se encuentra actualmente en versión preliminar y podría cambiar antes de la disponibilidad general. Para obtener más información, consulte Novedades de la versión 2.0.

Cuando las herramientas DML están habilitadas globalmente y para una entidad, SQL MCP Server las expone a través del protocolo MCP. Los agentes nunca interactúan directamente con el esquema de la base de datos: funcionan a través de la capa de abstracción del generador de data API.

Herramientas

list_tools respuesta

Cuando un agente llama a list_tools, SQL MCP Server devuelve:

{
  "tools": [
    { "name": "describe_entities" },
    { "name": "create_record" },
    { "name": "read_records" },
    { "name": "update_record" },
    { "name": "delete_record" },
    { "name": "execute_entity" },
    { "name": "aggregate_records" }
  ]
}

describe_entities

Devuelve las entidades disponibles para el rol actual. Cada entrada incluye nombres de campo, descripciones y operaciones permitidas. Esta herramienta no consulta la base de datos. En su lugar, lee de la configuración en memoria creada a partir del archivo de configuración.

Importante

La fields información de describe_entities se deriva de los fields datos proporcionados en la configuración. Dado que los metadatos de campo son opcionales, si no lo incluye, los agentes solo ven nombres de entidad con una matriz vacía fields . Se recomienda incluir nombres de campo y descripciones de campos en la configuración. Estos metadatos proporcionan a los agentes más contexto para generar consultas y actualizaciones precisas. Obtenga más información sobre las descripciones de campos aquí.

Nota:

La respuesta incluye los campos name y description, así como los valores de la configuración. Los tipos de datos y los indicadores clave principales no se incluyen en la respuesta actual. Los parámetros de procedimiento almacenado tampoco se muestran. Los agentes se basan en descripciones de entidades y campos (junto con comentarios de errores) para determinar el uso correcto.

Parámetros

Parámetro Tipo Obligatorio Descripción
nameOnly boolean No Cuando true, devuelve una lista ligera de nombres de entidad y descripciones sin metadatos de campo.
entities Matriz de cadenas No Limita la respuesta a las entidades especificadas. Cuando se omite, se devuelven todas las entidades habilitadas para MCP.

Solicitud de ejemplo

{
  "method": "tools/call",
  "params": {
    "name": "describe_entities",
    "arguments": {
      "entities": ["Products"]
    }
  }
}

Respuesta de ejemplo

{
  "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"
      ]
    }
  ]
}

Nota:

Las opciones de entidad usadas por cualquier herramienta CRUD y ejecutante de DML proceden directamente de describe_entities. La descripción semántica interna adjunta a cada herramienta aplica este flujo de dos pasos.

crear_registro

Crea una nueva fila en una tabla. Requiere permiso de creación en la entidad para el rol actual. La herramienta valida la entrada en el esquema de entidad, aplica permisos de nivel de campo, aplica directivas de creación y devuelve el registro creado con los valores generados.

Parámetros

Parámetro Tipo Obligatorio Descripción
entity cuerda / cadena Nombre de entidad en el que se va a crear un registro.
data objeto Pares clave-valor de nombres de campo y sus valores para el nuevo registro.

read_records

Consulta una tabla o vista. Admite el filtrado, la ordenación, la paginación y la selección de campos. La herramienta compila SQL determinista a partir de parámetros estructurados, aplica permisos de lectura y proyecciones de campo y aplica directivas de seguridad de nivel de fila.

Parámetros

Parámetro Tipo Obligatorio Descripción
entity cuerda / cadena Nombre de entidad del que se va a leer.
select cuerda / cadena No Lista separada por comas de nombres de campo que se van a devolver (por ejemplo, "id,title,price").
filter cuerda / cadena No Expresión de filtro de estilo OData (por ejemplo, "Price gt 10 and Category eq 'Books'").
orderby Matriz de cadenas No Ordenar expresiones. Cada elemento es un nombre de campo con dirección opcional (por ejemplo, ["Price desc", "Name asc"]).
first entero No Número máximo de registros que se van a devolver.
after cuerda / cadena No Cursor de continuación de una respuesta anterior para la paginación.

Advertencia

El orderby parámetro debe ser una matriz de cadenas, no una sola cadena. Pasar un valor de cadena hace que UnexpectedError. Use ["Name asc"] en lugar de "Name asc".

Respuesta de paginación

Cuando haya más resultados disponibles, la respuesta incluye un after cursor. Pase este valor como parámetro after en la siguiente solicitud para capturar la página siguiente.

{
  "value": [ ... ],
  "after": "W3siRW50aXR5TmFtZ..."
}

La presencia del after campo indica que existen más páginas. Cuando after está ausente, ha llegado a la última página.

Importante

Los resultados de read_records se almacenan automáticamente en caché mediante el sistema de almacenamiento en caché de Data API Builder. Puede configurar el período de vida (TTL) de caché global o por entidad para reducir la carga de la base de datos.

Operaciones JOIN

La read_records herramienta está diseñada para una sola tabla o vista. Como resultado, las operaciones JOIN no se admiten en esta herramienta. Este diseño ayuda a aislar la responsabilidad, mejorar el rendimiento y limitar el impacto en la ventana de contexto de la sesión.

Sin embargo, las operaciones JOIN no son un caso atípico, y Data API Builder (DAB) ya admite consultas sofisticadas a través del punto de conexión GraphQL. Para consultas más complejas, se recomienda usar una vista en lugar de una tabla. También puede usar la execute_entity herramienta para ejecutar procedimientos almacenados para encapsular consultas con parámetros.

actualizar_registro

Modifica una fila existente. Requiere que se actualicen los campos y la clave principal. La herramienta valida que la clave principal existe, aplica los permisos y directivas de actualización, y solo actualiza los campos que el rol actual puede modificar.

Parámetros

Parámetro Tipo Obligatorio Descripción
entity cuerda / cadena Nombre de entidad que se va a actualizar.
keys objeto Pares clave-valor que identifican el registro (por ejemplo, {"id": 42}).
fields objeto Pares clave-valor de nombres de campo y nuevos valores.

eliminar_registro

Quita una fila existente. Requiere la clave principal. La herramienta valida que la clave principal existe, aplica permisos y directivas de eliminación y realiza una eliminación segura con compatibilidad con transacciones.

Parámetros

Parámetro Tipo Obligatorio Descripción
entity cuerda / cadena Nombre de entidad del que se va a eliminar.
keys objeto Pares clave-valor que identifican el registro (por ejemplo, {"id": 42}).

Nota:

Algunos escenarios de producción deshabilitan esta herramienta globalmente para restringir ampliamente los modelos. Esta opción es suya y merece la pena recordar que los permisos de nivel de entidad siguen siendo la manera más importante de controlar el acceso. Incluso con delete-record habilitado, si un rol no tiene permiso de eliminación en una entidad, ese rol no puede usar esta herramienta para esa entidad.

execute_entity

Ejecuta un procedimiento almacenado. Admite parámetros de entrada y resultados de salida. La herramienta valida los parámetros de entrada en la firma del procedimiento, aplica permisos de ejecución y pasa parámetros de forma segura.

Parámetros

Parámetro Tipo Obligatorio Descripción
entity cuerda / cadena Nombre de la entidad del procedimiento almacenado.
parameters objeto No Pares clave-valor de nombres de parámetros de entrada y sus valores.

agregar_registros

Realiza consultas de agregación en tablas y vistas. Admite funciones de agregado comunes, como count, sum, average, minimum y maximum. La herramienta compila SQL determinista a partir de parámetros estructurados, aplica permisos de lectura y proyecciones de campo y aplica directivas de seguridad de nivel de fila.

Parámetros

Parámetro Tipo Obligatorio Descripción
entity cuerda / cadena Nombre de entidad para agregar.
function cuerda / cadena Función de agregado: count, sum, avg, mino max.
field cuerda / cadena Campo que se va a agregar. Use "*" para count.
filter cuerda / cadena No Filtro de estilo OData aplicado antes de la agregación.
distinct boolean No Cuando true, quita valores duplicados antes de agregar.
groupby Matriz de cadenas No Nombres de campo para agrupar los resultados por (por ejemplo, ["Category", "Status"]).
having objeto No Filtra los grupos por valor agregado. Usa operadores: eq, neq, gt, gtelt, , ltein.
orderby Matriz de cadenas No Ordenar expresiones para los resultados agrupados (por ejemplo, ["count desc"]).
first entero No Número máximo de resultados agrupados que se van a devolver.
after cuerda / cadena No Cursor de continuación para paginar resultados agrupados.

Ejemplo: recuento con groupby y tener

{
  "method": "tools/call",
  "params": {
    "name": "aggregate_records",
    "arguments": {
      "entity": "Todo",
      "function": "count",
      "field": "*",
      "groupby": ["UserId"],
      "having": { "gt": 2 }
    }
  }
}

La aggregate-records herramienta se puede configurar como un valor booleano o como un objeto con más opciones:

{
  "runtime": {
    "mcp": {
      "dml-tools": {
        "aggregate-records": {
          "enabled": true,
          "query-timeout": 30
        }
      }
    }
  }
}

La query-timeout propiedad especifica el tiempo máximo de ejecución en segundos (intervalo: 1–600). Esta configuración ayuda a evitar que las consultas de agregación de ejecución prolongada consuman recursos excesivos.

Configuración en tiempo de ejecución

Configure las herramientas de DML globalmente en la sección en tiempo de ejecución de 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
      }
    }
  }
}

Cada parámetro de la herramienta en runtime.mcp.dml-tools acepta true o false. La aggregate-records herramienta también admite un formato de objeto con enabled y 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
        }
      }
    }
  }
}

Para habilitar o deshabilitar todas las herramientas DML a la vez, establezca el valor de "dml-tools" en true o false.

Uso de la CLI

Establezca las propiedades individualmente mediante la CLI del Generador de API de datos:

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

Deshabilitación de herramientas

Al deshabilitar una herramienta a nivel de ejecución, nunca aparece a los agentes, independientemente de los permisos de entidad o la configuración de roles. Esta configuración es útil cuando se necesitan límites operativos estrictos.

Escenarios frecuentes

  • Deshabilitar delete-record para evitar la pérdida de datos en producción
  • Deshabilitar create-record para puntos de conexión de generación de informes de solo lectura
  • Deshabilitar execute-entity cuando no se usan procedimientos almacenados
  • Deshabilitar aggregate-records cuando no se necesitan consultas de agregación

Cuando una herramienta está deshabilitada globalmente, la herramienta está oculta de la list_tools respuesta y no se puede invocar.

Configuración de entidad

Las entidades participan automáticamente en MCP a menos que las restrinja explícitamente. La mcp propiedad de una entidad controla su participación en MCP. Use el formato de objeto para el control explícito.

Formato de objeto

{
  "entities": {
    "Products": {
      "mcp": {
        "dml-tools": true
      }
    },
    "SensitiveData": {
      "mcp": {
        "dml-tools": false
      }
    }
  }
}

Si no especifica mcp en una entidad, las herramientas DML se habilitan de forma predeterminada cuando MCP está habilitado globalmente.

Herramientas personalizadas para procedimientos almacenados

Para las entidades de procedimiento almacenado, use la custom-tool propiedad para registrar el procedimiento como una herramienta MCP con nombre:

{
  "entities": {
    "GetBookById": {
      "source": {
        "type": "stored-procedure",
        "object": "dbo.get_book_by_id"
      },
      "mcp": {
        "custom-tool": true
      }
    }
  }
}

Importante

La custom-tool propiedad solo es válida para las entidades de procedimiento almacenado. Si se establece en una tabla o una entidad de vista, se produce un error de configuración.

Ámbito del control por herramienta

Los interruptores por herramienta solo se configuran en el nivel global de tiempo de ejecución en runtime.mcp.dml-tools.

En el nivel de entidad, mcp es una puerta booleana o un objeto con dml-tools propiedades y 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
      }
    }
  }
}

Una herramienta solo está disponible si está habilitada globalmente y la entidad permite herramientas DML.

Integración de RBAC

Cada operación de herramienta de DML aplica las reglas de control de acceso basadas en roles. El rol de un agente determina qué entidades están visibles, qué operaciones se permiten, qué campos se incluyen y si se aplican directivas de nivel de fila.

Si el rol solo permite el anonymous permiso de lectura en Products:

  • describe_entities solo se muestra read_records en las operaciones
  • create_record, update_recordy delete_record no están disponibles
  • Solo los campos permitidos para anonymous aparecen en el esquema

Configura roles en dab-config.json:

{
  "entities": {
    "Products": {
      "permissions": [
        {
          "role": "anonymous",
          "actions": [
            {
              "action": "read",
              "fields": {
                "include": ["ProductId", "ProductName", "Price"],
                "exclude": ["Cost"]
              }
            }
          ]
        },
        {
          "role": "admin",
          "actions": [
            {
              "action": "*"
            }
          ]
        }
      ]
    }
  }
}