Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Il server MCP (SQL Model Context Protocol) è disponibile in Generatore API dati versione 1.7 e successive.
Il server MCP (SQL Model Context Protocol) espone sette strumenti DML (Data Manipulation Language) agli agenti di intelligenza artificiale. Questi strumenti forniscono una superficie CRUD tipizzata per le operazioni di database, ovvero la creazione, la lettura, l'aggiornamento e l'eliminazione di record, l'aggregazione dei dati e l'esecuzione di stored procedure. Tutti gli strumenti rispettano il controllo degli accessi in base al ruolo, le autorizzazioni delle entità e i criteri definiti nella configurazione.
Che cosa sono gli strumenti DML?
Gli strumenti DML (Data Manipulation Language) gestiscono le operazioni dei dati: creazione, lettura, aggiornamento ed eliminazione di record, aggregazione dei dati e esecuzione di stored procedure. A differenza di DDL (Data Definition Language) che modifica lo schema, DML funziona esclusivamente sul piano dati in tabelle e viste esistenti.
I sette strumenti DML sono:
-
describe_entities- Individua le entità e le operazioni disponibili -
create_record- Inserisce nuove righe -
read_records- Interroga tabelle e viste -
update_record- Modifica le righe esistenti -
delete_record- Rimuove le righe -
execute_entity- Esegue procedure memorizzate -
aggregate_records- Esegue query di aggregazione
Annotazioni
La funzionalità SQL MCP Server 2.0 descritta in questa sezione è attualmente in anteprima e potrebbe cambiare prima della disponibilità generale. Per altre informazioni, vedere Novità della versione 2.0.
Quando gli strumenti DML sono abilitati a livello globale e per un'entità, SQL MCP Server li espone tramite il protocollo MCP. Gli agenti non interagiscono mai direttamente con lo schema del database. Funzionano tramite il livello di astrazione del generatore di API dati.
Strumenti
list_tools risposta
Quando un agente chiama list_tools, SQL MCP Server restituisce:
{
"tools": [
{ "name": "describe_entities" },
{ "name": "create_record" },
{ "name": "read_records" },
{ "name": "update_record" },
{ "name": "delete_record" },
{ "name": "execute_entity" },
{ "name": "aggregate_records" }
]
}
descrivi_entità
Restituisce le entità disponibili per il ruolo corrente. Ogni voce include i nomi di campo, le descrizioni e le operazioni consentite. Questo strumento non esegue query sul database. Invece, legge dalla configurazione in memoria creata dal file di configurazione.
Importante
Le fields informazioni in describe_entities derivano dai fields dati forniti nella configurazione. Poiché i metadati dei campi sono facoltativi, se non lo si include, gli agenti visualizzano solo i nomi di entità con una matrice vuota fields . È consigliabile includere sia i nomi dei campi che le descrizioni dei campi nella configurazione. Questi metadati offrono agli agenti più contesto per generare query e aggiornamenti accurati. Altre informazioni sulle descrizioni dei campi sono disponibili qui.
Annotazioni
La risposta include i valori dei campi name e description dalla tua configurazione. I tipi di dati e gli indicatori di chiave primaria non sono inclusi nella risposta corrente. Anche i parametri della stored procedure non sono elencati. Gli agenti si basano sulle descrizioni delle entità e dei campi, insieme al feedback degli errori, per determinare l'utilizzo corretto.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
nameOnly |
boolean | No | Quando true, restituisce un elenco leggero di nomi e descrizioni di entità senza metadati di campo. |
entities |
matrice di stringhe | No | Limita la risposta alle entità specificate. Se omesso, vengono restituite tutte le entità abilitate per MCP. |
Richiesta di esempio
{
"method": "tools/call",
"params": {
"name": "describe_entities",
"arguments": {
"entities": ["Products"]
}
}
}
Risposta di esempio
{
"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"
]
}
]
}
Annotazioni
Le opzioni di entità usate da uno qualsiasi degli strumenti CRUD o degli strumenti di esecuzione DML derivano direttamente da describe_entities. La descrizione semantica interna associata a ogni strumento applica questo flusso in due passaggi.
create_record
Crea una nuova riga in una tabella. È richiesta l'autorizzazione di creazione sull'entità per il ruolo corrente. Lo strumento convalida l'input sullo schema dell'entità, applica le autorizzazioni a livello di campo, applica i criteri di creazione e restituisce il record creato con tutti i valori generati.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
entity |
string | Sì | Nome dell'entità in cui creare un record. |
data |
oggetto | Sì | Coppie chiave-valore di nomi e valori di campo per il nuovo record. |
read_records
Esegue una query su una tabella o una vista. Supporta il filtro, l'ordinamento, la paginazione e la selezione dei campi. Lo strumento compila SQL deterministico da parametri strutturati, applica autorizzazioni di lettura e proiezioni di campo e applica criteri di sicurezza a livello di riga.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
entity |
string | Sì | Nome dell'entità da cui leggere. |
select |
string | No | Elenco delimitato da virgole di nomi di campo da restituire , ad esempio "id,title,price". |
filter |
string | No | Espressione di filtro in stile OData , ad esempio "Price gt 10 and Category eq 'Books'". |
orderby |
matrice di stringhe | No | Ordinare le espressioni. Ogni elemento è un nome di campo con direzione facoltativa , ad esempio ["Price desc", "Name asc"]. |
first |
numero intero | No | Numero massimo di record da restituire. |
after |
string | No | Cursore di continuazione da una risposta precedente per la paginazione. |
Avviso
Il orderby parametro deve essere una matrice di stringhe, non una singola stringa. Se si passa un valore stringa, viene generato un oggetto UnexpectedError. Usare ["Name asc"] anziché "Name asc".
Risposta di paginazione
Quando sono disponibili più risultati, la risposta include un after cursore. Passare questo valore come after parametro nella richiesta successiva per recuperare la pagina successiva.
{
"value": [ ... ],
"after": "W3siRW50aXR5TmFtZ..."
}
La presenza del after campo indica che esistono più pagine. Quando after è assente, è stata raggiunta l'ultima pagina.
Importante
I risultati di read_records vengono memorizzati automaticamente nella cache usando il sistema di memorizzazione nella cache di Data API Builder. È possibile configurare la durata (TTL) della cache a livello globale o per entità per ridurre il carico del database.
Operazioni JOIN
Lo read_records strumento è progettato per una singola tabella o vista. Di conseguenza, le operazioni JOIN non sono supportate in questo strumento. Questa progettazione consente di isolare responsabilità, migliorare le prestazioni e limitare l'impatto sulla finestra di contesto della sessione.
Tuttavia, le operazioni JOIN non sono un caso perimetrale e Il generatore di API dati (DAB) supporta già query sofisticate tramite l'endpoint GraphQL. Per query più complesse, è consigliabile usare una vista anziché una tabella. È anche possibile usare il execute_entity strumento per eseguire stored procedure per incapsulare query con parametri.
update_record
Modifica una riga esistente. Richiede l'aggiornamento della chiave primaria e dei campi. Lo strumento convalida l'esistenza della chiave primaria, applica le autorizzazioni di aggiornamento e i criteri e aggiorna solo i campi che il ruolo corrente può modificare.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
entity |
string | Sì | Nome dell'entità da aggiornare. |
keys |
oggetto | Sì | Coppie chiave-valore che identificano il record , ad esempio {"id": 42}. |
fields |
oggetto | Sì | Coppie di chiavi-valore per i nomi dei campi e i nuovi valori. |
delete_record
Rimuove una riga esistente. Richiede la chiave primaria. Lo strumento convalida l'esistenza della chiave primaria, applica autorizzazioni e criteri di eliminazione ed esegue l'eliminazione sicura con il supporto delle transazioni.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
entity |
string | Sì | Nome dell'entità da cui eliminare. |
keys |
oggetto | Sì | Coppie chiave-valore che identificano il record , ad esempio {"id": 42}. |
Annotazioni
Alcuni scenari di produzione disabilitano questo strumento a livello globale per vincolare i modelli su larga scala. Questa scelta spetta all'utente e vale la pena ricordare che le autorizzazioni a livello di entità rimangono il modo più importante per controllare l'accesso. Anche con delete-record abilitato, se un ruolo non dispone dell'autorizzazione di eliminazione per un'entità, tale ruolo non può usare questo strumento per tale entità.
execute_entity
Esegue una procedura memorizzata. Supporta parametri di input e risultati di output. Lo strumento convalida i parametri di input rispetto alla firma della procedura, applica le autorizzazioni di esecuzione e passa i parametri in modo sicuro.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
entity |
string | Sì | Nome dell'entità stored-procedure. |
parameters |
oggetto | No | Coppie chiave-valore di nomi e valori dei parametri di input. |
aggregate_records
Esegue query di aggregazione su tabelle e viste. Supporta funzioni di aggregazione comuni, ad esempio count, sum, average, minimum e maximum. Lo strumento compila SQL deterministico da parametri strutturati, applica autorizzazioni di lettura e proiezioni di campo e applica criteri di sicurezza a livello di riga.
Parametri
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
entity |
string | Sì | Nome dell'entità da aggregare. |
function |
string | Sì | Funzione di aggregazione: count, sum, avgmin, o max. |
field |
string | Sì | Campo da aggregare. Usare "*" per count. |
filter |
string | No | Filtro in stile OData applicato prima dell'aggregazione. |
distinct |
boolean | No | Quando true, rimuove i valori duplicati prima dell'aggregazione. |
groupby |
matrice di stringhe | No | Nomi di campo per raggruppare i risultati (ad esempio, ["Category", "Status"]). |
having |
oggetto | No | Filtra i gruppi in base al valore aggregato. Usa gli operatori: eq, neq, gtgte, lt, , lte, . in |
orderby |
matrice di stringhe | No | Ordinare le espressioni per i risultati raggruppati , ad esempio ["count desc"]. |
first |
numero intero | No | Numero massimo di risultati raggruppati da restituire. |
after |
string | No | Cursore di continuazione per la paginazione dei risultati raggruppati. |
Esempio: conteggio con groupby e having
{
"method": "tools/call",
"params": {
"name": "aggregate_records",
"arguments": {
"entity": "Todo",
"function": "count",
"field": "*",
"groupby": ["UserId"],
"having": { "gt": 2 }
}
}
}
Lo aggregate-records strumento può essere configurato come valore booleano o come oggetto con altre impostazioni:
{
"runtime": {
"mcp": {
"dml-tools": {
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
La query-timeout proprietà specifica il tempo di esecuzione massimo in secondi (intervallo: 1-600). Questa impostazione consente di evitare che le query di aggregazione a esecuzione prolungata consumino risorse eccessive.
Configurazione del runtime
Configurare gli strumenti DML a livello globale nella sezione runtime di 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
}
}
}
}
Ogni proprietà dello strumento in runtime.mcp.dml-tools accetta true o false. Lo aggregate-records strumento supporta anche un formato di oggetto con enabled e 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
}
}
}
}
}
Per abilitare o disabilitare tutti gli strumenti DML contemporaneamente, impostare su "dml-tools"true o false.
Uso dell'CLI
Impostare le proprietà singolarmente usando l'interfaccia della riga di comando di Generatore API dati:
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
Disabilitazione degli strumenti
Quando si disabilita uno strumento a livello di runtime, non viene mai visualizzato dagli agenti, indipendentemente dalle autorizzazioni dell'entità o dalla configurazione del ruolo. Questa impostazione è utile quando sono necessari limiti operativi rigorosi.
Scenari comuni
- Disabilitare
delete-recordper evitare la perdita di dati nell'ambiente di produzione - Disabilitare
create-recordper gli endpoint di report di sola lettura - Disabilitare
execute-entityquando le stored procedure non sono utilizzate - Disabilitare
aggregate-recordsquando le query di aggregazione non sono necessarie
Quando uno strumento è disabilitato a livello globale, lo strumento viene nascosto dalla list_tools risposta e non può essere richiamato.
Impostazioni entità
Le entità partecipano automaticamente a MCP, a meno che non venga esplicitamente applicata una restrizione. La proprietà mcp di un'entità ne controlla la partecipazione MCP. Usare il formato dell'oggetto per il controllo esplicito.
Formato oggetto
{
"entities": {
"Products": {
"mcp": {
"dml-tools": true
}
},
"SensitiveData": {
"mcp": {
"dml-tools": false
}
}
}
}
Se non si specifica mcp in un'entità, per impostazione predefinita gli strumenti DML sono abilitati quando MCP è abilitato a livello globale.
Strumenti personalizzati per procedure memorizzate
Per le entità stored procedure, usare la custom-tool proprietà per registrare la routine come strumento MCP denominato:
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
}
}
}
}
Importante
La custom-tool proprietà è valida solo per le entità stored procedure. L'impostazione su una tabella o vista dell'entità genera un errore di configurazione.
Ambito del controllo per strumento
Le opzioni per ogni strumento vengono configurate solo a livello di esecuzione globale in runtime.mcp.dml-tools.
A livello di entità, mcp è una porta booleana o un oggetto con le proprietà dml-tools e 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
}
}
}
}
Uno strumento è disponibile solo se abilitato a livello globale e l'entità consente strumenti DML.
Integrazione RBAC (controllo degli accessi in base al ruolo)
Ogni operazione dello strumento DML applica le regole di controllo degli accessi in base al ruolo. Il ruolo di un agente determina quali entità sono visibili, quali operazioni sono consentite, quali campi sono inclusi e se si applicano criteri a livello di riga.
Se il ruolo consente solo l'autorizzazione anonymous di lettura per Products:
-
describe_entitiesmostraread_recordssolo nelle operazioni -
create_record,update_recordedelete_recordnon sono disponibili - Solo i campi consentiti per
anonymousvengono visualizzati nello schema
Configura i ruoli in dab-config.json:
{
"entities": {
"Products": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["ProductId", "ProductName", "Price"],
"exclude": ["Cost"]
}
}
]
},
{
"role": "admin",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}
Contenuti correlati
- Panoramica di SQL MCP Server
- Aggiunta di descrizioni semantiche al server SQL MCP
- Informazioni di riferimento sulla configurazione di Generatore API dati (DAB)
- Configurazione MCP a livello di entità
- Configurazione MCP runtime
- Deploy SQL MCP Server su Azure Container Apps
- Novità di Data API Builder versione 2.0