mcpField
A
AGE-MCP-Server

AGE-MCP-Server

本地服务
github.com/rioriost数据库42 周前更新

关于 AGE-MCP-Server

AGE-MCP-Server 供客户端查询 PostgreSQL 中的 Apache AGE 图。默认只读,并支持参数化 Cypher、分页及显式启用的写入工具。

主要功能

  1. 01默认执行只读 Cypher 查询
  2. 02参数化查询与游标分页
  3. 03列出图并检查架构
  4. 04可选启用图与数据写入工具
  5. 05异步连接池

适用场景

  1. 01通过只读查询探索图数据
  2. 02分页读取查询结果
  3. 03启用写入模式后创建或删除图

MCP 相关

它向 MCP 客户端提供 Apache AGE 图查询、图列表和架构检查工具。只有使用 --allow-write 时,才开放图和数据修改工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

AGE MCP Server

License Python

用于查询 PostgreSQL 中 Apache AGE 图的 MCP 服务。

0.3.0 版将只读操作设为安全默认值,新增异步连接池、安全的 Cypher 参数和有界游标分页,并让每个工具都返回 MCP 结构化内容。

要求

  • Python 3.13 或更高版本
  • 已安装并加载 Apache AGE 扩展的 PostgreSQL
  • 仅对 MCP 客户端所需的图和操作开放权限的数据库角色

在目标数据库中启用 AGE:

CREATE EXTENSION IF NOT EXISTS age CASCADE;

安装

使用 uv:

uv init your_project
cd your_project
uv add age_mcp_server

使用 Python 虚拟环境:

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install age_mcp_server

使用 Homebrew:

brew install rioriost/tap/age_mcp_server

配置 MCP 客户端

避免将数据库密码放入命令行参数。通过 PG_CONNECTION_STRING 提供连接字符串,并使用 libpq 的凭据机制之一,例如 PGPASSWORD 或受保护的 PostgreSQL 密码文件。

{
  "mcpServers": {
    "age_manager": {
      "command": "age_mcp_server",
      "env": {
        "PG_CONNECTION_STRING": "host=db.example port=5432 dbname=postgres user=age_reader sslmode=require",
        "PGPASSWORD": "replace-with-a-secret"
      }
    }
  }
}

如果 MCP 客户端配置中包含 PGPASSWORD,请将其视为机密。更推荐使用 PostgreSQL 密码文件或客户端的机密存储。

必要时仍可显式提供连接字符串:

age_mcp_server --pg-con-str "host=db.example dbname=postgres user=age_reader sslmode=require"

要对 Azure Database for PostgreSQL 使用 Microsoft Entra 身份验证,请先通过 Azure CLI 登录,然后选择启用令牌获取:

age_mcp_server \
  --pg-con-str "host=server.postgres.database.azure.com dbname=postgres user=identity sslmode=require" \
  --azure-identity

工具

默认采用只读模式:

工具用途
read-age-cypher执行经过验证、参数化且带分页的只读 Cypher 查询
list-age-graphs列出 Apache AGE 图
get-age-schema检查计数、方向和抽样属性类型

只有在服务启动时使用 --allow-write,才会公布并接受写入工具:

工具用途
write-age-cypher执行包含变更子句的 Cypher
create-age-graph创建图
drop-age-graph永久删除图
age_mcp_server --allow-write

写入模式应使用单独的、遵循最小权限原则的数据库角色。启用该标志不会授予配置角色原本不具备的 PostgreSQL 权限。

安全限制

  • Cypher、图名称、返回别名和图管理参数在传递给 PostgreSQL 前都会经过安全引用或参数化处理。
  • 读取工具在 PostgreSQL 只读事务中运行。
  • CALL 被视为有副作用,必须启用写入模式。
  • 每页最多包含 50 行。经过不透明 HMAC 身份验证的游标会绑定图、查询和参数,偏移量上限为 100,000。
  • 仅当占位符名称与 JSON 参数对象完全匹配时,才接受 Cypher $parameters。该对象大小上限为 100,000 字节,并通过预处理语句传递给 AGE。
  • 写入查询会完整执行,并返回受影响的行数,而不是结果行。
  • 语句默认在 30 秒后超时。
  • 查询长度限制为 100,000 个字符,并且每个查询分支都必须包含一个显式的 RETURN 子句。
  • 原始数据库错误、查询内容和连接凭据不会返回给 MCP 客户端,也不会写入常规日志。

必要时可更改超时时间:

age_mcp_server --statement-timeout-ms 60000

超时时间必须在 1 毫秒到 1 小时之间。

调整异步连接池,或为每个新打开的池化连接加载 AGE 库:

age_mcp_server --pool-min-size 2 --pool-max-size 8 --load-age

连接池必须满足 1 <= min <= max <= 64。RETURN * 仍不受支持;请显式列出返回值,以便声明 Apache AGE 的 SQL 结果类型。

包含参数和分页的工具输入示例:

{
  "graph_name": "people",
  "query": "MATCH (n:Person) WHERE n.age >= $minimum RETURN n.name AS name ORDER BY name",
  "parameters": {"minimum": 18},
  "page_size": 25
}

将返回的 nextCursor 作为 cursor 传入,以获取下一页。

OpenTelemetry

安装可选的导出器依赖项并启用 OTLP 导出:

python3 -m pip install "age_mcp_server[telemetry]"
age_mcp_server --enable-telemetry --otel-service-name age-production

导出器遵循标准的 OTEL_EXPORTER_OTLP_* 环境变量。 跟踪和指标会记录操作延迟、计数和失败情况。不会包含连接 详情、Cypher 文本、参数值和原始数据库错误。

开发

安装所有开发依赖项并运行发布检查:

make sync
make check

make check 会运行 Ruff、80% 覆盖率门槛、Bandit、锁定依赖项审计 和软件包构建。测试套件包含一项 Apache AGE 实时集成测试:

AGE_TEST_CONNECTION_STRING="host=127.0.0.1 dbname=postgres user=postgres password=postgres" \
  make integration

CI 会针对官方 Apache AGE PostgreSQL 容器运行此测试。请参阅 0.3.0 版本评审,了解已完成的安全性和 功能评审。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。