MSSQL代理MCP
](https://badge.fury.io/py/mssql-agent-mcp)  
一种模型上下文协议(MCP)服务器,提供与Microsoft SQL server数据库交互和管理SQL server代理作业的工具。 除了基本的数据库查询功能外,此服务器还支持将存储过程和SQL server代理作业作为代码进行管理。用户可以轻松地导出、编辑和更新这些对象,并将其集成到版本控制系统中。
特性
此MCP服务器提供以下工具:
数据库工具
| 工具 | 说明 |
|---|---|
query | 执行SELECT查询并返回结果 |
execute | 执行INSERT、UPDATE、DELETE、CREATE语句 |
list_tables | 列出数据库中的所有表 |
describe_table | 获取包含列、类型和约束的表架构 |
list_databases | 列出服务器上的所有数据库 |
get_table_sample | 从表中获取示例行 |
get_table_indexes | 获取表上定义的索引 |
get_foreign_keys | 获取外键关系 |
存储过程工具
| 工具 | 说明 |
|---|---|
list_procedures | 列出当前数据库中的所有存储过程(可选地包括定义) |
list_all_procedures | 列出服务器上所有数据库中的所有存储过程 |
get_procedure_details | 获取有关程序的详细信息,包括其完整定义 |
get_procedure_parameters | 获取特定存储过程的参数 |
export_procedures_to_files | 将过程导出到具有目录结构的SQL文件: {db}/{schema}/{procedure}.sql |
update_procedure_from_file | 从已编辑的SQL文件更新存储过程 |
SQL Server代理作业工具
| 工具 | 说明 |
|---|---|
list_agent_jobs | 列出所有SQL Server代理作业及其状态和类别 |
get_job_steps | 获取特定作业的所有步骤,包括命令和流程控制 |
get_job_details | 获取作业的详细设置和上次运行信息 |
get_job_schedules | 获取作业的计划配置 |
get_job_history | 获取作业的执行历史记录 |
export_enabled_jobs_to_files | 将所有已启用的作业和步骤导出到SQL文件 |
update_job_step_from_file | 从已编辑的SQL文件更新现有作业步骤 |
create_job_step_from_file | 从SQL文件创建新作业步骤(自动重命名命名错误的文件) |
🌟 是什么让这与众不同?
虽然有几个MSSQL MCP服务器可用,但这个服务器提供 独特能力 在其他人中找不到:
| 功能 | 描述 | 为什么重要 |
|---|---|---|
| SQL Server代理作业管理 | 代理作业、步骤和计划的完整CRUD操作 | 大多数MCP服务器只处理数据库查询-此服务器允许您管理整个自动化基础架构 |
| 作业即代码工作流 | 将已启用的作业导出到文件、在本地编辑、推回更改 | 为您的SQL代理作业启用Git版本控制-跟踪更改、查看PR、轻松回滚 |
| 存储过程作为代码 | 导出/导入保留元数据的存储过程 | 使用适当的目录结构管理应用程序代码等过程 |
| 智能文件命名 | 自动将文件重命名为 {step_id}_{step_name}.sql format | 在创建新作业步骤时防止冲突并保持一致性 |
| 语法验证 | 用途 SET PARSEONLY 在应用更改之前 | 在SQL错误破坏生产作业之前将其捕获 |
| 元数据标头 | 在文件注释中保留作业/过程元数据 | 永远不会丢失创建或修改内容的上下文 |
| 使用FastMCP构建 | 基于装饰器的现代工具定义 | 更简洁的代码、自动模式生成、更好的可维护性 |
与其他MSSQL MCP服务器的比较
| 功能 | 此服务器 | 其他 |
|---|---|---|
| 基本查询(SELECT、INSERT、UPDATE) | ✅ | ✅ |
| 架构检查 | ✅ | ✅ |
| SQL Server代理作业列表 | ✅ | ❌ |
| 作业步骤管理 | ✅ | ❌ |
| 作业计划查看 | ✅ | ❌ |
| 将作业导出到文件 | ✅ | ❌ |
| 从文件更新作业 | ✅ | ❌ |
| 存储过程导出/导入 | ✅ | ❌ |
| 语法预验证 | ✅ | ❌ |
| FastMCP框架 | ✅ | ❌ |
存储过程管理
此MCP服务器提供了一个完整的工作流程,用于将存储过程作为代码进行管理:
1.导出到文件的程序
将指定数据库中的所有存储过程导出到目录结构:
Use export_procedures_to_files with output_dir: "/path/to/procedures"
Optionally specify databases: ["materialdb", "salesdb"]这将创建:
procedures/
├── materialdb/
│ ├── dbo/
│ │ ├── usp_get_facility_info_data.sql
│ │ ├── usp_update_inventory.sql
│ │ └── usp_process_orders.sql
│ └── reporting/
│ └── usp_generate_report.sql
├── salesdb/
│ └── dbo/
│ └── usp_calculate_totals.sql
└── ...SQL文件 包含:
- 元数据头(数据库、模式、过程名称、创建/修改日期)
- 完整的过程定义(CREATE procedure语句)
2.编辑和更新程序
编辑SQL文件后,将更改推送到SQL Server:
Use update_procedure_from_file with file_path: "/path/to/procedures/materialdb/dbo/usp_get_facility_info_data.sql"此工具:
- 解析文件路径以提取数据库、模式和过程名称
- 如果存在,还会从标题注释中读取元数据
- 自动转换
CREATE PROCEDURE到ALTER PROCEDURE - 更新前验证程序是否存在
- 执行ALTER语句以更新过程
示例程序文件
-- Database: materialdb
-- Schema: dbo
-- Procedure: usp_get_facility_info_data
-- Created: 2026-01-05 10:30:00
-- Modified: 2026-01-26 14:22:00
-- ============================================
CREATE PROCEDURE [dbo].[usp_get_facility_info_data]
AS
BEGIN
-- Your procedure logic here
SELECT * FROM facility_info
ENDSQL Server代理作业管理
此MCP服务器提供了一个完整的工作流,用于以代码形式管理SQL server代理作业:
1.将作业导出到文件
将所有已启用(未弃用)的作业导出到目录结构:
Use export_enabled_jobs_to_files with output_dir: "/path/to/agent_server_jobs"这将创建:
agent_server_jobs/
├── Job_Name_1/
│ ├── job_info.json # Job metadata (schedules, description, etc.)
│ ├── 01_first_step.sql # Step 1 SQL command
│ ├── 02_second_step.sql # Step 2 SQL command
│ └── 03_third_step.sql # Step 3 SQL command
├── Job_Name_2/
│ ├── job_info.json
│ ├── 01_step_one.sql
│ └── 02_step_two.sql
└── ...job_info.json 包含:
- 作业ID、名称和描述
- 启用状态和类别
- 所有者和通知设置
- 计划配置(频率、间隔、活动时间)
- 创建和修改日期
SQL文件 包含:
- 包含作业名称、步骤ID、步骤名称、子系统和数据库的元数据标头
- 实际的SQL命令
2.编辑现有作业步骤
编辑SQL文件后,将更改推送到SQL Server:
Use update_job_step_from_file with file_path: "/path/to/agent_server_jobs/Job_Name/02_step_name.sql"此工具:
- 解析文件路径以提取作业名称和步骤ID
- 读取SQL内容(跳过元数据标头)
- 使用验证SQL语法
SET PARSEONLY - 使用以下命令更新SQL Server中的作业步骤
sp_update_jobstep
3.创建新作业步骤
通过将SQL文件添加到作业目录来创建新步骤:
Use create_job_step_from_file with file_path: "/path/to/agent_server_jobs/Job_Name/my_new_step.sql"此工具自动执行以下操作:
- 验证/重命名文件 -如果文件名不匹配
{step_id}_{step_name}.sql格式,它:
- 扫描文件夹中的现有SQL文件以查找使用的步骤ID - 查询数据库中现有的步骤ID - 确定下一个可用步骤ID - 重命名文件(例如。, my_new_step.sql → 03_my_new_step.sql)
- 验证SQL语法 -在创建步骤之前检查语法错误
- 创建步骤 -用途
sp_add_jobstep在SQL Server中创建该步骤
- 更新文件 -向SQL文件添加正确的元数据标头
参数:
file_path(必需):SQL文件的路径database_name(可选):步骤的目标数据库(默认为“master”)auto_rename(可选):自动重命名命名错误的文件(默认为true)
文件名格式
SQL文件必须遵循以下命名约定:
{step_id}_{step_name}.sql示例:
01_truncate_tables.sql02_load_data.sql03_update_statistics.sql10_cleanup.sql
step_id决定了作业中的执行顺序。
先决条件
ODBC驱动程序安装
此程序包需要用于SQL Server的Microsoft ODBC驱动程序。根据您的操作系统进行安装:
macOS:
brew install unixodbc
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew install msodbcsql18 mssql-tools18Ubuntu/Debian:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18 mssql-tools18窗户: 从下载并安装 SQL Server的Microsoft ODBC驱动程序
需求
Python版本
- 需要python >=3.10
核心依赖关系
| 包装 | 版本 | 用途 |
|---|---|---|
fastmcp | >=2.0.0 | 具有自动模式生成功能的高级MCP框架 |
pyodbc | >=5.0.0 | SQL Server的ODBC数据库连接 |
sqlparse | >=0.5.0 | SQL解析和格式化 |
备注:此项目使用 FastMCP 更干净、更可维护的代码。FastMCP提供从Python类型提示和基于装饰器的工具定义自动生成JSON模式。
可选依赖关系
Azure集成([azure])
| 包装 | 版本 | 用途 |
|---|---|---|
azure-identity | >=1.15.0 | Azure Active Directory身份验证 |
发展([dev])
| 包装 | 版本 | 用途 |
|---|---|---|
ruff | >=0.4.0 | 装订和格式化 |
构建系统
- 用途 雏鸟 作为构建后端
安装
此套餐可在 PyPI.
使用pip(推荐)
pip install mssql-agent-mcp支持Azure AD身份验证
pip install mssql-agent-mcp[azure]使用uvx(无需安装)
uvx mssql-agent-mcp开发安装
git clone https://github.com/yyinhsu/mssql-agent-mcp.git
cd mssql-agent-mcp
pip install -e .安全配置
只读模式(默认)
默认情况下, 写入操作已禁用 为了安全。服务器以只读模式运行,以防止意外修改数据。
# Default: Read-only mode enabled (safe for exploration)
MSSQL_READONLY=true启用写入操作 (需要 execute, update_procedure_from_file, create_job_step_from_file等等):
# Enable write operations (use with caution)
MSSQL_READONLY=false精细权限控制
当 MSSQL_READONLY=false,您可以使用这些环境变量进一步控制允许的操作:
| 变量 | 默认值 | 控件 |
|---|---|---|
MSSQL_ALLOW_INSERT | true | 插入、合并语句 |
MSSQL_ALLOW_UPDATE | true | 更新声明 |
MSSQL_ALLOW_DELETE | true | 删除、删除声明 |
MSSQL_ALLOW_DDL | true | 创建、更改、删除、授予、撤销、拒绝 |
MSSQL_ALLOW_EXEC | true | EXEC、EXECUTE(还控制作业步骤更新) |
示例:只允许SELECT和INSERT:
MSSQL_READONLY=false
MSSQL_ALLOW_INSERT=true
MSSQL_ALLOW_UPDATE=false
MSSQL_ALLOW_DELETE=false
MSSQL_ALLOW_DDL=false
MSSQL_ALLOW_EXEC=false示例:允许数据修改但阻止架构更改:
MSSQL_READONLY=false
MSSQL_ALLOW_INSERT=true
MSSQL_ALLOW_UPDATE=true
MSSQL_ALLOW_DELETE=true
MSSQL_ALLOW_DDL=false
MSSQL_ALLOW_EXEC=false备注:这些粒度设置仅在以下情况下生效MSSQL_READONLY=false.何时MSSQL_READONLY=true,无论其他设置如何,所有写入操作都会被阻止。
环境变量
| 变量 | 默认值 | 描述 | |
|---|---|---|---|
MSSQL_SERVER | localhost | SQL Server主机名或IP | |
MSSQL_DATABASE | master | 默认数据库 | |
MSSQL_USER | *(空)* | SQL Server用户名(用于SQL身份验证) | |
MSSQL_PASSWORD | *(空)* | SQL Server密码(用于SQL身份验证) | |
MSSQL_PORT | 1433 | SQL Server端口 | |
MSSQL_DRIVER | ODBC Driver 18 for SQL Server | ODBC驱动程序名称 | |
MSSQL_ENCRYPT | yes | 连接加密(yes/no) | |
MSSQL_TRUST_SERVER_CERTIFICATE | no | 信任自签名证书(yes/no) | |
MSSQL_AUTH_MODE | sql | 身份验证模式: sql, windows,或 azure | |
MSSQL_READONLY | true | 阻止所有写入操作(true/false) | |
MSSQL_ALLOW_INSERT | true | 允许插入/合并(非只读时) | |
MSSQL_ALLOW_UPDATE | true | 允许更新(非只读时) | |
MSSQL_ALLOW_DELETE | true | 允许删除/删除(非只读时) | |
MSSQL_ALLOW_DDL | true | 允许DDL操作(非只读时) | |
MSSQL_ALLOW_EXEC | true | 允许EXEC/EXEXETE(非只读时) |
身份验证模式
SQL Server身份验证(默认):
MSSQL_AUTH_MODE=sql
MSSQL_USER=your_username
MSSQL_PASSWORD=your_passwordWindows身份验证(集成安全):
MSSQL_AUTH_MODE=windows
# No username/password needed - uses current Windows credentialsAzure AD身份验证:
# Install with Azure support
pip install mssql-agent-mcp[azure]MSSQL_AUTH_MODE=azure
# Uses DefaultAzureCredential - supports managed identity, Azure CLI, etc.云连接(Azure SQL)
对于Azure SQL数据库,需要加密:
MSSQL_SERVER=your-server.database.windows.net
MSSQL_ENCRYPT=yes
MSSQL_TRUST_SERVER_CERTIFICATE=no配置
配置数据库连接:
MSSQL_SERVER=localhost
MSSQL_DATABASE=your_database
MSSQL_USER=your_username
MSSQL_PASSWORD=your_password
MSSQL_PORT=1433
MSSQL_READONLY=false # Enable write operations if needed使用Claude Desktop
添加到您的Claude Desktop配置文件中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mssql": {
"command": "mssql-agent-mcp",
"env": {
"MSSQL_SERVER": "localhost",
"MSSQL_DATABASE": "your_database",
"MSSQL_USER": "your_username",
"MSSQL_PASSWORD": "your_password"
}
}
}
}或者使用uvx(无需安装):
{
"mcpServers": {
"mssql": {
"command": "uvx",
"args": ["mssql-agent-mcp"],
"env": {
"MSSQL_SERVER": "localhost",
"MSSQL_DATABASE": "your_database",
"MSSQL_USER": "your_username",
"MSSQL_PASSWORD": "your_password"
}
}
}
}使用VS代码
添加到您的VS代码MCP配置中(.vscode/mcp.json):
{
"servers": {
"mssql": {
"command": "mssql-agent-mcp",
"env": {
"MSSQL_SERVER": "localhost",
"MSSQL_DATABASE": "your_database",
"MSSQL_USER": "your_username",
"MSSQL_PASSWORD": "your_password"
}
}
}
}或者使用uvx:
{
"servers": {
"mssql": {
"command": "uvx",
"args": ["mssql-agent-mcp"],
"env": {
"MSSQL_SERVER": "localhost",
"MSSQL_DATABASE": "your_database",
"MSSQL_USER": "your_username",
"MSSQL_PASSWORD": "your_password"
}
}
}
}工具使用示例
数据库操作
查询数据
Use the query tool with: SELECT TOP 10 * FROM Customers列出表格
Use the list_tables tool to see all tables in the database描述一张桌子
Use the describe_table tool with table: "Customers" to see its structure执行语句
Use the execute tool with: INSERT INTO Customers (Name) VALUES ('John Doe')存储过程操作
列出当前数据库中的所有过程
Use list_procedures to see all stored procedures
Optionally set include_definition: true to include the full procedure code列出所有数据库中的过程
Use list_all_procedures to see procedures from all databases
Optionally set database_filter: "material" to filter by database name将程序导出到文件
Use export_procedures_to_files with output_dir: "/home/user/procedures"
Optionally specify databases: ["materialdb", "salesdb"]编辑后更新程序
Use update_procedure_from_file with file_path: "/home/user/procedures/materialdb/dbo/usp_get_data.sql"SQL Server代理作业操作
列出所有代理作业
Use list_agent_jobs to see all jobs with their status将作业导出到文件
Use export_enabled_jobs_to_files with output_dir: "/home/user/agent_jobs"编辑后更新现有步骤
Use update_job_step_from_file with file_path: "/home/user/agent_jobs/Daily_Backup/02_backup_database.sql"创建新步骤(文件将自动重命名)
# Create a file: /home/user/agent_jobs/Daily_Backup/new_cleanup_step.sql
# With content: DELETE FROM TempTable WHERE CreatedDate < DATEADD(day, -7, GETDATE())
Use create_job_step_from_file with file_path: "/home/user/agent_jobs/Daily_Backup/new_cleanup_step.sql"
# Result: File renamed to "03_new_cleanup_step.sql" and step created in SQL Server发展
# Install in development mode
pip install -e .
# Run the server directly
python -m mssql_mcp.server需求
- Python 3.10+
- Microsoft SQL Server(任何支持的版本)
许可证
麻省理工学院
