MySQL Server

Fornece acesso somente leitura a bancos de dados MySQL, permitindo que LLMs inspecionem esquemas e executem consultas.

Documentação

Servidor MCP para MySQL baseado em NodeJS

smithery badge

Demo

Um servidor Model Context Protocol que fornece acesso somente leitura a bancos de dados MySQL. Este servidor permite que LLMs inspecionem esquemas de banco de dados e executem consultas somente leitura.

Instalação

Usando Smithery

A maneira mais fácil de instalar e configurar este servidor MCP é através do Smithery:

# Install the MCP server
npx -y @smithery/cli@latest install @benborla29/mcp-server-mysql --client claude

Durante a configuração, você será solicitado a inserir seus detalhes de conexão MySQL. O Smithery irá automaticamente:

  • Configurar as variáveis de ambiente corretas
  • Configurar seu aplicativo LLM para usar o servidor MCP
  • Testar a conexão com seu banco de dados MySQL
  • Fornecer ajuda útil para solução de problemas, se necessário

Usando MCP Get

Você também pode instalar este pacote usando MCP Get:

npx @michaellatman/mcp-get@latest install @benborla29/mcp-server-mysql

O MCP Get fornece um registro centralizado de servidores MCP e simplifica o processo de instalação.

Usando NPM/PNPM

Para instalação manual:

# Using npm
npm install -g @benborla29/mcp-server-mysql

# Using pnpm
pnpm add -g @benborla29/mcp-server-mysql

Após a instalação manual, você precisará configurar seu aplicativo LLM para usar o servidor MCP (veja a seção Configuração abaixo).

Componentes

Ferramentas

  • mysql_query
    • Executa consultas SQL somente leitura no banco de dados conectado
    • Entrada: sql (string): a consulta SQL a ser executada
    • Todas as consultas são executadas dentro de uma transação SOMENTE LEITURA
    • Suporta declarações preparadas para manipulação segura de parâmetros
    • Timeouts de consulta e paginação de resultados configuráveis
    • Estatísticas de execução de consulta integradas

Recursos

O servidor fornece informações abrangentes do banco de dados:

  • Esquemas de Tabelas
    • Informações de esquema JSON para cada tabela
    • Nomes de colunas e tipos de dados
    • Informações de índices e restrições
    • Relacionamentos de chaves estrangeiras
    • Estatísticas e métricas de tabelas
    • Descobertos automaticamente a partir dos metadados do banco de dados

Recursos de Segurança

  • Prevenção de injeção SQL através de declarações preparadas
  • Capacidades de listagem de consultas (whitelist/blacklist)
  • Limitação de taxa para execução de consultas
  • Análise de complexidade de consultas
  • Criptografia de conexão configurável
  • Aplicação de transações somente leitura

Otimizações de Performance

  • Pool de conexões otimizado
  • Cache de resultados de consultas
  • Streaming de grandes conjuntos de resultados
  • Análise do plano de execução de consultas
  • Timeouts de consulta configuráveis

Monitoramento e Depuração

  • Registro abrangente de consultas
  • Coleta de métricas de performance
  • Rastreamento e relatórios de erros
  • Endpoints de verificação de saúde
  • Estatísticas de execução de consultas

Configuração

Configuração Automática com Smithery

Se você instalou usando o Smithery, sua configuração já está pronta. Você pode visualizá-la ou modificá-la com:

smithery configure @benborla29/mcp-server-mysql

Configuração Manual para o Claude Desktop App

Para configurar manualmente o servidor MCP para o Claude Desktop App, adicione o seguinte ao seu arquivo claude_desktop_config.json (normalmente localizado no diretório do usuário):

{
  "mcpServers": {
    "mcp_server_mysql": {
      "command": "npx",
      "args": [
        "-y",
        "@benborla29/mcp-server-mysql"
      ],
      "env": {
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASS": "",
        "MYSQL_DB": "db_name"
      }
    }
  }
}

Substitua db_name pelo nome do seu banco de dados ou deixe em branco para acessar todos os bancos de dados.

Opções Avançadas de Configuração

Para mais controle sobre o comportamento do servidor MCP, você pode usar estas opções avançadas de configuração:

{
  "mcpServers": {
    "mcp_server_mysql": {
      "command": "/path/to/npx/binary/npx",
      "args": [
        "-y",
        "@benborla29/mcp-server-mysql"
      ],
      "env": {
        // Basic connection settings
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASS": "",
        "MYSQL_DB": "db_name",
        "PATH": "/path/to/node/bin:/usr/bin:/bin",
        
        // Performance settings
        "MYSQL_POOL_SIZE": "10",
        "MYSQL_QUERY_TIMEOUT": "30000",
        "MYSQL_CACHE_TTL": "60000",
        
        // Security settings
        "MYSQL_RATE_LIMIT": "100",
        "MYSQL_MAX_QUERY_COMPLEXITY": "1000",
        "MYSQL_SSL": "true",
        
        // Monitoring settings
        "MYSQL_ENABLE_LOGGING": "true",
        "MYSQL_LOG_LEVEL": "info",
        "MYSQL_METRICS_ENABLED": "true"
      }
    }
  }
}

Variáveis de Ambiente

Conexão Básica

  • MYSQL_HOST: host do servidor MySQL (padrão: "127.0.0.1")
  • MYSQL_PORT: porta do servidor MySQL (padrão: "3306")
  • MYSQL_USER: nome de usuário MySQL (padrão: "root")
  • MYSQL_PASS: senha MySQL
  • MYSQL_DB: nome do banco de dados de destino

Configuração de Performance

  • MYSQL_POOL_SIZE: tamanho do pool de conexões (padrão: "10")
  • MYSQL_QUERY_TIMEOUT: timeout de consulta em milissegundos (padrão: "30000")
  • MYSQL_CACHE_TTL: tempo de vida do cache em milissegundos (padrão: "60000")

Configuração de Segurança

  • MYSQL_RATE_LIMIT: máximo de consultas por minuto (padrão: "100")
  • MYSQL_MAX_QUERY_COMPLEXITY: pontuação máxima de complexidade de consulta (padrão: "1000")
  • MYSQL_SSL: habilitar criptografia SSL/TLS (padrão: "false")

Configuração de Monitoramento

  • MYSQL_ENABLE_LOGGING: habilitar registro de consultas (padrão: "false")
  • MYSQL_LOG_LEVEL: nível de registro (padrão: "info")
  • MYSQL_METRICS_ENABLED: habilitar métricas de performance (padrão: "false")

Testes

Configuração do Banco de Dados

Antes de executar os testes, você precisa configurar o banco de dados de teste e populá-lo com dados de teste:

  1. Criar Banco de Dados e Usuário de Teste

    -- Connect as root and create test database
    CREATE DATABASE IF NOT EXISTS mcp_test;
    
    -- Create test user with appropriate permissions
    CREATE USER IF NOT EXISTS 'mcp_test'@'localhost' IDENTIFIED BY 'mcp_test_password';
    GRANT ALL PRIVILEGES ON mcp_test.* TO 'mcp_test'@'localhost';
    FLUSH PRIVILEGES;
    
  2. Executar Script de Configuração do Banco de Dados

    # Run the database setup script
    pnpm run setup:test:db
    

    Isso criará as tabelas necessárias e os dados de exemplo. O script está localizado em scripts/setup-test-db.ts

  3. Configurar o Ambiente de Teste Crie um arquivo .env.test na raiz do projeto:

    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306
    MYSQL_USER=mcp_test
    MYSQL_PASS=mcp_test_password
    MYSQL_DB=mcp_test
    
  4. Atualizar Scripts do package.json Adicione estes scripts ao seu package.json:

    {
      "scripts": {
        "setup:test:db": "ts-node scripts/setup-test-db.ts",
        "pretest": "pnpm run setup:test:db",
        "test": "vitest run",
        "test:watch": "vitest",
        "test:coverage": "vitest run --coverage"
      }
    }
    

Executando Testes

O projeto inclui um conjunto abrangente de testes para garantir funcionalidade e confiabilidade:

# First-time setup
pnpm run setup:test:db

# Run all tests
pnpm test

Solução de Problemas

Usando Smithery para Solução de Problemas

Se você instalou com o Smithery, pode usar seus diagnósticos integrados:

# Check the status of your MCP server
smithery status @benborla29/mcp-server-mysql

# Run diagnostics
smithery diagnose @benborla29/mcp-server-mysql

# View logs
smithery logs @benborla29/mcp-server-mysql

Usando MCP Get para Solução de Problemas

Se você instalou com o MCP Get:

# Check the status
mcp-get status @benborla29/mcp-server-mysql

# View logs
mcp-get logs @benborla29/mcp-server-mysql

Problemas Comuns

  1. Problemas de Conexão

    • Verifique se o servidor MySQL está em execução e acessível
    • Verifique as credenciais e permissões
    • Certifique-se de que a configuração SSL/TLS está correta, se habilitada
    • Tente conectar com um cliente MySQL para confirmar o acesso
  2. Problemas de Performance

    • Ajuste o tamanho do pool de conexões
    • Configure os valores de timeout de consulta
    • Habilite o cache de consultas, se necessário
    • Verifique as configurações de complexidade de consulta
    • Monitore o uso de recursos do servidor
  3. Restrições de Segurança

    • Revise a configuração de limitação de taxa
    • Verifique as configurações de whitelist/blacklist de consultas
    • Verifique as configurações de SSL/TLS
    • Certifique-se de que o usuário tem as permissões MySQL apropriadas
  4. Resolução de Caminhos Se você encontrar o erro "Could not connect to MCP server mcp-server-mysql", defina explicitamente o caminho de todos os binários necessários:

{
  "env": {
    "PATH": "/path/to/node/bin:/usr/bin:/bin"
  }
}
  1. Problemas de Autenticação
    • Para MySQL 8.0+, certifique-se de que o servidor suporta o plugin de autenticação caching_sha2_password
    • Verifique se seu usuário MySQL está configurado com o método de autenticação correto
    • Tente criar um usuário com autenticação legada, se necessário:
      CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
      

Contribuindo

Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request para https://github.com/benborla/mcp-server-mysql

Configuração de Desenvolvimento

  1. Clone o repositório
  2. Instale as dependências: pnpm install
  3. Compile o projeto: pnpm run build
  4. Execute os testes: pnpm test

Roteiro do Projeto

Estamos trabalhando ativamente para melhorar este servidor MCP. Consulte nosso CHANGELOG.md para detalhes sobre os recursos planejados, incluindo:

  • Capacidades aprimoradas de consulta com declarações preparadas
  • Recursos avançados de segurança
  • Otimizações de performance
  • Monitoramento abrangente
  • Informações expandidas de esquema

Se você gostaria de contribuir para alguma dessas áreas, verifique as issues no GitHub ou abra uma nova para discutir suas ideias.

Enviando Alterações

  1. Faça um fork do repositório
  2. Crie um branch de recurso: git checkout -b feature/your-feature-name
  3. Faça commit das suas alterações: git commit -am 'Add some feature'
  4. Envie para o branch: git push origin feature/your-feature-name
  5. Envie um pull request

Licença

Este servidor MCP é licenciado sob a Licença MIT. Consulte o arquivo LICENSE para mais detalhes.