SQL服务器查询工具

一个基于Python开发的SQL Server查询工具,提供数据库探索、安全查询执行和结构分析功能。

  • by moigomes
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 moigomes/sqlserver-mcp

使用说明

🗄️ MCP服务器:SQL Server(非官方)

Python开发者:Moises Gomes

🌐 官方网站: moigomes.github.io/sqlserver-mcp-site

Python中的MCP(模型上下文协议)服务器通过查询Microsoft SQL Server pyodbc展示用于数据库挖掘,执行安全查询和结构分析的工具。


📋 索引


📦 先决条件

  • Python 3.10+
  • 驱动程序ODBC做SQL Server instalado
  • 访问 SQL Server

🚀 安装

macOS

  1. Instale o自制 (如果还没有):

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  2. 安装 ODBC 驱动程序和工具:

    brew update
    brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
    brew install --no-sandbox msodbcsql18 mssql-tools18
    brew install unixodbc
    

    ⚠️ 请求时接受 Microsoft 许可证。

  3. 克隆仓库并配置:

    git clone <url-do-repositorio>
    cd sqlserver-mcp
    
    # Crie o ambiente virtual
    python3 -m venv .venv
    source .venv/bin/activate
    
    # Instale as dependências
    pip install -r requirements.txt
    
    # Configure as variáveis de ambiente
    cp .env.example .env
    # Edite o arquivo .env com suas credenciais
    

Linux(Ubuntu/Debian)

  1. 添加 Microsoft 仓库:

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
    curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
    
  2. 安装 ODBC 驱动程序:

    sudo apt-get update
    sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
    sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18
    sudo apt-get install -y unixodbc-dev
    
  3. 将工具添加到 PATH 中 (可选):

    echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
    source ~/.bashrc
    
  4. 克隆仓库并配置:

    git clone <url-do-repositorio>
    cd sqlserver-mcp
    
    # Crie o ambiente virtual
    python3 -m venv .venv
    source .venv/bin/activate
    
    # Instale as dependências
    pip install -r requirements.txt
    
    # Configure as variáveis de ambiente
    cp .env.example .env
    nano .env  # ou use seu editor preferido
    

视窗

  1. 下载并安装 ODBC 驱动程序:

    • Acesse:https://learn.microsoft.com/pt-br/sql/connect/odbc/download-odbc-driver-for-sql-server
    • 下载“ODBC Driver 18 for SQL Server”
    • 运行安装程序并按照说明操作
  2. 安装 Python (如果还没有):

    • 下载到 :https://www.python.org/downloads/
    • 在安装过程中,选择“Add Python to PATH”
  3. 克隆仓库并配置:

    git clone <url-do-repositorio>
    cd sqlserver-mcp
    
    # Crie o ambiente virtual
    python -m venv .venv
    .venv\Scripts\activate
    
    # Instale as dependências
    pip install -r requirements.txt
    
    # Configure as variáveis de ambiente
    copy .env.example .env
    notepad .env
    

🐳 码头工人

运行服务器而不在本地安装依赖关系的最简单方法。

  1. 构建图像:

    docker build -t sqlserver-mcp .
    
  2. 创建文件 .env 您的凭据:

    cp .env.example .env
    # Edite o .env com suas configurações
    
  3. 执行o容器:

    # Modo interativo (para testes)
    docker run -it --env-file .env sqlserver-mcp
    
    # Ou com docker-compose
    docker-compose up -d
    
  4. 有用的命令:

    # Ver logs
    docker-compose logs -f
    
    # Parar
    docker-compose down
    
    # Rebuild após alterações
    docker-compose up -d --build
    

⚙️ 配置

档案 .env

创建文件 .env 在项目根中,使用以下变量:

# Conexão obrigatória
SQLSERVER_SERVER=seu_servidor
SQLSERVER_DATABASE=seu_banco
SQLSERVER_USERNAME=seu_usuario
SQLSERVER_PASSWORD=sua_senha

# Opcionais
SQLSERVER_PORT=1433
SQLSERVER_DRIVER=ODBC Driver 18 for SQL Server
SQLSERVER_ENCRYPT=yes
SQLSERVER_TRUST_SERVER_CERTIFICATE=no
SQLSERVER_TRUSTED_CONNECTION=no

# Logging (DEBUG, INFO, WARNING, ERROR)
SQLSERVER_LOG_LEVEL=INFO

# Connection Pool
SQLSERVER_POOL_SIZE=5
SQLSERVER_POOL_IDLE_TIME=300

可信连接(Trusted Connection)

若要使用 Windows 集成身份验证:

SQLSERVER_SERVER=seu_servidor
SQLSERVER_DATABASE=seu_banco
SQLSERVER_TRUSTED_CONNECTION=yes

▶️ 执行

独立模式(用于测试)

# macOS/Linux
source .venv/bin/activate
python server.py

# Windows
.venv\Scripts\activate
python server.py

服务器正在等待 STDIO 连接 。使用 Ctrl+C 锁起来。

连接测试

运行测试客户端以验证配置:

python client_smoke.py

🔌 Cursor 集成

打开光标设置 (Cmd+Shift+J 哦 Ctrl+Shift+J)并添加到 mcpServers:

macOS/Linux

{
  "mcpServers": {
    "sqlserver-mcp": {
      "command": "/caminho/para/sqlserver-mcp/.venv/bin/python",
      "args": ["/caminho/para/sqlserver-mcp/server.py"],
      "cwd": "/caminho/para/sqlserver-mcp",
      "env": {
        "PYTHONPATH": ".",
        "PYTHONUNBUFFERED": "1"
      }
    }
  }
}

视窗

{
  "mcpServers": {
    "sqlserver-mcp": {
      "command": "C:\\caminho\\para\\sqlserver-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\caminho\\para\\sqlserver-mcp\\server.py"],
      "cwd": "C:\\caminho\\para\\sqlserver-mcp",
      "env": {
        "PYTHONPATH": ".",
        "PYTHONUNBUFFERED": "1"
      }
    }
  }
}

💡 智利环境变量可以在文件中定义 .env (自动加载)或直接在光标设置中。


🛠️ 可用工具

连接和诊断

工具 描述 参数
test_connection() 有效连接并返回 SQL Server 版本 -
pool_stats() 返回连接池统计 -

Schema 探索

工具 描述 参数
list_schemas() 可用方案列表 -
list_tables(schema?) 银行表格列表。 schema (可选)
list_views(schema?) Lista views do banco schema (可选)
list_procedures(schema?) Lista存储过程 schema (可选)
list_functions(schema?) 用户功能列表。 schema (可选)

表格分析

工具 描述 参数
describe_table(table_name, schema?) 描述一个表格的列。 table_name, schema
get_indexes(table_name, schema?) 返回表中的索引。 table_name, schema
get_primary_key(table_name, schema?) 返回主键。 table_name, schema
get_foreign_keys(table_name, schema?) 返回外国钥匙 table_name, schema
get_table_relationships(table_name, schema?) 返回所有关系。 table_name, schema
get_table_row_count(table_name, schema?) 大致的行数。 table_name, schema

执行查询

工具 描述 参数
run_query(sql, max_rows?) 咨询执行人选择/CTE sql, max_rows (标准:1000)

🔐 环境变量

| 变量 | 标准 | 描述 | |----------|-------------|--------|-----------| | SQLSERVER_SERVER |✅ 是 | - | 服务器地址 | | SQLSERVER_DATABASE | 没有 | - | 数据库名称 | | SQLSERVER_USERNAME | 条件* | - | 用户身份验证 | | SQLSERVER_PASSWORD | 条件* | - | 验证密码 | | SQLSERVER_PORT | 没有 | 1433 | 服务器端口 | | SQLSERVER_DRIVER | 没有 | ODBC Driver 18 for SQL Server | ODBC Driver | | SQLSERVER_ENCRYPT | 否 | 是 | 加密连接 | | SQLSERVER_TRUST_SERVER_CERTIFICATE | 否 | 否 | 信任自签名证书 | | SQLSERVER_TRUSTED_CONNECTION | 否 | 否 | 使用 Windows 身份验证 | | SQLSERVER_LOG_LEVEL | 否 | 信息 | 日志级别 (DEBUG/INFO/WARNING/ERROR) | | SQLSERVER_POOL_SIZE | 否 | 5 | 连接池的最大大小 | | SQLSERVER_POOL_IDLE_TIME 300 最大空闲时间(秒)

* SQLSERVER_USERNAME e SQLSERVER_PASSWORD 是强制性的,如果 SQLSERVER_TRUSTED_CONNECTION 不像 yes.


🔒 安全

服务器实现了多个安全层:

1. 查询验证

  • ✅ 只 SELECT e WITH (CTE)是允许的
  • ❌ 锁定 : INSERT, UPDATE, DELETE, DROP, CREATE, ALTER, TRUNCATE
  • ❌ 锁定 : EXEC, EXECUTE, xp_*, sp_configure
  • ❌ 锁定 : OPENROWSET, OPENDATASOURCE, BULK

2. SQL注入保护

  • ❌ 多个语句被阻止(例如: SELECT 1; DROP TABLE x)
  • ✅ 内部使用参数化查询

3. 只读交易

  • 所有查询都在交易中执行 ROLLBACK 自动的
  • 即使有些东西通过验证,也不会有任何东西持续下去。

错误代码

代码 类别 描述
E101 连接 连接失败
E102 连接 超时
E201 配置 缺少配置
E301 验证 输入验证错误
E303 安全性 查询被安全性阻止
E401 执行 查询错误
E402 执行 表未找到
E404 执行 权限被拒绝

💡 智利

驱动程序ODBC

  • macOS:使用 SQLSERVER_DRIVER=ODBC Driver 18 for SQL Server
  • Linux:使用 SQLSERVER_DRIVER=ODBC Driver 18 for SQL Server
  • 视窗:使用 SQLSERVER_DRIVER=ODBC Driver 18 for SQL Server

自我认证

对于具有自签名证书的开发环境:

SQLSERVER_TRUST_SERVER_CERTIFICATE=yes

⚠️ 不要在生产中使用。

非标准端口

SQLSERVER_PORT=1434

调试

对于详细日志 :

SQLSERVER_LOG_LEVEL=DEBUG

连接池

要根据您的负载调整池:

SQLSERVER_POOL_SIZE=10
SQLSERVER_POOL_IDLE_TIME=600

🔌 其他兼容客户

此 MCP 服务器可用于任何与 MCP 兼容的客户端。 模型上下文协议设置与光标相似 。

IDE 和编辑器

  • 克劳德桌面 (macOS,Windows) - Anthropic官方应用程序
  • VS代码+GitHub副本 MCP预览支持
  • 泽德 (macOS、Linux)-编辑器moderno
  • 帆板运动 专注于AI的IDE
  • 继续 VS Code 的开源扩展

移动电子桌面

  • 5ire -辅助IA桌面
  • 所有 -跨平台聊天客户端
  • 杰诺娃AI -移动+桌面
  • 系统提示MCP (iOS) - 语音控制

云企业

  • 亚马逊Q开发者 -CLI da AWS
  • 微软哨兵 MCP的安全性

📖 完整的客户名单:https://glama.ai/mcp/clients
📖 MCP规格:https://modelcontextprotocol.io


📄 许可证

这个项目是非官方的,是独立开发的。


🤝 贡献

欢迎捐款!打开一个 issue 或 pull request。