使用说明
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-对于数据库级DMVSELECT上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被阻止
- 平滑关闭 -退出时连接池已正确关闭
许可证
麻省理工学院