Install
$ agentstack add mcp-wendellottoni-mcp-sqlserver ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
MCP SQL Server
Servidor MCP (Model Context Protocol) para Microsoft SQL Server. Permite que Claude Code, Codex, Cursor, Windsurf, Cline, Continue e outras ferramentas MCP explorem schema, relacionamentos e executem consultas SQL com foco em seguranca.
O que ele faz
- Explora schemas, tabelas, colunas, indices, procedures e foreign keys
- Monta ranking por intencao com
find_entities - Sugere caminhos de join com
suggest_join_path - Gera plano de consulta com
plan_query - Valida SQL antes de executar com
validate_query - Executa
SELECTe, opcionalmente, escrita controlada por permissoes - Mantem catalogo em memoria com cache e refresh
- Permite trocar o banco ativo em runtime com
switch_database - Permite trocar a porta ativa em runtime com
switch_port - Permite trocar porta, usuario, senha e banco em uma unica acao com
switch_connection - Lista bancos acessiveis no servidor com
list_databases - Mostra a conexao ativa com
current_connection - Retorna respostas em formato visual com box-drawing ASCII/Unicode durante a execucao das tools
Ferramentas disponiveis
| Ferramenta | Descricao | |------------|-----------| | current_connection | Mostra servidor, porta, banco ativo, permissao e cache | | list_databases | Lista bancos acessiveis no SQL Server atual | | list_schemas | Lista todos os schemas do banco | | list_tables | Lista tabelas e views agrupadas por schema | | find_tables | Busca tabelas e views por nome | | describe_table | Mostra colunas, PK, FK, checks, identity e computed | | list_indexes | Lista indices, key columns e included columns | | table_stats | Mostra rows, tamanho e datas da tabela | | find_columns | Busca colunas por nome em todas as tabelas | | relationship_map | Mostra o mapa de relacionamentos de um schema | | list_procedures | Lista procedures e functions | | query | Executa SQL respeitando as regras de permissao | | permissions | Mostra o modo atual e operacoes permitidas/bloqueadas | | sample_values | Retorna amostras distintas de valores por coluna | | query_with_explanation | Executa query de leitura e adiciona interpretacao curta | | switch_database | Troca o banco ativo da sessao atual sem reiniciar o MCP | | switch_port | Troca a porta SQL Server da sessao atual sem reiniciar o MCP | | switch_connection | Troca porta, usuario, senha e banco juntos com uma unica reconexao | | refresh_metadata | Recarrega o catalogo em cache | | health | Mostra estado da conexao e metricas do cache | | find_entities | Busca entidades por linguagem natural | | schema_summary | Resume schemas e tabelas mais conectadas | | explain_table | Explica o papel provavel de uma tabela | | suggest_join_path | Sugere joins a partir do grafo de FKs | | plan_query | Gera um plano de consulta a partir de um objetivo | | validate_query | Analisa SQL antes da execucao |
Sobre este README
Este arquivo fica em Markdown normal para leitura no GitHub e nas IDEs. O visual com box-drawing ASCII/Unicode aparece apenas na execucao das tools do MCP, nas respostas retornadas para Claude, Codex, Cursor e clientes compativeis.
Requisitos
- Node.js 18 ou superior
- Acesso a um SQL Server local ou remoto
Instalacao
git clone https://github.com/WendellOttoni/mcp-sqlserver.git
cd mcp-sqlserver
npm install
Configuracao MCP
Exemplo de .mcp.json:
{
"mcpServers": {
"sqlserver": {
"command": "node",
"args": ["C:/MCP/mcp-sqlserver/src/index.js"],
"env": {
"DB_SERVER": "localhost",
"DB_DATABASE": "MeuBanco",
"DB_USER": "sa",
"DB_PASSWORD": "MinhaSenha"
}
}
}
}
Voce tambem pode usar o template em .mcp.json.example.
Variaveis de ambiente
| Variavel | Obrigatoria | Padrao | Descricao | |----------|-------------|--------|-----------| | DB_SERVER | Nao | localhost | Host do SQL Server | | DB_DATABASE | Sim | - | Banco inicial da sessao | | DB_USER | Nao | - | Usuario SQL; se omitido usa Windows Auth | | DB_PASSWORD | Nao | - | Senha SQL | | DB_PORT | Nao | 1433 | Porta do SQL Server; ignorada em instancia nomeada | | DB_ENCRYPT | Nao | false | Habilita criptografia na conexao com SQL Server | | DB_TRUST_SERVER_CERTIFICATE | Nao | true | Confia no certificado do servidor sem validacao completa | | DB_ALLOW_WRITE | Nao | - | Operacoes de escrita permitidas | | DB_ALLOW_TABLES | Nao | - | Restringe escrita a tabelas especificas | | DB_ALLOW_SCHEMAS | Nao | - | Restringe escrita a schemas especificos | | DB_ALLOW_DATABASE_SWITCH | Nao | - | Allowlist opcional de bancos permitidos para switch_database | | DB_METADATA_TTL_MS | Nao | 300000 | TTL do cache de metadata em ms | | DB_QUERY_TIMEOUT_MS | Nao | 30000 | Timeout das queries em ms | | DB_DEFAULT_MAX_ROWS | Nao | 100 | Limite padrao de linhas para leitura | | DB_SAMPLE_SIZE | Nao | 5 | Quantidade padrao do sample_values |
Formatos de DB_SERVER
| Formato | Exemplo | |---------|---------| | Host local | localhost | | IP | 192.168.1.100 | | Nome da maquina | SERVIDOR-SQL | | Instancia nomeada com \\ | LAPTOP-ABC\\SQLEXPRESS | | Instancia nomeada com / | LAPTOP-ABC/SQLEXPRESS |
Se usar /, o MCP converte automaticamente para o formato de instancia nomeada.
Modo de permissao
Por padrao o servidor sobe em modo READ-ONLY. Sem DB_ALLOW_WRITE, apenas consultas de leitura sao permitidas.
Exemplo:
{
"DB_ALLOW_WRITE": "INSERT,UPDATE",
"DB_ALLOW_TABLES": "dbo.Produto,dbo.Pedido"
}
Operacoes permanentemente bloqueadas:
EXEC, EXECUTE, GRANT, REVOKE, DENY, BACKUP, RESTORE, SHUTDOWN, DBCC, BULK, OPENROWSET, OPENDATASOURCE, xp_*, sp_*
Troca de banco em runtime
Agora nao e mais necessario reiniciar o processo MCP para apontar para outro banco no mesmo servidor.
Fluxo recomendado:
- Rode
current_connectionpara confirmar onde a sessao esta conectada. - Rode
list_databasespara ver os bancos acessiveis. - Rode
switch_databasepara trocar o banco ativo. - Rode
schema_summaryoulist_schemaspara explorar o novo banco.
Use:
switch_database { "database": "OutroBanco" }
Comportamento:
- valida a nova conexao antes de trocar
- carrega o catalogo do novo banco antes de assumir a sessao
- fecha o pool antigo apenas depois da validacao
- se a troca falhar, a conexao atual continua ativa
Observacao:
switch_databasetroca apenas o banco ativoserver,user,passworde outras configuracoes permanecem as mesmaslist_databasesocultamaster,model,msdbetempdbpor padrao- use
include_system_databases: truepara incluir bancos de sistema
Para limitar quais bancos podem ser usados em switch_database, configure:
{
"DB_ALLOW_DATABASE_SWITCH": "ReqPlay,Homologacao,Teste"
}
Se DB_ALLOW_DATABASE_SWITCH nao for definida, qualquer banco acessivel pelo login atual pode ser usado.
Troca de porta em runtime
Use switch_port para apontar a sessao atual para outra porta TCP do mesmo servidor sem reiniciar o chat ou perder o contexto da IA.
Fluxo recomendado:
- Rode
current_connectionpara ver servidor, porta e banco atuais. - Rode
switch_portcom a nova porta. - Rode
current_connection,schema_summaryoulist_schemaspara confirmar a nova conexao.
Use:
switch_port { "port": 1450 }
Comportamento:
- valida a nova conexao antes de trocar
- carrega o catalogo usando a nova porta antes de assumir a sessao
- fecha o pool antigo apenas depois da validacao
- se a troca falhar, a conexao atual continua ativa
Observacao:
switch_porttroca apenas a portaserver,database,user,passworde outras configuracoes permanecem as mesmas- em
DB_SERVERcom instancia nomeada, a porta e gerenciada pela instancia eswitch_portnao e aplicado
Troca completa de conexao em runtime
Use switch_connection quando precisar trocar porta, usuario, senha e banco de uma vez so, com apenas uma validacao e uma reconexao ao final.
Use:
switch_connection {
"port": 51218,
"user": "sa",
"password": "Docker@Test123",
"database": "master"
}
Comportamento:
- todos os parametros sao opcionais
- qualquer campo omitido mantem o valor atual
- a troca so e assumida depois que a nova conexao completa for validada
- o pool antigo so e fechado no final, apos validar e carregar o catalogo
Exemplos de configuracao
Somente leitura:
{
"DB_SERVER": "localhost",
"DB_DATABASE": "MeuBanco"
}
SQL Auth:
{
"DB_SERVER": "localhost",
"DB_DATABASE": "MeuBanco",
"DB_USER": "sa",
"DB_PASSWORD": "MinhaSenha"
}
Instancia nomeada:
{
"DB_SERVER": "LAPTOP-ABC/SQLEXPRESS",
"DB_DATABASE": "MeuBanco"
}
Escrita restrita por tabela:
{
"DB_SERVER": "localhost",
"DB_DATABASE": "MeuBanco",
"DB_ALLOW_WRITE": "INSERT,UPDATE",
"DB_ALLOW_TABLES": "dbo.Produto,dbo.Pedido"
}
Escrita restrita por schema:
{
"DB_SERVER": "localhost",
"DB_DATABASE": "MeuBanco",
"DB_ALLOW_WRITE": "INSERT,UPDATE,DELETE",
"DB_ALLOW_SCHEMAS": "staging"
}
Servidor remoto com porta customizada:
{
"DB_SERVER": "192.168.1.100",
"DB_PORT": "1450",
"DB_DATABASE": "Producao",
"DB_USER": "app_user",
"DB_PASSWORD": "SenhaSegura"
}
Servidor remoto com TLS validado:
{
"DB_SERVER": "sql.empresa.local",
"DB_PORT": "1433",
"DB_DATABASE": "Producao",
"DB_USER": "app_user",
"DB_PASSWORD": "SenhaSegura",
"DB_ENCRYPT": "true",
"DB_TRUST_SERVER_CERTIFICATE": "false"
}
Ferramentas de analise
As ferramentas abaixo usam metadata carregada em memoria para responder mais rapido:
find_entitiesschema_summaryexplain_tablesuggest_join_pathplan_queryrefresh_metadatahealth
Seguranca
READ-ONLYpor padrao- Escrita controlada por operacao, schema e tabela
- Validacao de SQL antes da execucao
- Limite maximo de 1000 linhas no fluxo de leitura
- Cache de metadata com TTL configuravel
- Validacao de conexao logo no startup
- Troca de banco em runtime com validacao antes do cutover
Estrutura do projeto
mcp-sqlserver/
|-- .mcp.json.example
|-- README.md
|-- package.json
|-- src/
| |-- config/
| | `-- env.js
| |-- db/
| | |-- catalog-cache.js
| | |-- catalog-loader.js
| | `-- connection.js
| |-- graph/
| | `-- relationship-graph.js
| |-- search/
| | |-- aliases.js
| | `-- ranker.js
| |-- security/
| | |-- permissions.js
| | `-- sql-validator.js
| |-- tools/
| | |-- core.js
| | `-- intelligence.js
| |-- utils/
| | |-- formatting.js
| | `-- text.js
| `-- index.js
`-- test/
|-- sample-values.test.js
`-- security.test.js
Desenvolvimento
Executar o servidor:
npm start
Rodar os testes:
npm test
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: WendellOttoni
- Source: WendellOttoni/mcp-sqlserver
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.