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.

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
-
Instale o uv:
pip install uvOu use Homebrew:
brew install uv -
Verificações do ambiente de execução do unixODBC:
-
Verifique a configuração da instalação (ou seja, a localização dos arquivos INI principais) executando:
odbcinst -j -
Liste os nomes de fontes de dados disponíveis executando:
odbcinst -q -s -
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
| name | description |
|---|---|
podbc_get_schemas | Lista os esquemas de banco de dados acessíveis ao sistema de gerenciamento de banco de dados (DBMS) conectado. |
podbc_get_tables | Lista as tabelas associadas a um esquema de banco de dados selecionado. |
podbc_describe_table | Fornece 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_names | Lista 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_database | Executa uma consulta SQL e retorna os resultados no formato JSONL. |
podbc_execute_query | Executa uma consulta SQL e retorna os resultados no formato JSONL. |
podbc_execute_query_md | Executa uma consulta SQL e retorna os resultados no formato de tabela Markdown. |
podbc_spasql_query | Executa uma consulta SPASQL e retorna os resultados. |
podbc_virtuoso_support_ai | Interage 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:
-
Instale o MCP Inspector:
npm install -g @modelcontextprotocol/inspector -
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.