MCP Connector

Connect to Databases via ODBC

MCP server for ODBC via PyODBC - schema/table inspection, SQL queries, and Virtuoso-specific SPASQL and AI support.

Works with githubvirtuoso

90
Spark score
out of 100
Updated Jul 2025
Version 1.0.0
Models
universal

Add to Favorites

Why it matters

Access and query any database with an ODBC driver using a lightweight MCP server. Enables data retrieval, schema inspection, and SQL execution for diverse database systems.

Outcomes

What it gets done

01

Connect to databases using ODBC drivers.

02

Retrieve database schemas and table structures.

03

Execute SQL queries and retrieve results in various formats.

04

Integrate with Virtuoso DBMS for advanced SPASQL and AI features.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-openlink-generic-python-open-database-connectivity | bash

Capabilities

Tools your agent gets

podbc_get_schemas

Get a list of database schemas available for the connected DBMS

podbc_get_tables

Get a list of tables associated with the selected database schema

podbc_describe_table

Provide a description of a table including column names, data types, and constraints

podbc_filter_table_names

Get a list of tables based on a substring pattern from the selected database schema

podbc_query_database

Execute an SQL query and return results in JSON format

podbc_execute_query

Execute an SQL query and return results in JSONL format

podbc_execute_query_md

Execute an SQL query and return results in Markdown table format

podbc_spasql_query

Execute a SPASQL query and return results for Virtuoso DBMS

podbc_virtuoso_support_ai

Interact with Virtuoso support assistant for LLM interaction

Overview

OpenLink Generic Python Open Database Connectivity MCP Server

An MCP server for ODBC via PyODBC and FastAPI - schema and table inspection, SQL queries returned as JSONL or Markdown, and Virtuoso-specific SPASQL and AI-assistant support. Use it for querying any ODBC-accessible database, with Virtuoso-specific tools available when connected to Virtuoso.

What it does

This is a lightweight MCP server for ODBC, built with FastAPI and pyodbc, compatible with Virtuoso DBMS and any other DBMS backend with an ODBC driver. Core features cover fetching and listing all schema names from the connected database, retrieving table information for specific or all schemas, describing table structures in detail (column names, data types, nullable attributes, primary and foreign keys), filtering tables by a name substring, executing stored procedures when connected to Virtuoso, and executing SQL queries with results returned as JSONL (optimized for structured responses) or as a Markdown table (suited to reporting and visualization).

When to use - and when NOT to

Use it when an AI assistant needs to inspect schemas and tables or run SQL queries against any ODBC-accessible database, or needs Virtuoso-specific features like SPASQL hybrid SQL/SPARQL queries or the Virtuoso Support AI Assistant. It is not limited to Virtuoso for basic querying - it works with any DBMS that has an ODBC driver - but the SPASQL and AI-support tools are Virtuoso-specific.

Capabilities

Nine tools are exposed: podbc_get_schemas (list all accessible database schemas), podbc_get_tables (list tables for a schema, defaulting to the connection's default schema), podbc_describe_table (detailed column info - name, type, nullability, primary/foreign keys - for a required schema and table), podbc_filter_table_names (filter tables by a required substring q), podbc_query_database/podbc_execute_query (execute a SQL query, returning JSONL), podbc_execute_query_md (execute a SQL query, returning a Markdown table), podbc_spasql_query (execute a Virtuoso-specific SPASQL query, with max_rows defaulting to 20 and timeout defaulting to 30000ms), and podbc_virtuoso_support_ai (pass a prompt to the Virtuoso Support AI Assistant). Most tools accept optional user/password/dsn parameters, defaulting to "demo"/"demo"/"Local Virtuoso" respectively.

How to install

Install uv (pip install uv or brew install uv), verify the unixODBC runtime with odbcinst -j and odbcinst -q -s, and configure an ODBC DSN (typically in ~/.odbc.ini). Clone the server and set environment variables (ODBC_DSN, ODBC_USER, ODBC_PASSWORD, API_KEY) in .env, then register it in 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"
      }
    }
  }
}

For troubleshooting, install the MCP Inspector (npm install -g @modelcontextprotocol/inspector) and run it against the server to inspect interactions through its provided URL.

Who it's for

Developers and data teams whose AI assistant needs to query or inspect any ODBC-accessible database, including Virtuoso-specific SPASQL and AI-assistant features.

Source README

Features

  • Get Schemas: Fetch and list all schema names from the connected database.
  • Get Tables: Retrieve table information for specific schemas or all schemas.
  • Describe Table: Generate a detailed description of table structures, including:
    • Column names and data types
    • Nullable attributes
    • Primary and foreign keys
  • Search Tables: Filter and retrieve tables based on name substrings.
  • Execute Stored Procedures: When connected to Virtuoso, execute stored procedures and retrieve results.
  • Execute Queries:
    • JSONL result format: Optimized for structured responses.
    • Markdown table format: Ideal for reporting and visualization.

Prerequisites

  1. Install uv:

    pip install uv
    

    Or use Homebrew:

    brew install uv
    
  2. unixODBC Runtime Environment Checks:

  3. Check installation configuration (i.e., location of key INI files) by running: odbcinst -j

  4. List available data source names by running: odbcinst -q -s

  5. ODBC DSN Setup: Configure your ODBC Data Source Name (typically in ~/.odbc.ini) for the target database. Example for Virtuoso DBMS:

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

Installation

Clone this repository:

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

Environment Variables

Update your .env by overriding the defaults to match your preferences.

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

Configuration

For Claude Desktop users:

Add the following to 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"
      }
    }
  }
}

Usage

Tools Provided

After successful installation, the following tools will be available to MCP client applications.

Overview
name description
podbc_get_schemas List database schemas accessible to connected database management system (DBMS).
podbc_get_tables List tables associated with a selected database schema.
podbc_describe_table Provide the description of a table associated with a designated database schema. This includes information about column names, data types, null handling, autoincrement, primary keys, and foreign keys
podbc_filter_table_names List tables, based on a substring pattern from the q input field, associated with a selected database schema.
podbc_query_database Execute a SQL query and return results in JSONL format.
podbc_execute_query Execute a SQL query and return results in JSONL format.
podbc_execute_query_md Execute a SQL query and return results in Markdown table format.
podbc_spasql_query Execute a SPASQL query and return results.
podbc_virtuoso_support_ai Interact with the Virtuoso Support Assistant/Agent -- a Virtuoso-specific feature for interacting with LLMs
Detailed Description
  • podbc_get_schemas

    • Retrieve and return a list of all schema names from the connected database.
    • Input parameters:
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns a JSON string array of schema names.
  • podbc_get_tables

    • Retrieve and return a list containing information about tables in a specified schema. If no schema is provided, it uses the connection's default schema.
    • Input parameters:
      • schema (string, optional): Database schema to filter tables. Defaults to connection default.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns a JSON string containing table information (e.g., TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE).
  • podbc_filter_table_names

    • Filters and returns information about tables whose names contain a specific substring.
    • Input parameters:
      • q (string, required): The substring to search for within table names.
      • schema (string, optional): Database schema to filter tables. Defaults to connection default.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns a JSON string containing information for matching tables.
  • podbc_describe_table

    • Retrieve and return detailed information about the columns of a specific table.
    • Input parameters:
      • schema (string, required): The database schema name containing the table.
      • table (string, required): The name of the table to describe.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns a JSON string describing the table's columns (e.g., COLUMN_NAME, TYPE_NAME, COLUMN_SIZE, IS_NULLABLE).
  • podbc_query_database

    • Execute a standard SQL query and return the results in JSON format.
    • Input parameters:
      • query (string, required): The SQL query string to execute.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns query results as a JSON string.
  • podbc_query_database_md

    • Execute a standard SQL query and return the results formatted as a Markdown table.
    • Input parameters:
      • query (string, required): The SQL query string to execute.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns query results as a Markdown table string.
  • podbc_query_database_jsonl

    • Execute a standard SQL query and return the results in JSON Lines (JSONL) format (one JSON object per line).
    • Input parameters:
      • query (string, required): The SQL query string to execute.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns query results as a JSONL string.
  • podbc_spasql_query

    • Execute a SPASQL (SQL/SPARQL hybrid) query return results. This is a Virtuoso-specific feature.
    • Input parameters:
      • query (string, required): The SPASQL query string.
      • max_rows (number, optional): Maximum number of rows to return. Defaults to 20.
      • timeout (number, optional): Query timeout in milliseconds. Defaults to 30000.
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns the result from the underlying stored procedure call (e.g., Demo.demo.execute_spasql_query).
  • podbc_virtuoso_support_ai

    • Utilizes a Virtuoso-specific AI Assistant function, passing a prompt and optional API key. This is a Virtuoso-specific feature.
    • Input parameters:
      • prompt (string, required): The prompt text for the AI function.
      • api_key (string, optional): API key for the AI service. Defaults to "none".
      • user (string, optional): Database username. Defaults to "demo".
      • password (string, optional): Database password. Defaults to "demo".
      • dsn (string, optional): ODBC data source name. Defaults to "Local Virtuoso".
    • Returns the result from the AI Support Assistant function call (e.g., DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI).

Troubleshooting

For easier troubleshooting:

  1. Install the MCP Inspector:

    npm install -g @modelcontextprotocol/inspector
    
  2. Start the inspector:

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

Access the provided URL to troubleshoot server interactions.

Verified on MseeP

FAQ

Common questions

Discussion

Questions & comments · 0

Sign In Sign in to leave a comment.