项目简介
该项目提供阿里云 PolarDB 数据库(包括 MySQL 版和 PostgreSQL 版)的 MCP 服务器实现。它允许大型语言模型(LLM)客户端通过标准的 Model Context Protocol (MCP) 与 PolarDB 数据库进行交互,从而获取数据库结构信息(如表、字段)和数据,并能够执行 SQL 查询和操作。
主要功能点
- 数据库资源访问: 支持 LLM 客户端通过 MCP 协议读取数据库资源,例如:
- 获取当前数据库的所有表列表 (MySQL)。
- 获取当前数据库的所有 Schema 列表 (PostgreSQL)。
- 列出指定 Schema/数据库下某个表的字段信息(名称、类型、注释)。
- 读取指定 Schema/数据库下某个表的部分数据(默认限制 50 行)。
- (MySQL) 列出 PolarDB AI 模型列表。
- SQL 执行工具: 提供一个 MCP 工具,允许 LLM 执行任意 SQL 查询语句,并将结果返回。
- 写入操作控制: 可通过环境变量精细控制是否允许 INSERT, UPDATE, DELETE (WRITE), DDL 等操作,增强安全性。
- (MySQL) PolarDB AI 模型创建工具: 提供工具支持使用 PolarDB AI 语法创建模型。
- 多种传输协议支持: 支持 Stdio 和 SSE 两种 MCP 标准传输协议。
安装步骤
- 克隆仓库:
git clone https://github.com/aliyun/alibabacloud-polardb-mcp-server.git cd alibabacloud-polardb-mcp-server - 安装依赖:
- 进入对应的数据库子目录('polardb-mysql-mcp-server' 或 'polardb-postgresql-mcp-server')。
- 建议使用虚拟环境。
- 安装所需的 Python 依赖。通常,这些项目的依赖会列在 'requirements.txt' 文件中,或者可以根据代码中的导入手动安装(如 'pip install starlette uvicorn python-dotenv sqlparse mysql-connector-python psycopg[binary] model-context-protocol pydantic')。
服务器配置 (供 MCP 客户端配置使用)
MCP 客户端需要配置如何启动并连接到此 MCP 服务器进程。配置通常是一个 JSON 对象,包含以下关键信息:
{ "name": "服务器名称", "command": "启动命令", "args": ["命令参数1", "命令参数2", ...], "env": { "环境变量名1": "环境变量值1", "环境变量名2": "环境变量值2", ... } }
根据该仓库代码,配置示例及参数说明如下:
- 'name': MCP 服务器的名称。
- 对于 MySQL 服务器:'polardb-mysql-mcp-server'
- 对于 PostgreSQL 服务器:'polardb-postgresql-mcp-server'
- 'command': 启动服务器进程的可执行文件路径。通常是 '"python"' 或 '"python3"'。
- 'args': 传递给 'command' 的参数列表。通常包含服务器脚本的路径。
- 对于 MySQL 服务器:'["polardb-mysql-mcp-server/server.py"]'
- 对于 PostgreSQL 服务器:'["polardb-postgresql-mcp-server/server.py"]'
- 'env': 启动服务器进程时需要设置的环境变量,用于配置数据库连接和服务器行为。
- 数据库连接参数:
- MySQL: 'POLARDB_MYSQL_HOST', 'POLARDB_MYSQL_PORT', 'POLARDB_MYSQL_USER', 'POLARDB_MYSQL_PASSWORD', 'POLARDB_MYSQL_DATABASE' (数据库名)
- PostgreSQL: 'POLARDB_POSTGRESQL_HOST', 'POLARDB_POSTGRESQL_PORT', 'POLARDB_POSTGRESQL_USER', 'POLARDB_POSTGRESQL_PASSWORD', 'POLARDB_POSTGRESQL_DBNAME' (数据库名)
- 这些是连接到目标 PolarDB 数据库实例所需的凭据和地址信息。
- 运行模式:
- 'RUN_MODE': 设置为 '"stdio"' 以使用 Stdio 模式(默认)。如果设置为其他值或不设置,将使用 SSE 模式。
- SSE 模式配置 (仅在 'RUN_MODE' 非 '"stdio"' 时需要):
- 'SSE_BIND_HOST': SSE 服务器监听的 IP 地址。
- 'SSE_BIND_PORT': SSE 服务器监听的端口。
- 写入操作控制: (可选)
- MySQL: 'POLARDB_MYSQL_ENABLE_WRITE', 'POLARDB_MYSQL_ENABLE_UPDATE', 'POLARDB_MYSQL_ENABLE_INSERT', 'POLARDB_MYSQL_ENABLE_DDL'
- PostgreSQL: 'POLARDB_POSTGRESQL_ENABLE_WRITE', 'POLARDB_POSTGRESQL_ENABLE_UPDATE', 'POLARDB_POSTGRESQL_ENABLE_INSERT', 'POLARDB_POSTGRESQL_ENABLE_DDL'
- 这些环境变量接受布尔值 ('true'/'false', '1'/'0', 't'/'f', 'y'/'n', 'yes'/'no'),用于启用对应的 SQL 操作权限。默认为 'false'。
- 数据库连接参数:
将上述信息填入 MCP 客户端的服务器配置中,客户端即可按需启动并连接到该 MCP 服务器。
基本使用方法
一旦 MCP 服务器被 MCP 客户端成功配置和启动,LLM 客户端就可以通过与 MCP 客户端通信来利用服务器提供的能力。例如:
- LLM 可以通过 MCP 协议请求列出所有可用的 MCP 资源,从而发现数据库的表列表或 Schema 列表资源 URI。
- LLM 可以构造特定的资源 URI (如 'polardb-mysql://my_table/field') 向 MCP 服务器请求读取某个表的字段信息或数据。
- LLM 可以通过 MCP 协议调用 'execute_sql' 工具,并提供包含 SQL 查询的 'arguments' 参数,服务器将执行 SQL 并返回结果(查询结果或执行信息)。
- LLM 可以调用 'polar4ai_create_models' 工具 (MySQL 版) 并提供相应的模型创建参数。
整个过程对于 LLM 而言是调用标准化接口,具体的数据库交互细节由 MCP 服务器处理。
信息
分类
数据库与文件