多数据库MCP服务器(由Legion AI提供)
一种服务器,帮助人们使用Legion query Runner访问和查询数据库中的数据,并集成了模型上下文协议(MCP)Python SDK。
从这里开始生成
此工具由提供 军团AI。要使用功能齐全、功能齐全的人工智能数据分析工具,请访问该网站。如果您希望我们支持某个数据库,请发送电子邮件给我们。
在这里结束世代
为什么选择数据库MCP
数据库MCP从其他数据库访问解决方案中脱颖而出,原因有几个:
- 统一多数据库接口:通过一个一致的API连接到PostgreSQL、MySQL、SQL Server和其他数据库-无需学习每种数据库类型的不同客户端库。
- AI就绪集成:通过模型上下文协议(MCP)专门为人工智能助手交互而构建,支持自然语言数据库操作。
- 零配置架构发现:自动发现和公开数据库架构,无需手动配置或映射。
- 数据库诊断工具:使用相同的工具集查找表、探索模式和执行查询,而不管底层数据库技术如何。
- 安全凭据管理:安全地处理数据库身份验证详细信息,将凭据与应用程序代码分离。
- 简单部署:与LangChain、FastAPI等现代人工智能开发环境配合使用,只需最少的设置。
- 可扩展设计:轻松添加自定义工具和提示,以增强特定用例的功能。
无论您是构建需要数据库访问的人工智能代理,还是只是想要一个到多个数据库的统一接口,database MCP都提供了一种简化的解决方案,大大减少了开发时间和复杂性。
特性
- 多数据库支持-同时连接到多个数据库
- 通过Legion Query Runner访问数据库
- AI助手的模型上下文协议(MCP)支持
- 将数据库操作作为MCP资源、工具和提示公开
- 多种部署选项(独立MCP服务器、FastAPI集成)
- 查询执行和结果处理
- 通过环境变量、命令行参数或MCP设置JSON进行灵活配置
- 用户驱动的多数据库设置数据库选择
支持的数据库
| 数据库 | DB_TYPE代码 |
|---|---|
| PostgreSQL | pg |
| 红移 | 红移 |
| 蟑螂DB | 蟑螂 |
| MySQL | MySQL |
| RDS MySQL | RDS_MySQL |
| Microsoft SQL Server | mssql |
| 大查询 | bigquery |
| Oracle数据库 | Oracle |
| SQLite | SQLite |
我们使用Legion Query Runner库作为连接器。你可以找到更多关于他们的信息 api文档.
什么是MCP?
模型上下文协议(MCP)是用于在AI应用程序中维护上下文的规范。此服务器使用 MCP Python SDK 致:
- 将数据库操作作为AI助手的工具公开
- 提供数据库模式和元数据作为资源
- 为数据库操作生成有用的提示
- 启用与数据库的有状态交互
安装和配置
所需参数
对于单数据库配置:
- DB_TYPE:数据库类型代码(见上表)
- DB_CONFIG:用于数据库连接的JSON配置字符串
对于多数据库配置:
- DB_CONFIGS:数据库配置的JSON数组,每个配置包含:
- db_type:数据库类型代码 - 配置:数据库连接配置 - 描述:数据库的人类可读描述
配置格式因数据库类型而异。请参阅 API文档 有关特定于数据库的配置详细信息。
安装方法
选项1:使用紫外线(推荐)
使用时 uv,不需要特定的安装。我们将使用 uvx 直接运行 *数据库mcp*.
UV配置示例(单个数据库):
REPLACE DB_TYPE and DB_CONFIG with your connection info.
{
"mcpServers": {
"database-mcp": {
"command": "uvx",
"args": [
"database-mcp"
],
"env": {
"DB_TYPE": "pg",
"DB_CONFIG": "{\"host\":\"localhost\",\"port\":5432,\"user\":\"user\",\"password\":\"pw\",\"dbname\":\"dbname\"}"
},
"disabled": true,
"autoApprove": []
}
}
}UV配置示例(多个数据库):
{
"mcpServers": {
"database-mcp": {
"command": "uvx",
"args": [
"database-mcp"
],
"env": {
"DB_CONFIGS": "[{\"id\":\"pg_main\",\"db_type\":\"pg\",\"configuration\":{\"host\":\"localhost\",\"port\":5432,\"user\":\"user\",\"password\":\"pw\",\"dbname\":\"postgres\"},\"description\":\"PostgreSQL Database\"},{\"id\":\"mysql_data\",\"db_type\":\"mysql\",\"configuration\":{\"host\":\"localhost\",\"port\":3306,\"user\":\"root\",\"password\":\"pass\",\"database\":\"mysql\"},\"description\":\"MySQL Database\"}]"
},
"disabled": true,
"autoApprove": []
}
}
}选项2:使用PIP
通过pip安装:
pip install database-mcpPIP配置示例(单个数据库):
{
"mcpServers": {
"database": {
"command": "python",
"args": [
"-m", "database_mcp",
"--repository", "path/to/git/repo"
],
"env": {
"DB_TYPE": "pg",
"DB_CONFIG": "{\"host\":\"localhost\",\"port\":5432,\"user\":\"user\",\"password\":\"pw\",\"dbname\":\"dbname\"}"
}
}
}
}运行服务器
生产模式
python mcp_server.py配置方法
环境变量(单个数据库)
export DB_TYPE="pg" # or mysql, postgresql, etc.
export DB_CONFIG='{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}'
uv run src/database_mcp/mcp_server.py环境变量(多个数据库)
export DB_CONFIGS='[{"id":"pg_main","db_type":"pg","configuration":{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"},"description":"PostgreSQL Database"},{"id":"mysql_users","db_type":"mysql","configuration":{"host":"localhost","port":3306,"user":"root","password":"pass","database":"mysql"},"description":"MySQL Database"}]'
uv run src/database_mcp/mcp_server.py如果不指定ID,系统将根据数据库类型和描述自动生成一个ID:
export DB_CONFIGS='[{"db_type":"pg","configuration":{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"},"description":"PostgreSQL Database"},{"db_type":"mysql","configuration":{"host":"localhost","port":3306,"user":"root","password":"pass","database":"mysql"},"description":"MySQL Database"}]'
# IDs will be generated as something like "pg_postgres_0" and "my_mysqldb_1"
uv run src/database_mcp/mcp_server.py命令行参数(单个数据库)
python mcp_server.py --db-type pg --db-config '{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}'命令行参数(多个数据库)
python mcp_server.py --db-configs '[{"id":"pg_main","db_type":"pg","configuration":{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"},"description":"PostgreSQL Database"},{"id":"mysql_users","db_type":"mysql","configuration":{"host":"localhost","port":3306,"user":"root","password":"pass","database":"mysql"},"description":"MySQL Database"}]'请注意,您可以使用 id 字段,或者让系统根据数据库类型和描述生成它们。
多数据库支持
连接到多个数据库时,您需要指定每个查询使用哪个数据库:
- 使用
list_databases查看可用数据库及其ID的工具 - 使用
get_database_info查看数据库的模式详细信息 - 使用
find_table在所有数据库中查找表 - 提供
db_id工具参数,如execute_query,get_table_columns等等。
数据库连接在内部作为字典进行管理 DbConfig 对象,每个数据库都有一个唯一的ID。架构信息表示为表对象列表,其中每个表都包含其名称和列信息。
这 select_database prompt引导用户完成数据库选择过程。
模式表示
数据库模式表示为表对象列表,每个表都包含有关其列的信息:
[
{
"name": "users",
"columns": [
{"name": "id", "type": "integer"},
{"name": "username", "type": "varchar"},
{"name": "email", "type": "varchar"}
]
},
{
"name": "orders",
"columns": [
{"name": "id", "type": "integer"},
{"name": "user_id", "type": "integer"},
{"name": "product_id", "type": "integer"},
{"name": "quantity", "type": "integer"}
]
}
]这种表示方式使得以编程方式访问表和列信息变得容易,同时保持了干净的层次结构。
暴露的MCP能力
资源
| 资源 | 描述 |
|---|---|
resource://schema/{database_id} | 获取一个或所有已配置数据库的架构 |
工具
| 工具 | 说明 |
|---|---|
execute_query | 执行SQL查询并将结果作为markdown表返回 |
execute_query_json | 执行SQL查询并以JSON格式返回结果 |
get_table_columns | 获取特定表的列名 |
get_table_types | 获取特定表的列类型 |
get_query_history | 获取最近的查询历史记录 |
list_databases | 列出所有可用的数据库连接 |
get_database_info | 获取数据库的详细信息,包括模式 |
find_table | 查找包含特定表的数据库 |
describe_table | 获取表的详细描述,包括列名和类型 |
get_table_sample | 从表中获取数据样本 |
所有特定于数据库的工具(如 execute_query, get_table_columns等)需要 db_id 参数,指定要使用的数据库。
提示
| 提示 | 描述 |
|---|---|
sql_query | 针对数据库创建SQL查询 |
explain_query | 解释SQL查询的作用 |
optimize_query | 优化SQL查询以获得更好的性能 |
select_database | 帮助用户选择要使用的数据库 |
发展
使用MCP检查器
运行此命令以启动检查器
npx @modelcontextprotocol/inspector uv run src/database_mcp/mcp_server.py然后在命令输入字段中,设置如下内容
run src/database_mcp/mcp_server.py --db-type pg --db-config '{"host":"localhost","port":5432,"user":"username","password":"password","dbname":"database_name"}'测试
uv pip install -e ".[dev]"
pytest出版
# Clean up build artifacts
rm -rf dist/ build/
# Remove any .egg-info directories if they exist
find . -name "*.egg-info" -type d -exec rm -rf {} + 2>/dev/null || true
# Build the package
uv run python -m build
# Upload to PyPI
uv run python -m twine upload dist/*许可证
此存储库根据GPL许可
