AnalyticDB PostgreSQL MCP Server

AnalyticDB PostgreSQL MCP Server 是一个通用的接口,用于在 AI Agents 和 AnalyticDB PostgreSQL 数据库之间进行无缝通信,支持数据库元数据检索和 SQL 操作执行。

  • by aliyun
  • Python
  • 本地部署
  • 16 星标
  • 更新于
在 GitHub 查看 aliyun/alibabacloud-adbpg-mcp-server

使用说明

AnalyticDB PostgreSQL MCP服务器

AnalyticDB PostgreSQL MCP服务器是AI代理和AnalyticDB PostgreSQL数据库之间的通用接口。它实现了AI代理和AnalyticDB PostgreSQL之间的无缝通信,帮助AI代理检索数据库元数据并执行SQL操作。

安装

您可以从源代码设置服务器进行开发,也可以从PyPI安装服务器直接使用。

选项1:来源(用于发展)

如果您想修改或贡献服务器,建议使用此方法。

# 1. Clone the repository
git clone https://github.com/aliyun/alibabacloud-adbpg-mcp-server.git
cd alibabacloud-adbpg-mcp-server

# 2. Create and activate a virtual environment using uv
uv venv .venv
source .venv/bin/activate  # On Linux/macOS
# .\.venv\Scripts\activate  # On Windows

# 3. Install the project in editable mode
uv pip install -e .

选项2:来自PyPI(用于生产/使用)

这是安装服务器以在项目中直接使用的最简单方法。

pip install adbpg-mcp-server

运行服务器

服务器可以在两种传输模式下运行: stdio (默认)用于与MCP客户端集成,以及 http 用于API的直接访问或调试。

确保您已设置所需的 环境变量 在运行服务器之前。

标准模式(默认)

这是与MCP客户端通信的标准模式。

# Run using the default transport (stdio)
uv run adbpg-mcp-server

# Or explicitly specify the transport
uv run adbpg-mcp-server --transport stdio

流式HTTP模式

此模式公开了一个HTTP服务器,这对于通过REST API进行测试、调试或直接集成非常有用。

# Run the server in HTTP mode on the default host and port (127.0.0.1:3000)
uv run adbpg-mcp-server --transport http

# Specify a custom host and port with authentication
uv run adbpg-mcp-server --transport http --host 0.0.0.0 --port 3000 --auth-token your-secret-token

安全: 绑定到时 0.0.0.0 或任何网络可访问的地址,始终通过以下方式设置身份验证令牌 --auth-token 或 MCP_AUTH_TOKEN 环境变量。如果没有令牌 /mcp 端点对未经身份验证的访问开放。客户必须包括 Authorization: Bearer <token> 所有请求中的标头。

MCP集成

要将此服务器与父MCP客户端集成,请将以下配置添加到客户端的配置文件中。争论在 args 数组将取决于您选择的传输协议。

标准运输示例

"mcpServers": {
  "adbpg-mcp-server": {
    "command": "uv",
    "args": [
      "run",
      "adbpg-mcp-server",
      "--transport",
      "stdio"
    ],
    "env": {
      "ADBPG_HOST": "host",
      "ADBPG_PORT": "port",
      "ADBPG_USER": "username",
      "ADBPG_PASSWORD": "password",
      "ADBPG_DATABASE": "database",
      "GRAPHRAG_API_KEY": "graphrag llm api key",
      "GRAPHRAG_BASE_URL": "graphrag llm base url",
      "GRAPHRAG_LLM_MODEL": "graphrag llm model name",
      "GRAPHRAG_EMBEDDING_MODEL": "graphrag embedding model name",
      "GRAPHRAG_EMBEDDING_API_KEY": "graphrag embedding api key",
      "GRAPHRAG_EMBEDDING_BASE_URL": "graphrag embedding url",
      "LLMEMORY_API_KEY": "llm memory api_key",
      "LLMEMORY_BASE_URL": "llm memory base_url",
      "LLMEMORY_LLM_MODEL": "llm memory model name",
      "LLMEMORY_EMBEDDING_MODEL": "llm memory embedding model name",
      "LLMEMORY_ENABLE_GRAPH": "enable graph engine for llm memory (Default: false)"
    }
  }
}

注: 自从 stdio 是默认值,您可以选择省略 "--transport", "stdio" 从 args 阵列。

流式HTTP传输示例

"mcpServers": {
  "adbpg-mcp-server": {
    "command": "uv",
    "args": [
      "run",
      "adbpg-mcp-server",
      "--transport",
      "http",
      "--port",
      "3000"
    ],
    "env": {
      "ADBPG_HOST": "host",
      "ADBPG_PORT": "port",
      "ADBPG_USER": "username",
      "ADBPG_PASSWORD": "password",
      "ADBPG_DATABASE": "database",
      "MCP_AUTH_TOKEN": "your-secret-token",
      "GRAPHRAG_API_KEY": "graphrag llm api key",
      "GRAPHRAG_BASE_URL": "graphrag llm base url",
      "GRAPHRAG_LLM_MODEL": "graphrag llm model name",
      "GRAPHRAG_EMBEDDING_MODEL": "graphrag embedding model name",
      "GRAPHRAG_EMBEDDING_API_KEY": "graphrag embedding api key",
      "GRAPHRAG_EMBEDDING_BASE_URL": "graphrag embedding url",
      "LLMEMORY_API_KEY": "llm memory api_key",
      "LLMEMORY_BASE_URL": "llm memory base_url",
      "LLMEMORY_LLM_MODEL": "llm memory model name",
      "LLMEMORY_EMBEDDING_MODEL": "llm memory embedding model name",
      "LLMEMORY_ENABLE_GRAPH": "enable graph engine for llm memory (Default: false)"
    }
  }
}

工具

  • execute_select_sql:在AnalyticDB PostgreSQL服务器上执行SELECT SQL查询

  • execute_dml_sql:在AnalyticDB PostgreSQL服务器上执行DML(INSERT、UPDATE、DELETE)SQL查询

  • execute_ddl_sql:在AnalyticDB PostgreSQL服务器上执行DDL(CREATE、ALTER、DROP)SQL查询

  • analyze_table:收集表统计信息

  • explain_query:获取查询执行计划

  • adbpg_graphrag_upload

    • 说明: 将文本文件(及其名称)和文件内容上传到graphrag以生成知识图。
    • 参数:
      • filename (text):要上传的文件的名称。
      • context (text):文件的文本内容。
  • adbpg_graphrag_query

    • 说明: 使用指定的查询字符串和模式查询图形
    • 参数:
      • query_str (text):查询内容。
      • query_mode (text):查询模式,从中选择 [bypass, naive, local, global, hybrid, mix]。如果为null,则默认为 mix.
  • adbpg_graphrag.upload_decision_tree(context text, root_node text)

    • 说明: 上传具有指定值的决策树 root_node.如果 root_node 如果不存在,将创建一个新的决策树。
    • 参数:
      • context (text):决策树的文本表示。
      • root_node (text):根节点的内容。
  • adbpg_graphrag.append_decision_tree(context text, root_node_id text)

    • 说明: 将子树附加到指定节点处的现有决策树 root_node_id.
    • 参数:
      • context (text):子树的文本表示。
      • root_node_id (text):子树将附加到的节点的ID。
  • adbpg_graphrag.delete_decision_tree(root_node_entity text)

    • 说明: 删除指定节点下的子决策树 root_node_entity.
    • 参数:
      • root_node_entity (text):要删除的子决策树的根节点的ID。
  • adbpg_llm_memory_add

    • 说明: 添加LLM长内存。
    • 参数:
      • messages (json):要上传的文件的名称。
      • user_id (text):用户id。
      • run_id (text):跑步id。
      • agent_id (text):代理id。
      • metadata (json):元数据json(可选)。
      • memory_type (text):内存类型(可选)。
      • prompt (text):提示(可选)。 注:
        至少一个 user_id, run_id,或 agent_id 应该提供。
  • adbpg_llm_memory_get_all

    • 说明: 检索与特定用户、运行或代理关联的所有内存记录。
    • 参数:
      • user_id (text):用户ID(可选)。如果提供,请获取此用户的所有内存。
      • run_id (text):运行ID(可选)。
      • agent_id (text):代理ID(可选)。如果提供,请获取此代理的所有内存。 注:
        至少一个 user_id, run_id,或 agent_id 应该提供。
  • adbpg_llm_memory_search

    • 说明: 检索与特定用户、运行或代理的给定查询相关的内存。
    • 参数:
      • query (text):搜索查询字符串。
      • user_id (text):用户ID(可选)。如果提供,请获取此用户的所有内存。
      • run_id (text):运行ID(可选)。
      • agent_id (text):代理ID(可选)。如果提供,请获取此代理的所有内存。
      • filter (json):JSON格式的其他过滤条件(可选)。 注:
        至少一个 user_id, run_id,或 agent_id 应该提供。
  • adbpg_llm_memory_delete_all:

    • 说明: 删除与特定用户、运行或代理关联的所有内存记录。
    • 参数:
      • user_id (text):用户ID(可选)。如果提供,请获取此用户的所有内存。
      • run_id (text):运行ID(可选)。
      • agent_id (text):代理ID(可选)。如果提供,请获取此代理的所有内存。 注:
        至少一个 user_id, run_id,或 agent_id 应该提供。

资源

内置资源

  • adbpg:///schemas:获取数据库中的所有架构

资源模板

  • adbpg:///{schema}/tables:列出特定架构中的所有表
  • adbpg:///{schema}/{table}/ddl:获取表DDL
  • adbpg:///{schema}/{table}/statistics:显示表统计信息

环境变量

MCP服务器需要以下环境变量才能连接到AnalyticDB PostgreSQL实例:

  • ADBPG_HOST:数据库主机地址
  • ADBPG_PORT:数据库端口
  • ADBPG_USER:数据库用户名
  • ADBPG_PASSWORD:数据库密码
  • ADBPG_DATABASE:数据库名称

对于HTTP传输模式,以下可选变量启用端点身份验证:

  • MCP_AUTH_TOKEN:HTTP端点身份验证的承载令牌(也可以通过以下方式设置 --auth-token CLI参数)。 强烈推荐 当绑定到非环回地址时。

MCP服务器需要以下环境变量来初始化graphRAG和llm内存服务器:

  • API_KEY:LLM提供程序或嵌入API的API密钥
  • BASE_URL:LLM或嵌入服务端点的基本URL
  • LLM_MODEL:LLM型号名称或标识符
  • EMBEDDING_MODEL:嵌入模型名称或标识符

依赖项

  • Python 3.11或更高版本
  • uv (用于环境和包装管理)