Skip to main content
ClaudeWave
mittalpk avatar
mittalpk

mcp-server-pgvector

View on GitHub

MCP server exposing pgvector similarity search, hybrid search, and index management as tools for LLM agents

MCP ServersOfficial Registry0 stars0 forksPythonMITUpdated today
Install in Claude Code / Claude Desktop
Method: UVX (Python) · mcp-server-pgvector
Claude Code CLI
claude mcp add pgvector -- uvx mcp-server-pgvector
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "pgvector": {
      "command": "uvx",
      "args": ["mcp-server-pgvector"],
      "env": {
        "DATABASE_URL": "<database_url>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
DATABASE_URL
Use cases

MCP Servers overview

# mcp-server-pgvector

[![CI](https://github.com/mittalpk/mcp-server-pgvector/actions/workflows/ci.yml/badge.svg)](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.

Featured on ClaudeWave: mittalpk/mcp-server-pgvector
[![Featured on ClaudeWave](https://claudewave.com/api/badge/mittalpk-mcp-server-pgvector)](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

mcp-server-pgvector alternatives