Dela via


Verktyg för datamanipuleringsspråk (DML) i SQL MCP Server

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-record för att förhindra dataförlust i produktion
  • Inaktivera create-record för skrivskyddade rapportslutpunkter
  • Inaktivera execute-entity när lagrade procedurer inte används
  • Inaktivera aggregate-records nä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_entities visar endast read_records under funktioner
  • create_record, update_recordoch delete_record är inte tillgängliga
  • Endast fält som tillåts för anonymous visas 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": "*"
            }
          ]
        }
      ]
    }
  }
}