SQL服务器监控工具

MSSQL MCP Server为Microsoft SQL Server提供只读访问,支持查询执行、性能分析、健康监控和故障排除。

  • by Elad-Health
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 elad-nofy/mssql-mcp

使用说明

MSSQL MCP服务器

Microsoft SQL server的MCP(模型上下文协议)服务器。为AI助手提供对SQL Server的只读访问权限,用于查询执行、性能分析、健康监控和故障排除。

特征

连接与发现

  • test_连接 -验证SQL Server连接和身份验证
  • 列表_数据库 -列出所有数据库的状态和大小
  • get_server_info -服务器版本、版本和配置

查询执行

  • execute_query -运行只读SELECT查询(已阻止插入/更新/删除)
  • get_expensive_查询 -从计划缓存中查找资源密集型查询
  • get_runing_查询 -查看当前正在执行的查询

模式探索

  • get_tables -列出具有行数、大小和元数据的表
  • get_columns -表的列定义(类型、键、默认值)
  • get_stored_procedures -列出并查看存储过程代码
  • get_functions -列出并查看用户定义的函数代码
  • 获取视图 -列表和视图定义
  • 获取外国人密钥 -表关系和约束
  • 获取索引 -包含列的索引定义
  • get_triggers -带有事件类型的表触发器
  • get_connected_users -活动会话和连接

性能分析

  • get_blocking -识别阻塞链和死锁
  • 获取等待状态 -分析瓶颈的等待统计数据
  • get_cpuusage -环形缓冲区的CPU使用历史记录
  • get_index_usage -查找未使用或缺失的索引

健康监测

  • get_database_states -数据库运行状况和状态
  • get_disk_space -数据和日志文件空间使用情况
  • get_memory_用法 -缓冲池和内存管理员统计数据
  • get_log_space -事务日志使用情况
  • 获取备份状态 -上次备份时间和状态

SQL代理作业

  • list_jobs -所有具有状态的SQL代理作业
  • get_runing_jobs -当前正在执行作业
  • 失败的作业 -最近的作业失败
  • get_job_历史 -作业的执行历史记录

可用性组

  • 获取_状态 -始终开启的AG运行状况和同步状态
  • get_replica_states -详细的副本信息
  • get_cluster_status -WSFC集群状态

安装

npx @elad-nofy/mssql-mcp

配置

环境变量

# Required
MSSQL_HOST=your-server.domain.com

# Optional
MSSQL_PORT=1433                          # Default: 1433
MSSQL_DATABASE=master                    # Default: master

# Authentication - Windows Auth (default)
# Leave MSSQL_USER and MSSQL_PASSWORD empty for Windows Authentication

# Authentication - SQL Auth
MSSQL_USER=your_username
MSSQL_PASSWORD=your_password

# Connection Options
MSSQL_ENCRYPT=false                      # Default: false
MSSQL_TRUST_SERVER_CERTIFICATE=true      # Default: true
MSSQL_CONNECTION_TIMEOUT=30000           # Default: 30000ms
MSSQL_REQUEST_TIMEOUT=30000              # Default: 30000ms

克劳德代码CLI

窗户:

{
  "mcpServers": {
    "mssql": {
      "command": "cmd",
      "args": ["/c", "npx", "@elad-nofy/mssql-mcp"],
      "env": {
        "MSSQL_HOST": "your-server.domain.com"
      }
    }
  }
}

macOS/Linux:

{
  "mcpServers": {
    "mssql": {
      "command": "npx",
      "args": ["@elad-nofy/mssql-mcp"],
      "env": {
        "MSSQL_HOST": "your-server.domain.com"
      }
    }
  }
}

Windows 身份验证

对于Windows身份验证,请在具有SQL server访问权限的帐户下运行MCP服务器。服务器将自动使用进程凭据。

必需的权限

SQL Server登录需要以下权限:

  • VIEW SERVER STATE -对于DMV(等待统计、阻塞等)
  • VIEW DATABASE STATE -对于数据库级DMV
  • SELECT 上 msdb -有关SQL代理作业信息

例子:

USE master;
CREATE LOGIN [DOMAIN\ServiceAccount] FROM WINDOWS;
GRANT VIEW SERVER STATE TO [DOMAIN\ServiceAccount];
GRANT VIEW ANY DATABASE TO [DOMAIN\ServiceAccount];

USE msdb;
CREATE USER [DOMAIN\ServiceAccount] FOR LOGIN [DOMAIN\ServiceAccount];
GRANT SELECT ON SCHEMA::dbo TO [DOMAIN\ServiceAccount];

示例用法

探索数据库架构

"What tables are in the Orders database?"
→ Uses get_tables to list all tables with row counts

"Show me the columns in the Customers table"
→ Uses get_columns to show column definitions

"What stored procedures exist for order processing?"
→ Uses get_stored_procedures with name filter

"How are the tables related?"
→ Uses get_foreign_keys to map relationships

调查性能问题

"Check for blocking on PROD-SQL-01"
→ Uses get_blocking to show blocking chains

"What are the top CPU-consuming queries?"
→ Uses get_expensive_queries sorted by CPU

"Show me the wait stats"
→ Uses get_wait_stats to identify bottlenecks

健康检查

"Are all databases healthy?"
→ Uses get_database_states to check status

"When was the last backup for each database?"
→ Uses get_backup_status to show backup times

"Check disk space on SQL Server"
→ Uses get_disk_space for file usage

作业疑难解答

"What jobs failed in the last 24 hours?"
→ Uses get_failed_jobs to show failures

"Is the nightly backup job running?"
→ Uses get_running_jobs to check status

故障排除

连接问题

“用户登录失败”

  • 验证SQL Server是否允许身份验证类型(Windows/SQL)
  • 检查帐户是否具有服务器级权限
  • 对于Windows Auth,确保进程以正确的用户身份运行

“连接超时”

  • 验证与SQL Server的网络连接
  • 检查防火墙是否允许端口1433(或自定义端口)
  • 增加 MSSQL_CONNECTION_TIMEOUT 如有需要

“无法打开数据库”

  • 验证帐户是否可以访问数据库
  • 检查数据库是否联机: SELECT state_desc FROM sys.databases

权限错误

“服务器主体无法访问数据库”

  • 在目标数据库中创建登录用户
  • 授予适当的权限

“查看服务器状态权限被拒绝”

  • 服务器级别的授权: GRANT VIEW SERVER STATE TO [login]

发展

# Install dependencies
npm install

# Build
npm run build

# Run in development (watch mode)
npm run dev

安全说明

  • 按设计只读 -只允许SELECT查询
  • 代码中没有秘密 -所有凭据都通过环境变量
  • 参数化查询 -防止SQL注入
  • 危险作业受阻 -插入、更新、删除、EXEC被阻止
  • 平滑关闭 -退出时连接池已正确关闭

许可证

麻省理工学院