Token导航 LogoToken导航TokenDH.com
Net MCP Sqlserver logo
数据服务未说明官方级别未说明来源级核验

Net MCP Sqlserver

MCP Server

一个基于MCP协议的安全SQL Server只读查询工具,提供数据库切换、表结构查询、存储过程查看等功能,确保数据不被修改。

工具数

12

提示词数

0

GitHub Stars

0

资源数

0
数据分析开发工具C#Claude数据安全Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

vimalgovind143

提供方

vimalgovind143

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

SQL Server MCP服务器

一个模型上下文协议(MCP)服务器,提供与Microsoft SQL server数据库交互的工具,使用官方C#SDK构建。

特性

  • 🔒 只读安全:强制执行仅限SELECT的操作,以防止意外修改数据
  • 动态数据库切换:在同一服务器上的数据库之间切换,而无需重新启动
  • 数据库列表:查看所有可用数据库,突出显示当前数据库
  • 执行SQL查询:对当前数据库运行只读SQL查询
  • 列表表格:获取当前数据库中所有具有行数的表
  • 获取表架构:检索特定表的列信息
  • 连接信息:显示当前数据库连接状态
  • 存储过程:列出具有模式和日期的存储过程,获取包括参数、定义和依赖关系在内的详细信息
  • 对象定义:统一端点,用于获取任何数据库对象(过程、函数、视图)的详细信息,包括定义、参数/列和依赖关系
  • 批处理对象定义:在一次调用中请求多个具有限制和每个对象状态的对象定义
  • 健康检查:验证连接并查看服务器属性
  • 结构化日志记录:JSON日志记录到stderr,其中包含相关ID和时间
  • Serilog集成:通过JSON格式的Serilog进行结构化日志记录
  • 行限制执行:每次查询最多返回100行

🔒 安全特性

此MCP服务器设计为 只读安全 为防止意外修改数据:

受阻操作:

  • ❌ INSERT、UPDATE、DELETE语句
  • ❌ DROP、CREATE、ALTER语句
  • ❌ TRUNCATE、MERGE运营
  • ❌ EXEC/EXEXETE存储过程
  • ❌ 授予、撤销、拒绝权限
  • ❌ 批量操作
  • ❌ 选择INTO(对象创建)
  • ❌ 单个请求中有多个语句
  • ❌ 任何非SELECT语句
  • ❌ 使用、设置、DBCC、备份、恢复、重新配置、sp_configure

允许的操作:

  • ✅ SELECT查询用于数据检索
  • ✅ 数据库列表和切换
  • ✅ 表架构检查
  • ✅ 连接状态查询

错误消息:

当尝试阻止操作时,服务器会提供明确、特定的错误消息:

❌ UPDATE operations are not allowed. This MCP server is READ-ONLY and only supports SELECT queries for data viewing.

附加安全功能:

  • 查询超时保护(可配置,默认30秒)
  • 输入验证和净化
  • 详细的错误报告和有用的指导
  • 所有响应中的安全模式指示灯

动态数据库管理

MCP服务器现在支持动态数据库切换,允许您:

  1. 列出所有数据库 -查看SQL Server实例上的每个数据库
  2. 切换数据库 -在不重新启动服务器的情况下更改活动数据库
  3. 跟踪当前上下文 -所有操作(查询、表列表)都在当前数据库上进行
  4. 连接验证 -服务器在切换之前验证数据库连接

工作流程示例:

User: List all databases
Server: [Shows all databases with current one highlighted]

User: Switch to Northwind database  
Server: [Successfully switches and confirms]

User: Show me all tables
Server: [Shows tables from Northwind database]

当在同一服务器上处理多个数据库时,此功能特别有用,例如开发、暂存和生产环境。

设置

先决条件

  • .NET 10.0 SDK
  • SQL Server(本地或远程)
  • 访问目标数据库

安装

  1. 克隆或下载此项目
  2. 导航到项目目录
  3. 还原NuGet包:
dotnet restore
  1. 构建项目:
dotnet build

配置

配置值可以通过环境变量或 appsettings.json。环境变量优先。

使用环境变量设置连接字符串:

# Windows
set SQLSERVER_CONNECTION_STRING="Server=your_server;Database=your_database;User Id=your_username;Password=your_password;TrustServerCertificate=true;"

# PowerShell
$env:SQLSERVER_CONNECTION_STRING="Server=your_server;Database=your_database;User Id=your_username;Password=your_password;TrustServerCertificate=true;"

# Linux/macOS
export SQLSERVER_CONNECTION_STRING="Server=your_server;Database=your_database;User Id=your_username;Password=your_password;TrustServerCertificate=true;"

默认连接字符串:如果没有设置环境变量,则默认为:

Server=localhost;Database=master;Trusted_Connection=true;TrustServerCertificate=true;

您还可以配置SQL命令超时(秒):

# Windows
set SQLSERVER_COMMAND_TIMEOUT=60

# PowerShell
$env:SQLSERVER_COMMAND_TIMEOUT=60

# Linux/macOS
export SQLSERVER_COMMAND_TIMEOUT=60

如果未设置,则超时默认为 30 秒。

或者,您可以通过配置 appsettings.json 放在可执行文件旁边或项目目录下:

{
  "SqlServer": {
    "ConnectionString": "Server=localhost;Database=master;Trusted_Connection=true;TrustServerCertificate=true;",
    "CommandTimeout": 30
  }
}

优先: Environment variablesappsettings.json → 内置默认值。

运行服务器

dotnet run

服务器将启动并通过stdio监听MCP协议消息。

与Claude Desktop集成

  1. 复制 claude_desktop_config.json 文件到您的Claude Desktop配置目录
  2. 更新配置文件中的连接字符串以匹配您的数据库
  3. 重新启动克劳德桌面

配置文件应放置在:

  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Linux: ~/.config/claude/claude_desktop_config.json

可用工具

1.货币数据库

通过结构化请求日志记录获取当前数据库连接信息。

参数:

行为:

  • 发出带有关联ID和经过时间的Serilog开始/结束事件
  • 在有效载荷中包括只读安全指示器

示例用法:

Show me the current database connection info

2.切换数据库

切换到同一服务器上具有详细审核日志记录的其他数据库。

参数:

  • databaseName (string):要切换到的数据库的名称

行为:

  • 在切换之前验证连接,并记录成功/失败的详细信息
  • 当交换机发生故障时,捕获相关ID、经过的时间和错误信息

示例用法:

Switch to the Northwind database

3.获取数据库

获取SQL Server实例上所有数据库的列表,并突出显示当前数据库。

参数:

示例用法:

List all databases on this SQL Server instance

4.执行查询

对当前数据库执行SQL查询。

参数:

  • query (string):要执行的SQL查询
  • maxRows (int,可选):请求的行(默认为100;夹紧为100)

示例用法:

Please execute "SELECT TOP 10 * FROM Users ORDER BY CreatedDate DESC" and show me the results

笔记:

  • 服务器强制每个查询100行的硬上限。任何更高的请求都被限制在100。
  • 服务器安全注入 TOP 在第一次之后 SELECT 当不存在时,为现有的设置上限 TOP 如果它超过100。

5.重新查询(SRS)

执行具有结果格式、每次调用超时和参数绑定的只读T-SQL查询。匹配SRS read_query 规范。

参数:

  • query (字符串,必填):T-SQL SELECT 声明
  • timeout (int,可选):每次调用超时时间(秒);默认值为30;夹紧1–300
  • max_rows (int,可选):请求的最大行数;默认值为1000;夹紧1–10000
  • format (字符串,可选): json | csv | table (HTML);默认 json
  • parameters (object,可选):要绑定的命名参数(例如。, { id: 42 });按键可以包含或省略 @
  • delimiter (字符串,可选):CSV分隔符;默认 ,;使用 tab\t 对于选项卡

行为:

  • 强制只读验证(仅限SELECT,阻止DDL/DML/EXEC和多个语句)
  • 如果提供,则应用每次呼叫超时;否则使用服务器默认值
  • 注射器或盖子 TOP 尊重 max_rows
  • 退货:

- json:显式对象数组 null 价值观 - csv:带标题行和正确引号的CSV字符串 - table:带标题的转义HTML表

  • 包含 elapsed_ms, row_count,以及 columns 元数据(name, data_type, allow_null, size)

示例用法:

ReadQuery query="SELECT * FROM Orders WHERE CustomerID = @id ORDER BY CreatedAt DESC" parameters={"id": 123} max_rows=500 format=csv delimiter="," timeout=60

5.GetTables

获取当前数据库中所有具有行数的表的列表。

参数:

示例用法:

Show me all tables in the current database

6.GetTableSchema

获取特定表的架构信息。

参数:

  • tableName (string):表的名称
  • schemaName (字符串,可选):架构名称(默认为“dbo”)

示例用法:

Get the schema for the Users table

7. GetStored程序

获取当前数据库中的存储过程列表。

参数:

示例用法:

List all stored procedures

8.获取存储的程序详细信息

获取特定存储过程的详细信息,包括参数、定义和依赖关系。

参数:

  • procedureName (string):存储过程的名称
  • schemaName (字符串,可选):架构名称(默认为“dbo”)

退货:

  • 程序元数据(名称、模式、创建/修改日期)
  • 包含数据类型、方向(输入/输出)和默认值的完整参数列表
  • 过程的完整T-SQL定义
  • 依赖关系(过程引用的表、视图和其他对象)

示例用法:

Get details for the stored procedure sp_GetUserOrders
Show me the parameters and definition of dbo.sp_CalculateRevenue

答复包括:

  • procedure_info -名称、模式、日期、定义和元数据
  • parameters -包含类型、精度、比例和输出标志的完整参数列表
  • dependencies -过程引用的所有数据库对象

9.GetObject定义

获取统一端点中任何数据库对象(存储过程、函数或视图)的详细信息。

参数:

  • objectName (string):数据库对象的名称
  • schemaName (字符串,可选):架构名称(默认为“dbo”)
  • objectType (字符串,可选):对象类型-“PROCEDURE”、“FUNCTION”、“VIEW”或“AUTO”可自动检测(默认为“AUTO”)

退货:

  • 对象元数据(名称、模式、类型、创建/修改日期、完整定义)
  • 程序和功能:包含数据类型、方向和默认值的完整参数列表
  • 查看视图:包含数据类型和属性的列信息
  • 依赖关系(引用的所有数据库对象)

示例用法:

Get the definition of sp_GetCustomerOrders
Show me details for the view vw_SalesReport
Get information about the function fn_CalculateDiscount in the sales schema

主要特点:

  • 自动检测:自动确定对象是过程、函数还是视图
  • 统一接口:所有对象类型都使用单个工具,而不是单独的工具
  • 全面的:返回特定于对象的信息(过程/函数的参数、视图的列)
  • 完整源代码:包括完整的T-SQL定义(如果可用)

答复包括:

  • object_info -名称、模式、类型、日期和完整的T-SQL定义
  • parameters -(用于程序/函数)参数详细信息,包括类型和方向
  • columns -(对于视图)具有数据类型和属性的列架构
  • dependencies -此对象引用的所有数据库对象

10.GetObject定义

在一次调用中获取多个数据库对象的定义,并具有内置限制和每个对象的状态。

参数:

  • objectNames (string):逗号或换行符分隔的对象名称列表;模式可以提供为 schema.object
  • schemaName (字符串,可选):未提供时的默认架构名称(默认为“dbo”)
  • objectType (字符串,可选):“PROCEDURE”、“FUNCTION”、“VIEW”或“AUTO”(默认)可自动检测每个对象
  • maxObjects (int,可选):要处理的最大对象数(默认值为10,上限为25)

行为:

  • 处理不同的对象名称,最多可达 maxObjects
  • 除非强制类型,否则使用自动检测
  • 返回每个对象的状态(OKNOT_FOUND)因此,缺少的对象不会阻止批处理
  • 包括每个对象的依赖关系、参数(过程/函数)和列(视图)详细信息

示例用法:

GetObjectDefinitions objectNames="dbo.Users, dbo.Orders, reporting.vw_Sales" maxObjects=5

11.GetServerHealth

检查连接并返回服务器属性。

参数:

示例用法:

Check server health and show properties

退货:

  • server_name, product_version, product_level, edition, current_database, server_time
  • 状态和连接性指标

连接字符串示例

身份验证

Server=localhost;Database=YourDatabase;Trusted_Connection=true;TrustServerCertificate=true;

使用用户名和密码

Server=localhost;Database=YourDatabase;User Id=your_username;Password=your_password;TrustServerCertificate=true;

Azure SQL数据库

Server=your_server.database.windows.net;Database=YourDatabase;User Id=your_username@your_server;Password=your_password;Encrypt=true;TrustServerCertificate=false;

安全注意事项

  • 此服务器直接对您的数据库执行SQL查询
  • 确保配置了正确的数据库权限
  • 尽可能使用参数化查询来防止SQL注入
  • 考虑将数据库用户的权限限制在必要的范围内
  • 切勿在版本控制中暴露带有密码的连接字符串

错误处理

服务器返回以下描述性错误消息:

  • 连接失败
  • SQL语法无效
  • 权限问题
  • 找不到数据库

发展

要修改或扩展服务器,请执行以下操作:

  1. 向中添加新方法 SqlServerTools
  2. [McpServerTool] 属性
  3. 添加 [Description] 参数的属性
  4. 重建项目

新工具示例:

[McpServerTool, Description("Get all stored procedures in the database")]
public static async Task GetStoredProceduresAsync()
{
    // Implementation here
}

测试

要在本地测试服务器,请执行以下操作:

  1. 设置本地SQL Server实例
  2. 配置连接字符串
  3. 运行服务器: dotnet run
  4. 使用Claude Desktop或其他MCP兼容客户端进行测试

依赖项

  • ModelContextProtocol (1.2.0)-官方MCP C#SDK
  • Microsoft.Data.SqlClient (7.0.0)-SQL Server连接
  • Microsoft.Extensions.Hosting (10.0.5)-主机基础结构

许可证

本项目按原样提供,用于教育和发展目的。

日志记录

此项目使用Serilog进行结构化日志记录。

  • 默认接收器:写入JSON日志 stderr (不干扰MCP stdio)
  • 日志内容:开始/结束事件 correlation_id, operation, elapsed_ms,加上错误详细信息
  • 配置:Serilog从以下位置读取设置 appsettings.json 如存在

示例 appsettings.json Serilog块:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    }
  }
}

日志可以直接从 stderr 或者根据主机环境的需要重定向。

目录标签

目录标签

数据分析开发工具C#Claude数据安全数据库查询本地部署只读访问SQLServer

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

12

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP