MCP-PyODBC服务器
一个轻量级的MCP服务器,通过ODBC连接启用数据库访问和查询功能,并特别支持Virtuoso DBMS的特性,例如SPARQL和通过自然语言的AI辅助功能。
服务介绍
MCP Server ODBC 通过 PyODBC 实现
一个使用 FastAPI 和 pyodbc 构建的轻量级 MCP(Model Context Protocol)服务器。该服务器兼容 Virtuoso DBMS 以及其他具有 ODBC 驱动程序的数据库管理系统。

功能
- 获取模式: 从连接的数据库中获取并列出所有模式名称。
- 获取表: 检索特定模式或所有模式的表信息。
- 描述表: 生成表结构的详细描述,包括:
- 列名和数据类型
- 可空属性
- 主键和外键
- 搜索表: 根据名称子串过滤并检索表。
- 执行存储过程: 在 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 客户端应用程序使用。
概览
| 名称 | 描述 |
|---|---|
| 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_sparql_query | 执行SPARQL查询并返回结果。 |
| podbc_virtuoso_support_ai | 与Virtuoso支持助手/代理进行交互——这是Virtuoso特有的功能,用于与大型语言模型(LLMs)互动 |
详细描述
希望这个翻译对你有帮助!如果有任何进一步的问题或需要更多的细节,请告诉我。
-
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, 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_sparql_query
- Execute a SPARQL query and return results. This is a Virtuoso-specific feature.
- Input parameters:
query(string, required): The SPARQL query string.format(string, optional): Desired result format. Defaults to 'json'.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 function call (e.g.,
"UB".dba."sparqlQuery").
-
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).
故障排查
为了更方便地进行故障排查:
-
安装 MCP Inspector:
npm install -g @modelcontextprotocol/inspector -
启动 inspector:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-pyodbc-server run mcp-pyodbc-server
访问提供的 URL 以排查服务器交互问题。