返回市场
mssql_mcp_服务器

mssql_mcp_服务器

作者:DominikWoh2 星标更新:2025-09-15

项目介绍

SQL MCP Openwebui

MSSQL MCP Server

这是一个最小化的、只读的服务器,通过STDIO或可选的HTTP提供模型上下文协议(MCP)。该项目提供了一组工具,用于查询Microsoft SQL Server数据库中的数据,但不允许写入操作。

特性

  • 纯读取访问 — 只允许SELECT语句;DDL/DML/EXEC被阻止。
  • 白名单与黑名单 — 可以释放或锁定表或模式;可以禁止列名和正则表达式模式。
  • 资源限制 — 行数限制(ROW_LIMIT)和查询超时防止过大或昂贵的查询。
  • JSON输出 — 结果被序列化为JSON,二进制数据可以作为占位符、Base64或十六进制编码。
  • 工具 — 包括tablescolumnsquerysamplepaginatestatscolumns_with_examplesexplain等。

安装

git clone https://github.com/DominikWoh/mssql_mcp_server
cd mssql_mcp_server
./scripts/install.sh             # 创建虚拟环境并安装依赖项
cp .env.example .env             # 修改访问数据及限制
source .venv/bin/activate        # 激活虚拟环境
pip install --upgrade pip setuptools wheel
pip install -r requirements.txt 2>/dev/null || true
pip install fastapi 'uvicorn[standard]'

配置

连接和安全规则由.env文件中的环境变量控制:

变量描述
MSSQL_SERVER主机和端口,例如192.168.0.55,1433
MSSQL_DATABASE目标数据库
MSSQL_USER / MSSQL_PASSWORD访问凭据
MSSQL_ENCRYPT / MSSMSQL_TRUST_SERVER_CERTIFICATEpymssql的TLS选项
ALLOW_TABLES允许的完整表名的逗号分隔列表
ALLOW_SCHEMAS允许的模式(例如dbo
DENY_COLUMNS禁止的列名(schema.table.col*.col或仅col
DENY_PATTERNS在查询中禁止的正则表达式模式
ROW_LIMIT每个结果的最大行数(默认:500)
QUERY_TIMEOUT查询超时时间(秒,默认:10)
BINARY_MODE处理二进制数据的方式:placeholderbase64hex
BINARY_MAX编码二进制数据的最大字节数
LOG_LEVELINFODEBUG

启动服务器

STDIO

printf '{"action":"ping"}\n' | mssql-mcp

该进程从stdin读取JSON行,并在stdout输出响应。

HTTP

uvicorn mssql_mcp_server.http:app --host 0.0.0.0 --port 8000

请求作为POST /mcp进行,带有与STDIO相同的JSON正文形式。

支持的操作

操作参数描述
ping健康检查
tools提供所有工具的概述
tables列出已发布的表
columnstable表的列元数据
columns_with_examplestablen(可选)元数据加上示例值
querysql执行一个安全的SELECT
sampletablen(可选)SELECT TOP n * FROM table
paginatesqloffsetfetch查询的分页
statstablesample_n(可选)行数+样本
explainsql查询的启发式分析

Systemd集成

为了持久服务,提供了一个示例单元:

sudo cp scripts/mssql-mcp.service /etc/systemd/system/
sudo systemctl enable --now mssql-mcp

该服务期望代码和虚拟环境位于/opt/mssql-mcp

开发

该项目使用pymssqlpydanticpython-dotenv。通过pip install -e .安装所有依赖项。