MCP SQL Server
Enables AI assistants to explore SQL Server schemas, relationships, and execute safe SQL queries with read-only mode by default and optional write control.
README
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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。