pgvector

io.github.mittalpk由 GitHub 帳號 mittalpk 發布v0.1.0更新於 Nov 3, 2026

Similarity search, hybrid search, and index management for pgvector-backed PostgreSQL tables

已驗證STDIO僅桌面資料庫知識與記憶

概覽

AI 產生的概覽

針對以 pgvector 為後端的 PostgreSQL 資料表的 MCP 伺服器:相似度與混合檢索、向量寫入以及 ANN 索引管理。

可以做什麼
  • 探索資料庫中的向量欄位,並檢視資料表的欄位、索引與概略資料列數
  • 以餘弦、L2 或內積距離執行 k 近鄰相似度檢索,並支援結構化中繼資料篩選
  • 將向量相似度與 Postgres 全文檢索加權混合,進行混合檢索
  • 插入或更新某一列的向量與中繼資料
  • 建立可調參數的 HNSW 或 IVFFlat 索引,並以 EXPLAIN ANALYZE 確認相似度查詢是否用到索引
適用情境
適合需要查詢或維護存放在 PostgreSQL 加 pgvector 中的向量資料表時使用,例如對既有資料做語意檢索、調校近似最近鄰索引,而不必手寫 SQL。
執行需求
以本機 Python 套件執行(uvx 或 pip install mcp-server-pgvector)。需要已啟用 pgvector 擴充功能的 PostgreSQL 資料庫,並在 DATABASE_URL(或 PGVECTOR_DATABASE_URL)提供連線字串。可選用 MCP_PGVECTOR_READ_ONLY 與 MCP_PGVECTOR_COMMAND_TIMEOUT_SECONDS 設定。
安裝前請注意
DATABASE_URL 含有資料庫憑證;伺服器權限完全取決於該 Postgres 角色,沒有依工具區分的授權機制。upsert_embedding 與 create_vector_index 會寫入資料並建立索引,對正式環境資料庫應設定 MCP_PGVECTOR_READ_ONLY=true。混合檢索的全文部分固定為英文設定,且沒有結構化日誌。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 pgvector,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

mcp-server-pgvector

[CI]

An MCP server that gives LLM agents first-class access to pgvector-backed embedding tables in PostgreSQL: similarity search, hybrid (vector + full-text) search, upserts, and HNSW/IVFFlat index management.

Generic Postgres MCP servers expose raw SQL or schema introspection; this one speaks pgvector specifically — nearest-neighbor search, distance metrics, and ANN index tuning are first-class tools, not something the model has to hand-write SQL for.

Tools

ToolDescription
list_vector_tablesDiscover every vector column in the database, with its dimensionality
describe_vector_tableColumns, indexes, and approximate row count for a table
similarity_searchk-NN search over a vector column (cosine / L2 / inner product), with structured metadata filters
hybrid_searchWeighted blend of vector similarity and Postgres full-text search (ts_rank_cd)
upsert_embeddingInsert or update a row's embedding + metadata
create_vector_indexCreate an HNSW or IVFFlat index with tunable parameters
explain_similarity_queryEXPLAIN ANALYZE a similarity query to confirm the ANN index is used

Safety

  • Every table/column name is validated against information_schema / pg_catalog before being interpolated into SQL — an LLM can only ever reference identifiers that already exist. Values are always bound parameters.
  • Metadata filters are a closed {column, op, value} allowlist, not a raw SQL fragment.
  • Set MCP_PGVECTOR_READ_ONLY=true to disable upsert_embedding and create_vector_index, leaving only read/search tools available — useful when pointing the server at a production database.
  • Every query runs with a per-command timeout (MCP_PGVECTOR_COMMAND_TIMEOUT_SECONDS, default 30s) so one expensive query can't occupy a pool connection — and stall every other caller — indefinitely. Set it to 0 to disable.

Installation

bash
uvx mcp-server-pgvector

Or with pip:

bash
pip install mcp-server-pgvectorpython -m mcp_server_pgvector

Configuration

The server reads its connection string from DATABASE_URL (or PGVECTOR_DATABASE_URL):

json
{  "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"      }    }  }}

Production readiness

Covered:

  • Identifier-safe SQL (every table/column checked against pg_catalog before use) and a closed filter-operator allowlist — no path from tool arguments to raw SQL.
  • Per-query timeout, so one runaway query can't monopolize the (small, 5-connection) pool.
  • 60+ tests, including dimension-mismatch and injection-attempt regressions, run in CI on every push/PR against a real pgvector container across Python 3.10–3.13. A separate CI job builds the package and runs twine check on the result.
  • Connection failures surface as plain ConnectionRefusedError/asyncpg exceptions — verified these don't leak the DSN's credentials into error text.

Known limitations, honestly:

  • No per-tool authorization — access control is whatever the Postgres role in DATABASE_URL can do. If you need different agents to have different permissions, give them different connection strings backed by different Postgres roles, not different server instances of this same DSN.
  • hybrid_search's full-text side is hardcoded to Postgres's 'english' text search configuration; there's no parameter to change it yet.
  • No structured logging — failures are exceptions surfaced through the MCP error channel, not written to a log you can tail. Fine for a single-user desktop MCP client, a real gap if you're running this as a shared service.
  • The connection pool is fixed at 1–5 connections and isn't configurable via environment variable yet.

Development

bash
uv sync --dev
# Bring up an isolated pgvector instance for local testingdocker compose -f docker-compose.dev.yml up -d
export DATABASE_URL=postgresql://postgres:postgres@localhost:5434/postgresuv run pytest
uv run ruff check .uv run pyright

Contributing

See CONTRIBUTING.md. See CHANGELOG.md for release history.

License

MIT — see LICENSE.

來源:README.md,提交 f4e086d

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分