这个项目能做什么
这是一个默认只读的 Microsoft SQL Server Model Context Protocol (MCP) 服务器,以 .NET NuGet 包(Alyio.McpMssql)的形式分发,目标框架为 .NET 8.0 和 10.0。其设计旨在让 AI 代理和开发人员以最小的运营开销安全地与 SQL Server 实例进行交互。
核心功能包括目录元数据发现(列出数据库、架构、表、视图、存储过程和函数)、执行安全的参数化仅 SELECT 查询(可配置行数限制和超时时间),以及用于慢查询诊断的执行计划分析。analyze_query 工具返回执行计划的紧凑 JSON 摘要,包括成本、运算符详细信息、基数估计、警告、索引建议以及等待统计信息,完整的 XML 计划可通过专用资源 URI 获取,该 URI 在 7 天后过期。
配置支持通过 MCPMSSQL_ 前缀的环境变量进行单连接设置,以及通过用户作用域的 appsettings.json 文件进行多配置文件设置(在类 Unix 系统上位于 ~/.config/mcp-mssql/appsettings.json,在 Windows 上位于 %USERPROFILE%\.config\mcp-mssql\appsettings.json)。每个配置文件的设置包括连接字符串、查询行数上限、超时值和可选的写入访问权限。它通过 Microsoft.Data.SqlClient 原生支持使用 Microsoft Entra 身份验证的 Azure SQL。
服务器暴露了一组 MCP 工具:list_profiles 用于枚举配置的连接,get_server_properties 用于检索服务器限制和属性,list_objects 和 get_object 用于元数据发现,run_query 用于执行仅 SELECT 查询(支持最多 1000 行的内联结果或最多 50000 行的快照 CSV 结果,快照在 1 天后过期),analyze_query 用于执行计划分析,以及 run_command 用于执行 DDL/DML 写入操作。run_command 工具默认禁用,仅在明确设置 AllowWrite=true 的配置文件中启用,并被标记为破坏性操作,以便宿主端进行确认门控。
安全默认设置为只读:写入访问权限是按配置文件明确选择的,查询使用参数化 @paramName 绑定以防止注入。AllowWrite 标志是一个应用层保护,而不是数据库安全边界;为了实现严格的只读保证,文档建议使用限制为 db_datareader 角色的登录名。
它可以通过三种方式部署:直接从 NuGet 包运行,安装为全局 .NET 工具,或从源代码运行。文档为常见的 MCP 宿主(包括 Cursor、Gemini、Codex、Open Code、Claude Code 和 GitHub Copilot)提供了配置代码片段。
集成测试需要一个包含 McpMssqlTest 数据库的真实 SQL Server 实例,并建议按顺序运行测试框架,以避免跨进程数据库竞争条件。项目路线图包括计划支持 MCP Tasks 扩展(SEP-2663),通过持久任务句柄而不是阻塞来处理长时间运行的查询,但这取决于客户端对该扩展的采用情况。该项目采用 MIT 许可证。
评论
0 评分人数达到10人后显示
登录后参与讨论。