SQLAlchemy ODBC

Um servidor MCP para conectar a qualquer banco de dados compatível com ODBC via SQLAlchemy, suportando diversos backends de DBMS.

Documentação


Servidor MCP ODBC via SQLAlchemy

Um servidor MCP (Model Context Protocol) leve para ODBC construído com FastAPI, pyodbc e SQLAlchemy. Este servidor é compatível com Virtuoso DBMS e outros backends de DBMS que implementam um provedor SQLAlchemy.

mcp-client-and-servers|648x499


Recursos

  • Obter Schemas: Buscar e listar todos os nomes de schemas do banco de dados conectado.
  • Obter Tabelas: Recuperar informações de tabelas para schemas específicos ou todos os schemas.
  • Descrever Tabela: Gerar uma descrição detalhada das estruturas das tabelas, incluindo:
    • Nomes das colunas e tipos de dados
    • Atributos anuláveis
    • Chaves primárias e estrangeiras
  • Pesquisar Tabelas: Filtrar e recuperar tabelas com base em substrings do nome.
  • Executar Procedimentos Armazenados: No caso do Virtuoso, executar procedimentos armazenados e recuperar resultados.
  • Executar Consultas:
    • Formato de resultado JSONL: Otimizado para respostas estruturadas.
    • Formato de tabela Markdown: Ideal para relatórios e visualização.

Pré-requisitos

  1. Instalar uv:

    pip install uv
    

    Ou use Homebrew:

    brew install uv
    
  2. Verificações do Ambiente de Execução unixODBC:

  3. Verifique a configuração da instalação (ou seja, a localização dos arquivos INI principais) executando: odbcinst -j

  4. Liste os nomes de fontes de dados disponíveis executando: odbcinst -q -s

  5. Configuração do DSN ODBC: Configure seu Nome de Fonte de Dados ODBC (~/.odbc.ini) para o banco de dados de destino. Exemplo para Virtuoso DBMS:

    [VOS]
    Description = OpenLink Virtuoso
    Driver = /path/to/virtodbcu_r.so
    Database = Demo
    Address = localhost:1111
    WideAsUTF16 = Yes
    
  6. Vinculação de URL SQLAlchemy: Use o formato:

    virtuoso+pyodbc://user:password@VOS
    

Instalação

Clone este repositório:

git clone https://github.com/OpenLinkSoftware/mcp-sqlalchemy-server.git
cd mcp-sqlalchemy-server

Variáveis de Ambiente

Atualize seu .env substituindo os padrões para atender às suas preferências

ODBC_DSN=VOS
ODBC_USER=dba
ODBC_PASSWORD=dba
API_KEY=xxx

Configuração

Para usuários do Claude Desktop: Adicione o seguinte ao claude_desktop_config.json:

{
  "mcpServers": {
    "my_database": {
      "command": "uv",
      "args": ["--directory", "/path/to/mcp-sqlalchemy-server", "run", "mcp-sqlalchemy-server"],
      "env": {
        "ODBC_DSN": "dsn_name",
        "ODBC_USER": "username",
        "ODBC_PASSWORD": "password",
        "API_KEY": "sk-xxx"
      }
    }
  }
}

Uso

URLs de Conexão do Sistema de Gerenciamento de Banco de Dados (DBMS)

Aqui estão os exemplos de URL pyodbc para conectar a sistemas DBMS que foram testados usando este mcp-server.

Banco de DadosFormato da URL
Virtuoso DBMSvirtuoso+pyodbc://user:password@ODBC_DSN
PostgreSQLpostgresql://user:password@localhost/dbname
MySQLmysql+pymysql://user:password@localhost/dbname
SQLitesqlite:///path/to/database.db

Uma vez conectado, você pode interagir com seus contatos do WhatsApp através do Claude, aproveitando os recursos de IA do Claude em suas conversas do WhatsApp.

Ferramentas Fornecidas

Visão Geral

nomedescrição
podbc_get_schemasLista os schemas do banco de dados acessíveis ao sistema de gerenciamento de banco de dados (DBMS) conectado.
podbc_get_tablesLista as tabelas associadas a um schema de banco de dados selecionado.
podbc_describe_tableFornece a descrição de uma tabela associada a um schema de banco de dados designado. Isso inclui informações sobre nomes de colunas, tipos de dados, tratamento de nulos, autoincremento, chave primária e chaves estrangeiras.
podbc_filter_table_namesLista tabelas, com base em um padrão de substring do campo de entrada q, associadas a um schema de banco de dados selecionado.
podbc_query_databaseExecuta uma consulta SQL e retorna os resultados em formato JSONL.
podbc_execute_queryExecuta uma consulta SQL e retorna os resultados em formato JSONL.
podbc_execute_query_mdExecuta uma consulta SQL e retorna os resultados em formato de tabela Markdown.
podbc_spasql_queryExecuta uma consulta SPASQL e retorna os resultados.
podbc_sparql_queryExecuta uma consulta SPARQL e retorna os resultados.
podbc_virtuoso_support_aiInterage com o Assistente/Agente de Suporte do Virtuoso -- um recurso específico do Virtuoso para interagir com LLMs.

Descrição Detalhada

  • podbc_get_schemas

    • Recupera e retorna uma lista de todos os nomes de schemas do banco de dados conectado.
    • Parâmetros de entrada:
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna uma matriz de strings JSON com os nomes dos schemas.
  • podbc_get_tables

    • Recupera e retorna uma lista contendo informações sobre tabelas em um schema especificado. Se nenhum schema for fornecido, usa o schema padrão da conexão.
    • Parâmetros de entrada:
      • schema (string, opcional): Schema do banco de dados para filtrar tabelas. Padrão: padrão da conexão.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna uma string JSON contendo informações da tabela (por exemplo, TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE).
  • podbc_filter_table_names

    • Filtra e retorna informações sobre tabelas cujos nomes contêm uma substring específica.
    • Parâmetros de entrada:
      • q (string, obrigatório): A substring a ser pesquisada nos nomes das tabelas.
      • schema (string, opcional): Schema do banco de dados para filtrar tabelas. Padrão: padrão da conexão.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna uma string JSON contendo informações das tabelas correspondentes.
  • podbc_describe_table

    • Recupera e retorna informações detalhadas sobre as colunas de uma tabela específica.
    • Parâmetros de entrada:
      • schema (string, obrigatório): O nome do schema do banco de dados que contém a tabela.
      • table (string, obrigatório): O nome da tabela a ser descrita.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna uma string JSON descrevendo as colunas da tabela (por exemplo, COLUMN_NAME, TYPE_NAME, COLUMN_SIZE, IS_NULLABLE).
  • podbc_query_database

    • Executa uma consulta SQL padrão e retorna os resultados em formato JSON.
    • Parâmetros de entrada:
      • query (string, obrigatório): A string da consulta SQL a ser executada.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna os resultados da consulta como uma string JSON.
  • podbc_query_database_md

    • Executa uma consulta SQL padrão e retorna os resultados formatados como uma tabela Markdown.
    • Parâmetros de entrada:
      • query (string, obrigatório): A string da consulta SQL a ser executada.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna os resultados da consulta como uma string de tabela Markdown.
  • podbc_query_database_jsonl

    • Executa uma consulta SQL padrão e retorna os resultados no formato JSON Lines (JSONL) (um objeto JSON por linha).
    • Parâmetros de entrada:
      • query (string, obrigatório): A string da consulta SQL a ser executada.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna os resultados da consulta como uma string JSONL.
  • podbc_spasql_query

    • Executa uma consulta SPASQL (híbrido SQL/SPARQL) e retorna os resultados. Este é um recurso específico do Virtuoso.
    • Parâmetros de entrada:
      • query (string, obrigatório): A string da consulta SPASQL.
      • max_rows (number, opcional): Número máximo de linhas a retornar. Padrão: 20.
      • timeout (number, opcional): Tempo limite da consulta em milissegundos. Padrão: 30000.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna o resultado da chamada do procedimento armazenado subjacente (por exemplo, Demo.demo.execute_spasql_query).
  • podbc_sparql_query

    • Executa uma consulta SPARQL e retorna os resultados. Este é um recurso específico do Virtuoso.
    • Parâmetros de entrada:
      • query (string, obrigatório): A string da consulta SPARQL.
      • format (string, opcional): Formato de resultado desejado. Padrão: 'json'.
      • timeout (number, opcional): Tempo limite da consulta em milissegundos. Padrão: 30000.
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna o resultado da chamada de função subjacente (por exemplo, "UB".dba."sparqlQuery").
  • podbc_virtuoso_support_ai

    • Utiliza uma função de Assistente de IA específica do Virtuoso, passando um prompt e chave de API opcional. Este é um recurso específico do Virtuoso.
    • Parâmetros de entrada:
      • prompt (string, obrigatório): O texto do prompt para a função de IA.
      • api_key (string, opcional): Chave de API para o serviço de IA. Padrão: "none".
      • user (string, opcional): Nome de usuário do banco de dados. Padrão: "demo".
      • password (string, opcional): Senha do banco de dados. Padrão: "demo".
      • dsn (string, opcional): Nome da fonte de dados ODBC. Padrão: "Local Virtuoso".
    • Retorna o resultado da chamada da função do Assistente de Suporte de IA (por exemplo, DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI).

Solução de Problemas

Para facilitar a solução de problemas:

  1. Instale o MCP Inspector:

    npm install -g @modelcontextprotocol/inspector
    
  2. Inicie o inspector:

    npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-sqlalchemy-server run mcp-sqlalchemy-server
    

Acesse a URL fornecida para solucionar problemas de interações com o servidor.