這很重要
SQL 模型情境協定(MCP)伺服器目前處於預覽階段,本文件及引擎實作可能會有所變動。 雖然 Data API 建構器版本 1.7 仍在預覽階段,但你必須明確使用預發布版本(例如 1.7.83-rc),因為 MCP 功能尚未包含在標籤中 :latest 。
SQL MCP Server 為開發者提供了一種簡單、可預測且安全的方式,將 AI 代理引入他們的資料工作流程。 它在不暴露資料庫或依賴脆弱的自然語言解析的情況下達成此目標。 透過建立在 Data API 建構者的實體抽象、RBAC、快取與遙測之上,SQL MCP Server 提供一個在 REST、GraphQL 與 MCP 上運作相同的生產環境介面。 你設定一次,引擎會處理剩下的部分。
模型內容通訊協定 (MCP)
模型情境協定(Model Context Protocol,MCP)是一項標準,定義 AI 代理如何發現並呼叫外部工具。 工具是單一操作,例如建立紀錄或讀取資料。 每個工具描述其輸入、輸出與行為。 MCP 為代理者提供了一種可預測的方式來發現並使用能力。
SQL 的 MCP 伺服器
SQL MCP Server 是 Microsoft 為代理應用程式設計的動態開源引擎。 你用一個 JSON 檔案來設定它,該檔案定義:
- 如何連接你的資料庫
- 要暴露哪些資料表、檢視或儲存程序
- 適用於每個物件的權限
SQL MCP 伺服器自 1.7 版本起包含在資料 API 建構器(DAB)中。 它將 SQL 操作暴露為一小 類 MCP 工具 家族,讓代理能透過受控合約與資料庫實體互動。 伺服器是自架的,但對開發者來說,也可以透過 DAB 指令列本地執行。
小提示
Data API 建構器是開源且免費使用的。
使用案例
以下是 SQL MCP Server 的一些典型使用案例:
- 允許副駕駛或聊天機器人執行安全的 CRUD 操作
- 建立內部自動化而不寫 SQL
- 在不直接暴露資料庫的情況下,新增代理功能
確保模式
Data API 建構器使用明確定義的實體抽象層,列出設定中透過 API 暴露的所有資料表、檢視與儲存程序。 這個層可以讓你設定別名名稱和欄位、描述物件和參數,並限制不同角色可用的欄位。
這很重要
資料 API 建構器(DAB)具備角色感知功能,僅公開目前角色被允許存取的實體與操作。
由於 SQL MCP 伺服器是資料 API 建構器的功能,因此也使用此抽象層。 這種方式避免內部結構暴露給外部使用者,並允許你在 API 層定義複雜甚至跨資料來源的物件與關係族群。
處理 NL2SQL
SQL MCP 伺服器採取與現今許多短視型資料庫 MCP 伺服器 不同的方法 。 一個關鍵例子是 我們刻意不支援 NL2SQL。
Why? 模型並非確定性,而複雜的查詢最容易產生細微錯誤。 這些複雜的查詢通常是使用者希望 AI 能產生的,但當以非確定性方式產生時,卻是最需要仔細審查的。
備註
確定性是指相同的輸入總是產生相同的輸出。 通話間沒有隨機性或變異,使結果可預測、可測試且安全自動化。
相反地,SQL MCP Server 支援可稱為 NL2DAB 模型的模式。 此方法使用安全的 Data API 建構實體抽象層及內建的 DAB 查詢建構器。 兩者共同產生準確且完善的 Transact-SQL(T-SQL),並以完全確定性的方式呈現。 此方法消除了 NL2SQL 帶來的風險、開銷與煩擾,同時保有代理產生查詢的安全性與可靠性。
支援 DDL(資料定義語言)
DDL(資料定義語言)是一種用於建立及變更物件(如資料表和檢視)的資料庫語言。 SQL MCP 伺服器是圍繞 DML(資料操作語言)建構的,DML 是用於建立、讀取、更新及刪除現有資料表與檢視資料的資料庫語言。 DML 也涵蓋儲存程序的執行。 因此,SQL MCP 伺服器設計是處理資料,而非結構。 此設計符合生產 MCP 的應用情境,即 AI 代理與關鍵任務或業務敏感系統互動。
小提示
工程師可在本地開發時修改結構,並可使用 Visual Studio Code 中的 MSSQL 擴充功能(VS Code),該擴充功能提供完整的 DDL 支援。
支援RBAC
SQL MCP 伺服器受益於與 Data API 建置器中相同的經過驗證的角色導向存取控制(RBAC)系統。 你設定中的每個實體會定義哪些角色可以讀取、建立、更新或刪除資料,以及哪些欄位被包含或排除。 這些規則自動套用於所有 MCP 工具,確保安全性在 REST、GraphQL 與 MCP 間保持一致,無需額外設定。
這很重要
角色基礎約束適用於代理互動的每一步。
快取支援
SQL MCP 伺服器會自動快取工具的 read_records 結果。
Data API 建構器中的快取 是全域性啟用的,而且你可以為每個實體進行設定。 第一層與第二層快取有助於減輕資料庫負載、防止請求風暴,並支援水平擴展環境中的熱啟動方案。
監控支援
SQL MCP Server 會發布日誌與遙測資料,讓企業能從單一介面監控與驗證活動。 此功能包含 Azure Log Analytics、 Application Insights 以及容器內的本地檔案日誌。
遙測
SQL MCP 伺服器全面整合了 OpenTelemetry(OTEL)的跨度和活動。 每個操作都會被追蹤,讓開發者能夠在分散式系統間關聯行為。 了解更多關於 Data API 構建器的原生 Open Telemetry 支援。
健康檢查
SQL MCP Server 提供 REST、GraphQL 及 MCP 端點間詳細的健康與實體檢查。 Data API 建構器 Health 讓開發者能定義效能預期、設定閾值,並驗證每個端點是否如預期運作。
如何設定 SQL MCP 伺服器?
MCP 是在你的 DAB 設定檔中設定的。 如果你已經有可用的 Data API 建構器設定,升級到 1.7 或更新版本會自動獲得一個可用的 SQL MCP 伺服器,無需額外步驟。
設定
你可以在全球或實體層級啟用 MCP。 此功能允許您選擇哪些實體會呈現 MCP 工具,哪些則對代理者保持不可存取。 MCP 遵循 REST 和 GraphQL 相同的規則,因此你的設定仍然是權限、投影和政策的唯一真實來源。
啟用 MCP 後,SQL MCP 伺服器會根據你的設定自動產生工具面。 你不會手動定義 MCP 工具。 內建 dml-tools 系統以程序式方式發現並揭露實體,能從小型結構擴展到非常大型資料庫。
開始
開始就是要建立用於控制引擎的 dab-config.json 。 你可以手動完成這個任務,也可以使用 Data API 建構工具(DAB)的 CLI。 CLI 簡化了這個任務,讓你只需一個指令就能初始化檔案。 配置屬性值可以使用字串、 環境變數或 Azure Key Vault 秘密。
dab init --database-type mssql --connection-string "<your-connection-string>" --config dab-config.json --host-mode development
你可以透過將每個資料表、檢視表或儲存程序加入設定,指定你希望 SQL MCP 伺服器公開的內容。 CLI 讓你可以輕鬆新增它們、指派別名、設定權限,甚至映射欄位。 最重要的是,透過這個 description 屬性,你可以加入語意細節,幫助語言模型更好地理解你的資料。
dab add {entity-name} \ # object alias (Employees)
--source {table-or-view-name} \ # database object (dbo.Employees)
--source.type {table|view|stored-procedure} \ # object type (table)
--permissions "{role:actions}" \ # role and allowed actions (anonymous:*)
--description "{text}" # semantic description (Company employee records)
執行時間設定
SQL MCP 伺服器預設在資料 API 建構器設定中啟用。 大多數情況下,你不需要新增任何設定。 伺服器會自動遵守與你的 API 及資料庫相同的權限和安全規則。 只有在你想縮小或限制代理能做的事情時才設定 MCP。
"runtime": {
"mcp": {
"enabled": true, // default: true
"path": "/mcp", // default: /mcp
"dml-tools": {
"describe-entities": true, // default: true
"create-record": true, // default: true
"read-records": true, // default: true
"update-record": true, // default: true
"delete-record": true, // default: true
"execute-entity": true // default: true
}
}
}
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
為什麼要停用個別工具?
開發者可能想限制特定動作,即使角色或實體權限允許。 在執行時關閉工具可確保該工具永遠不會出現在代理身上。 例如,關閉 delete_record 刪除功能會完全隱藏,無論其他設定如何。 此情境雖不常見,但在需要嚴格作業邊界時非常有用。
實體設定
你也不需要在每個實體上啟用 MCP。 除非你選擇限制,實體會自動參與。 這個 dml-tools 屬性存在是為了讓你可以排除某個實體在 MCP 之外或縮小其能力範圍,但一般使用時不需要設定任何東西。 預設設定會處理所有事情。
"entities": {
"products": {
"mcp": {
"dml-tools": true
}
}
}
DML 工具
SQL MCP 伺服器提供六種資料操作語言(DML)工具,使 AI 代理能執行安全且型別安全的資料庫操作:describe_entities、create_record、read_records、update_record、delete_record及execute_entity。 這些工具形成一個可預測的 CRUD 表面,始終反映你的設定、權限與架構。
每個工具都尊重基於角色的存取控制(RBAC)、實體權限及政策。 代理程式不會直接與你的資料庫互動——他們會透過安全的 Data API 建構抽象層來運作。
關於各工具的完整細節、設定選項及最佳實務,請參閱 DML 工具參考。