Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Serwer MCP (SQL Model Context Protocol) jest dostępny w narzędziu Data API Builder w wersji 1.7 lub nowszej.
Serwer MCP (SQL Model Context Protocol) udostępnia siedem narzędzi języka manipulowania danymi (DML) agentom sztucznej inteligencji. Te narzędzia zapewniają typową powierzchnię CRUD dla operacji bazy danych — tworzenie, odczytywanie, aktualizowanie i usuwanie rekordów, agregowanie danych oraz wykonywanie procedur składowanych. Wszystkie narzędzia przestrzegają kontroli dostępu opartej na rolach (RBAC), uprawnień jednostki i zasad zdefiniowanych w konfiguracji.
Co to są narzędzia DML?
Narzędzia DML (Data Manipulation Language) obsługują operacje danych: tworzenie, odczytywanie, aktualizowanie i usuwanie rekordów, agregowanie danych oraz wykonywanie procedur składowanych. W przeciwieństwie do języka DDL (Data Definition Language), który modyfikuje schemat, język DML działa wyłącznie na płaszczyźnie danych w istniejących tabelach i widokach.
Siedem narzędzi DML to:
-
describe_entities— Odnajduje dostępne jednostki i operacje -
create_record- Wstawia nowe wiersze -
read_records— Zapytania dotyczące tabel i widoków -
update_record- Modyfikuje istniejące wiersze -
delete_record- Usuwa wiersze -
execute_entity- Uruchamia procedury składowane -
aggregate_records- Wykonuje zapytania agregacji
Uwaga / Notatka
Funkcja programu SQL MCP Server 2.0 opisana w tej sekcji jest obecnie dostępna w wersji zapoznawczej i może ulec zmianie przed ogólną dostępnością. Aby uzyskać więcej informacji, zobacz Co nowego w wersji 2.0.
Gdy narzędzia DML są włączone globalnie i dla jednostki, program SQL MCP Server uwidacznia je za pośrednictwem protokołu MCP. Agenci nigdy nie wchodzą w interakcje bezpośrednio ze schematem bazy danych — pracują za pośrednictwem warstwy abstrakcji konstruktora interfejsu API danych.
Narzędzia
lista_narzędzi odpowiedź
Gdy agent wykonuje żądanie list_tools, program SQL MCP Server zwraca:
{
"tools": [
{ "name": "describe_entities" },
{ "name": "create_record" },
{ "name": "read_records" },
{ "name": "update_record" },
{ "name": "delete_record" },
{ "name": "execute_entity" },
{ "name": "aggregate_records" }
]
}
opisz_entyty
Zwraca jednostki dostępne dla bieżącej roli. Każdy wpis zawiera nazwy pól, opisy i dozwolone operacje. To narzędzie nie odpytuje bazy danych. Zamiast tego odczytuje z konfiguracji w pamięci utworzonej z pliku konfiguracji.
Ważne
Informacje fields w pliku describe_entities pochodzą z danych, które podałeś fields w konfiguracji. Ponieważ metadane pól są opcjonalne, jeśli nie zostaną uwzględnione, agenci widzą tylko nazwy jednostek z pustą fields tablicą. Najlepszym rozwiązaniem jest uwzględnienie nazw pól i opisów pól w konfiguracji. Te metadane dają agentom większy kontekst do generowania dokładnych zapytań i aktualizacji. Dowiedz się więcej o opisach pól tutaj.
Uwaga / Notatka
Odpowiedź zawiera wartości pól name i description z konfiguracji. Typy danych i podstawowe kluczowe wskaźniki nie są uwzględniane w bieżącej odpowiedzi. Parametry procedury składowanej również nie są wymienione. Agenci opierają się na opisach jednostek i pól — wraz z opiniami o błędach — w celu określenia poprawnego użycia.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
nameOnly |
typ logiczny (boolowski) | Nie. | Gdy true funkcja zwraca uproszczoną listę nazw jednostek i opisów bez metadanych pól. |
entities |
tablica stringów | Nie. | Ogranicza odpowiedź do określonych jednostek. Po pominięciu zwracane są wszystkie jednostki obsługiwane przez MCP. |
Przykładowe żądanie
{
"method": "tools/call",
"params": {
"name": "describe_entities",
"arguments": {
"entities": ["Products"]
}
}
}
Przykładowa odpowiedź
{
"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"
]
}
]
}
Uwaga / Notatka
Opcje jednostki używane przez dowolne narzędzia CRUD i DML pochodzą bezpośrednio z pliku describe_entities. Wewnętrzny opis semantyczny dołączony do każdego narzędzia wymusza ten dwuetapowy przepływ.
create_record
Tworzy nowy wiersz w tabeli. Wymaga uprawnienia do tworzenia jednostki dla bieżącej roli. Narzędzie weryfikuje dane wejściowe względem schematu jednostki, wymusza uprawnienia na poziomie pola, stosuje zasady tworzenia i zwraca utworzony rekord z wygenerowanymi wartościami.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
entity |
ciąg | Yes | Nazwa encji do utworzenia rekordu. |
data |
obiekt | Yes | Pary klucz-wartość nazw pól i wartości dla nowego rekordu. |
czytaj_rekordy
Wykonuje zapytania dotyczące tabeli lub widoku. Obsługuje filtrowanie, sortowanie, stronicowanie i wybieranie pól. Narzędzie tworzy deterministyczny język SQL z parametrów strukturalnych, stosuje uprawnienia do odczytu i projekcje pól oraz wymusza zasady zabezpieczeń na poziomie wiersza.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
entity |
ciąg | Yes | Nazwa jednostki do odczytania. |
select |
ciąg | Nie. | Rozdzielona przecinkami lista nazw pól do zwrócenia (na przykład "id,title,price"). |
filter |
ciąg | Nie. | Wyrażenie filtru w stylu OData (na przykład "Price gt 10 and Category eq 'Books'"). |
orderby |
tablica stringów | Nie. | Sortuj wyrażenia. Każdy element jest nazwą pola z opcjonalnym kierunkiem (na przykład ["Price desc", "Name asc"]). |
first |
liczba całkowita | Nie. | Maksymalna liczba rekordów do zwrócenia. |
after |
ciąg | Nie. | Kursor kontynuacji z poprzedniej odpowiedzi na potrzeby stronicowania. |
Ostrzeżenie
Parametr orderby musi być tablicą ciągów, a nie jednym ciągiem. Przekazywanie wartości ciągu powoduje UnexpectedError. Użyj ["Name asc"] zamiast "Name asc".
Odpowiedź paginacji
Gdy dostępnych jest więcej wyników, odpowiedź zawiera after kursor. Przekaż tę wartość jako after parametr w następnym żądaniu, aby pobrać następną stronę.
{
"value": [ ... ],
"after": "W3siRW50aXR5TmFtZ..."
}
Obecność after pola wskazuje, że istnieje więcej stron. Gdy after jest nieobecny, dotarłeś do ostatniej strony.
Ważne
Wyniki z read_records są automatycznie buforowane przy użyciu systemu buforowania API danych. Możesz skonfigurować czas wygaśnięcia pamięci podręcznej (TTL) globalnie lub na jednostkę , aby zmniejszyć obciążenie bazy danych.
Operacje JOIN
Narzędzie read_records jest przeznaczone dla pojedynczej tabeli lub widoku. W związku z tym operacje JOIN nie są obsługiwane w tym narzędziu. Ten projekt pomaga odizolować odpowiedzialność, poprawić wydajność i ograniczyć wpływ na okno kontekstowe sesji.
Jednak operacje JOIN nie są przypadkiem rzadkim, a Data API builder (DAB) już obsługuje zaawansowane zapytania za pośrednictwem punktu końcowego GraphQL. W przypadku bardziej złożonych zapytań zalecamy użycie widoku zamiast tabeli. Za pomocą execute_entity narzędzia można również uruchamiać procedury składowane w celu hermetyzacji sparametryzowanych zapytań.
aktualizuj_rekord
Modyfikuje istniejący wiersz. Wymaga zaktualizowania klucza podstawowego i pól. Narzędzie sprawdza, czy klucz podstawowy istnieje, wymusza uprawnienia aktualizacji i zasady, a tylko aktualizuje pola, które może modyfikować bieżąca rola.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
entity |
ciąg | Yes | Nazwa jednostki do zaktualizowania. |
keys |
obiekt | Yes | Pary klucz-wartość identyfikujące rekord (na przykład {"id": 42}). |
fields |
obiekt | Yes | Pary klucz-wartość opisujące nazwy pól i ich nowe wartości. |
usuń rekord
Usuwa istniejący wiersz. Wymaga klucza podstawowego. Narzędzie weryfikuje, czy klucz podstawowy istnieje, wymusza usuwanie uprawnień i zasad oraz wykonuje bezpieczne usuwanie z obsługą transakcji.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
entity |
ciąg | Yes | Nazwa jednostki do usunięcia. |
keys |
obiekt | Yes | Pary klucz-wartość identyfikujące rekord (na przykład {"id": 42}). |
Uwaga / Notatka
Niektóre scenariusze produkcyjne wyłączają to narzędzie globalnie w celu szerokiego ograniczenia modeli. Ten wybór jest do Ciebie i warto pamiętać, że uprawnienia na poziomie jednostki pozostają najważniejszym sposobem kontrolowania dostępu. Nawet jeśli delete-record jest włączona, rola nie ma uprawnień do usuwania jednostki, a tym samym nie może używać tego narzędzia dla tej jednostki.
execute_entity
Uruchamia procedurę składowaną. Obsługuje parametry wejściowe i wyniki wyjściowe. Narzędzie weryfikuje parametry wejściowe względem podpisu procedury, wymusza uprawnienia wykonywania i bezpiecznie przekazuje parametry.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
entity |
ciąg | Yes | Nazwa jednostki procedury składowanej. |
parameters |
obiekt | Nie. | Pary klucz-wartość dla nazw parametrów wejściowych i ich wartości. |
agregacja_rekordów
Wykonuje zapytania agregacyjne w tabelach i widokach. Obsługuje typowe funkcje agregujące, takie jak liczba, suma, średnia, minimum i maksimum. Narzędzie tworzy deterministyczny język SQL z parametrów strukturalnych, stosuje uprawnienia do odczytu i projekcje pól oraz wymusza zasady zabezpieczeń na poziomie wiersza.
Parametry
| Parametr | Typ | Wymagane | Opis |
|---|---|---|---|
entity |
ciąg | Yes | Nazwa obiektu do agregowania. |
function |
ciąg | Yes | Funkcja agregacji: count, , sumavg, minlub max. |
field |
ciąg | Yes | Pole do agregowania. Użyj "*" dla count. |
filter |
ciąg | Nie. | Filtr w stylu OData zastosowany przed agregacją. |
distinct |
typ logiczny (boolowski) | Nie. | Gdy true, usuwa zduplikowane wartości przed agregowaniem. |
groupby |
tablica stringów | Nie. | Nazwy pól do grupowania wyników według (na przykład ["Category", "Status"]). |
having |
obiekt | Nie. | Filtruje grupy według wartości agregującej. Używa operatorów: eq, neqgtgtelt, lte, . in |
orderby |
tablica stringów | Nie. | Sortuj wyrażenia dla pogrupowanych wyników (na przykład ["count desc"]). |
first |
liczba całkowita | Nie. | Maksymalna liczba pogrupowanych wyników do zwrócenia. |
after |
ciąg | Nie. | Kursor kontynuacji do stronicowania pogrupowanych wyników. |
Przykład użycia funkcji count z klauzulą groupby oraz having
{
"method": "tools/call",
"params": {
"name": "aggregate_records",
"arguments": {
"entity": "Todo",
"function": "count",
"field": "*",
"groupby": ["UserId"],
"having": { "gt": 2 }
}
}
}
aggregate-records Narzędzie można skonfigurować jako wartość logiczną lub jako obiekt z dodatkowymi ustawieniami.
{
"runtime": {
"mcp": {
"dml-tools": {
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
Właściwość query-timeout określa maksymalny czas wykonywania w sekundach (zakres: 1–600). To ustawienie pomaga zapobiegać długotrwałym zapytaniom agregacji, które zużywają nadmierne zasoby.
Konfiguracja środowiska uruchomieniowego
Skonfiguruj globalnie narzędzia DML w sekcji globalnych ustawień środowiska uruchomieniowego elementu 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
}
}
}
}
Każda właściwość narzędzia w obszarze runtime.mcp.dml-tools akceptuje true lub false. Narzędzie aggregate-records obsługuje również format obiektu z elementami enabled i :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
}
}
}
}
}
Aby włączyć lub wyłączyć wszystkie narzędzia DML jednocześnie, ustaw wartość "dml-tools" lub truefalse .
Korzystanie z interfejsu wiersza polecenia (CLI)
Ustaw właściwości indywidualnie przy użyciu CLI konstruktora API danych.
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
Wyłączanie narzędzi
Po wyłączeniu narzędzia na poziomie środowiska uruchomieniowego nigdy nie pojawia się agentom, niezależnie od uprawnień jednostki lub konfiguracji roli. To ustawienie jest przydatne, gdy potrzebujesz ścisłych granic operacyjnych.
Typowe scenariusze
- Wyłącz
delete-record, aby zapobiec utracie danych w środowisku produkcyjnym - Wyłącz
create-recorddla punktów końcowych raportowania tylko do odczytu - Wyłącz
execute-entity, gdy nie są używane procedury składowane - Wyłącz
aggregate-records, gdy zapytania agregacji nie są potrzebne
Gdy narzędzie jest wyłączone globalnie, narzędzie jest ukryte przed odpowiedzią list_tools i nie można go wywołać.
Ustawienia encji
Jednostki uczestniczą automatycznie w MCP, chyba że jawnie je ograniczysz. Właściwość mcp w obiekcie kontroluje jego udział w MCP. Użyj formatu obiektu dla jawnej kontrolki.
Format obiektu
{
"entities": {
"Products": {
"mcp": {
"dml-tools": true
}
},
"SensitiveData": {
"mcp": {
"dml-tools": false
}
}
}
}
Jeśli nie określisz mcp jednostki, narzędzia DML są domyślnie włączone, gdy MCP jest włączona globalnie.
Niestandardowe narzędzia dla procedur składowanych
W przypadku encji procedur składowanych użyj właściwości custom-tool, aby zarejestrować tę procedurę jako nazwane narzędzie MCP.
{
"entities": {
"GetBookById": {
"source": {
"type": "stored-procedure",
"object": "dbo.get_book_by_id"
},
"mcp": {
"custom-tool": true
}
}
}
}
Ważne
Właściwość custom-tool jest prawidłowa tylko dla encji procedury składowanej. Ustawienie go w tabeli lub w widoku jednostki powoduje błąd konfiguracji.
Zakres kontroli poszczególnych narzędzi
Przełączanie poszczególnych narzędzi jest konfigurowane tylko na poziomie globalnego środowiska uruchomieniowego w obszarze runtime.mcp.dml-tools.
Na poziomie jednostki, mcp jest to brama logiczna lub obiekt, posiadający właściwości dml-tools i 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
}
}
}
}
Narzędzie jest dostępne tylko wtedy, gdy jest włączone globalnie, a jednostka zezwala na narzędzia DML.
Integracja kontroli dostępu opartej na rolach
Każda operacja narzędzia DML wymusza reguły kontroli dostępu opartej na rolach. Rola agenta określa, które jednostki są widoczne, które operacje są dozwolone, które pola są uwzględniane i czy mają zastosowanie zasady na poziomie wiersza.
Jeśli rola anonymous zezwala tylko na uprawnienia do odczytu na Products:
-
describe_entitiespokazuje tylkoread_recordsw operacjach -
create_record,update_recordidelete_recordnie są dostępne - Tylko pola dozwolone dla
anonymoussą uwzględnione w schemacie
Skonfiguruj role w pliku dab-config.json:
{
"entities": {
"Products": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["ProductId", "ProductName", "Price"],
"exclude": ["Cost"]
}
}
]
},
{
"role": "admin",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}
Treści powiązane
- Omówienie programu SQL MCP Server
- Dodawanie opisów semantycznych do programu SQL MCP Server
- Dokumentacja konfiguracji narzędzia Data API Builder (DAB)
- Konfiguracja MCP na poziomie jednostki
- Konfiguracja mcp środowiska uruchomieniowego
- Wdrażanie serwera SQL MCP w aplikacjach kontenerowych Azure
- Co nowego w narzędziu Data API Builder w wersji 2.0