mcpField
M
MsSqlMCP

MsSqlMCP

本地服务
github.com/jdlemes数据库848 周前更新

关于 MsSqlMCP

MsSqlMCP 是面向 SQL Server 用户和数据库管理员的 MCP 服务,用于检查数据库结构并执行只读查询。它支持 stdio 与 HTTP/SSE 传输,并阻止可能修改数据的查询操作。

主要功能

  1. 01发现表和列
  2. 02查看关系与存储过程
  3. 03执行经过验证的 SELECT 查询
  4. 04支持 stdio 和 HTTP/SSE
  5. 05部署为 Windows 服务

适用场景

  1. 01了解陌生数据库的结构
  2. 02获取只读查询结果
  3. 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 模式运行时,可使用以下端点:

端点方法描述
/sseGETMCP 协议的 SSE 流
/sse/toolsGET列出所有可用工具
/sse/invokePOST调用工具
示例:通过 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": {}}'

故障排除

服务无法启动
  1. 检查 C:\Services\MsSqlMCP\logs\ 中的日志
  2. 验证 appsettings.json 中的连接字符串
  3. 确保服务帐户可以访问 SQL Server
  4. 手动运行以查看错误:C:\Services\MsSqlMCP\MsSqlMCP.exe --http-only
连接问题
  1. 确认 SQL Server 正在运行
  2. 检查 SQL Server 端口(1433)的防火墙规则
  3. 如果使用 Windows Authentication,请确保服务帐户拥有数据库访问权限
端口已被占用

在 appsettings.json 中更改端口:

{
  "Urls": "http://localhost:5001"
}

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。