Become a member!

MCP Firebird: encontre e corrija os problemas do seu banco conversando com a sua IA

🌐
Este artigo também está disponível em outros idiomas:
🇬🇧 English  •  🇮🇹 Italiano  •  🇪🇸 Español  •  🇩🇪 Deutsch

MCP Firebird é um servidor MCP que permite ao seu assistente de IA diagnosticar de verdade um banco de dados Firebird: planos de execução, conselhos sobre índices, auditoria do esquema, saúde das transações. A versão 0.2.4 está no ar, gratuita para uso interno, testada do Firebird 2.5 ao 5.0.

Logo do MCP Firebird, o servidor MCP que permite a assistentes de IA diagnosticar bancos de dados Firebird.

Uma consulta está lenta. O plano diz CUSTOMERS NATURAL, e na coluna filtrada existe um índice. Percebeu a armadilha?

O índice está INACTIVE. Nesse ponto quase todo conselho, humano ou de IA, manda criar um índice novo. Siga esse conselho e você fica com dois índices sobre a mesma coluna, ambos gravados a cada INSERT, um deles morto. A correção de verdade estava a um ALTER INDEX ... ACTIVE de distância, e ninguém tinha te avisado.

O MCP Firebird te avisa. É um servidor MCP que permite ao seu assistente de IA (Claude, Gemini CLI, Cursor, qualquer coisa que fale MCP) diagnosticar de verdade um banco Firebird: ler o esquema, explicar um plano de execução, propor um índice, recusar-se a propor um que já existe, e medir depois se a meta foi mesmo atingida. Hoje publiquei a versão 0.2.4.

Em resumo

  • O que é: um servidor MCP sobre stdio, um único executável Windows escrito em Delphi, que transforma seu assistente de IA em um DBA Firebird operacional.
  • Para quem: qualquer um que rode Firebird 2.5, 3.0, 4.0 ou 5.0 e queira respostas sobre planos, índices e saúde do esquema em vez de palpites.
  • Funciona com: Claude Desktop, Claude Code, Gemini CLI, OpenCode, Cursor e qualquer cliente MCP.
  • Instalação: descompacte, copie .env.example para .env, aponte para o seu banco, registre o exe como servidor stdio.
  • Licença: PolyForm Internal Use, gratuita para as operações internas da sua empresa em qualquer escala. Código-fonte no GitHub.

O que ele faz

Nove ferramentas, todas somente leitura: fb_info, fb_list_tables, fb_generate_documentation, fb_analyze_query, fb_suggest_indexes, fb_suggest_index_drops, fb_audit_table, fb_evaluate_goal, fb_monitor_transactions. Cada achado carrega um remédio executável e uma forma de verificar que o remédio realmente ajudou, porque um relatório sobre o qual você não pode agir é só um jeito mais longo de dizer “o banco está lento”.

Duas decisões de design importam mais do que a lista de recursos.

É testado no Firebird 2.5, 3.0, 4.0 e 5.0, não só no mais novo. A suíte completa roda nos quatro motores antes de cada release. As versões se comportam de forma diferente: padrões diferentes, recursos diferentes. Uma ferramenta testada só no 5.0 dá respostas erradas num servidor 2.5, e muitas empresas ainda rodam 2.5 em produção.

Ele não inventa respostas. Se o seu SQL tem um erro, você recebe a mensagem de erro do próprio motor, não um relatório vazio que parece um sinal verde. E quando não pode medir algo, ele avisa: assim você sempre sabe se “nenhum problema encontrado” significa que o banco está bem ou que a ferramenta não conseguiu olhar.

Como é uma sessão de trabalho

Uma sessão real contra o banco de teste da suíte, motor Firebird 5.0.4. É assim que aparece no Claude Desktop:

Sessão real no Claude Desktop: à pergunta sobre por que uma consulta Firebird está lenta, o assistente mostra o plano PLAN (CUSTOMERS NATURAL), encontra o índice IDX_CUST_CITY inativo e propõe ALTER INDEX ACTIVE em vez de um segundo índice.

A captura acima é um único momento dessa sessão. Abaixo percorremos ela inteira, pergunta após pergunta, do primeiro olhar no banco até a correção verificada.

👤 Você: Nunca vi este banco de dados. Documente a tabela CUSTOMERS para mim.
🤖 Assistente: Aqui está CUSTOMERS: quatro colunas, chave primária em CUSTOMER_ID, cinco índices. Uma coisa chama a atenção: IDX_CUST_CITY na coluna CITY está INACTIVE. Ele existe, mas o motor não pode usá-lo. O relatório do fb_generate_documentation:
CUSTOMERS
Chave primária: CUSTOMER_ID

| Coluna      | Tipo         | Aceita NULL |
| CUSTOMER_ID | INTEGER      | não         |
| NAME        | VARCHAR(400) | não         |
| CITY        | VARCHAR(240) | sim         |
| STATUS      | CHAR(4)      | sim         |

Índices:
- IDX_CUST_CITY (CITY), INACTIVE
- IDX_CUST_NAME (NAME)
- IDX_CUST_NAME_CITY (NAME, CITY)
- IDX_CUST_STATUS (STATUS)
- RDB$PRIMARY1 (CUSTOMER_ID) [CHAVE PRIMÁRIA]
👤 Você: Por que esta consulta está lenta? SELECT * FROM CUSTOMERS WHERE CITY = 'Rome'
🤖 Assistente: Porque o motor lê a tabela inteira, linha por linha. O plano do fb_analyze_query é PLAN (CUSTOMERS NATURAL): nenhum índice é usado para o filtro em CITY.
👤 Você: Então que índice eu crio?
🤖 Assistente: Nenhum. CITY já tem um índice, o IDX_CUST_CITY; ele só está desativado. Criar um segundo dobraria o custo de escrita em cada INSERT à toa. Reative o que você tem com ALTER INDEX IDX_CUST_CITY ACTIVE; e depois confira o plano de novo. O achado do fb_suggest_indexes diz exatamente isso:
ALTER INDEX IDX_CUST_CITY ACTIVE;

📝 Essa é a resposta que a maioria dos conselhos erra, humanos ou de IA: teriam mandado você criar um segundo índice.

👤 Você: Executei o ALTER INDEX. Funcionou mesmo?
🤖 Assistente: Sim, e eu provo. Antes da correção a meta "nenhuma varredura completa" não era atingida; agora é, e o plano usa IDX_CUST_CITY. As duas medições do fb_evaluate_goal:
antes:  meta não atingida  plano: PLAN (CUSTOMERS NATURAL)
depois: meta atingida      plano: PLAN (CUSTOMERS INDEX (IDX_CUST_CITY))
👤 Você: A busca de clientes precisa ficar abaixo de 50 milissegundos.
🤖 Assistente: Fica, com folga: fb_evaluate_goal mede 1.85 milissegundos contra os seus 50.
👤 Você: Já que estamos aqui, tem mais algo para limpar?
🤖 Assistente: Três coisas. Em ORDERS há um índice duplicado para remover: custa uma escrita em cada INSERT e não devolve nada. Dois índices de CUSTOMERS têm estatísticas velhas, então o otimizador planeja sobre números errados: corrija com SET STATISTICS INDEX. Transações e sweep estão em ordem. Os relatórios:
DROP INDEX IDX_ORDERS_CUSTOMER_DUP;
SET STATISTICS INDEX IDX_CUST_NAME;
SET STATISTICS INDEX IDX_CUST_STATUS;
Toda resposta tem a mesma forma: o que está errado, o comando que corrige, e como verificar que a correção surtiu efeito.

Instalação em dois minutos

Nada roda como serviço e nada escuta em porta alguma: é o seu agente que inicia o executável e fala com ele por stdin/stdout.

  1. Descompacte a última versão estável onde quiser.
  2. Copie .env.example para .env ao lado do exe e preencha host, banco e credenciais.
  3. Aponte firebird.client_lib para a fbclient.dll da sua instalação do Firebird. Nenhuma biblioteca cliente vem no pacote, de propósito: só você sabe com qual servidor está falando.
  4. Registre o MCPFirebird.exe no seu agente como servidor MCP stdio. O README tem a receita exata para cada cliente, em inglês, italiano, espanhol e alemão.

A edição Enterprise

A edição gratuita se conecta ao seu banco com uma conexão SQL normal. Ela vê o que o banco sabe sobre si mesmo: esquema, planos de execução, índices, transações. Já é útil, mas fica dentro do banco.

A edição Enterprise é um produto pago: usa-se somente com uma licença, sempre, mesmo na empresa para uso interno. Não existe um nível gratuito da Enterprise. Ela se conecta também ao servidor Firebird como administrador, através do Services Manager. Assim ela vê o que só o servidor conhece: os arquivos de configuração (firebird.conf e databases.conf), o log do servidor (firebird.log), a estrutura física do arquivo, o hardware em que ele roda e a carga de trabalho real. Nada foi tirado da edição gratuita: as ferramentas Enterprise continuam na lista dela, e se o assistente chamar uma, recebe uma mensagem explicando como obtê-la.

Com esse acesso o assistente responde perguntas que antes não podia. O fb_diagnose é o ponto de partida quando algo está errado e você não sabe por onde começar. O fb_analyze_config confere cada parâmetro do firebird.conf contra a sua versão do motor e a sua arquitetura, porque os padrões mudam entre versões. O fb_parse_log lê o firebird.log e encontra corrupção, bugchecks, sweeps que nunca rodaram. O fb_analyze_storage mostra a estrutura física: profundidade dos índices, preenchimento das páginas, cadeias de versões de registro. O fb_analyze_host compara o hardware com a configuração: RAM contra o cache configurado, núcleos contra workers paralelos. O fb_capture_trace grava 60 segundos de carga real e classifica as consultas mais caras; fb_trace_start, fb_trace_status e fb_trace_stop fazem o mesmo por até duas horas, em segundo plano.

Por que vale pagar: a documentação do Firebird não diz qual valor usar para a maioria dos parâmetros, porque o valor certo depende da sua carga de trabalho. A edição Enterprise trabalha medindo. Grava o desempenho sob carga real, você muda um único parâmetro, ela mede de novo e diz se melhorou. Se não melhorou, você volta atrás.

Free vs Enterprise

Free Enterprise
Versão, arquitetura e capacidades do motor (fb_info)
Lista das tabelas (fb_list_tables)
Documentação do esquema: colunas, chaves, índices (fb_generate_documentation)
Análise do plano de execução de uma consulta (fb_analyze_query)
Conselhos sobre índices a criar ou reativar (fb_suggest_indexes)
Índices duplicados ou inúteis a remover (fb_suggest_index_drops)
Checagem de uma tabela: chaves ausentes, estatísticas velhas, índices demais (fb_audit_table)
Verificação de uma meta: plano sem varreduras completas, ou tempo máximo (fb_evaluate_goal)
Estado de transações e sweep (fb_monitor_transactions)
Caminho de diagnóstico guiado (fb_diagnose)
Checagem de firebird.conf e databases.conf para a sua versão e arquitetura (fb_analyze_config)
Estrutura física: profundidade de índices, preenchimento de páginas, cadeias de versões (fb_analyze_storage)
Leitura do firebird.log: corrupção, bugchecks, sweeps que nunca rodaram (fb_parse_log)
Gravação da carga real: 60 segundos (fb_capture_trace) ou até 2 horas em segundo plano (fb_trace_start/status/stop)
Hardware contra configuração: RAM contra cache, núcleos contra workers paralelos (fb_analyze_host)
Medições antes/depois de uma mudança, com veredito

Licenças Enterprise e suporte: professionals@bittime.it.

Quando você precisa comprar uma licença, e quando não

A edição gratuita sai sob a licença PolyForm Internal Use: código-fonte disponível, gratuita para as operações internas suas e da sua empresa, em qualquer escala, em qualquer setor, consultoria incluída. A regra inteira cabe numa frase: pergunte onde o software vai parar, nunca o que você fez com ele. Enquanto cada cópia ficar nas suas mãos, você não deve nada a ninguém, onde quer que o software rode e qualquer que seja o banco examinado. Você precisa da licença comercial no momento em que uma cópia fica com outra pessoa: você a deixa instalada num cliente ao fim do contrato, a coloca dentro de um produto que vende, ou a oferece como serviço.

A sua situação Precisa de licença?
Seu DBA roda contra o banco de produção toda manhã Não.
Quarenta desenvolvedores usam cada um na sua máquina Não. Sem contagem de assentos, sem cadastro.
Você é consultor, roda do seu notebook contra o banco do cliente e cobra pelo seu tempo Não. É a sua ferramenta, e sua ela fica.
Você deixa uma cópia instalada no servidor do cliente ao fim do contrato Sim. O software saiu das suas mãos.
Você embute no seu ERP para os clientes terem “tuning de banco com IA” Sim. Isso é embutir num produto.
Você dá aos clientes do seu hosting um botão que roda a ferramenta por eles Sim. Isso é oferecer como serviço.
Você escreve um post, uma palestra ou um curso sobre ele Não. Leia, cite, ensine.

Um esclarecimento que merece precisão: a licença comercial de redistribuição e a edição Enterprise são dois produtos diferentes. Uma permite que cópias do MCP Firebird saiam das suas mãos; a outra adiciona as ferramentas de administração do servidor que você leu acima, e é sempre paga, com a sua própria licença, para qualquer um e para qualquer uso. Comprar uma não inclui a outra.

Licenças comerciais: professionals@bittime.it.

Experimente

Baixe a última versão estável, aponte para uma cópia do seu banco e pergunte ao seu assistente por que a sua consulta mais lenta está lenta.

Qual é a primeira pergunta que você faria ao seu banco de dados?

Comments

comments powered by Disqus