关于 MCP Server ODBC via PyODBC
OpenLink MCP Server for ODBC via PyODBC 为通过 ODBC 连接的数据库提供发现和查询工具。除结构化格式的 SQL 结果外,它还支持 Virtuoso 专属的 SPASQL 和存储过程操作。
主要功能
- 01列出模式和表
- 02描述列及键约束
- 03按名称子串筛选表
- 04以 JSONL 或 Markdown 格式返回 SQL 结果
- 05执行 Virtuoso SPASQL 查询
- 06调用 Virtuoso 存储过程
适用场景
- 01查询前检查模式和表结构
- 02根据部分名称查找表
- 03执行 SQL 并按需格式化结果
- 04使用 SPASQL 查询 Virtuoso 数据
MCP 相关
向 MCP 客户端提供 ODBC 数据库元数据和查询操作,包括模式与表检查、SQL 执行及 Virtuoso 专属工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
通过 PyODBC 使用 ODBC 的 OpenLink MCP 服务
使用 FastAPI 和 pyodbc 构建的轻量级 ODBC MCP(Model Context Protocol)服务。该服务兼容 Virtuoso DBMS,以及任何具有 ODBC 驱动程序的其他 DBMS 后端。

功能
- 获取架构:从已连接的数据库中获取并列出所有架构名称。
- 获取表:获取指定架构或所有架构的表信息。
- 描述表:生成表结构的详细说明,包括:
- 列名和数据类型
- 可空属性
- 主键和外键
- 搜索表:根据名称子串筛选并获取表。
- 执行存储过程:连接到 Virtuoso 时,执行存储过程并获取结果。
- 执行查询:
- JSONL 结果格式:针对结构化响应进行优化。
- Markdown 表格格式:适用于报告和可视化。
前置条件
-
安装 uv:
pip install uv或使用 Homebrew:
brew install uv -
unixODBC 运行时环境检查:
-
运行
odbcinst -j检查安装配置(例如关键 INI 文件的位置)。 -
运行
odbcinst -q -s列出可用的数据源名称。 -
设置 ODBC DSN:为目标数据库配置 ODBC 数据源名称(通常位于
~/.odbc.ini)。Virtuoso DBMS 的示例:[VOS] Description = OpenLink Virtuoso Driver = /path/to/virtodbcu_r.so Database = Demo Address = localhost:1111 WideAsUTF16 = Yes
安装
克隆此仓库:
git clone https://github.com/OpenLinkSoftware/mcp-pyodbc-server.git
cd mcp-pyodbc-server
环境变量
修改 .env,覆盖默认值以符合你的偏好。
ODBC_DSN=VOS
ODBC_USER=dba
ODBC_PASSWORD=dba
API_KEY=xxx
配置
Claude Desktop 用户:
将以下内容添加到 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"
}
}
}
}
用法
提供的工具
成功安装后,MCP 客户端应用程序即可使用以下工具。
概览
| name | description |
|---|---|
podbc_get_schemas | 列出已连接的数据库管理系统(DBMS)可访问的数据库架构。 |
podbc_get_tables | 列出与所选数据库架构关联的表。 |
podbc_describe_table | 提供与指定数据库架构关联的表的说明,包括列名、数据类型、空值处理、自增、主键和外键信息 |
podbc_filter_table_names | 根据 q 输入字段中的子串模式,列出与所选数据库架构关联的表。 |
podbc_query_database | 执行 SQL 查询并以 JSONL 格式返回结果。 |
podbc_execute_query | 执行 SQL 查询并以 JSONL 格式返回结果。 |
podbc_execute_query_md | 执行 SQL 查询并以 Markdown 表格格式返回结果。 |
podbc_spasql_query | 执行 SPASQL 查询并返回结果。 |
podbc_virtuoso_support_ai | 与 Virtuoso Support Assistant/Agent 交互——这是 Virtuoso 专属的 LLM 交互功能 |
详细说明
-
podbc_get_schemas- 从已连接的数据库中获取并返回所有架构名称的列表。
- 输入参数:
user(string,可选):数据库用户名。默认值为"demo"。password(string,可选):数据库密码。默认值为"demo"。dsn(string,可选):ODBC 数据源名称。默认值为"Local Virtuoso"。
- 返回架构名称的 JSON 字符串数组。
-
podbc_get_tables- 获取并返回指定架构中包含表信息的列表。如果未提供架构,则使用连接的默认架构。
- 输入参数:
schema(字符串,可选):用于筛选表的数据库架构。默认为连接的默认架构。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 返回包含表信息的 JSON 字符串(例如
TABLE_CAT、TABLE_SCHEM、TABLE_NAME、TABLE_TYPE)。
-
podbc_filter_table_names- 筛选并返回名称中包含特定子字符串的表的信息。
- 输入参数:
q(字符串,必填):要在表名中搜索的子字符串。schema(字符串,可选):用于筛选表的数据库架构。默认为连接的默认架构。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 返回包含匹配表信息的 JSON 字符串。
-
podbc_describe_table- 获取并返回特定表的列的详细信息。
- 输入参数:
schema(字符串,必填):包含该表的数据库架构名称。table(字符串,必填):要描述的表的名称。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 返回描述表列的 JSON 字符串(例如
COLUMN_NAME、TYPE_NAME、COLUMN_SIZE、IS_NULLABLE)。
-
podbc_query_database- 执行标准 SQL 查询,并以 JSON 格式返回结果。
- 输入参数:
query(字符串,必填):要执行的 SQL 查询字符串。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 以 JSON 字符串形式返回查询结果。
-
podbc_query_database_md- 执行标准 SQL 查询,并将结果格式化为 Markdown 表格。
- 输入参数:
query(字符串,必填):要执行的 SQL 查询字符串。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 以 Markdown 表格字符串形式返回查询结果。
-
podbc_query_database_jsonl- 执行标准 SQL 查询,并以 JSON Lines(JSONL)格式返回结果(每行一个 JSON 对象)。
- 输入参数:
query(字符串,必填):要执行的 SQL 查询字符串。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 以 JSONL 字符串形式返回查询结果。
-
podbc_spasql_query- 执行 SPASQL(SQL/SPARQL 混合)查询并返回结果。这是 Virtuoso 特有的功能。
- 输入参数:
query(字符串,必填):SPASQL 查询字符串。max_rows(数字,可选):要返回的最大行数。默认为20。timeout(数字,可选):查询超时时间,单位为毫秒。默认为30000。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 返回底层存储过程调用的结果(例如,
Demo.demo.execute_spasql_query)。
-
podbc_virtuoso_support_ai- 调用 Virtuoso 特有的 AI 助手功能,并传入提示词和可选的 API 密钥。这是 Virtuoso 特有的功能。
- 输入参数:
prompt(字符串,必填):AI 功能使用的提示词文本。api_key(字符串,可选):AI 服务的 API 密钥。默认为"none"。user(字符串,可选):数据库用户名。默认为"demo"。password(字符串,可选):数据库密码。默认为"demo"。dsn(字符串,可选):ODBC 数据源名称。默认为"Local Virtuoso"。
- 返回 AI Support Assistant 函数调用的结果(例如,
DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI)。
故障排除
如需更轻松地排查问题:
-
安装 MCP Inspector:
npm install -g @modelcontextprotocol/inspector -
启动 Inspector:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-pyodbc-server run mcp-pyodbc-server
访问提供的 URL,以排查服务交互问题。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。