SQL Server MCP Server
# SQL Server MCP Server (Python)
Um servidor [Model Context Protocol (MCP)](https://modelcontextprotocol.io) em Python para integração com bancos de dados **Microsoft SQL Server**.
O servidor disponibiliza ferramentas completas de inspeção de schema e operações CRUD (Create, Read, Update, Delete), além de recursos MCP para consulta rápida de dados e schemas.
## Ferramentas Disponíveis (Tools)
### Schema & Inspeção
- `list_schemas()`: Lista todos os schemas de usuário presentes no banco de dados.
- `list_tables(schema_name=None)`: Lista tabelas e views do banco de dados com opção de filtro por schema.
- `get_table_schema(table_name, schema_name="dbo")`: Retorna detalhes estruturais da tabela (colunas, tipos de dados, chaves primárias, chaves estrangeiras e identidades).
- `get_database_schema(schema_name=None, table_name=None)`: Retorna o schema completo do banco de dados ou filtrado.
### Operações CRUD
- `read_records(table_name, schema_name="dbo", columns=None, where_clause=None, params=None, order_by=None, limit=100, offset=0)`: Consulta registros de uma tabela com colunas personalizadas, filtros `WHERE` parametrizados, ordenação e paginação.
- `read_query(sql_query, params=None)`: Executa uma query `SELECT` personalizada em T-SQL com suporte a parâmetros posicionais (`?`).
- `insert_record(table_name, data, schema_name="dbo")`: Insere um único registro (dicionário chave/valor) em uma tabela.
- `bulk_insert_records(table_name, records, schema_name="dbo")`: Insere múltiplos registros em lote dentro de uma transação.
- `update_records(table_name, data, where_clause, where_params=None, schema_name="dbo")`: Atualiza registros correspondentes a uma cláusula `WHERE` parametrizada.
- `delete_records(table_name, where_clause, params=None, schema_name="dbo")`: Remove registros correspondentes a uma cláusula `WHERE` de forma segura.
- `execute_sql(sql_statement, params=None)`: Executa comandos DDL/DML arbitrários (CREATE, ALTER, DROP, INSERT, UPDATE, DELETE).
## Recursos MCP (Resources)
- `sqlserver://schema`: Retorna o schema completo do banco de dados em formato JSON.
- `sqlserver://tables`: Retorna a lista de tabelas e views disponíveis.
## Instalação e Configuração
### 1. Requisitos
- Python >= 3.10
- Driver SQL Server (Suporta `pyodbc` com ODBC Driver do SQL Server e `pymssql` para conexões puras em Python).
### 2. Configuração do Ambiente (`.env`)
Crie um arquivo `.env` na raiz do projeto ou defina as variáveis de ambiente:
```env
SQLSERVER_HOST=localhost
SQLSERVER_PORT=1433
SQLSERVER_DATABASE=MeuBanco
SQLSERVER_USER=sa
SQLSERVER_PASSWORD=SuaSenha123!
SQLSERVER_DRIVER_TYPE=auto
SQLSERVER_TRUST_SERVER_CERTIFICATE=true
```
#### Uso com SQL Server Express LocalDB
O servidor possui suporte nativo ao **SQL Server LocalDB** (com suporte a anexar arquivos `.mdf` diretamente):
**Via variáveis de ambiente (`.env`):**
```env
SQLSERVER_USE_LOCALDB=true
SQLSERVER_LOCALDB_INSTANCE=MSSQLLOCALDB
SQLSERVER_DATABASE=MeuBanco
# Opcional: Caminho para anexar um arquivo .mdf diretamente
# SQLSERVER_ATTACH_DB_FILENAME=C:\Caminho\Para\Banco.mdf
```
Ou configurando `SQLSERVER_HOST=(localdb)\MSSQLLOCALDB`.
**Via linha de comando:**
```bash
python -m sql_server_mcp.server --localdb --database MeuBanco
# Ou anexando um arquivo MDF:
python -m sql_server_mcp.server --localdb --attach-db-filename C:\Data\MeuBanco.mdf
```
### 3. Instalação
```bash
python -m venv .venv
# Windows
.\.venv\Scripts\activate
# Linux/macOS
source .venv/bin/activate
pip install -e .
```
## Configuração em Clientes MCP
### Exemplo de `mcp.json` / Configuração de Cliente
```json
{
"mcpServers": {
"sql-server": {
"command": "python",
"args": [
"-m",
"sql_server_mcp.server"
],
"env": {
"SQLSERVER_HOST": "localhost",
"SQLSERVER_PORT": "1433",
"SQLSERVER_DATABASE": "MeuBanco",
"SQLSERVER_USER": "sa",
"SQLSERVER_PASSWORD": "SuaSenha123!",
"SQLSERVER_TRUST_SERVER_CERTIFICATE": "true"
}
},
"sql-server-localdb": {
"command": "python",
"args": [
"-m",
"sql_server_mcp.server",
"--localdb",
"--database", "MeuBanco"
]
}
}
}
```
## 🐳 Docker & Makefile
Você pode usar o `Makefile` para facilitar a compilação e execução via Docker:
```bash
# Compilar a imagem Docker
make build
# Executar o servidor MCP em container utilizando as variáveis do .env
make run
# Rodar os testes unitários dentro do container Docker
make docker-test
# Exibir ajuda dos comandos Makefile
make help
```
---
## 🧪 Testes
Para rodar os testes unitários da aplicação:
```bash
pytest
```
TDQS
Scored across 11 tools
Several tools have overlapping boundaries: get_table_schema and get_database_schema overlap when filtering by table name, read_records and read_query both perform reads, and execute_sql can perform the same insert/update/delete operations as the dedicated CRUD tools. The descriptions help clarify intent, but an agent may still select the wrong tool in some scenarios.
The tools generally follow a consistent verb_noun snake_case pattern (list_tables, insert_record, update_records, delete_records). There is minor inconsistency between list, get, and read prefixes, but the naming remains predictable and easy to navigate.
11 tools is well-scoped for a SQL Server MCP server. The set includes schema discovery, table inspection, record reads, CRUD operations, bulk insertion, and raw SQL execution without feeling bloated.
The tool surface covers the core database lifecycle: listing schemas/tables, inspecting schema definitions, reading records, inserting, updating, deleting, bulk inserting, and executing DDL/DML. There are no obvious missing operations for typical SQL Server management and data access workflows.