graphrag-core
A domain-agnostic framework for building governed, auditable Knowledge Graphs from documents using LLM-powered extraction, provenance-native storage, and agent-callable tools.
Architecture
YOUR DOMAIN LAYER (Layer 2)
Ontology, domain tools, agents-via-MCP
|
| imports
v
graphrag-core (Layer 1)
Pipeline: Ingest -> Extract -> Graph Store (+ L3 attestation)
-> Search (+ Entity Registry)
Cross-cutting: LLM Client · Retrieval Models · Tool Library (agent surface)
Install
pip install graphrag-core # core (in-memory backends)
pip install graphrag-core[neo4j] # + Neo4j graph store and search
pip install graphrag-core[anthropic] # + Claude LLM client
pip install graphrag-core[all] # everything
Quick Start
import asyncio
from graphrag_core import (
TextParser, TokenChunker, IngestionPipeline,
InMemoryGraphStore, InMemorySearchEngine,
LLMExtractionEngine, OntologySchema, NodeTypeDefinition,
PropertyDefinition, RelationshipTypeDefinition,
ToolLibrary, register_core_tools,
)
from graphrag_core.models import ChunkConfig, DocumentChunk, GraphNode, ImportRun
from datetime import datetime
async def main():
# 1. Ingest a document
pipeline = IngestionPipeline(parser=TextParser(), chunker=TokenChunker())
chunks = await pipeline.ingest(b"Alice works at Acme Corp.", "text/plain")
# 2. Define your domain schema
schema = OntologySchema(
node_types=[
NodeTypeDefinition(
label="Person",
properties=[PropertyDefinition(name="name", type="string", required=True)],
required_properties=["name"],
),
NodeTypeDefinition(
label="Company",
properties=[PropertyDefinition(name="name", type="string", required=True)],
required_properties=["name"],
),
],
relationship_types=[
RelationshipTypeDefinition(type="WORKS_AT", source_types=["Person"], target_types=["Company"]),
],
)
# 3. Extract entities (requires an LLMClient implementation)
# engine = LLMExtractionEngine(llm_client=your_client)
# result = await engine.extract(chunks, schema, import_run)
# 4. Store in graph
store = InMemoryGraphStore()
await store.merge_node(GraphNode(id="p1", label="Person", properties={"name": "Alice"}), "run-1")
await store.merge_node(GraphNode(id="c1", label="Company", properties={"name": "Acme Corp"}), "run-1")
# 5. Search
search = InMemorySearchEngine(
nodes=[await store.get_node("p1"), await store.get_node("c1")],
)
results = await search.fulltext_search("Acme", top_k=5)
print(results)
# 6. Wire up tools for agents
library = ToolLibrary()
register_core_tools(library, store, search)
result = await library.execute("get_entity", entity_id="p1")
print(result)
asyncio.run(main())
Building Blocks
| # | Block | Type | Interface | Default impls | Status |
|---|---|---|---|---|---|
| 1 | Document Ingestion | pipeline | DocumentParser, Chunker, IngestionPipeline |
PDF/DOCX/Text/Markdown parsers; TokenChunker | Done |
| 2 | Entity Extraction | pipeline | ExtractionEngine, ExtractionPromptBuilder, ExtractionPostProcessor |
LLMExtractionEngine, DefaultPromptBuilder |
Done |
| 3 | Knowledge Graph + Layer-3 attestation | pipeline + doctrine | GraphStore, CommunityDetector |
InMemoryGraphStore, Neo4jGraphStore |
Done |
| 4 | Hybrid Search | pipeline | SearchEngine |
InMemorySearchEngine, Neo4jHybridSearch (RRF) |
Done |
| retired | merged into BB3 per ADR-0039 (doctrine in graph/INTERFACE.md) |
Retired | |||
| 6 | Entity Registry | pipeline | EntityRegistry |
InMemoryEntityRegistry (fuzzy + embedding match) |
Done |
| 7 | Tool Library (agent contract) | cross-cutting | Tool, ToolLibrary |
4 core + 3 temporal tools | Done |
| retired | deleted per ADR-0039; agent-callability = BB7 + MCP | Retired | |||
| 9 | LLM Client | cross-cutting | LLMClient |
AnthropicLLMClient, OpenAILLMClient |
Done |
| 10 | Retrieval Models | cross-cutting | EmbeddingModel (+ Reranker planned) |
(BB10-01 in flight; see capability map) |
Designed |
Extension Pattern
from graphrag_core import OntologySchema, ToolLibrary, Tool
# 1. Define your domain ontology
schema = OntologySchema(node_types=[...], relationship_types=[...])
# 2. Register domain-specific tools (the agent-callable surface — BB7)
library = ToolLibrary()
library.register(Tool(name="my_tool", description="...", parameters={}, handler=my_handler))
External agents (Claude Code, MCP clients, custom harnesses) consume your ToolLibrary over MCP — graphrag-core ships the tool contract; the agent harness is out-of-scope per the agentic-substrate doctrine.
Development
# Clone and install
git clone https://github.com/cdel1/graphrag-core.git
cd graphrag-core
uv sync --all-extras
# Run unit tests
uv run pytest tests/ -x -q
# Run integration tests (requires Neo4j)
docker run -d --name neo4j-test -p 7474:7474 -p 7687:7687 \
-e NEO4J_AUTH=neo4j/development neo4j:5-community
uv run pytest tests/ -x --run-integration
# Build
uv build
License
The code in this repository is MIT-licensed — see LICENSE.
Data fixtures bundled under eval/fixtures/ retain their own licenses (DocRED is MIT; FEVEROUS is CC-BY-SA 3.0). See NOTICES.md for attribution and redistribution terms for each fixture.
Metadata
Release files for graphrag-core 0.17.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| graphrag_core-0.17.0.tar.gz | 225.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| graphrag_core-0.17.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 317.5 kB
Release files / graphrag_core-0.17.0.tar.gz
| Download URL | graphrag_core-0.17.0.tar.gz |
|---|---|
| Size | 225.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c5664014b7a2013a9328a93e1c24dee9a4bddfe0d1ea0a2afdb715b702be7f8a
|
|
BLAKE2b-256 checksum How to use checksums |
9197f49899ddb14a9b9715b2e23d71739335dcb21b28448a7baa71338cfaec70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency logRelease files / graphrag_core-0.17.0-py3-none-any.whl
| Download URL | graphrag_core-0.17.0-py3-none-any.whl |
|---|---|
| Size | 92.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bd36cf9b198d56dd6e68f2ce5009c39dd88fe981bf1493cc5750b256d81bc805
|
|
BLAKE2b-256 checksum How to use checksums |
ef56e14513a10bec2c2ae27ef28563de66f5064a56b7eb219d61487a275158b5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.
Transparency log