ODBC Server via PyODBC

Um servidor MCP para conectar a bancos de dados como Virtuoso usando drivers ODBC via pyodbc.

Documentação


OpenLink MCP Server for ODBC via PyODBC

Um servidor MCP (Model Context Protocol) leve para ODBC construído com FastAPI e pyodbc. Este servidor é compatível com o Virtuoso DBMS e qualquer outro backend de DBMS que possua um driver ODBC.

mcp-client-and-servers|648x499


Recursos

  • Get Schemas: Busca e lista todos os nomes de esquemas do banco de dados conectado.
  • Get Tables: Recupera informações de tabelas para esquemas específicos ou todos os esquemas.
  • Describe Table: Gera uma descrição detalhada das estruturas das tabelas, incluindo:
    • Nomes de colunas e tipos de dados
    • Atributos anuláveis
    • Chaves primárias e estrangeiras
  • Search Tables: Filtra e recupera tabelas com base em substrings do nome.
  • Execute Stored Procedures: Quando conectado ao Virtuoso, executa procedimentos armazenados e recupera resultados.
  • Execute Queries:
    • Formato de resultado JSONL: Otimizado para respostas estruturadas.
    • Formato de tabela Markdown: Ideal para relatórios e visualização.

Pré-requisitos

  1. Instale o uv:

    pip install uv
    

    Ou use Homebrew:

    brew install uv
    
  2. Verificações do ambiente de execução do 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 o Nome da Fonte de Dados ODBC (normalmente em ~/.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
    

Instalação

Clone este repositório:

git clone https://github.com/OpenLinkSoftware/mcp-pyodbc-server.git
cd mcp-pyodbc-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 a claude_desktop_config.json:

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

Uso

Ferramentas Fornecidas

Após a instalação bem-sucedida, as seguintes ferramentas estarão disponíveis para aplicativos clientes MCP.

Visão Geral

namedescription
podbc_get_schemasLista os esquemas de banco de dados acessíveis ao sistema de gerenciamento de banco de dados (DBMS) conectado.
podbc_get_tablesLista as tabelas associadas a um esquema de banco de dados selecionado.
podbc_describe_tableFornece a descrição de uma tabela associada a um esquema de banco de dados designado. Isso inclui informações sobre nomes de colunas, tipos de dados, tratamento de nulos, autoincremento, chaves primárias e chaves estrangeiras.
podbc_filter_table_namesLista tabelas, com base em um padrão de substring do campo de entrada q, associadas a um esquema de banco de dados selecionado.
podbc_query_databaseExecuta uma consulta SQL e retorna os resultados no formato JSONL.
podbc_execute_queryExecuta uma consulta SQL e retorna os resultados no formato JSONL.
podbc_execute_query_mdExecuta uma consulta SQL e retorna os resultados no formato de tabela Markdown.
podbc_spasql_queryExecuta uma consulta SPASQL 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 esquemas 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 um array de strings JSON com os nomes dos esquemas.
  • podbc_get_tables

    • Recupera e retorna uma lista contendo informações sobre tabelas em um esquema especificado. Se nenhum esquema for fornecido, usa o esquema padrão da conexão.
    • Parâmetros de entrada:
      • schema (string, opcional): Esquema 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): Esquema 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 para as 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 esquema 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 no 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_virtuoso_support_ai

    • Utiliza uma função de Assistente de IA específica do Virtuoso, passando um prompt e uma 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-pyodbc-server run mcp-pyodbc-server
    

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

Verified on MseeP