关于 MsSqlMCP
MsSqlMCP 是面向 SQL Server 用户和数据库管理员的 MCP 服务,用于检查数据库结构并执行只读查询。它支持 stdio 与 HTTP/SSE 传输,并阻止可能修改数据的查询操作。
主要功能
- 01发现表和列
- 02查看关系与存储过程
- 03执行经过验证的 SELECT 查询
- 04支持 stdio 和 HTTP/SSE
- 05部署为 Windows 服务
适用场景
- 01了解陌生数据库的结构
- 02获取只读查询结果
- 03向 MCP 客户端提供数据库检查能力
MCP 相关
通过 stdio 或 HTTP/SSE 向 MCP 客户端提供结构检查和只读 SQL 工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MsSqlMCP
用于检查 SQL Server 数据库架构并执行只读查询的 MCP 服务。
功能
- 只读访问:所有查询都会经过验证,以防止修改数据(INSERT、UPDATE、DELETE、DROP、EXEC 等操作会被拦截)
- 架构发现:表、列、关系和存储过程
- SQL 执行:仅允许安全的 SELECT 查询
- 双传输方式:同时支持 stdio 和 HTTP/SSE 协议
- Windows 服务:可作为 Windows 服务运行,用于生产部署
- MCP 协议:兼容 VS Code Copilot、Claude Desktop 和其他 MCP 客户端
先决条件
- .NET 10(或稍作调整后使用 .NET 9)
- SQL Server
架构
项目遵循 SOLID 原则并使用依赖注入:
MsSqlMCP/
├── Program.cs # Entry point with DI and dual transport
├── SchemaTool.cs # MCP tool definitions
├── Interfaces/
│ ├── IConnectionFactory.cs # SQL connection abstraction
│ ├── IQueryExecutor.cs # Query execution abstraction
│ ├── ISchemaRepository.cs # Schema queries abstraction
│ └── ISqlQueryValidator.cs # Query validation abstraction
├── Services/
│ ├── SqlConnectionFactory.cs # Connection management
│ ├── SafeQueryExecutor.cs # Validated query execution
│ ├── SchemaRepository.cs # Schema query implementation
│ └── ReadOnlySqlQueryValidator.cs # Security validation (27 blocked keywords)
└── Tests/
└── ReadOnlySqlQueryValidatorTests.cs # 42 security tests
配置
连接字符串
编辑 appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=(local);Initial Catalog=YourDatabase;Encrypt=False;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Urls": "http://localhost:5000"
}
运行
控制台模式(开发)
# Run with both stdio and HTTP transports
dotnet run
# Run with HTTP transport only (for debugging)
dotnet run -- --http-only
运行测试
dotnet test --filter "FullyQualifiedName~Tests"
MCP 客户端配置
选项 1:stdio 传输(VS Code)
将以下内容添加到 VS Code 的 settings.json:
{
"mcp": {
"servers": {
"MsSqlMCP": {
"type": "stdio",
"command": "dotnet",
"args": ["run", "--project", "c:\\path\\to\\MsSqlMCP.csproj"]
}
}
}
}
选项 2:HTTP 传输(VS Code)
首先,启动服务:
dotnet run -- --http-only
然后将以下内容添加到 VS Code 的 settings.json:
{
"mcp": {
"servers": {
"MsSqlMCP": {
"type": "http",
"url": "http://localhost:5000/sse",
"autoApprove": [
"get_tables",
"get_columns",
"get_relationships",
"execute_sql",
"get_store_procedure"
]
}
}
}
}
选项 3:Claude Desktop
将以下内容添加到 claude_desktop_config.json:
{
"mcpServers": {
"MsSqlMCP": {
"command": "dotnet",
"args": ["run", "--project", "c:\\path\\to\\MsSqlMCP.csproj"]
}
}
}
可用工具
| 工具 | 描述 | 必需参数 |
|---|---|---|
GetTables | 获取数据库中的所有表名 | 无 |
GetColumns | 获取指定表的列(字段) | tableName |
GetRelationships | 获取表之间的外键关系 | 无 |
GetStoreProcedure | 获取存储过程定义 | spName |
ExecuteSql | 执行只读 SELECT 查询 | sqlQuery |
所有工具都接受可选的 databaseName 参数,用于查询同一 SQL Server 实例中的其他数据库。
安全性
ExecuteSql 工具仅允许 SELECT 查询。以下语句会被拦截:
- DML:INSERT、UPDATE、DELETE、MERGE、TRUNCATE
- DDL:CREATE、ALTER、DROP
- DCL:GRANT、REVOKE、DENY
- 执行操作:EXEC、EXECUTE、SP_EXECUTESQL、XP_
- 其他:BACKUP、RESTORE、BULK、OPENROWSET、OPENQUERY、OPENDATASOURCE
安装 Windows 服务
1. 发布应用程序
在开发计算机上:
cd c:\path\to\MsSqlMCP
dotnet publish -c Release -r win-x64 --self-contained true
这会在 bin\Release\net10.0\win-x64\publish\ 中创建文件。
2. 复制到服务器
将 publish 文件夹中的内容复制到服务器:
Source: bin\Release\net10.0\win-x64\publish\*
Destination: C:\Services\MsSqlMCP\
3. 在服务器上配置
使用 SQL Server 连接字符串编辑 C:\Services\MsSqlMCP\appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=YOUR_SQL_SERVER;Initial Catalog=YOUR_DATABASE;Encrypt=False;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Urls": "http://localhost:5000"
}
4. 安装服务
以管理员身份打开 PowerShell并运行:
# Create the Windows Service
sc.exe create MsSqlMCP binPath= "C:\Services\MsSqlMCP\MsSqlMCP.exe --http-only" start= auto DisplayName= "MsSql MCP Server"
# Add description
sc.exe description MsSqlMCP "Model Context Protocol server for SQL Server database inspection"
# Create logs directory
mkdir C:\Services\MsSqlMCP\logs -Force
# Start the service
net start MsSqlMCP
# Verify status
sc.exe query MsSqlMCP
5. 验证安装
# Check service status
Get-Service -Name MsSqlMCP
# Test the endpoint
Invoke-RestMethod -Uri "http://localhost:5000/sse/tools"
服务管理命令
# Stop service
net stop MsSqlMCP
# Start service
net start MsSqlMCP
# Restart service
net stop MsSqlMCP; net start MsSqlMCP
# Uninstall service
net stop MsSqlMCP
sc.exe delete MsSqlMCP
防火墙配置(如需远程访问)
# Allow inbound traffic on port 5000
New-NetFirewallRule -DisplayName "MsSqlMCP" -Direction Inbound -Port 5000 -Protocol TCP -Action Allow
HTTP API 端点
以 HTTP 模式运行时,可使用以下端点:
| 端点 | 方法 | 描述 |
|---|---|---|
/sse | GET | MCP 协议的 SSE 流 |
/sse/tools | GET | 列出所有可用工具 |
/sse/invoke | POST | 调用工具 |
示例:通过 HTTP 调用工具
curl -X POST http://localhost:5000/sse/invoke \
-H "Content-Type: application/json" \
-d '{"Tool": "GetTables", "Params": {}}'
Invoke-RestMethod -Uri "http://localhost:5000/sse/invoke" -Method POST -ContentType "application/json" -Body '{"Tool": "GetTables", "Params": {}}'
故障排除
服务无法启动
- 检查
C:\Services\MsSqlMCP\logs\中的日志 - 验证
appsettings.json中的连接字符串 - 确保服务帐户可以访问 SQL Server
- 手动运行以查看错误:
C:\Services\MsSqlMCP\MsSqlMCP.exe --http-only
连接问题
- 确认 SQL Server 正在运行
- 检查 SQL Server 端口(1433)的防火墙规则
- 如果使用 Windows Authentication,请确保服务帐户拥有数据库访问权限
端口已被占用
在 appsettings.json 中更改端口:
{
"Urls": "http://localhost:5001"
}
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。