内容
# mcp-server-mssql
[](LICENSE)
[](https://www.typescriptlang.org/)
[](https://modelcontextprotocol.io/)
一个 [模型上下文协议](https://modelcontextprotocol.io/) 服务器,为LLM代理提供安全、结构化的访问Microsoft SQL Server:模式检查加上行级CRUD,每个操作参数化和日志记录。
构建是因为与实际业务数据库交互的代理需要更多 than "运行这个SQL字符串" — 他们需要具有可预测故障模式的输入工具。
## 工作原理
```mermaid
flowchart LR
A[MCP客户端<br/>Claude Desktop / Claude Code] -- 标准输入输出 --> B[mcp-server-mssql]
B --> C[连接池<br/>mssql驱动]
C --> D[(SQL Server)]
B -. 结构化日志 .-> E[日志/]
```
服务器连接到通过环境变量配置的单个数据库,并公开六种工具。所有查询都是参数化的 — 表和列名在运行任何语句之前都会针对实时模式进行验证,因此代理无法通过标识符注入。
## 工具
| 工具 | 功能 |
|---|---|
| `list_tables` | 列出配置数据库中的所有用户表 |
| `get_table_schema` | 获取表的列名、类型、空值性和默认值 |
| `read_table_rows` | 读取行,可选列选择、WHERE筛选、ORDER BY和LIMIT |
| `create_table_records` | 插入一行或多行(列/值根据模式验证) |
| `update_table_records` | 更新匹配筛选的行;返回影响行数 |
| `delete_table_records` | 删除匹配筛选的行;返回影响行数 |
### 示例交互
> **用户:** "哪些客户本月注册了?"
>
> **代理** 调用 `list_tables` → 找到 `Customers` → 调用 `get_table_schema {"table_name": "Customers"}` → 看到 `CreatedAt datetime2` → 调用 `read_table_rows {"table_name": "Customers", "filters": {"CreatedAt": {">=": "2026-07-01"}}, "limit": 50}` → 返回行。
## 安装
需要Node.js 18+和网络访问SQL Server实例。
```bash
git clone https://github.com/TerraCo89/mcp-server-mssql.git
cd mcp-server-mssql
npm install
cp .env.example .env # 填写连接详情
npm run build
```
### 配置(环境变量)
| 变量 | 必需 | 备注 |
|---|---|---|
| `MSSQL_HOST` / `MSSQL_PORT` | 是 / 否 | 端口默认为1433 |
| `MSSQL_USER` / `MSSQL_PASSWORD` | 是 | SQL身份验证凭证 |
| `MSSQL_DATABASE` | 是 | 每个服务器实例的单个数据库 |
| `MSSQL_ENCRYPT`, `MSSQL_TRUST_SERVER_CERTIFICATE` | 否 | TLS选项 |
| `LOG_LEVEL` | 否 | 默认`info` |
### 与Claude Desktop / Claude Code一起使用
```json
{
"mcpServers": {
"mssql": {
"command": "node",
"args": ["/path/to/mcp-server-mssql/dist/server.js"],
"env": {
"MSSQL_HOST": "localhost",
"MSSQL_USER": "agent_reader",
"MSSQL_PASSWORD": "...",
"MSSQL_DATABASE": "MyDb"
}
}
}
}
```
提示:指向一个权限最小的SQL登录 — 服务器只能执行登录可以执行的操作。
## 开发
```bash
npm run dev # ts-node与实时加载
npm test # jest测试套件(src/*.test.ts, tests/)
npm run build # 发出dist/
```
Docker:`docker build -t mcp-server-mssql .` 然后使用相同的环境变量运行。
## License
[MIT](LICENSE)