项目简介
本项目 'MCP ODBC数据库服务器' 是一个实现了 Model Context Protocol (MCP) 的后端服务器,它允许大型语言模型 (LLM) 客户端通过标准化的 MCP 协议,访问和查询各种支持 ODBC 连接的关系型数据库。该服务器使用 FastAPI 框架构建,能够通过 ODBC 桥梁连接多种数据库系统,例如 Virtuoso, PostgreSQL, MySQL, SQLite 等。它将数据库的结构信息和数据查询功能以 MCP 工具的形式暴露给 LLM 客户端,使得 LLM 可以利用数据库中的信息作为上下文,从而实现更智能的应用。
主要功能点
- 获取数据库Schema: 列出数据库中所有 Schema 的名称,帮助 LLM 理解数据库的组织结构。
- 获取数据表信息: 检索指定或所有 Schema 下的数据表信息,方便 LLM 了解可用的数据表。
- 描述数据表结构: 详细描述数据表的结构,包括列名、数据类型、是否允许为空、主键外键等信息,让 LLM 深入了解表结构。
- 搜索数据表: 根据表名关键词过滤和检索数据表,辅助 LLM 快速定位目标数据表。
- 执行SQL查询: 支持执行用户自定义的 SQL 查询语句,并以 JSONL 或 Markdown 格式返回查询结果,满足 LLM 获取数据的需求。
- JSONL 格式: 结构化 JSON 格式,易于 LLM 解析和处理。
- Markdown 表格格式: 以 Markdown 表格形式返回数据,方便 LLM 以更友好的方式呈现查询结果。
安装步骤
-
克隆仓库:
git clone https://github.com/OpenLinkSoftware/mcp-server-odbc.git cd mcp-server-odbc -
安装依赖: 推荐使用 'uv' 包管理器,可以显著加速安装过程。
pip install uv uv pip install .或者使用 'pip':
pip install -r requirements.txt -
配置 ODBC DSN: 配置您的 ODBC 数据源名称 (DSN) 文件 '~/.odbc.ini',指向您的目标数据库。 例如,连接 Virtuoso 数据库的配置示例:
[VOS] Description = OpenLink Virtuoso Driver = /path/to/virtodbcu_r.so # 替换为您的 Virtuoso ODBC 驱动路径 Database = Demo # 数据库名称 Address = localhost:1111 # 数据库地址和端口 WideAsUTF16 = Yes请根据您使用的数据库类型,参考仓库 'README.md' 中提供的 Examples of Database URL Configuration 表格进行配置。
-
设置数据库连接URL: 设置环境变量 'DB_URL' 为 SQLAlchemy 兼容的数据库连接 URL。 例如,对于 Virtuoso 数据库,可以使用 'virtuoso+pyodbc://user:password@VOS' 格式,其中 'VOS' 是您在 'odbc.ini' 中配置的 DSN 名称。 您可以在启动服务器前,通过命令行 export 或者编辑 '.env' 文件来设置 'DB_URL' 环境变量。
服务器配置
对于 MCP 客户端(例如 Claude Desktop),您需要配置 MCP 服务器的启动命令和参数,以便客户端能够连接到 'MCP ODBC数据库服务器'。 以下是一个典型的 'claude_desktop_config.json' 配置示例,您需要根据您的实际情况进行调整:
{ "mcpServers": { "my_database": { // 服务器名称,可以自定义 "command": "uv", // 启动服务器的命令,这里使用 uv 包管理器 "args": ["--directory", "/path/to/mcp-server-odbc", "run", "mcp-server-odbc"], // 启动参数 // --directory: 指定服务器代码所在的目录,请替换为您的 mcp-server-odbc 仓库的路径 // run mcp-server-odbc: 运行 mcp-server-odbc 包中的主程序 "env": { "DB_URL": "virtuoso+pyodbc://user:password@VOS" // 数据库连接 URL,请替换为您的数据库连接信息 } } } }
配置说明:
- 'server name' (例如 '"my_database"'): 您为该 MCP 服务器自定义的名称,在客户端中用于标识和选择服务器。
- 'command': 启动服务器进程的命令。 通常使用 'uv run mcp-server-odbc' 或者 'python -m mcp_server_odbc'。 如果您直接运行 'server.py',则命令为 'uv' 或 'python', 'args' 需相应调整。
- 'args': 传递给启动命令的参数列表。
- '--directory "/path/to/mcp-server-odbc"': 指定服务器代码所在的目录。 请务必替换为您的 'mcp-server-odbc' 仓库的实际路径。
- '"run" "mcp-server-odbc"': 使用 'uv' 或 'python -m' 运行 'mcp_server_odbc' 包。 如果直接运行 'server.py',则不需要这两个参数。
- 'env': 设置服务器进程的环境变量。
- 'DB_URL': 最关键的配置项! 数据库连接 URL,用于服务器连接到您的数据库。 请务必根据您的数据库类型和连接信息,替换为您自己的数据库连接 URL。 参考 'README.md' 中的 Examples of Database URL Configuration 表格。
注意: 请根据您实际的 Python 环境、包管理器(pip 或 uv)以及数据库连接信息,调整上述配置。确保 'command' 和 'args' 能够正确启动 'MCP ODBC数据库服务器',并且 'DB_URL' 环境变量设置正确,服务器才能成功连接到数据库并提供服务。
基本使用方法
- 启动 'MCP ODBC数据库服务器' (通常由 MCP 客户端自动启动,例如 Claude Desktop)。
- 在 MCP 客户端中配置并连接到名为 '"my_database"' (或您自定义的服务器名称) 的 MCP 服务器。
- 客户端可以通过 MCP 协议调用服务器提供的工具 (Tools),例如:
- 调用 'get_schemas' 工具获取数据库 Schema 列表。
- 调用 'get_tables' 工具获取指定 Schema 或所有 Schema 下的数据表信息。
- 调用 'describe_table' 工具获取指定数据表的详细结构信息。
- 调用 'filter_table_names' 工具根据关键词搜索数据表。
- 调用 'execute_query' 或 'execute_query_md' 工具执行 SQL 查询并获取数据。
- LLM 客户端可以利用这些工具获取的数据库信息和数据,作为上下文来辅助生成更准确、更符合数据库实际情况的回复。
信息
分类
数据库与文件