一个使用 FastAPI、pyodbc 和 SQLAlchemy 构建的轻量级 MCP(Model Context Protocol)ODBC 服务器。该服务器与 Virtuoso DBMS 及其他实现了 SQLAlchemy 提供者的数据库管理系统后端兼容。

安装 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
SQLAlchemy URL 绑定:使用以下格式:
virtuoso+pyodbc://user:password@VOS
克隆此仓库:
git clone https://github.com/OpenLinkSoftware/mcp-sqlalchemy-server.git
cd mcp-sqlalchemy-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-sqlalchemy-server", "run", "mcp-sqlalchemy-server"],
"env": {
"ODBC_DSN": "dsn_name",
"ODBC_USER": "username",
"ODBC_PASSWORD": "password",
"API_KEY": "sk-xxx"
}
}
}
}

以下是已使用此 mcp-server 测试过的 DBMS 系统的 pyodbc URL 示例。
| 数据库 | URL 格式 |
|---|---|
| Virtuoso DBMS | virtuoso+pyodbc://user:password@ODBC_DSN |
| PostgreSQL | postgresql://user:password@localhost/dbname |
| MySQL | mysql+pymysql://user:password@localhost/dbname |
| SQLite | sqlite:///path/to/database.db |
一旦连接成功,您可以通过 Claude 与您的 WhatsApp 联系人互动,在 WhatsApp 对话中利用 Claude 的 AI 能力。
| 名称 | 描述 |
|---|---|
| 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
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".podbc_get_tables
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".podbc_filter_table_names
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".podbc_describe_table
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".podbc_query_database
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".podbc_query_database_md
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".podbc_query_database_jsonl
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".podbc_spasql_query
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".Demo.demo.execute_spasql_query).podbc_sparql_query
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"."UB".dba."sparqlQuery").podbc_virtuoso_support_ai
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".DEMO.DBA.OAI_VIRTUOSO_SUPPORT_AI).为了更方便地进行故障排除:
安装 MCP Inspector:
npm install -g @modelcontextprotocol/inspector
启动 inspector:
npx @modelcontextprotocol/inspector uv --directory /path/to/mcp-sqlalchemy-server run mcp-sqlalchemy-server
访问提供的 URL 以排查服务器交互问题。