返回市场
MCP数据库Python服务器

MCP数据库Python服务器

作者:1913410252 星标更新:2025-10-17

项目介绍

MCP DB Python

MCP DB Python 是一个基于 Python 的 Model Context Protocol (MCP) 数据库服务,通过标准输入输出上的 JSON-RPC 提供安全的数据库结构检查和只读查询能力。

项目概述

该项目封装了基本的 MCP 服务器启动逻辑和数据源适配层,目前专注于 MySQL,以方便快速访问数据库模式信息和只读查询结果在 LLM 工具链中。随着持续维护,接口和数据源适配器将继续扩展,使 MCP 协议能够在各种场景中得到更广泛的集成。
此仓库打包了核心 MCP 服务器循环以及专注于 MySQL 的数据库适配器,使其易于在 LLM 代理工作流中暴露模式元数据和只读查询结果。随着项目的积极维护,API 表面和连接器集将继续扩展。

主要特性

  • 面向 MCP 的 JSON-RPC 通信,兼容各种支持 MCP 的客户端 / 支持 MCP 兼容客户端的 JSON-RPC 传输
  • MySQL 模式和存储过程内省能力
  • 严格的只读 SQL 验证,确保在线环境的安全性
  • 基于 .env 配置的数据源参数,便于跨环境部署 .env 驱动的连接器设置,实现无缝环境切换。
  • 积极维护的路线图,增加更多连接器和工具

快速开始

环境需求

  • Python 3.10 或更高版本
  • 可达的 MySQL 实例(其他引擎待添加)

安装步骤

  1. 克隆仓库并进入项目:
    git clone https://github.com/your-account/mcp-db-python.git
    cd mcp-db-python
    
  2. (可选)创建并激活虚拟环境:
    python -m venv venv
    # Windows
    .\venv\Scripts\activate
    # macOS / Linux
    source venv/bin/activate
    
  3. 安装依赖项:
    pip install -r requirements.txt
    
  4. 配置数据库连接 / 配置数据库凭据:
    • 复制或编辑 .env 文件,填写 DB_TYPEDB_HOSTDB_PORTDB_USERDB_PASSDB_NAME
      使用正确的 DB_TYPEDB_HOSTDB_PORTDB_USERDB_PASSDB_NAME 值更新 .env 文件。

启动服务

使用 Python 启动 MCP 服务器(通过标准输入输出进行通信)

python server.py

终端将输出 MCP Python Server started,等待提示后,可以通过 MCP 支持的客户端或自定义脚本发送 JSON-RPC 请求。
控制台日志显示 MCP Python Server started,之后 MCP 意识到的客户端或自定义脚本可以与服务器交换 JSON-RPC 消息。

可用接口

方法名称 / 方法描述 / 描述状态 / 状态
listTables 列出配置数据库中的每个表。完成
getTableSchema获取给定表的列元数据。完成
runQuery执行只读 SQL 查询并返回带有数据行的列 / 执行只读 SQL 并返回带有行的列。实现 / 完成
getProcedureDefinition获取存储过程的 CREATE 语句。完成
listDatabases 列出可访问的数据库以进行跨模式检查。完成
listViews枚举带有定义片段的视图。完成
getTableStats返回表的行数和大小统计信息。完成
getIndexInfo检查列的索引、类型和唯一性。完成
findForeignKeys 列出外键约束和关系。完成
getTriggers返回触发器列表和定义 / 获取触发器列表和定义。完成 / 已实现
sampleRows从指定表中采样几行。完成
searchColumns按关键字搜索列名和注释。完成
describeColumn 提供列的类型、默认值和约束详情。完成
explainQuery 对只读 SQL 运行 EXPLAIN 以检查计划。完成
listProcedures列出存储过程和函数。完成
listUsers概述用户和权限(在允许的情况下) / 概述实例中的用户和权限信息(在允许的情况下)。完成 / 已实现
getServerStatus返回服务器状态,如版本、连接、引擎等。完成
compareSchemas比较数据库/表之间的模式结构。完成
generateDDL输出完整的 CREATE TABLE 语句 / 生成完整的 CREATE TABLE DDL。完成 / 已实现

配置说明

  • .env 文件由 python-dotenv 自动加载,未配置的项将使用 config/settings.py 中的默认值。
    .env 文件通过 python-dotenv 自动加载;未设置的键将回退到 config/settings.py 中的默认值。
  • 目前仅实现了 MySQL 连接器。如果 DB_TYPE 不是 mysql,则会抛出 NotImplementedError
    MySQL 是目前唯一实现的连接器;其他 DB_TYPE 值将引发 NotImplementedError
  • 根据部署需求,未来可以在 db_connectors/ 层实现和注册更多的方法。
    您可以扩展 db_connectors/ 包,并在新的后端可用时注册额外的工具。

开发计划

  • 扩展更多的数据库连接器(PostgreSQL、SQLite 等)。
    添加新的数据库连接器(PostgreSQL、SQLite 等)。
  • 丰富的结构化工具和诊断接口,例如索引分析和表统计。
    提供更多的结构化实用程序,如索引分析或表统计。
  • 提供更全面的示例脚本和自动化测试。
    发布更丰富的集成示例和自动化测试。

如果您发现此项目有用,可以通过 Issues 或 Pull Requests 提交需求;接口将继续改进,以涵盖更多的数据库操作和数据分析场景。
欢迎反馈和贡献——新的端点将继续到来,以覆盖更广泛的数据库操作和分析用例。

赞助支持

如果这个项目证明是有用的,您可以赞助继续开发

  • 扫描下方的微信/支付宝赞助二维码,或使用支付宝账户 191341025@qq.com 支持我。
    扫描下方二维码(微信/支付宝)或通过支付宝 191341025@qq.com 捐款。

赞助

联系方式

如有任何问题、建议或合作意向,请通过上述邮箱联系,我会尽快回复。
如有疑问、功能请求或合作提案,请通过上述电子邮件联系。

贡献指南

请随意提交一个 Issue 来描述您遇到的问题,或直接发起一个 Pull Request 来贡献代码。当前 main 分支已被保护,只有仓库维护者可以直接推送。请从最新的 main 分支拉取代码,在提交 PR 之前创建自己的功能分支。如果您需要在此仓库中启用额外的受保护分支,请随时通过提供的地址邮件联系我。
请打开问题报告错误或想法,并在希望贡献改进时提交拉取请求。main 分支已受保护,只有维护者可以推送到它;从 main 分支创建您的功能分支,然后打开一个 PR。如果您需要额外的受保护分支进行协作,请通过上述联系方式邮件联系我。