关于 pgvector
这是供 Agent 操作 pgvector PostgreSQL 表的 MCP 服务,提供专用的向量与混合搜索、嵌入更新和索引管理,无需手写这些操作的 SQL。
主要功能
- 01发现向量表及维度
- 02按条件执行相似度搜索
- 03结合向量与全文搜索
- 04插入或更新嵌入
- 05管理 HNSW 和 IVFFlat 索引
- 06检查相似度查询计划
适用场景
- 01查找嵌入中的近邻记录
- 02结合向量与文本相关性搜索
- 03更新嵌入行及元数据
- 04调整或检查 ANN 索引使用情况
MCP 相关
向 MCP 客户端提供面向 pgvector 的工具,包括表发现、相似度与混合搜索、嵌入 upsert、索引创建和查询计划检查。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
mcp.json · 通用配置
启动命令
uvx mcp-server-pgvector需要配置的环境变量
DATABASE_URL密钥PostgreSQL connection string, e.g. postgresql://user:password@host:5432/dbnameMCP_PGVECTOR_READ_ONLYSet to 'true' to disable upsert_embedding and create_vector_index本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-server-pgvector
一个 MCP 服务,让大模型 Agent 能够直接使用 PostgreSQL 中由 pgvector 支持的嵌入表:相似度搜索、混合搜索(向量 + 全文)、插入或更新,以及 HNSW/IVFFlat 索引管理。
通用 PostgreSQL MCP 服务会开放原始 SQL 或架构自省能力;本服务专门针对 pgvector,近邻搜索、距离度量和 ANN 索引调优都是一等工具,而不是需要模型手写 SQL 才能实现的功能。
工具
| 工具 | 描述 |
|---|---|
list_vector_tables | 查找数据库中的每个 vector 列,并显示其维度 |
describe_vector_table | 查看表的列、索引和近似行数 |
similarity_search | 对向量列进行 k-NN 搜索(cosine / L2 / inner product),支持结构化元数据筛选 |
hybrid_search | 按权重组合向量相似度与 Postgres 全文搜索(ts_rank_cd) |
upsert_embedding | 插入或更新某一行的嵌入和元数据 |
create_vector_index | 创建可调参数的 HNSW 或 IVFFlat 索引 |
explain_similarity_query | 对相似度查询执行 EXPLAIN ANALYZE,确认是否使用了 ANN 索引 |
安全性
- 将表名/列名插入 SQL 前,都会先根据
information_schema/pg_catalog验证;LLM 只能引用已存在的标识符。值始终使用绑定参数。 - 元数据筛选使用封闭的
{column, op, value}允许列表,而非原始 SQL 片段。 - 设置
MCP_PGVECTOR_READ_ONLY=true可禁用upsert_embedding和create_vector_index,仅保留读取/搜索工具——适用于将服务连接到生产数据库的场景。 - 每条查询都会应用单条命令超时(
MCP_PGVECTOR_COMMAND_TIMEOUT_SECONDS,默认值为 30s),避免一条耗时查询无限期占用连接池连接并阻塞其他所有调用方。设为0可禁用。
安装
uvx mcp-server-pgvector
也可以使用 pip 安装:
pip install mcp-server-pgvector
python -m mcp_server_pgvector
配置
服务从 DATABASE_URL(或 PGVECTOR_DATABASE_URL)读取连接字符串:
{
"mcpServers": {
"pgvector": {
"command": "uvx",
"args": ["mcp-server-pgvector"],
"env": {
"DATABASE_URL": "postgresql://user:password@localhost:5432/mydb",
"MCP_PGVECTOR_READ_ONLY": "false",
"MCP_PGVECTOR_COMMAND_TIMEOUT_SECONDS": "30"
}
}
}
}
生产就绪情况
已覆盖:
- 标识符安全的 SQL(每个表名/列名在使用前都会根据
pg_catalog检查),以及封闭的筛选运算符允许列表——工具参数没有任何路径可以进入原始 SQL。 - 每条查询均有超时限制,避免单条失控查询独占(规模较小、含 5 个连接的)连接池。
- 60 多项测试,包括维度不匹配和注入尝试的回归测试;每次推送/PR 时,都会在 CI 中使用真实的 pgvector 容器,针对 Python 3.10–3.13 运行。另有一个独立的 CI 任务负责构建软件包并对构建结果运行
twine check。 - 连接失败会以普通的
ConnectionRefusedError/asyncpg异常形式呈现——已验证这些异常不会将 DSN 凭据泄露到错误文本中。
已知限制,如实说明:
- 没有按工具设置授权——访问控制取决于
DATABASE_URL中 Postgres 角色的权限。如果不同 Agent 需要不同权限,请为它们提供由不同 Postgres 角色支持的不同连接字符串,而不要为同一个 DSN 运行不同的服务实例。 hybrid_search的全文搜索部分固定使用 Postgres 的'english'文本搜索配置;目前没有参数可以更改。- 没有结构化日志——故障会作为异常通过 MCP 错误通道呈现,而不会写入可供实时查看的日志。对于单用户桌面 MCP 客户端来说够用;如果将其作为共享服务运行,则是一个明显的缺陷。
- 连接池固定为 1–5 个连接,目前无法通过环境变量配置。
开发
uv sync --dev
# Bring up an isolated pgvector instance for local testing
docker compose -f docker-compose.dev.yml up -d
export DATABASE_URL=postgresql://postgres:postgres@localhost:5434/postgres
uv run pytest
uv run ruff check .
uv run pyright
贡献
请参阅 CONTRIBUTING.md。发布历史请参阅 CHANGELOG.md。
License
MIT — see LICENSE.
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。