MCP SQL Server工具
 ](https://www.nuget.org/packages/Alyio.McpMssql)
只读 模型上下文协议(MCP) 用于Microsoft SQL server的服务器,支持元数据发现、参数化查询和查询分析,具有基于配置文件的配置和严格的无DML/DDL强制。
要求: .NET 10.0 SDK、SQL Server和连接字符串。
快速启动
集 MCPMSSQL_CONNECTION_STRING 并以以下方式之一运行服务器:
# Option 1: Run from NuGet package (e.g. with MCP Inspector)
export MCPMSSQL_CONNECTION_STRING="Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
npx -y @modelcontextprotocol/inspector dotnet dnx Alyio.McpMssql --prerelease# Option 2: Install and run as a global tool
dotnet tool install --global Alyio.McpMssql --prerelease
export MCPMSSQL_CONNECTION_STRING="Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
npx -y @modelcontextprotocol/inspector mcp-mssql# Option 3: Run from source (clone repo, then)
export MCPMSSQL_CONNECTION_STRING="Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
npx -y @modelcontextprotocol/inspector dotnet run --project src/Alyio.McpMssql使用 --prerelease 对于预发布版本。
配置
所有设置都使用 MCPMSSQL 前缀。 平坦的 环境变量(例如。 MCPMSSQL_CONNECTION_STRING)是配置的直接方法 默认 当您只有一个连接时,请使用配置文件。对于多个配置文件,用户范围 appsettings.json 文件是推荐的。
单连接: 通过环境变量进行配置。
# Connection string (required).
export MCPMSSQL_CONNECTION_STRING="Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
# Optional description for the default profile (tooling/AI discovery).
export MCPMSSQL_DESCRIPTION="Primary connection"
# Optional max rows per interactive query (default `500`; hard ceiling `1000`).
export MCPMSSQL_QUERY_MAX_ROWS="500"
# Optional query timeout in seconds (default `30`).
export MCPMSSQL_QUERY_COMMAND_TIMEOUT_SECONDS="60"
# Optional max rows for snapshot queries (default `10000`; hard ceiling `50000`).
export MCPMSSQL_QUERY_SNAPSHOT_MAX_ROWS="10000"
# Optional snapshot query timeout in seconds (default `120`).
export MCPMSSQL_QUERY_SNAPSHOT_COMMAND_TIMEOUT_SECONDS="120"
# Optional analyze timeout in seconds (default `300`).
export MCPMSSQL_ANALYZE_COMMAND_TIMEOUT_SECONDS="300"多个连接: 使用用户范围 appsettings.json 文件(推荐)。Env-vars也通过工作。NET主机约定(MCPMSSQL__PROFILES____CONNECTIONSTRING等等)。
- 类Unix:
~/.config/mcp-mssql/appsettings.json - 窗户:
%USERPROFILE%\.config\mcp-mssql\appsettings.json
示例(appsettings.json):
{
"McpMssql": {
"Profiles": {
"default": {
"ConnectionString": "Server=...;User ID=...;Password=...;",
"Description": "Primary connection",
"Query": {
"MaxRows": 500,
"CommandTimeoutSeconds": 60,
"SnapshotMaxRows": 10000,
"SnapshotCommandTimeoutSeconds": 120
},
"Analyze": {
"CommandTimeoutSeconds": 300
}
},
"warehouse": {
"ConnectionString": "Server=warehouse.example.com;...",
"Description": "Warehouse read-only"
}
}
}
}地方发展: 将连接字符串存储在用户机密中,然后使用运行 DOTNET_ENVIRONMENT=Development 所以秘密负载。
dotnet user-secrets set "MCPMSSQL_CONNECTION_STRING" "..." --project src/Alyio.McpMssql
npx -y @modelcontextprotocol/inspector -e DOTNET_ENVIRONMENT=Development dotnet run --project src/Alyio.McpMssql工具和资源
所有工具都接受可选 profile;如果省略,则使用默认配置文件。
工具
| 工具 | 描述 | 关键参数 |
|---|---|---|
list_profiles | 列出已配置的连接配置文件。选择非默认配置文件时,请先致电。 | — |
get_server_properties | 获取服务器属性和执行限制(超时、行上限、护栏)。 | profile |
list_objects | 列出目录元数据。 kind=catalog:数据库; schema:模式; relation:表格/视图; routine:程序/功能。 catalog 省略→ 活动目录(忽略 kind=catalog). schema 遗漏取决于种类。 | kind, profile, catalog, schema |
get_object | 获取一个关系或例程的元数据。使用 list_objects 解析名称。如果满足以下条件,则返回空的详细信息有效载荷 includes 为空。 | kind, name, profile, catalog, schema, includes |
run_query | 执行只读T-SQL SELECT;只允许使用SELECT(不允许使用DML/DDL)。以CSV格式返回结果 data 字段(内联)或快照资源URI snapshot=true.内联限制:500行(硬天花板1000行)。快照限制:10000行。更喜欢 analyze_query 用于计划调整。 | sql, profile, catalog, parameters, snapshot |
analyze_query | 分析只读SELECT的执行计划。返回紧凑的JSON摘要(成本、运算符、基数、警告、索引、等待、统计数据)。从以下位置获取完整XML plan_uri;不返回结果行。 | sql, profile, catalog, parameters, estimated |
kind—catalog,schema,relation,或routine.为get_object,仅relation或routine.includes--细节部分数组:columns,indexes,constraints(仅关系),definition(仅限例行程序)。
资源
| URI模板 | 描述 |
|---|---|
mssql://profiles | 列出已配置的连接配置文件。数据与 list_profiles. |
mssql://server-properties?{profile} | 获取服务器属性和执行限制。数据与 get_server_properties. |
mssql://objects?{kind,profile,catalog,schema} | 列出目录元数据。模式省略行为匹配 list_objects. |
mssql://objects/{kind}/{name}{?profile,catalog,schema,includes} | 获取一个关系或例程的元数据。 includes 是必需的。 |
mssql://plans/{id} | 按ID检索完整的XML执行计划 analyze_query;参赛作品将在7天后过期。 |
mssql://snapshots/{id} | 按ID检索CSV格式的完整查询结果 run_query (快照=真);条目将在1天后过期。 |
资源镜像其相应的工具并返回JSON(除了 mssql://plans/{id} 它返回XML和 mssql://snapshots/{id} 返回CSV)。
安全
只读(SELECT 仅);参数化的 @paramName.对连接字符串使用环境变量或用户机密——永远不要提交机密。
MCP主机示例
常见MCP客户端的代码段。用您自己的连接字符串替换;确保 dotnet 在你的路径上。这 env 如果连接字符串已通过以下方式设置,则不需要块 appsettings.json 或环境变量。
光标
{
"mcpServers": {
"mssql": {
"command": "dotnet",
"args": ["dnx", "Alyio.McpMssql", "--prerelease", "--yes"],
"env": {
"MCPMSSQL_CONNECTION_STRING": "Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
}
}
}
}双子座
{
"mcpServers": {
"mssql": {
"command": "dotnet",
"args": ["dnx", "Alyio.McpMssql", "--prerelease", "--yes"],
"env": {
"MCPMSSQL_CONNECTION_STRING": "Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
}
}
}
}法典
[mcp_servers.mssql]
command = "dotnet"
args = ["dnx", "Alyio.McpMssql", "--prerelease", "--yes"]
[mcp_servers.mssql.env]
MCPMSSQL_CONNECTION_STRING = "Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"开放代码
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mssql": {
"type": "local",
"enabled": true,
"command": ["dotnet", "dnx", "Alyio.McpMssql", "--prerelease", "--yes"],
"environment": {
"MCPMSSQL_CONNECTION_STRING": "Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
}
}
}
}克劳德代码
{
"mcpServers": {
"mssql": {
"command": "dotnet",
"args": ["dnx", "Alyio.McpMssql", "--prerelease", "--yes"],
"env": {
"MCPMSSQL_CONNECTION_STRING": "Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
}
}
}
}GitHub Copilot
{
"inputs": [],
"servers": {
"mssql": {
"type": "stdio",
"command": "dotnet",
"args": ["dnx", "Alyio.McpMssql", "--prerelease", "--yes"],
"env": {
"MCPMSSQL_CONNECTION_STRING": "Server=127.0.0.1;User ID=sa;Password=;Encrypt=True;TrustServerCertificate=True;"
}
}
}
}集成测试
测试使用真实的SQL Server和 default 个人资料(MCPMSSQL_CONNECTION_STRING 来自环境变量或用户秘密)。该套件需要一个名为的数据库 McpMssqlTest:连接字符串必须包括 Initial Catalog=McpMssqlTest测试基础架构创建、种子和删除此数据库。设置测试项目的秘密:
dotnet user-secrets set "MCPMSSQL_CONNECTION_STRING" \
"Server=localhost,1433;User ID=sa;Password=...;TrustServerCertificate=True;Encrypt=True;Initial Catalog=McpMssqlTest;" \
--project test/Alyio.McpMssql.Tests为什么不使用数据API生成器?
Data API Builder(DAB)是一个完整的REST/GraphQL API,包含CRUD和auth。此项目是一个用于代理的小型只读MCP服务器:stdio,仅参数化SELECT,最小表面。为代理工作流和低运营开销选择此选项;为CRUD、REST/GraphQL和丰富策略选择DAB。
贡献
未决问题或PR;遵循现有样式,并在适当的地方添加测试。
许可证
MIT。看 许可证.
