
这是一个最小化的、只读的服务器,通过STDIO或可选的HTTP提供模型上下文协议(MCP)。该项目提供了一组工具,用于查询Microsoft SQL Server数据库中的数据,但不允许写入操作。
SELECT语句;DDL/DML/EXEC被阻止。ROW_LIMIT)和查询超时防止过大或昂贵的查询。tables、columns、query、sample、paginate、stats、columns_with_examples和explain等。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_CERTIFICATE | pymssql的TLS选项 |
ALLOW_TABLES | 允许的完整表名的逗号分隔列表 |
ALLOW_SCHEMAS | 允许的模式(例如dbo) |
DENY_COLUMNS | 禁止的列名(schema.table.col,*.col或仅col) |
DENY_PATTERNS | 在查询中禁止的正则表达式模式 |
ROW_LIMIT | 每个结果的最大行数(默认:500) |
QUERY_TIMEOUT | 查询超时时间(秒,默认:10) |
BINARY_MODE | 处理二进制数据的方式:placeholder,base64或hex |
BINARY_MAX | 编码二进制数据的最大字节数 |
LOG_LEVEL | INFO或DEBUG |
printf '{"action":"ping"}\n' | mssql-mcp
该进程从stdin读取JSON行,并在stdout输出响应。
uvicorn mssql_mcp_server.http:app --host 0.0.0.0 --port 8000
请求作为POST /mcp进行,带有与STDIO相同的JSON正文形式。
| 操作 | 参数 | 描述 |
|---|---|---|
ping | – | 健康检查 |
tools | – | 提供所有工具的概述 |
tables | – | 列出已发布的表 |
columns | table | 表的列元数据 |
columns_with_examples | table,n(可选) | 元数据加上示例值 |
query | sql | 执行一个安全的SELECT |
sample | table,n(可选) | SELECT TOP n * FROM table |
paginate | sql,offset,fetch | 查询的分页 |
stats | table,sample_n(可选) | 行数+样本 |
explain | sql | 查询的启发式分析 |
为了持久服务,提供了一个示例单元:
sudo cp scripts/mssql-mcp.service /etc/systemd/system/
sudo systemctl enable --now mssql-mcp
该服务期望代码和虚拟环境位于/opt/mssql-mcp。
该项目使用pymssql,pydantic和python-dotenv。通过pip install -e .安装所有依赖项。