-
项目简介: 这是一个使用.NET Core构建的Microsoft SQL Server上下文服务,它实现了Model Context Protocol (MCP)。该服务允许大型语言模型(LLM)通过标准化的MCP接口与SQL Server数据库进行深度交互,从而实现数据查询、数据库结构探索、存储过程执行等复杂操作。它可以在数据库模式下连接到特定数据库,也可以在服务器模式下管理整个SQL Server实例。
-
主要功能点:
- 核心数据库操作: 执行SQL查询,获取所有表的详细信息(包括模式、行数和大小),检索特定表的详细模式信息,以及全面的存储过程管理和执行。
- 高级工具: 支持导出/导入CSV格式的数据,分页和流式查询结果,获取索引、视图和函数元数据,以及执行SQL脚本。
- 安全性与配置: 提供可配置的工具启用/禁用选项(例如,默认禁用查询和存储过程执行),支持通过环境变量进行配置,并具备完善的错误处理。
- 模式切换: 根据数据库连接字符串自动识别并切换“数据库模式”(针对特定数据库操作)或“服务器模式”(支持跨数据库操作)。
-
安装步骤:
- 先决条件:
- 本地开发/部署需要安装 .NET 8.0 SDK。
- Docker容器部署需要安装 Docker。
- 克隆仓库:
git clone https://github.com/akashCF/dotnet-mssql-mcp.git cd dotnet-mssql-mcp - 构建项目:
dotnet build src/mssqlclient.sln - Docker镜像拉取 (推荐):
如果不想手动构建,可以直接从Docker Hub拉取官方镜像:
docker pull akashcf/dotnet-mssql-mcp:latest - 手动构建Docker镜像 (可选):
cd dotnet-mssql-mcp docker build -f src/Core.Infrastructure.McpServer/Dockerfile -t dotnet-mssql-mcp:latest src/
- 先决条件:
-
服务器配置: MCP服务器需要一个SQL Server连接字符串来连接到您的数据库。该连接字符串应包含服务器信息、认证详细信息以及任何必要的连接选项。您可以通过环境变量 'MSSQL_CONNECTIONSTRING' 来设置。 为了安全考虑,执行SQL查询和存储过程的工具默认是禁用的。您可以通过设置环境变量 'EnableExecuteQuery' 和 'EnableExecuteStoredProcedure' 为 'true' 来启用它们。
示例配置(用于MCP客户端,例如Claude Desktop):
配置本地安装的服务器: 如果您的MCP服务器是本地构建和运行的,您可以在MCP客户端(如Claude Desktop)的配置中添加以下JSON片段:
"mssql": { "command": "dotnet", "args": [ "YOUR_PATH_TO_DLL\\Core.Infrastructure.McpServer.dll" ], "env": { "MSSQL_CONNECTIONSTRING": "Server=your_server;Database=your_db;User Id=your_user;Password=your_password;TrustServerCertificate=True;", "EnableExecuteQuery": "true", "EnableExecuteStoredProcedure": "true" } }- 注释:
- 'command': 启动MCP服务器的可执行文件,这里是'dotnet'。
- 'args': 传递给'dotnet'命令的参数,这里是MCP服务器的DLL路径。请将'YOUR_PATH_TO_DLL'替换为实际的DLL文件路径。
- 'env': 环境变量,用于配置MCP服务器。
- 'MSSQL_CONNECTIONSTRING': SQL Server数据库的连接字符串。请将'your_server'、'your_db'、'your_user'、'your_password'替换为您的实际数据库信息。
- 如果您想以数据库模式运行,连接字符串中需包含'Database=your_db;'。
- 如果您想以服务器模式运行(可以管理多个数据库),则连接字符串中不应包含'Database='或'Initial Catalog='参数。
- 'EnableExecuteQuery': 设置为'true'以允许MCP客户端执行任意SQL查询。
- 'EnableExecuteStoredProcedure': 设置为'true'以允许MCP客户端执行存储过程。
- 'MSSQL_CONNECTIONSTRING': SQL Server数据库的连接字符串。请将'your_server'、'your_db'、'your_user'、'your_password'替换为您的实际数据库信息。
配置Docker容器中的服务器: 如果您选择使用Docker容器运行MCP服务器,MCP客户端的配置如下:
"mssql": { "command": "docker", "args": [ "run", "--rm", "-i", "-e", "MSSQL_CONNECTIONSTRING=Server=your_server;Database=your_db;User Id=your_user;Password=your_password;TrustServerCertificate=True;", "-e", "EnableExecuteQuery=true", "-e", "EnableExecuteStoredProcedure=true", "akashcf/dotnet-mssql-mcp:latest" ] }- 注释:
- 'command': 启动Docker容器的命令,这里是'docker'。
- 'args': 传递给'docker run'命令的参数。
- '--rm': 容器停止后自动删除。
- '-i': 保持标准输入流打开,用于MCP通信。
- '-e': 设置环境变量。用法同上,用于配置连接字符串和工具启用状态。
- 'akashcf/dotnet-mssql-mcp:latest': 要运行的Docker镜像名称和标签。
保存配置后,重启您的MCP客户端即可连接到SQL Server MCP服务。
- 注释:
-
基本使用方法: 一旦MCP客户端连接并配置成功,LLM可以调用该MCP服务器暴露的工具。
- 获取数据库能力: 调用'server_capabilities'工具来了解连接的SQL Server实例支持哪些功能和处于何种模式(服务器或数据库模式)。
- 列出表和模式:
- 在数据库模式下,使用'list_tables()'和'get_table_schema("TableName")'来查询当前连接数据库的表信息。
- 在服务器模式下,使用'list_databases()'查看所有数据库,然后用'list_tables_in_database("DbName")'和'get_table_schema_in_database("DbName", "TableName")'查询指定数据库的表信息。
- 执行查询: 如果启用了'EnableExecuteQuery',LLM可以通过'execute_query("SELECT * FROM Customers")'(数据库模式)或'execute_query_in_database("DbName", "SELECT * FROM Customers")'(服务器模式)来执行SQL查询。
- 管理存储过程:
- 使用'list_stored_procedures()'(数据库模式)或'list_stored_procedures_in_database("DbName")'(服务器模式)列出存储过程。
- 使用'get_stored_procedure_parameters("ProcedureName")'(或带'databaseName'参数)获取存储过程的参数列表和JSON Schema。
- 使用'execute_stored_procedure("ProcedureName", {"Param1": "Value1"})'(或带'databaseName'参数)执行存储过程。
LLM会根据您的请求和可用工具自动选择并调用这些功能,以获取所需信息或执行操作。
信息
分类
数据库与文件