SQL Server数据库检查工具

一个基于.NET的SQL Server数据库检查、查询和调试工具集,提供6种核心功能。

  • by brendankowitz
  • C#
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 brendankowitz/dotnet-sqlserver-mcp

使用说明

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 run

Claude桌面设置

编辑您平台的配置文件:

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\SqlServerMcp

macOS/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<string> 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

许可证

看 许可证 文件。

资源