SQL Server代理与数据库管理工具

一个提供与Microsoft SQL Server数据库交互和管理SQL Server Agent Jobs工具的MCP服务器,支持将存储过程和Agent Jobs作为代码进行版本控制。

  • by yyinhsu
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 yyinhsu/mssql-agent-mcp

使用说明

MSSQL代理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"

此工具:

  1. 解析文件路径以提取数据库、模式和过程名称
  2. 如果存在,还会从标题注释中读取元数据
  3. 自动转换 CREATE PROCEDURE 到 ALTER PROCEDURE
  4. 更新前验证程序是否存在
  5. 执行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
END

SQL 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"

此工具:

  1. 解析文件路径以提取作业名称和步骤ID
  2. 读取SQL内容(跳过元数据标头)
  3. 使用验证SQL语法 SET PARSEONLY
  4. 使用以下命令更新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"

此工具自动执行以下操作:

  1. 验证/重命名文件 -如果文件名不匹配 {step_id}_{step_name}.sql 格式,它:

    • 扫描文件夹中的现有SQL文件以查找使用的步骤ID
    • 查询数据库中现有的步骤ID
    • 确定下一个可用步骤ID
    • 重命名文件(例如。, my_new_step.sql → 03_my_new_step.sql)
  2. 验证SQL语法 -在创建步骤之前检查语法错误

  3. 创建步骤 -用途 sp_add_jobstep 在SQL Server中创建该步骤

  4. 更新文件 -向SQL文件添加正确的元数据标头

参数:

  • file_path (必需):SQL文件的路径
  • database_name (可选):步骤的目标数据库(默认为“master”)
  • auto_rename (可选):自动重命名命名错误的文件(默认为true)

文件名格式

SQL文件必须遵循以下命名约定:

{step_id}_{step_name}.sql

示例:

  • 01_truncate_tables.sql
  • 02_load_data.sql
  • 03_update_statistics.sql
  • 10_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-tools18

Ubuntu/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_password

Windows身份验证(集成安全):

MSSQL_AUTH_MODE=windows
# No username/password needed - uses current Windows credentials

Azure 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(任何支持的版本)

许可证

麻省理工学院