Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Penting
Server Protokol Konteks Model SQL (MCP) tersedia di pembuat API Data versi 1.7 dan yang lebih baru. Untuk kemampuan terbaru dan perbaikan bug, gunakan rilis 2.0 terbaru.
Server SQL Model Context Protocol (MCP) memaparkan tujuh alat Data Manipulation Language (DML) ke agen AI. Alat-alat ini menyediakan permukaan CRUD yang diketik untuk operasi database—membuat, membaca, memperbarui, dan menghapus rekaman, menggabungkan data, ditambah menjalankan prosedur tersimpan. Semua alat menghormati kontrol akses berbasis peran (RBAC), izin entitas, dan kebijakan yang ditentukan dalam konfigurasi Anda.
Peringatan
Agar agen mengkueri entitas secara efektif, konfigurasikan metadata bidang di entitas Anda. Tanpa nama dan deskripsi bidang, agen hanya melihat nama entitas dan mungkin salah menebak nama kolom. Lihat Menambahkan deskripsi ke entitas untuk detailnya.
Apa itu alat DML?
Alat DML (Bahasa Manipulasi Data) menangani operasi data: membuat, membaca, memperbarui, dan menghapus rekaman, menggabungkan data, ditambah menjalankan prosedur tersimpan. Tidak seperti DDL (Bahasa Definisi Data) yang memodifikasi skema, DML bekerja secara eksklusif pada bidang data dalam tabel dan tampilan yang ada.
Tujuh alat DML adalah:
-
describe_entities- Menemukan entitas dan operasi yang tersedia -
create_record- Menyisipkan baris baru -
read_records- Kueri tabel dan tampilan -
update_record- Memodifikasi baris yang ada -
delete_record- Menghapus baris -
execute_entity- Menjalankan prosedur tersimpan -
aggregate_records- Melaksanakan kueri agregasi
Nota
Fungsionalitas SQL MCP Server yang dijelaskan di bagian ini tersedia di pembuat API Data versi 2.0 dan yang lebih baru. Untuk informasi selengkapnya, lihat Apa yang baru dalam versi 2.0.
Ketersediaan alat menurut versi
Tidak semua alat tersedia di setiap versi. Verifikasi alat yang tersedia di versi terinstal Anda sebelum mengandalkan perilaku yang didokumenkan.
| Alat | 1.7.x | 2.0+ | Diaktifkan secara default |
|---|---|---|---|
describe_entities |
Yes | Yes | Yes |
create_record |
Yes | Yes | Yes |
read_records |
Yes | Yes | Yes |
update_record |
Yes | Yes | Yes |
delete_record |
Yes | Yes | Yes |
execute_entity |
Yes | Yes | Yes |
aggregate_records |
No | Yes | Yes |
Nota
Jika Anda menggunakan versi 1.7.x, aggregate_records tidak tersedia. Agen yang mencoba menjalankan kueri penghitungan atau agregasi harus membaca semua baris yang sesuai sebagai gantinya. Tingkatkan ke versi 2.0 atau yang lebih baru untuk dukungan agregasi asli.
Ketika alat DML diaktifkan secara global dan untuk entitas, SQL MCP Server mengeksposnya melalui protokol MCP. Agen tidak pernah berinteraksi langsung dengan skema database Anda - mereka bekerja melalui lapisan abstraksi penyusun API Data.
Alat-alat
list_tools respons
Saat agen memanggil list_tools, SQL MCP Server mengembalikan:
{
"tools": [
{ "name": "describe_entities" },
{ "name": "create_record" },
{ "name": "read_records" },
{ "name": "update_record" },
{ "name": "delete_record" },
{ "name": "execute_entity" },
{ "name": "aggregate_records" }
]
}
jelaskan_entitas
Mengembalikan entitas yang tersedia untuk peran saat ini. Setiap entri mencakup nama bidang, deskripsi, dan operasi yang diizinkan. Alat ini tidak mengkueri database. Sebaliknya, ia membaca dari konfigurasi di dalam memori yang dibangun dari file konfigurasi Anda.
Metadata bidang berasal dari fields data dalam konfigurasi Anda. Jika Anda tidak menyertakannya, agen hanya melihat nama entitas dengan array kosong fields . Lihat Menambahkan deskripsi ke entitas untuk panduan penyiapan.
Nota
Respons mencakup nilai dari bidang name dan description dalam konfigurasi Anda. Jenis data dan indikator kunci utama tidak disertakan dalam respons saat ini. Parameter prosedur tersimpan juga tidak tercantum. Agen mengandalkan deskripsi entitas dan bidang—bersama dengan umpan balik kesalahan—untuk menentukan penggunaan yang benar.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
nameOnly |
Boolean | No | Ketika true, mengembalikan daftar nama dan deskripsi entitas yang ringan tanpa metadata bidang. |
entities |
kumpulan string | No | Membatasi respons terhadap entitas yang ditentukan. Saat dihilangkan, semua entitas yang diaktifkan MCP dikembalikan. |
Contoh permintaan
{
"method": "tools/call",
"params": {
"name": "describe_entities",
"arguments": {
"entities": ["Products"]
}
}
}
Contoh tanggapan
{
"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
Opsi entitas yang digunakan oleh salah satu ALAT CRUD dan menjalankan DML berasal langsung dari describe_entities. Deskripsi semantik internal yang dilampirkan ke setiap alat memberlakukan alur dua langkah ini.
buat_rekam
Membuat baris baru dalam tabel. Memerlukan izin buat pada entitas untuk peran saat ini. Alat ini memvalidasi input terhadap skema entitas, memberlakukan izin tingkat bidang, menerapkan kebijakan pembuatan, dan mengembalikan rekaman yang dibuat dengan nilai yang dihasilkan.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
entity |
string | Yes | Nama entitas tempat membuat rekaman. |
data |
objek | Yes | Pasangan kunci-nilai nama bidang dan nilai untuk rekaman baru. |
read_records
Melakukan kueri pada tabel atau tampilan. Mendukung pemfilteran, pengurutan, penomoran halaman, dan pemilihan bidang. Alat ini membangun SQL deterministik dari parameter terstruktur, menerapkan izin baca dan proyeksi lapangan, dan memberlakukan kebijakan keamanan tingkat baris.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
entity |
string | Yes | Nama entitas yang akan dibaca. |
select |
string | No | Daftar nama bidang yang dipisahkan koma untuk dikembalikan (misalnya, "id,title,price"). |
filter |
string | No | Ekspresi filter gaya OData (misalnya, "Price gt 10 and Category eq 'Books'"). |
orderby |
kumpulan string | No | Urutkan ekspresi. Setiap elemen adalah nama bidang dengan arah opsional (misalnya, ["Price desc", "Name asc"]). |
first |
bilangan bulat | No | Jumlah maksimum rekaman yang akan dikembalikan. |
after |
string | No | Kursor kelanjutan dari respons sebelumnya untuk paginasi. |
Peringatan
Parameter orderby harus berupa array string, bukan satu string. Meneruskan nilai string dapat memicu UnexpectedError. Gunakan ["Name asc"] alih-alih "Name asc".
Respons pengelolaan halaman
Ketika lebih banyak hasil tersedia, respon menyertakan kursor after. Untuk mengambil halaman berikutnya, berikan nilai ini sebagai after parameter dalam permintaan berikutnya.
{
"value": [ ... ],
"after": "W3siRW50aXR5TmFtZ..."
}
Kehadiran bidang after menunjukkan bahwa terdapat lebih banyak halaman. Ketika after tidak ada, respons berisi halaman terakhir.
Penting
Hasil dari read_records secara otomatis dicache menggunakan sistem caching Data API builder. Anda dapat mengonfigurasi cache time-to-live (TTL) secara global atau per entitas untuk mengurangi beban database.
Operasi Penggabungan (JOIN)
Alat read_records ini dirancang untuk satu tabel atau tampilan. Akibatnya, operasi JOIN tidak didukung dalam alat ini. Desain ini membantu mengisolasi tanggung jawab, meningkatkan performa, dan membatasi dampak pada jendela konteks sesi Anda.
Namun, operasi JOIN bukan kasus tepi, dan penyusun API Data (DAB) sudah mendukung kueri canggih melalui titik akhir GraphQL. Untuk kueri yang lebih kompleks, sebaiknya gunakan tampilan alih-alih tabel. Anda juga dapat menggunakan alat execute_entity untuk menjalankan prosedur tersimpan yang membungkus kueri berparameter.
perbarui_catatan
Memodifikasi baris yang sudah ada. Memerlukan kunci utama dan bidang yang akan diperbarui. Alat ini memvalidasi kunci utama yang sudah ada, menegakkan izin dan kebijakan pembaruan, dan hanya memperbarui bidang yang dapat diubah oleh peran pengguna saat ini.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
entity |
string | Yes | Nama entitas yang akan diperbarui. |
keys |
objek | Yes | Pasangan kunci-nilai yang mengidentifikasi rekaman (misalnya, {"id": 42}). |
fields |
objek | Yes | Pasangan kunci-nilai nama bidang dan nilai baru. |
hapus_rekam
Menghapus baris yang sudah ada. Memerlukan kunci primer. Alat ini memvalidasi kunci utama yang ada, memberlakukan izin dan kebijakan penghapusan, dan melakukan penghapusan yang aman dengan dukungan transaksi.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
entity |
string | Yes | Nama entitas yang akan dihapus. |
keys |
objek | Yes | Pasangan kunci-nilai yang mengidentifikasi rekaman (misalnya, {"id": 42}). |
Nota
Beberapa skenario produksi menonaktifkan alat ini secara global untuk membatasi model secara luas. Pilihan ini terserah Anda, dan perlu diingat bahwa izin tingkat entitas tetap menjadi cara terpenting untuk mengontrol akses. Bahkan dengan delete-record diaktifkan, jika peran tidak memiliki izin penghapusan pada entitas, peran tersebut tidak dapat menggunakan alat ini untuk entitas tersebut.
execute_entity
Menjalankan prosedur tersimpan. Mendukung parameter input dan hasil output. Alat ini memvalidasi parameter input terhadap tanda tangan prosedur, memberlakukan izin eksekusi, dan melewati parameter dengan aman.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
entity |
string | Yes | Nama entitas prosedur tersimpan. |
parameters |
objek | No | Pasangan kunci-nilai dari nama dan nilai parameter input. |
menggabungkan_catatan
Melakukan kueri agregasi pada tabel dan tampilan. Mendukung fungsi agregat umum seperti hitungan, jumlah, rata-rata, minimum, dan maksimum. Alat ini membangun SQL deterministik dari parameter terstruktur, menerapkan izin baca dan proyeksi lapangan, dan memberlakukan kebijakan keamanan tingkat baris.
Parameter-parameternya
| Parameter | Tipe | Required | Deskripsi |
|---|---|---|---|
entity |
string | Yes | Nama entitas untuk diagregasikan. |
function |
string | Yes | Fungsi agregat: count, , sum, avg, minatau max. |
field |
string | Yes | Bidang untuk diagregasi. Gunakan "*" untuk count. |
filter |
string | No | Filter gaya OData diterapkan sebelum agregasi. |
distinct |
Boolean | No | Ketika true, menghapus nilai duplikat sebelum menggabungkan. |
groupby |
kumpulan string | No | Nama bidang untuk mengelompokkan hasil menurut (misalnya, ["Category", "Status"]). |
having |
objek | No | Memfilter grup menurut nilai agregat. Menggunakan operator: eq, , neq, gt, gtelt, , ltein. |
orderby |
kumpulan string | No | Urutkan ekspresi untuk hasil yang dikelompokkan (misalnya, ["count desc"]). |
first |
bilangan bulat | No | Jumlah maksimum hasil yang dikelompokkan yang akan dikembalikan. |
after |
string | No | Kursor kelanjutan untuk paginating mengelompokkan hasil. |
Contoh: menghitung dengan GROUP BY dan HAVING
{
"method": "tools/call",
"params": {
"name": "aggregate_records",
"arguments": {
"entity": "Todo",
"function": "count",
"field": "*",
"groupby": ["UserId"],
"having": { "gt": 2 }
}
}
}
Alat ini aggregate-records dapat dikonfigurasi sebagai boolean atau sebagai objek dengan lebih banyak pengaturan:
{
"runtime": {
"mcp": {
"dml-tools": {
"aggregate-records": {
"enabled": true,
"query-timeout": 30
}
}
}
}
}
Properti query-timeout menentukan waktu eksekusi maksimum dalam detik (rentang: 1–600). Pengaturan ini membantu mencegah kueri agregasi jangka panjang mengonsumsi sumber daya yang berlebihan.
Konfigurasi runtime
Konfigurasikan alat DML secara global di bagian runtime Anda 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
}
}
}
}
Setiap properti alat di bawah runtime.mcp.dml-tools menerima true atau false. Alat ini aggregate-records juga mendukung format objek dengan enabled dan 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
}
}
}
}
}
Untuk mengaktifkan atau menonaktifkan semua alat DML sekaligus, atur "dml-tools" ke true atau false.
Menggunakan CLI
Atur properti satu per satu menggunakan CLI penyusun API Data:
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
Menonaktifkan alat
Saat Anda menonaktifkan alat di tingkat runtime, alat tersebut tidak pernah muncul untuk agen, terlepas dari izin entitas atau konfigurasi peran. Pengaturan ini berguna ketika Anda memerlukan batas operasional yang ketat.
Skenario umum
- Nonaktifkan
delete-recorduntuk mencegah kehilangan data dalam produksi - Nonaktifkan
create-recorduntuk titik akhir pelaporan baca-saja - Nonaktifkan
execute-entitysaat prosedur tersimpan tidak digunakan - Nonaktifkan
aggregate-recordssaat kueri agregasi tidak diperlukan
Ketika alat dinonaktifkan secara global, alat disembunyikan dari list_tools respons dan tidak dapat dipanggil.
Pengaturan entitas
Entitas berpartisipasi dalam MCP secara otomatis kecuali Anda secara eksplisit membatasinya. Properti mcp pada entitas mengontrol partisipasi MCP-nya. Gunakan format objek untuk kontrol eksplisit.
Format objek
{
"entities": {
"Products": {
"mcp": {
"dml-tools": true
}
},
"SensitiveData": {
"mcp": {
"dml-tools": false
}
}
}
}
Jika Anda tidak menentukan mcp pada entitas, alat DML default untuk diaktifkan saat MCP diaktifkan secara global.
Alat kustom untuk prosedur tersimpan
Untuk entitas prosedur tersimpan, Anda juga dapat mendaftarkan prosedur tersebut sebagai alat MCP bernama dengan menggunakan properti custom-tool. Lihat Mengonfigurasi alat MCP kustom untuk instruksi penyiapan.
Cakupan kontrol per alat
Pengalih per alat hanya dikonfigurasikan pada tingkat runtime global di bawah runtime.mcp.dml-tools.
Pada tingkat entitas, mcp adalah gerbang boolean atau objek dengan properti dml-tools dan 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
}
}
}
}
Alat hanya tersedia jika diaktifkan secara global dan entitas mengizinkan alat DML.
Integrasi RBAC
Setiap operasi alat DML memberlakukan aturan kontrol akses berbasis peran Anda. Peran agen menentukan entitas mana yang terlihat, operasi mana yang diizinkan, kolom mana yang disertakan, dan apakah kebijakan tingkat baris berlaku.
Jika peran anonymous hanya mengizinkan izin baca pada Products:
-
describe_entitieshanya menampilkanread_recordsdalam operasi -
create_record,update_record, dandelete_recordtidak tersedia - Hanya bidang yang diizinkan untuk
anonymousmuncul dalam skema
Konfigurasikan peran di dab-config.json:
{
"entities": {
"Products": {
"permissions": [
{
"role": "anonymous",
"actions": [
{
"action": "read",
"fields": {
"include": ["ProductId", "ProductName", "Price"],
"exclude": ["Cost"]
}
}
]
},
{
"role": "admin",
"actions": [
{
"action": "*"
}
]
}
]
}
}
}