SQL Server MCP服务器
A.基于.NET的模型上下文协议(MCP)服务器为SQL server数据库检查、查询和调试提供了6个基本工具。

快速开始
安装方式如下。NET工具(推荐)
dotnet tool install --global SqlServerLocalMcp然后在Claude Desktop中进行配置(请参阅下面的配置)。
或从源代码构建
cd SqlServerMcp
dotnet build本地测试
export SQL_SERVER_CONNECTION_STRING="Server=localhost;Database=MyDB;Trusted_Connection=True;TrustServerCertificate=True;"
dotnet runClaude桌面设置
编辑您平台的配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json
选项1:使用已安装。NET工具(推荐)
{
"mcpServers": {
"sqlserver": {
"command": "sqlserverlocal-mcp",
"args": [],
"env": {
"SQL_SERVER_CONNECTION_STRING": "Server=localhost;Database=MySqlDb;Trusted_Connection=True;TrustServerCertificate=True;"
}
}
}
}选项2:从源代码运行
{
"mcpServers": {
"sqlserver": {
"command": "dotnet",
"args": ["run", "--project", "C:\\src\\dotnet-sqlserver-mcp\\SqlServerMcp"],
"env": {
"SQL_SERVER_CONNECTION_STRING": "Server=localhost;Database=MySqlDb;Trusted_Connection=True;TrustServerCertificate=True;"
}
}
}
}重要提示:
- 使用绝对路径
- Windows:使用
\\用于睫毛或/用于正斜杠 - macOS/Linux:使用正斜杠
- 编辑后重新启动Claude Desktop
Claude CLI的设置(代码编辑器)
选项1:使用已安装。NET工具(推荐)
claude mcp add --transport stdio sqlserver \
--env SQL_SERVER_CONNECTION_STRING="Server=localhost;Database=MySqlDb;Trusted_Connection=True;TrustServerCertificate=True;" \
-- sqlserverlocal-mcp选项2:从源代码运行
窗户:
claude mcp add --transport stdio sqlserver ^
--env SQL_SERVER_CONNECTION_STRING="Server=localhost;Database=MySqlDb;Trusted_Connection=True;TrustServerCertificate=True;" ^
-- cmd /c dotnet run --project C:\src\dotnet-sqlserver-mcp\SqlServerMcpmacOS/Linux:
claude mcp add --transport stdio sqlserver \
--env SQL_SERVER_CONNECTION_STRING="Server=localhost;Database=MySqlDb;Trusted_Connection=True;TrustServerCertificate=True;" \
-- dotnet run --project /path/to/dotnet-sqlserver-mcp/SqlServerMcp附加选项:
claude mcp add --transport stdio sqlserver \
--env SQL_SERVER_CONNECTION_STRING="Server=localhost;Database=MyDB;Trusted_Connection=True;" \
--env SQL_SERVER_READONLY="true" \
--env SQL_SERVER_MAX_ROWS="500" \
-- dotnet run --project /path/to/SqlServerMcp管理命令:
claude mcp list # List all servers
claude mcp get sqlserver # View server details
claude mcp remove sqlserver # Remove server连接串
| 类型 | 示例 |
|---|---|
| Windows身份验证 | Server=localhost;Database=MyDB;Trusted_Connection=True;TrustServerCertificate=True; |
| SQL身份验证 | Server=localhost;Database=MyDB;User Id=sa;Password=Pass123;TrustServerCertificate=True; |
| Azure SQL 数据库 | Server=myserver.database.windows.net;Database=MyDB;User Id=user;Password=Pass123;Encrypt=true; |
| 本地数据库 | Server=(localdb)\\\\mssqllocaldb;Database=MyDB;Trusted_Connection=True; |
配置选项
添加到 env 章节:
| 变量 | 默认值 | 描述 |
|---|---|---|
SQL_SERVER_CONNECTION_STRING | *必需的* | 连接字符串 |
SQL_SERVER_READONLY | true | 阻止插入/更新/删除 |
SQL_SERVER_MAX_ROWS | 1000 | 返回的最大行数 |
SQL_SERVER_DEFAULT_TIMEOUT | 30 | 查询超时(秒) |
SQL_SERVER_ALLOW_PROCEDURE_EXECUTION | false | 允许存储过程 |
SQL_SERVER_ALLOWED_PROCEDURES | “ | 允许的程序(例如。, dbo.Get*,reporting.*) |
SQL_SERVER_ALLOW_FUNCTION_EXECUTION | true | 允许功能 |
带有选项的示例:
{
"mcpServers": {
"sqlserver": {
"command": "dotnet",
"args": ["run", "--project", "C:\\src\\dotnet-sqlserver-mcp\\SqlServerMcp"],
"env": {
"SQL_SERVER_CONNECTION_STRING": "Server=localhost;Database=MyDB;Trusted_Connection=True;TrustServerCertificate=True;",
"SQL_SERVER_READONLY": "true",
"SQL_SERVER_MAX_ROWS": "500",
"SQL_SERVER_ALLOW_PROCEDURE_EXECUTION": "true",
"SQL_SERVER_ALLOWED_PROCEDURES": "dbo.GetOrders,reporting.*"
}
}
}
}可用工具(6)
核心必备工具
| 工具 | 目的 | 独特价值 |
|---|---|---|
| execute_sql | 运行任何SQL查询 | 通用主力-处理自定义查询、聚合、元数据检查 |
| describe_table | 检查表架构 | 在一次调用中清除列、索引和约束的格式化输出 |
| get_procedure_definition | 查看存储的proc源代码 | 干净的T-SQL源代码,没有元数据噪声 |
| 列表存储程序 | 查找可用程序 | 包含创建/修改日期的快速筛选列表 |
| get_query_stats | 性能调试 | 按CPU/持续时间/执行计数预格式化的顶部查询 |
| get_connections | 连接监控 | 带有程序名称和登录时间的活动会话 |
用法示例
问:
- “列出数据库中的所有表”→ Uses
execute_sql使用INFORMATION_SCHEMA查询 - “描述订单表结构”→ Uses
describe_table - “哪些外键引用了Customers表?”→ Uses
execute_sql使用sys.foreign_keys查询 - “显示前10个最慢的查询”→ Uses
get_query_stats - “在Users表中查找重复的电子邮件地址”→ Uses
execute_sql与GROUP BY/HAVING合作 - “显示GetCustomerOrders存储过程的代码”→ Uses
get_procedure_definition
安全
只读模式(默认): 只允许SELECT查询。集 SQL_SERVER_READONLY=false 以允许修改。
存储过程: 需要 SQL_SERVER_ALLOW_PROCEDURE_EXECUTION=true 以及可选的同种异体。
调整限制:
"env": {
"SQL_SERVER_MAX_ROWS": "100",
"SQL_SERVER_DEFAULT_TIMEOUT": "60"
}项目结构
SqlServerMcp/
├── Program.cs # Entry point
├── Configuration/ # Config models
├── Models/ # Data models
├── Services/ # SqlService, ResultFormatter
└── Tools/ # 4 tool classes (6 essential tools)
├── QueryTools.cs # execute_sql
├── SchemaTools.cs # describe_table, list_stored_procedures
├── DiagnosticTools.cs # get_connections, get_query_stats
└── ProcedureTools.cs # get_procedure_definition发展
添加新工具: 在中创建方法 Tools/*.cs 随着 [McpServerTool] 属性:
[McpServerTool]
[Description("Your tool description")]
public async Task YourTool(
[Description("Parameter description")] string parameter)
{
// Implementation
}MCP检验员测试:
npx @modelcontextprotocol/inspector dotnet run --project SqlServerMcp需求
- .NET 8 SDK
- SQL Server(本地、Azure SQL或Docker)
- Claude桌面或Claude CLI
许可证
看 许可证 文件。
