项目简介

这是一个基于 Model Context Protocol (MCP) 构建的服务器端应用,旨在通过标准化的 JSON-RPC 接口,为大型语言模型 (LLM) 客户端提供与 Microsoft SQL Server 数据库交互的能力。它允许 LLM 访问数据库资源(如列出表、获取表结构、列出数据库)、执行查询以及管理和执行存储过程。

服务器可以工作在两种模式下:

  • 数据库模式: 连接字符串指定了具体数据库,工具操作限定在该数据库范围内。
  • 服务器模式: 连接字符串未指定具体数据库,提供服务器范围的操作,例如列出所有数据库,或在指定数据库中执行操作。

主要功能点

  • 数据库操作:
    • 执行 SQL 查询并返回结果(需启用)。
    • 列出数据库中的所有表,包括 schema 和行数信息。
    • 获取指定表的详细 schema 信息。
    • 列出所有数据库(仅限服务器模式)。
    • 在指定数据库中执行查询、列出表、获取表 schema(仅限服务器模式)。
  • 存储过程管理:
    • 列出数据库中的所有存储过程。
    • 获取指定存储过程的 SQL 定义。
    • 获取指定存储过程的参数信息(支持表格或 JSON Schema 格式)。
    • 执行存储过程,支持参数的自动类型转换(需启用)。
    • 在指定数据库中管理和执行存储过程(仅限服务器模式)。
  • 能力声明: 提供 'server_capabilities' 工具,报告 SQL Server 版本、Edition 以及支持的特定功能。
  • 安全与配置: 可通过配置环境变量或 appsettings.json 文件来控制是否启用高风险的查询执行和存储过程执行工具,增加安全性。

安装步骤

该服务器是一个 .NET 应用,可以通过以下方式部署:

  1. 本地直接运行:

    • 确保已安装 .NET 9.0 SDK。
    • 从仓库构建项目,生成可执行文件(通常在 'src/Core.Infrastructure.McpServer/bin/[Configuration]/net9.0/' 目录下)。
    • 设置 'MSSQL_CONNECTIONSTRING' 环境变量来指定数据库连接字符串。根据连接字符串是否包含 'Database=' 参数来决定服务器运行在数据库模式或服务器模式。
    • (可选)设置 'EnableExecuteQuery' 和 'EnableExecuteStoredProcedure' 环境变量为 'true' 以启用查询和存储过程执行工具。
    • 运行生成的可执行文件。
  2. 使用 Docker 容器:

    • 确保已安装 Docker。
    • 可以从 Docker Hub 拉取官方镜像:'docker pull aadversteeg/mssqlclient-mcp-server:latest'。
    • 或者从源代码手动构建 Docker 镜像(参考仓库中的 Dockerfile)。
    • 运行 Docker 容器,通过 '-e' 参数设置 'MSSQL_CONNECTIONSTRING' 及可选的 'EnableExecuteQuery' 和 'EnableExecuteStoredProcedure' 环境变量。容器需要能够连接到你的 SQL Server 实例。

服务器配置 (MCP 客户端使用)

MCP 客户端(如 Claude Desktop)需要配置启动命令、参数和环境变量来启动并连接到此 MCP 服务器。以下是配置示例所需要的信息(具体路径和连接字符串需要根据实际情况填写):

  • 服务器名称: 可以自定义,例如 'mssql' 或 'sql-server-mcp'。
  • 命令 (command):
    • 本地运行可执行文件时,通常是 'dotnet' 或直接指定构建好的 '.exe' / 可执行文件路径。
    • 使用 Docker 容器时,是 'docker'。
  • 参数 (args):
    • 本地运行 '.dll' 文件时,参数为 '["YOUR_PATH_TO_DLL\Core.Infrastructure.McpServer.dll"]'。
    • 本地运行 '.exe' 文件时,参数为 '["YOUR_PATH_TO_EXE\Core.Infrastructure.McpServer.exe"]'。
    • 使用 Docker 容器时,参数为 '["run", "--rm", "-i", "-e", "MSSQL_CONNECTIONSTRING=...", "-e", "EnableExecuteQuery=...", "-e", "EnableExecuteStoredProcedure=...", "aadversteeg/mssqlclient-mcp-server:latest"]'。
  • 环境变量 (env):
    • 必须包含 'MSSQL_CONNECTIONSTRING' 环境变量,其值是你的 SQL Server 连接字符串。例如:'Server=your_server;Database=your_db;User Id=your_user;Password=your_password;TrustServerCertificate=True;'。如果省略 'Database=' 参数,服务器将运行在服务器模式。
    • 可选包含 'EnableExecuteQuery' 和 'EnableExecuteStoredProcedure' 环境变量,用于控制是否启用查询和存储过程执行工具。值可以是 '"true"' 或 '"false"'。

例如,使用本地构建的 DLL 的配置可能包含:

  • 'command': 'dotnet'
  • 'args': '["C:\path\to\mssqlclient-mcp-server\src\Core.Infrastructure.McpServer\bin\Debug\net9.0\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" }'

使用 Docker 容器的配置可能包含:

  • '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", "aadversteeg/mssqlclient-mcp-server:latest"]'
  • 'env': '{}' (环境变量直接包含在 docker run 的参数中)

基本使用方法

配置完成后,兼容的 MCP 客户端(如配置好的 Claude Desktop)启动时会自动运行该服务器。客户端通过发送 JSON-RPC 请求来调用服务器提供的工具(如 'list_tables'、'execute_query' 等),并接收服务器返回的 JSON-RPC 响应。LLM 可以根据这些工具的能力描述和返回结果与 SQL Server 进行交互。

信息

分类

数据库与文件