• 项目简介: 这是一个使用.NET Core构建的Microsoft SQL Server上下文服务,它实现了Model Context Protocol (MCP)。该服务允许大型语言模型(LLM)通过标准化的MCP接口与SQL Server数据库进行深度交互,从而实现数据查询、数据库结构探索、存储过程执行等复杂操作。它可以在数据库模式下连接到特定数据库,也可以在服务器模式下管理整个SQL Server实例。

  • 主要功能点:

    • 核心数据库操作: 执行SQL查询,获取所有表的详细信息(包括模式、行数和大小),检索特定表的详细模式信息,以及全面的存储过程管理和执行。
    • 高级工具: 支持导出/导入CSV格式的数据,分页和流式查询结果,获取索引、视图和函数元数据,以及执行SQL脚本。
    • 安全性与配置: 提供可配置的工具启用/禁用选项(例如,默认禁用查询和存储过程执行),支持通过环境变量进行配置,并具备完善的错误处理。
    • 模式切换: 根据数据库连接字符串自动识别并切换“数据库模式”(针对特定数据库操作)或“服务器模式”(支持跨数据库操作)。
  • 安装步骤:

    1. 先决条件:
      • 本地开发/部署需要安装 .NET 8.0 SDK。
      • Docker容器部署需要安装 Docker。
    2. 克隆仓库:
      git clone https://github.com/akashCF/dotnet-mssql-mcp.git
      cd dotnet-mssql-mcp
    3. 构建项目:
      dotnet build src/mssqlclient.sln
    4. Docker镜像拉取 (推荐): 如果不想手动构建,可以直接从Docker Hub拉取官方镜像:
      docker pull akashcf/dotnet-mssql-mcp:latest
    5. 手动构建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客户端执行存储过程。

    配置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会根据您的请求和可用工具自动选择并调用这些功能,以获取所需信息或执行操作。

信息

分类

数据库与文件