Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
MCP-servern (SQL Model Context Protocol) är tillgänglig i Data API Builder version 1.7 och senare.
SQL Model Context Protocol (MCP) Server exponerar sju DML-verktyg (Data Manipulation Language) för AI-agenter. De här verktygen ger en typ av CRUD-yta för databasåtgärder – skapa, läsa, uppdatera och ta bort poster, aggregera data samt köra lagrade procedurer. Alla verktyg respekterar rollbaserad åtkomstkontroll (RBAC), entitetsbehörigheter och principer som definierats i konfigurationen.
Vad är DML-verktyg?
DML-verktyg (Data Manipulation Language) hanterar dataåtgärder: skapa, läsa, uppdatera och ta bort poster, aggregera data samt köra lagrade procedurer. Till skillnad från DDL (Data Definition Language) som ändrar schemat, fungerar DML uteslutande på dataplanet i befintliga tabeller och vyer.
De sju DML-verktygen är:
-
describe_entities– Identifierar tillgängliga entiteter och åtgärder -
create_record– Infogar nya rader -
read_records– Ställer frågor till tabeller och vyer -
update_record– Ändrar befintliga rader -
delete_record– Tar bort rader -
execute_entity– Kör lagrade procedurer -
aggregate_records– Utför aggregeringsfrågor
Anmärkning
Funktionen SQL MCP Server 2.0 som beskrivs i det här avsnittet är för närvarande i förhandsversion och kan komma att ändras innan den allmänna tillgängligheten. Mer information finns i Nyheter i version 2.0.
När DML-verktyg aktiveras globalt och för en entitet exponerar SQL MCP Server dem via MCP-protokollet. Agenter interagerar aldrig direkt med ditt databasschema – de fungerar via abstraktionsskiktet för Data API Builder.
Verktygen
list_tools för svar
När en agent anropar list_toolsreturnerar SQL MCP Server:
{
"tools": [
{ "name": "describe_entities" },
{ "name": "create_record" },
{ "name": "read_records" },
{ "name": "update_record" },
{ "name": "delete_record" },
{ "name": "execute_entity" },
{ "name": "aggregate_records" }
]
}
describe_entities
Returnerar de entiteter som är tillgängliga för den aktuella rollen. Varje post innehåller fältnamn, beskrivningar och tillåtna åtgärder. Det här verktyget frågar inte databasen. I stället läser den från den minnesinterna konfigurationen som skapats från konfigurationsfilen.
Viktigt!
Informationen fields i describe_entities härleds från de fields data som du anger i konfigurationen. Eftersom fältmetadata är valfria ser agenter endast entitetsnamn med en tom fields matris om du inte inkluderar dem. Det är en bra idé att inkludera både fältnamn och fältbeskrivningar i konfigurationen. Dessa metadata ger agenter mer kontext för att generera korrekta frågor och uppdateringar. Läs mer om fältbeskrivningar här.
Anmärkning
Svaret innehåller fält name och description värden från konfigurationen. Datatyper och primära nyckelindikatorer ingår inte i det aktuella svaret. Parametrar för lagrad procedur visas inte heller. Agenter förlitar sig på entitets- och fältbeskrivningar , tillsammans med felfeedback, för att fastställa korrekt användning.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
nameOnly |
booleskt | No | När truereturnerar en lätt lista med entitetsnamn och beskrivningar utan fältmetadata. |
entities |
strängmatris | No | Begränsar svaret till de angivna entiteterna. När de utelämnas returneras alla MCP-aktiverade entiteter. |
Exempel på begäran
{
"method": "tools/call",
"params": {
"name": "describe_entities",
"arguments": {
"entities": ["Products"]
}
}
}
Exempelsvar
{
"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"
]
}
]
}
Anmärkning
Entitetsalternativen som används av någon av CRUD:erna och kör DML-verktygen kommer direkt från describe_entities. Den interna semantiska beskrivningen som är kopplad till varje verktyg framtvingar det här tvåstegsflödet.
create_record
Skapar en ny rad i en tabell. Behörighet att skapa på entiteten krävs för den nuvarande rollen. Verktyget validerar indata mot entitetsschemat, tillämpar behörigheter på fältnivå, tillämpar skapa principer och returnerar den skapade posten med alla genererade värden.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
entity |
snöre | Ja | Namnet på den entitet där en post ska skapas. |
data |
objekt | Ja | Nyckel/värde-par med fältnamn och värden för den nya posten. |
read_records
Utför en fråga på en tabell eller vy. Stöder filtrering, sortering, sidnumrering och fältval. Verktyget skapar deterministisk SQL från strukturerade parametrar, tillämpar läsbehörigheter och fältprojektioner och tillämpar säkerhetsprinciper på radnivå.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
entity |
snöre | Ja | Entitetsnamnet som ska läsas från. |
select |
snöre | No | Kommaavgränsad lista över fältnamn som ska returneras (till exempel "id,title,price"). |
filter |
snöre | No | Filteruttryck i OData-stil (till exempel "Price gt 10 and Category eq 'Books'"). |
orderby |
strängmatris | No | Sortera uttryck. Varje element är ett fältnamn med valfri riktning (till exempel ["Price desc", "Name asc"]). |
first |
integer | No | Maximalt antal poster som ska returneras. |
after |
snöre | No | Fortsättningsmarkör från ett tidigare svar för paginering. |
Varning
Parametern orderby måste vara en matris med strängar, inte en enda sträng. Om du överför ett strängvärde får du en UnexpectedError. Använd ["Name asc"] i stället för "Name asc".
Paginering-svar
När fler resultat är tillgängliga innehåller svaret en after markör. Skicka det här värdet som after parameter i nästa begäran för att hämta nästa sida.
{
"value": [ ... ],
"after": "W3siRW50aXR5TmFtZ..."
}
Fältets närvaro anger att after det finns fler sidor. När after är frånvarande har du nått den sista sidan.
Viktigt!
Resultat från read_records cachelagras automatiskt med hjälp av Data API Builders cachelagringssystem. Du kan konfigurera TTL (time to live) för cachen globalt eller per entitet för att minska databasbelastningen.
JOIN-åtgärder
Verktyget read_records är utformat för en enda tabell eller vy. Därför stöds inte JOIN-åtgärder i det här verktyget. Den här designen hjälper till att isolera ansvar, förbättra prestanda och begränsa effekten på sessionens kontextfönster.
Join-åtgärder är dock inte ett gränsfall, och Data API Builder (DAB) stöder redan avancerade frågor via GraphQL-slutpunkten. För mer komplexa frågor rekommenderar vi att du använder en vy i stället för en tabell. Du kan också använda execute_entity verktyget för att köra lagrade procedurer för att kapsla in parametriserade frågor.
update_record
Ändrar en befintlig rad. Kräver att primärnyckeln och fälten uppdateras. Verktyget verifierar att den primära nyckeln finns, framtvingar uppdateringsbehörigheter och principer och endast uppdaterar fält som den aktuella rollen kan ändra.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
entity |
snöre | Ja | Entitetsnamnet som ska uppdateras. |
keys |
objekt | Ja | Nyckel/värde-par som identifierar posten (till exempel {"id": 42}). |
fields |
objekt | Ja | Nyckel/värde-par med fältnamn och nya värden. |
delete_record
Tar bort en befintlig rad. Kräver en primärnyckel. Verktyget verifierar att den primära nyckeln finns, framtvingar borttagningsbehörigheter och principer och utför säker borttagning med transaktionsstöd.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
entity |
snöre | Ja | Entitetsnamnet som du vill ta bort från. |
keys |
objekt | Ja | Nyckel/värde-par som identifierar posten (till exempel {"id": 42}). |
Anmärkning
Vissa produktionsscenarier inaktiverar det här verktyget globalt för att i stort sett begränsa modeller. Det här valet är upp till dig och det är värt att komma ihåg att behörigheter på entitetsnivå fortfarande är det viktigaste sättet att kontrollera åtkomsten. Även med delete-record aktiverad, om en roll inte har borttagningsbehörighet för en entitet, kan den rollen inte använda det här verktyget för den entiteten.
execute_entity
Kör en lagrad procedur. Stöder indataparametrar och utdataresultat. Verktyget validerar indataparametrar mot procedurens signatur, framtvingar körningsbehörigheter och skickar parametrar på ett säkert sätt.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
entity |
snöre | Ja | Namnet på entiteten stored-procedure. |
parameters |
objekt | No | Nyckel-värdepar av indataparameternamn och dess värden. |
samla_poster
Utför aggregeringsfrågor i tabeller och vyer. Har stöd för vanliga mängdfunktioner som antal, summa, medelvärde, minimum och maximum. Verktyget skapar deterministisk SQL från strukturerade parametrar, tillämpar läsbehörigheter och fältprojektioner och tillämpar säkerhetsprinciper på radnivå.
Parameters
| Parameter | Type | Obligatoriskt | Beskrivning |
|---|---|---|---|
entity |
snöre | Ja | Entitetsnamnet som ska aggregeras. |
function |
snöre | Ja | Aggregeringsfunktionen: count, sum, avg, mineller max. |
field |
snöre | Ja | Fältet som ska aggregeras. Använd "*" för count. |
filter |
snöre | No | OData-stilsfilter som används före aggregeringen. |
distinct |
booleskt | No | När true tar bort dubblettvärden före aggregering. |
groupby |
strängmatris | No | Fältnamn att gruppera resultat efter (till exempel ["Category", "Status"]). |
having |
objekt | No | Filtrerar grupper efter aggregeringsvärde. Använder operatorer: eq, neq, gt, gte, lt, lte, in. |
orderby |
strängmatris | No | Sortera uttryck för grupperade resultat (till exempel ["count desc"]). |
first |
integer | No | Maximalt antal grupperade resultat som ska returneras. |
after |
snöre | No | Fortsättningsmarkör för sidnumrering av grupperade resultat. |
Exempel: räkna med groupby och ha
{
"method": "tools/call",
"params": {
"name": "aggregate_records",
"arguments": {
"entity": "Todo",
"function": "count",
"field": "*",
"groupby": ["UserId"],
"having": { "gt": 2 }
}
}
}
Verktyget aggregate-records kan konfigureras som ett booleskt objekt eller som ett objekt med fler inställningar:
{
"runtime": {
"mcp": {
"dml-tools": {
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
Egenskapen query-timeout anger den maximala körningstiden i sekunder (intervall: 1–600). Den här inställningen hjälper till att förhindra att långvariga aggregeringsfrågor förbrukar överdrivna resurser.
Körningskonfiguration
Konfigurera DML-verktyg globalt i körningsavsnittet i :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
}
}
}
}
Varje verktygsegenskap under runtime.mcp.dml-tools accepterar true eller false. Verktyget aggregate-records stöder också ett objektformat med enabled och 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
}
}
}
}
}
Om du vill aktivera eller inaktivera alla DML-verktyg samtidigt anger du "dml-tools" till true eller false.
Använda CLI
Ange egenskaper individuellt med hjälp av DATA API-builder CLI:
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
Inaktivera verktyg
När du inaktiverar ett verktyg på körningsnivå visas det aldrig för agenter, oavsett entitetsbehörighet eller rollkonfiguration. Den här inställningen är användbar när du behöver strikta driftsgränser.
Vanliga scenarier
- Inaktivera
delete-recordför att förhindra dataförlust i produktion - Inaktivera
create-recordför skrivskyddade rapportslutpunkter - Inaktivera
execute-entitynär lagrade procedurer inte används - Inaktivera
aggregate-recordsnär aggregeringsfrågor inte behövs
När ett verktyg är inaktiverat globalt döljs verktyget från list_tools svaret och kan inte anropas.
Enhetsinställningar
Entiteter deltar automatiskt i MCP om du inte uttryckligen begränsar dem. Egenskapen mcp på en entitet styr dess MCP-deltagande. Använd objektformatet för explicit kontroll.
Objektformat
{
"entities": {
"Products": {
"mcp": {
"dml-tools": true
}
},
"SensitiveData": {
"mcp": {
"dml-tools": false
}
}
}
}
Om du inte anger mcp på en entitet aktiveras DML-verktyg som standard när MCP är aktiverat globalt.
Anpassade verktyg för lagrade procedurer
För entiteter med lagrad procedur använder du custom-tool egenskapen för att registrera proceduren som ett namngivet MCP-verktyg:
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
}
}
}
}
Viktigt!
Egenskapen custom-tool är endast giltig för entiteter med lagrad procedur. Om du ställer in den i en tabell eller visar entitet resulterar det i ett konfigurationsfel.
Omfång för kontroll per verktyg
Växlingar per verktyg konfigureras endast på den globala körningsnivån under runtime.mcp.dml-tools.
På entitetsnivå mcp är en boolesk grind eller ett objekt med dml-tools och custom-tool egenskaper.
{
"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
}
}
}
}
Ett verktyg är endast tillgängligt om det är aktiverat globalt och entiteten tillåter DML-verktyg.
RBAC-integrering
Varje DML-verktygsåtgärd tillämpar dina rollbaserade åtkomstkontrollregler. En agents roll avgör vilka entiteter som är synliga, vilka åtgärder som tillåts, vilka fält som ingår och om policyer på radnivå gäller.
anonymous Om rollen endast tillåter läsbehörighet på Products:
-
describe_entitiesvisar endastread_recordsunder funktioner -
create_record,update_recordochdelete_recordär inte tillgängliga - Endast fält som tillåts för
anonymousvisas i schemat
Konfigurera roller i :dab-config.json
{
"entities": {
"Products": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["ProductId", "ProductName", "Price"],
"exclude": ["Cost"]
}
}
]
},
{
"role": "admin",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}