loading…
Search for a command to run...
loading…
A Python library for storing and querying n-ary relationships with provenance tracking. SQLite-backed, zero configuration.
A Python library for storing and querying n-ary relationships with provenance tracking. SQLite-backed, zero configuration.
CI PyPI Python License Downloads
A Python hypergraph library with provenance and SQLite persistence.
uv add hypabase
from hypabase import Hypabase
hb = Hypabase("my.db")
# One edge connecting five entities
hb.edge(
["dr_smith", "patient_123", "aspirin", "headache", "mercy_hospital"],
type="treatment",
source="clinical_records",
confidence=0.95,
)
# Query edges involving a node
hb.edges(containing=["patient_123"])
# Find paths between entities
hb.paths("dr_smith", "mercy_hospital")
source and confidence.database("name") for scoped views in a single filesource and min_confidence, summarize with sources()hypabase init, hypabase node, hypabase edge, hypabase queryEvery edge carries source and confidence:
hb.edge(
["patient_123", "aspirin", "ibuprofen"],
type="drug_interaction",
source="clinical_decision_support_v3",
confidence=0.92,
)
# Bulk provenance via context manager
with hb.context(source="schema_analysis", confidence=0.9):
hb.edge(["a", "b"], type="fk")
hb.edge(["b", "c"], type="fk")
# Query by provenance
hb.edges(source="clinical_decision_support_v3")
hb.edges(min_confidence=0.9)
# Overview of all sources
hb.sources()
Isolate data into separate namespaces within a single file:
hb = Hypabase("knowledge.db")
drugs = hb.database("drugs")
sessions = hb.database("sessions")
drugs.node("aspirin", type="drug")
sessions.node("s1", type="session")
drugs.nodes() # -> [aspirin]
sessions.nodes() # -> [s1]
In a regular graph, an edge connects exactly two nodes. In a hypergraph, a single edge — called a hyperedge — can connect any number of nodes at once.
Consider a medical event: Dr. Smith prescribes aspirin to Patient 123 for a headache at Mercy Hospital. In a traditional graph, you'd split this into binary edges — doctor-patient, doctor-drug, patient-hospital — and the fact that they belong to one event becomes an inference, not a structure. A hypergraph stores this natively: one edge connecting all five entities.
This matters because real-world relationships often involve more than two things. A paper has three or four authors, not one. A transaction involves a buyer, a seller, a product, and a payment method. A chemical reaction has reagents and products on both sides. Forcing these into pairs means the grouping becomes implicit.
When relationships come from different sources — manual entry, LLM extraction, sensor data, clinical records — you need to know where each one came from and how much you trust it. Hypabase tracks this with two fields on every edge: source (a string identifying the origin) and confidence (a float from 0 to 1). You can filter queries by these fields and get a summary of all sources in your graph with hb.sources().
The broader idea has roots in AI research going back to OpenCog's AtomSpace, which uses hypergraph-like structures to represent knowledge for AGI. More recent work applies hypergraphs specifically to retrieval and reasoning:
Hypabase includes a Memory MCP server with 7 tools so AI agents can use it as structured, persistent memory. Works with Claude Code, Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.
uv add hypabase
hypabase-memory
uv add hypabase
hypabase init
hypabase node dr_smith --type doctor
hypabase edge dr_smith patient_123 aspirin --type treatment --source clinical_records
hypabase query --containing dr_smith
hypabase stats
Apache 2.0
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"hypabase": {
"command": "npx",
"args": []
}
}
}