通过 PyODBC 实现 MCP 服务器 ODBC
使用FastAPI和pyodbc构建的轻量级 ODBC MCP (模型上下文协议) 服务器。该服务器兼容 Virtuoso DBMS 以及其他支持 ODBC 驱动的 DBMS 后端。

特征
获取模式:从连接的数据库中获取并列出所有模式名称。
获取表:检索特定模式或所有模式的表信息。
Describe Table :生成表结构的详细描述,包括:
列名和数据类型
可空属性
主键和外键
搜索表:根据名称子字符串过滤和检索表。
执行存储过程:在 Virtuoso 的情况下,执行存储过程并检索结果。
执行查询:
JSONL 结果格式:针对结构化响应进行了优化。
Markdown 表格格式:适合报告和可视化。
Related MCP server: Multi Database MCP Server
先决条件
安装 uv :
pip install uv或者使用 Homebrew:
brew install uvunixODBC 运行时环境检查:
通过运行以下命令检查安装配置(即关键 INI 文件的位置):
odbcinst -j通过运行以下命令列出可用的数据源名称:
odbcinst -q -sODBC DSN 设置:为目标数据库配置 ODBC 数据源名称 (
~/.odbc.ini)。以 Virtuoso DBMS 为例:[VOS] Description = OpenLink Virtuoso Driver = /path/to/virtodbcu_r.so Database = Demo Address = localhost:1111 WideAsUTF16 = Yes
安装
克隆此存储库:
环境变量
通过覆盖默认值来更新您的.env以符合您的偏好
配置
对于Claude Desktop用户:将以下内容添加到claude_desktop_config.json :
用法
提供的工具
安装成功后,MCP 客户端应用程序将可以使用以下工具。
概述
姓名 | 描述 |
podbc_get_schemas | 列出连接的数据库管理系统 (DBMS) 可访问的数据库模式。 |
podbc_get_tables | 列出与选定数据库模式关联的表。 |
podbc_describe_table | 提供与指定数据库模式关联的表的描述。这包括有关列名、数据类型、空值处理、自动增量、主键和外键的信息。 |
podbc_filter_table_names | 根据
输入字段中的子字符串模式列出与所选数据库模式关联的表。 |
podbc_query_database | 执行 SQL 查询并以 JSONL 格式返回结果。 |
podbc_execute_query | 执行 SQL 查询并以 JSONL 格式返回结果。 |
podbc_execute_query_md | 执行 SQL 查询并以 Markdown 表格式返回结果。 |
podbc_spasql_query | 执行SPASQL查询并返回结果。 |
podbc_sparql_query | 执行 SPARQL 查询并返回结果。 |
podbc_virtuoso_support_ai | 与 Virtuoso 支持助手/代理进行交互——Virtuoso 特有的与 LLM 交互的功能 |
详细描述
podbc_get_schemas
从连接的数据库中检索并返回所有模式名称的列表。
输入参数:
user(字符串,可选):数据库用户名。默认为“demo”。password(字符串,可选):数据库密码。默认为“demo”。dsn(字符串,可选):ODBC 数据源名称。默认为“Local Virtuoso”。
返回架构名称的 JSON 字符串数组。
podbc_get_tables
检索并返回包含指定架构中表的信息的列表。如果未提供架构,则使用连接的默认架构。
输入参数:
schema(字符串,可选):用于过滤表的数据库模式。默认为连接默认值。user(字符串,可选):数据库用户名。默认为“demo”。password(字符串,可选):数据库密码。默认为“demo”。dsn(字符串,可选):ODBC 数据源名称。默认为“Local Virtuoso”。
返回包含表信息(例如,TABLE_CAT、TABLE_SCHEM、TABLE_NAME、TABLE_TYPE)的 JSON 字符串。
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 行 (JSONL) 格式返回结果(每行一个 JSON 对象)。
输入参数:
query(字符串,必需):要执行的 SQL 查询字符串。user(字符串,可选):数据库用户名。默认为“demo”。password(字符串,可选):数据库密码。默认为“demo”。dsn(字符串,可选):ODBC 数据源名称。默认为“Local Virtuoso”。
以 JSONL 字符串形式返回查询结果。
podbc_spasql_query
执行 SPASQL(SQL/SPARQL 混合)查询并返回结果。这是 Virtuoso 独有的功能。
输入参数:
query(字符串,必需):SPASQL 查询字符串。max_rows(number,可选):返回的最大行数。默认为 20。timeout(数字,可选):查询超时时间(以毫秒为单位)。默认为 30000。user(字符串,可选):数据库用户名。默认为“demo”。password(字符串,可选):数据库密码。默认为“demo”。dsn(字符串,可选):ODBC 数据源名称。默认为“Local Virtuoso”。
返回底层存储过程调用的结果(例如,
Demo.demo.execute_spasql_query)。
podbc_sparql_query
执行 SPARQL 查询并返回结果。这是 Virtuoso 独有的功能。
输入参数:
query(字符串,必需):SPARQL 查询字符串。format(字符串,可选):所需的结果格式。默认为 'json'。timeout(数字,可选):查询超时时间(以毫秒为单位)。默认为 30000。user(字符串,可选):数据库用户名。默认为“demo”。password(字符串,可选):数据库密码。默认为“demo”。dsn(字符串,可选):ODBC 数据源名称。默认为“Local Virtuoso”。
返回底层函数调用的结果(例如,
"UB".dba."sparqlQuery")。
podbc_virtuoso_support_ai
使用 Virtuoso 独有的 AI 助手功能,传递提示符和可选的 API 密钥。这是 Virtuoso 独有的功能。
输入参数:
prompt(字符串,必需):AI 功能的提示文本。api_key(字符串,可选):AI 服务的 API 密钥。默认为“无”。user(字符串,可选):数据库用户名。默认为“demo”。password(字符串,可选):数据库密码。默认为“demo”。dsn(字符串,可选):ODBC 数据源名称。默认为“Local Virtuoso”。
返回 AI 支持助手函数调用的结果(例如,
DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI)。
故障排除
为了更容易地排除故障:
安装 MCP 检查器:
npm install -g @modelcontextprotocol/inspector启动检查器:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-pyodbc-server run mcp-pyodbc-server
访问提供的 URL 来排除服务器交互故障。