ODBC Server via PyODBC

Un servidor MCP para conectarse a bases de datos como Virtuoso usando controladores ODBC a través de pyodbc.

Documentación


OpenLink MCP Server for ODBC via PyODBC

Un servidor MCP (Model Context Protocol) ligero para ODBC construido con FastAPI y pyodbc. Este servidor es compatible con Virtuoso DBMS y cualquier otro backend de DBMS que tenga un controlador ODBC.

mcp-client-and-servers|648x499


Características

  • Obtener esquemas: Recupera y lista todos los nombres de esquemas de la base de datos conectada.
  • Obtener tablas: Recupera información de tablas para esquemas específicos o todos los esquemas.
  • Describir tabla: Genera una descripción detallada de las estructuras de las tablas, incluyendo:
    • Nombres de columnas y tipos de datos
    • Atributos anulables
    • Claves primarias y foráneas
  • Buscar tablas: Filtra y recupera tablas basándose en subcadenas del nombre.
  • Ejecutar procedimientos almacenados: Cuando esté conectado a Virtuoso, ejecute procedimientos almacenados y recupere resultados.
  • Ejecutar consultas:
    • Formato de resultado JSONL: Optimizado para respuestas estructuradas.
    • Formato de tabla Markdown: Ideal para informes y visualización.

Requisitos previos

  1. Instalar uv:

    pip install uv
    

    O use Homebrew:

    brew install uv
    
  2. Comprobaciones del entorno de ejecución de unixODBC:

  3. Compruebe la configuración de instalación (es decir, la ubicación de los archivos INI clave) ejecutando: odbcinst -j

  4. Liste los nombres de fuentes de datos disponibles ejecutando: odbcinst -q -s

  5. Configuración del DSN ODBC: Configure su Nombre de Fuente de Datos ODBC (típicamente en ~/.odbc.ini) para la base de datos de destino. Ejemplo para Virtuoso DBMS:

    [VOS]
    Description = OpenLink Virtuoso
    Driver = /path/to/virtodbcu_r.so
    Database = Demo
    Address = localhost:1111
    WideAsUTF16 = Yes
    

Instalación

Clone este repositorio:

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

Variables de entorno

Actualice su .env sobrescribiendo los valores predeterminados para que coincidan con sus preferencias.

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

Configuración

Para usuarios de Claude Desktop:

Agregue lo siguiente 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

Herramientas proporcionadas

Después de una instalación exitosa, las siguientes herramientas estarán disponibles para las aplicaciones cliente MCP.

Resumen

nombredescripción
podbc_get_schemasLista los esquemas de base de datos accesibles para el sistema de gestión de bases de datos (DBMS) conectado.
podbc_get_tablesLista las tablas asociadas con un esquema de base de datos seleccionado.
podbc_describe_tableProporciona la descripción de una tabla asociada con un esquema de base de datos designado. Esto incluye información sobre nombres de columnas, tipos de datos, manejo de nulos, autoincremento, claves primarias y claves foráneas.
podbc_filter_table_namesLista tablas, basándose en un patrón de subcadena del campo de entrada q, asociadas con un esquema de base de datos seleccionado.
podbc_query_databaseEjecuta una consulta SQL y devuelve resultados en formato JSONL.
podbc_execute_queryEjecuta una consulta SQL y devuelve resultados en formato JSONL.
podbc_execute_query_mdEjecuta una consulta SQL y devuelve resultados en formato de tabla Markdown.
podbc_spasql_queryEjecuta una consulta SPASQL y devuelve resultados.
podbc_virtuoso_support_aiInteractúa con el Asistente/Agente de Soporte de Virtuoso: una característica específica de Virtuoso para interactuar con LLMs.

Descripción detallada

  • podbc_get_schemas

    • Recupera y devuelve una lista de todos los nombres de esquemas de la base de datos conectada.
    • Parámetros de entrada:
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve una matriz de cadenas JSON con los nombres de los esquemas.
  • podbc_get_tables

    • Recupera y devuelve una lista con información sobre las tablas en un esquema especificado. Si no se proporciona un esquema, utiliza el esquema predeterminado de la conexión.
    • Parámetros de entrada:
      • schema (string, opcional): Esquema de base de datos para filtrar tablas. Por defecto, el predeterminado de la conexión.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve una cadena JSON con información de la tabla (por ejemplo, TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE).
  • podbc_filter_table_names

    • Filtra y devuelve información sobre tablas cuyos nombres contienen una subcadena específica.
    • Parámetros de entrada:
      • q (string, obligatorio): La subcadena a buscar dentro de los nombres de las tablas.
      • schema (string, opcional): Esquema de base de datos para filtrar tablas. Por defecto, el predeterminado de la conexión.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve una cadena JSON con información de las tablas coincidentes.
  • podbc_describe_table

    • Recupera y devuelve información detallada sobre las columnas de una tabla específica.
    • Parámetros de entrada:
      • schema (string, obligatorio): El nombre del esquema de base de datos que contiene la tabla.
      • table (string, obligatorio): El nombre de la tabla a describir.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve una cadena JSON que describe las columnas de la tabla (por ejemplo, COLUMN_NAME, TYPE_NAME, COLUMN_SIZE, IS_NULLABLE).
  • podbc_query_database

    • Ejecuta una consulta SQL estándar y devuelve los resultados en formato JSON.
    • Parámetros de entrada:
      • query (string, obligatorio): La cadena de consulta SQL a ejecutar.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve los resultados de la consulta como una cadena JSON.
  • podbc_query_database_md

    • Ejecuta una consulta SQL estándar y devuelve los resultados formateados como una tabla Markdown.
    • Parámetros de entrada:
      • query (string, obligatorio): La cadena de consulta SQL a ejecutar.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve los resultados de la consulta como una cadena de tabla Markdown.
  • podbc_query_database_jsonl

    • Ejecuta una consulta SQL estándar y devuelve los resultados en formato JSON Lines (JSONL) (un objeto JSON por línea).
    • Parámetros de entrada:
      • query (string, obligatorio): La cadena de consulta SQL a ejecutar.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve los resultados de la consulta como una cadena JSONL.
  • podbc_spasql_query

    • Ejecuta una consulta SPASQL (híbrido SQL/SPARQL) y devuelve resultados. Esta es una característica específica de Virtuoso.
    • Parámetros de entrada:
      • query (string, obligatorio): La cadena de consulta SPASQL.
      • max_rows (número, opcional): Número máximo de filas a devolver. Por defecto, 20.
      • timeout (número, opcional): Tiempo de espera de la consulta en milisegundos. Por defecto, 30000.
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve el resultado de la llamada al procedimiento almacenado subyacente (por ejemplo, Demo.demo.execute_spasql_query).
  • podbc_virtuoso_support_ai

    • Utiliza una función de Asistente de IA específica de Virtuoso, pasando un prompt y una clave API opcional. Esta es una característica específica de Virtuoso.
    • Parámetros de entrada:
      • prompt (string, obligatorio): El texto del prompt para la función de IA.
      • api_key (string, opcional): Clave API para el servicio de IA. Por defecto, "none".
      • user (string, opcional): Nombre de usuario de la base de datos. Por defecto, "demo".
      • password (string, opcional): Contraseña de la base de datos. Por defecto, "demo".
      • dsn (string, opcional): Nombre de la fuente de datos ODBC. Por defecto, "Local Virtuoso".
    • Devuelve el resultado de la llamada a la función del Asistente de Soporte de IA (por ejemplo, DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI).

Solución de problemas

Para facilitar la solución de problemas:

  1. Instale el MCP Inspector:

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

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

Acceda a la URL proporcionada para solucionar problemas de interacciones con el servidor.

Verified on MseeP