SQL MCP服务器

SQL MCP服务器是一个基于Data API Builder (DAB)的工具,提供REST、GraphQL和MCP接口,用于与Azure SQL数据库交互,并通过Azure AI Foundry代理实现自然语言到结构化查询的转换。

  • by pietrobr
  • Shell
  • 本地部署
  • 更新于
在 GitHub 查看 pietrobr/sql-mcp

使用说明

SQL MCP服务器--测试项目

测试项目 数据API生成器(DAB)SQL MCP服务器 带着一个 Azure AI Foundry 代理人。

建筑

Azure AI Foundry Agent (GPT-4o)
        ↓ MCP protocol
SQL MCP Server (DAB v1.7)
        ↓ T-SQL (deterministic)
Azure SQL Database (OrdersDB)

数据库模式

表 描述 行
dbo.Categories 产品类别(电子、书籍、服装) 3
dbo.Products 与类别关联的带价格的产品 10
dbo.Customers 注册客户 5
dbo.Orders 订单状态和总计 8
dbo.OrderItems 将订单链接到产品的行项目 20

关系

  • 类别1:M产品
  • 客户1:M订单
  • 订单1:M订单项目
  • 产品1:M订单项目

先决条件

快速开始

1.安装DAB命令行界面

dotnet tool install --global Microsoft.DataApiBuilder --prerelease
dab --version  # should be >= 1.7.x-rc

2.在本地运行DAB

dab start --verbose

这将开始:

  • 表征状态转移: http://localhost:5000/api/{entity}
  • 图查询语言: http://localhost:5000/graphql
  • 主控程序: http://localhost:5000/mcp

3.测试REST端点

curl http://localhost:5000/api/Product

4.配置Python代理

cp .env.template .env
# Edit .env with your Azure AI Foundry project details

5.运行测试代理

pip install -r requirements.txt
python test_agent.py

部署到Azure容器应用程序

自动化脚本在 scripts/ 创建完整的Azure环境。

先决条件

  • Azure命令行界面 已登录(az login)
  • Python 3.10+ pyodbc 已安装(用于数据库种子设定)
  • SQL Server的ODBC驱动程序17

步骤1——创建Azure资源

创建资源组、Azure SQL Server(仅限Azure AD身份验证)、数据库和防火墙规则。

scripts/01-create-azure-resources.sh

步骤2——为数据库添加种子

跑动 sql/setup.sql 创建表并插入示例数据。启用查询存储。

scripts/02-seed-database.sh

步骤3——将DAB部署到容器应用程序

在ACR中构建Docker镜像并部署到Azure容器应用程序。

scripts/03-deploy-container-app.sh

部署后,更新 .env 其中MCP URL由脚本打印。

步骤4——创建AI Foundry项目并部署模型

创建Azure AI Foundry中心、项目并部署GPT-4o。

scripts/04-create-foundry-project.sh

创建后,更新 .env 随着 PROJECT_ENDPOINT 和 MODEL_DEPLOYMENT_NAME 按脚本打印。

步骤5——部署Streamlit查询跟踪器

构建查询跟踪器UI并将其部署到Azure容器应用程序。

scripts/05-deploy-streamlit.sh

部署后,授予对容器的托管标识(脚本打印的T-SQL)的SQL读取权限。

定制

用环境变量覆盖默认值:

RESOURCE_GROUP=my-rg \
LOCATION=westeurope \
SQL_SERVER_NAME=my-sql-server \
  scripts/01-create-azure-resources.sh

拆除

删除所有Azure资源:

scripts/99-teardown.sh

DAB配置

这 dab-config.json 文件控制一切:

  • 数据库连接:具有Azure AD身份验证的Azure SQL
  • 实体:5个具有语义描述的实体,用于AI代理理解
  • 关系:跨实体导航(例如,订单→ 客户)
  • 主控程序:启用于 /mcp 所有DML工具都处于活动状态
  • 权限: anonymous:* 用于测试(限制生产)

MCP工具可用

SQL MCP Server公开了6个DML工具:

工具 说明
describe_entities 列出可用实体及其字段
create_record 插入新记录
read_records 使用过滤器、分页、排序读取记录
update_record 更新现有记录
delete_record 删除记录
execute_entity 执行存储过程

关键设计:NL2DAB(非NL2SQL)

代理人 从不生成原始SQL相反,它调用结构化MCP工具→ DAB的查询生成器在内部生成确定性T-SQL。这消除了人工智能生成SQL的风险。

查询跟踪器UI

基于Streamlit的UI,用于可视化AI代理调用MCP工具时DAB生成的SQL查询。

特性

  • 实时SQL跟踪 通过Azure SQL查询存储
  • 查询分类 --将每个SQL语句映射回可能的MCP工具(read_records, create_record等等)
  • 性能指标 --持续时间、CPU、IO读取、每次查询的行数
  • 时间线图 --查询持续时间随时间变化的可视化条形图
  • 内置代理启动器 --奔跑 test_agent.py 直接从UI
  • 过滤器 --按查询类型(SELECT/INSERT/UPDATE/DELETE)、表、时间窗口

运行跟踪器

streamlit run query_tracer.py

已创建Azure资源

资源 名称
资源组 rg-sql-mcp
Azure SQL Server sql-mcp-pietrobr.database.windows.net
数据库 OrdersDB
仅限Azure AD身份验证(无SQL身份验证)

清理

scripts/99-teardown.sh
# or manually:
az group delete --name rg-sql-mcp --yes --no-wait