podbc_get_schemasLABSCO SUMMARY
One connection covers every database your ODBC layer already reaches.
Because the connection is a DSN rather than a driver compiled into the server, adding a second database is an ODBC entry rather than another MCP server - and the same query can come back as JSONL for a machine or as a table for a person.
What it is
An ODBC bridge built on SQLAlchemy and pyodbc. It connects through a DSN you have already configured, so any backend with a SQLAlchemy provider is in reach - Virtuoso included - and the same schema and query calls work across all of them.
What you get
- Every schema name on the connected database
- Tables for one schema, or across all of them
- Tables filtered by a substring, for the one whose name you half-remember
- A table described in full: columns and data types, nullability, primary and foreign keys
- Queries executed and returned as JSONL, for a result the next step will consume
- The same query returned as a Markdown table, for a result a person will read
Requirements
unixODBC with your driver installed and a DSN configured in ~/.odbc.ini, plus uv to run the server. Connection settings — the DSN, the user and the password — go in .env, and the SQLAlchemy URL takes the form virtuoso+pyodbc://user:password@VOS. Check the ODBC side first with odbcinst -j and odbcinst -q -s, before wiring the client up.
Setup effort
Build from source — git clone https://github.com/OpenLinkSoftware/mcp-sqlalchemy-server.git
USE CASES
Getting oriented in a database nobody documented
List the schemas, then the tables under the one you mean, then read a table's columns, keys and nullability before writing any SQL.
Finding the table whose name you half-remember
Filter table names by a substring instead of paging the full list.
Answering a question in a form a person can read
Run the query and take the Markdown table, so the answer arrives as a table rather than as rows to reformat.
Feeding a result into the next step
Run the same query for JSONL, so the output is structured for whatever consumes it.
Running a stored procedure and reading what came back
On Virtuoso the query calls execute stored procedures too, so the result arrives in the same shape as any other query.
10 tools
Listed in project docs. Your client may show a different list.
podbc_get_tablespodbc_filter_table_namespodbc_describe_tablepodbc_query_databasepodbc_query_database_mdpodbc_query_database_jsonlpodbc_spasql_querypodbc_sparql_querypodbc_virtuoso_support_aiBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Requires
- uv on PATH
- unixODBC with an ODBC driver for your database (odbcinst -j shows the install)
- An ODBC DSN configured for the target database in ~/.odbc.ini (odbcinst -q -s lists them)
- ODBC_DSN, ODBC_USER and ODBC_PASSWORD in the client configuration
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
You clone this one yourself.
Server setup
pip install uv
git clone https://github.com/OpenLinkSoftware/mcp-sqlalchemy-server.git
cd mcp-sqlalchemy-serverMCP Clients
Claude Desktop
{
"mcpServers": {
"my_database": {
"command": "uv",
"args": [
"--directory",
"<YOUR_PATH_TO_MCP_SQLALCHEMY_SERVER>",
"run",
"mcp-sqlalchemy-server"
],
"env": {
"ODBC_DSN": "<YOUR_ODBC_DSN>",
"ODBC_USER": "<YOUR_ODBC_USER>",
"ODBC_PASSWORD": "<YOUR_ODBC_PASSWORD>",
"API_KEY": "<YOUR_API_KEY>"
}
}
}
}API_KEY is optional: only the podbc_virtuoso_support_ai tool uses it, as the key for the Virtuoso AI support assistant (default "none"). Leave it out if you do not use that tool.