MCP server exposing pgvector similarity search, hybrid search, and index management as tools for LLM agents
claude mcp add pgvector -- uvx mcp-server-pgvector{
"mcpServers": {
"pgvector": {
"command": "uvx",
"args": ["mcp-server-pgvector"],
"env": {
"DATABASE_URL": "<database_url>"
}
}
}
}DATABASE_URLMCP Servers overview
# mcp-server-pgvector
[](https://github.com/mittalpk/mcp-server-pgvector/actions/workflows/ci.yml)
<!-- mcp-name: io.github.mittalpk/pgvector -->
An [MCP](https://modelcontextprotocol.io/) server that gives LLM agents first-class access to
[pgvector](https://github.com/pgvector/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
| Tool | Description |
|---|---|
| `list_vector_tables` | Discover every `vector` column in the database, with its dimensionality |
| `describe_vector_table` | Columns, indexes, and approximate row count for a table |
| `similarity_search` | k-NN search over a vector column (cosine / L2 / inner product), with structured metadata filters |
| `hybrid_search` | Weighted blend of vector similarity and Postgres full-text search (`ts_rank_cd`) |
| `upsert_embedding` | Insert or update a row's embedding + metadata |
| `create_vector_index` | Create an HNSW or IVFFlat index with tunable parameters |
| `explain_similarity_query` | `EXPLAIN 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-pgvector
python -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 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
See [CONTRIBUTING.md](CONTRIBUTING.md). See [CHANGELOG.md](CHANGELOG.md) for release history.
## License
MIT — see [LICENSE](LICENSE).
What people ask about mcp-server-pgvector
What is mittalpk/mcp-server-pgvector?
+
mittalpk/mcp-server-pgvector is mcp servers for the Claude AI ecosystem. MCP server exposing pgvector similarity search, hybrid search, and index management as tools for LLM agents It has 0 GitHub stars and was last updated today.
How do I install mcp-server-pgvector?
+
You can install mcp-server-pgvector by cloning the repository (https://github.com/mittalpk/mcp-server-pgvector) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is mittalpk/mcp-server-pgvector safe to use?
+
mittalpk/mcp-server-pgvector has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains mittalpk/mcp-server-pgvector?
+
mittalpk/mcp-server-pgvector is maintained by mittalpk. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to mcp-server-pgvector?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy mcp-server-pgvector to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/mittalpk-mcp-server-pgvector)<a href="https://claudewave.com/repo/mittalpk-mcp-server-pgvector"><img src="https://claudewave.com/api/badge/mittalpk-mcp-server-pgvector" alt="Featured on ClaudeWave: mittalpk/mcp-server-pgvector" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface