Minimal Postgres stack combining Apache AGE graph + pgvector with simple async helpers.
Project description
QuixiAI VectorGraph
A minimal, batteries-included PostgreSQL stack that pairs Apache AGE (graph) with pgvector. Spin it up with Docker, hit a couple of Python helpers, and you have graph + vector storage in one place.
60-second start
- Install:
pip install vectorgraph(orpipx install vectorgraph) - Bring up services:
vectorgraph up(Docker compose stack with graph/vector) - Run tests:
pytest -q(optional if you cloned) - Tinker in Python (see below) or run
vectorgraph demothenpython demo.py.
Install options:
pip install vectorgraph(orpipx install vectorgraphfor a global CLI).- CLI commands:
vectorgraph up,vectorgraph down,vectorgraph logs -f,vectorgraph ps,vectorgraph demo.- Prefer async API for apps; sync helpers are available at
vectorgraph.sync(see async/sync combined demo).
- Prefer async API for apps; sync helpers are available at
Python quickstart
import asyncio
from vectorgraph import create_db, delete_db, graph_create_entity, vector_add, vector_nearest_neighbors
async def main():
db_id = await create_db()
try:
await graph_create_entity(db_id, "n1", "Hello", "Graph+Vector")
await vector_add(db_id, "n1", [0.1]*768, {"label": "hello"})
neighbors = await vector_nearest_neighbors(db_id, [0.1]*768, k=3)
print(neighbors)
finally:
await delete_db(db_id)
asyncio.run(main())
Combined example: python examples/demo.py (async flow) and python examples/demo.py --sync (sync via vectorgraph.sync).
Use as a library
Install into your app (no CLI needed if you already run Postgres/AGE/pgvector):
pip install vectorgraph
Minimal usage (sync helpers):
from vectorgraph import sync as vg
db_id = vg.create_db()
vg.vector_add(db_id, "id1", [0.1]*768, {"tag": "demo"})
print(vg.vector_nearest_neighbors(db_id, [0.1]*768, k=1))
vg.delete_db(db_id)
Env vars respected by the helpers: POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, POSTGRES_HOST, POSTGRES_PORT. If you’re pointing at an existing stack, set these to your running Postgres/AGE instance. Defaults match the bundled compose stack: POSTGRES_USER=vg_user, POSTGRES_PASSWORD=vg_password, POSTGRES_DB=vg_db, POSTGRES_HOST=127.0.0.1, POSTGRES_PORT=5432.
Clone the repo (optional)
If you want the source and tests locally:
- Clone:
git clone https://github.com/QuixiAI/vectorgraph.git && cd vectorgraph - Install editable:
pip install -e . - Run tests:
pytest -q
Files
db.py— public async API for graph + vector helpers (AGE + pgvector).graph.py/vector.py— thin wrappers if you prefer to import per-domain.schema.sql— enables extensions and embeds the TEI-friendlyget_embeddingfunction.Dockerfile— Postgres 16 image with AGE, pgvector, pgsql-http.docker-compose.yml— Postgres + HuggingFace TEI (embedding service).tests/— async end-to-end tests for graph and vector paths.pyproject.toml— package metadata (dependencies via pip/uv/pdm) and CLI entrypoint.vectorgraph/stack/— packageddocker-compose.yml,Dockerfile,schema.sqlused by the CLI.vectorgraph-mcp.py— MCP stdio server exposing VectorGraph tools (for Claude Desktop or other MCP clients).
Environment
Defaults are baked into the stack; you normally don’t need to touch .env. If a .env exists in your project root, vectorgraph up will copy it into its cache and use it; otherwise it uses the packaged defaults. The embedding container sits on a private Docker network (no host port) and is reachable from Postgres at http://embeddings:80.
Typical flow
vectorgraph up- run Python code using the helpers (or
vectorgraph demothenpython demo.py) pytest -qto sanity checkvectorgraph downwhen done
MCP server (Claude Desktop)
- Ensure the stack is running (
vectorgraph up) and your env vars point at it if customized. - Start the server:
vectorgraph mcp(stdio MCP server; alternativelypython -m vectorgraph.mcp_server). - Configure Claude Desktop to point at this server; exposed tools include
create_db,delete_db, graph helpers (graph_create_entity,graph_get_entity,graph_create_relationship,graph_neighbors,graph_similarity), and vector helpers (vector_add,vector_get,vector_nearest_neighbors,vector_query_by_id,vector_batch_add,vector_batch_delete). - Example Claude Desktop snippet:
- Create an MCP server entry named
vectorgraphwith commandvectorgraph mcp(no args). Leave env empty unless you need customPOSTGRES_*. - Ask Claude: “Use vectorgraph to create a DB, add an entity id='n1' name='Hello', add a vector [0.1]*768 with metadata {'tag':'demo'}, then fetch nearest neighbors for [0.1]*768.” Claude will call
create_db,graph_create_entity,vector_add, andvector_nearest_neighborsthrough the MCP tools.
- Create an MCP server entry named
- Example JSON config snippet for Claude Desktop:
{ "mcpServers": { "vectorgraph": { "command": "vectorgraph", "args": ["mcp"], "env": { "POSTGRES_HOST": "127.0.0.1", "POSTGRES_PORT": "5432", "POSTGRES_USER": "vg_user", "POSTGRES_PASSWORD": "vg_password", "POSTGRES_DB": "vg_db" } } } }
Notes
- Vectors are fixed at 768-dim; the TEI model (
unsloth/embeddinggemma-300m) matches that. - Each call to
create_db()makes a dedicated AGE graph + vector table keyed by UUID to keep tests isolated.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vectorgraph-0.1.10.tar.gz.
File metadata
- Download URL: vectorgraph-0.1.10.tar.gz
- Upload date:
- Size: 23.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b0b5857c62ccee6b318ef108f1f079818a0457114f3bb82a1f702f6c989786a6
|
|
| MD5 |
276c9b8b8a509d526625ffb73b4941e1
|
|
| BLAKE2b-256 |
1aca1dbe63bc717ab41b94a2eec40436f24da6762bbaf1954cef04ec7400c514
|
File details
Details for the file vectorgraph-0.1.10-py3-none-any.whl.
File metadata
- Download URL: vectorgraph-0.1.10-py3-none-any.whl
- Upload date:
- Size: 21.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4537765974ce2de65c9a2087b25df7c60d5dd66ac217fb9c495fe497ad1a19c
|
|
| MD5 |
f80a9deb587a3e8982811dadc61c6b6b
|
|
| BLAKE2b-256 |
7c572e2ff7df015d7932d37d66e557014c09c4005dff12c7cd34cc6f628b8db9
|