Skip to main content

GraphRAG Protocol

Universal GraphRAG Interoperability Protocol — standard contracts + MCP server + adapters so any agent can query any GraphRAG backend uniformly.

Every GraphRAG engine (TigerGraph, Neo4j, LightRAG, LlamaIndex, FalkorDB, Microsoft GraphRAG) reinvents retrieval, subgraph serialization, provenance, and evaluation with incompatible interfaces. This protocol fills the missing middle layer between GQL (graph query standard at the bottom) and MCP (agent connectivity standard at the top): a uniform retrieval contract any backend can implement and any agent can call.

Quick Start

# 1. Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# 2. Install the package (with dev dependencies)
pip install -e ".[dev]"

# 3. Copy the env template and fill in your backend credentials
cp .env.example .env
# E.g. TIGERGRAPH_HOST, TIGERGRAPH_GSQL_SECRET, GOOGLE_API_KEY

# 4. Inspect the protocol types
python -c "from mcp_server.protocol import SubgraphContext, RetrievalRequest; print('protocol OK')"

# 5. Start the MCP server (stdio transport — what agents launch)
python -m mcp_server.mcp_server      # or the `graphrag-mcp` entrypoint

# 6. Start the HTTP dashboard server (FastAPI, binds 127.0.0.1:8000)
python -m mcp_server.server          # or the `graphrag-server` entrypoint

Requires Python 3.10+. Optional extras: pip install -e ".[server,tigergraph,llm]".

Backends

  • TigerGraph (Savanna): Primary enterprise graph backend (mcp_server/adapters/tigergraph_adapter.py). Connects via pyTigerGraph REST++, runs graph algorithms and installs GSQL queries idempotently.
  • Neo4j (Cypher): Official Cypher backend (mcp_server/adapters/neo4j_adapter.py). Parameterized Cypher queries for neighborhood expansion, shortest paths, community detection, and schema discovery.
  • SQLite Persistent Store: Embedded WAL-mode storage (mcp_server/storage.py) for query result caching, background jobs, and event journal replay.
  • Demo In-Memory Adapter: Labeled in-memory adapter (mcp_server/adapters/fallback_adapter.py) with BFS/Dijkstra traversal for hermetic unit testing and offline development.

Ingesting documents (Contract 4)

Writes are real backend upserts and every counter in the report is measured from the backend (getVertexCount before/after, existence probes per entity):

# Self-test: ingest a document, read it back, delete it again
.venv/bin/python scripts/smoke_construction.py

Write operations (ingest / update / delete) require authorization (Contract 10) via admin token or signed capability token (graphrag_capability_token). Ingestion also publishes Contract 7 / Contract 18 stream events, persisted in SQLite and emitted over SSE.

Running the tests

pytest                    # hermetic unit suite (no creds, no network)
pytest -m integration     # live TigerGraph + Gemini tests (self-skip without creds)
ruff check mcp_server/ hackathon/ tests/

The 18 Contracts

# Contract What it standardizes Implementation
1 Retrieval Standard request envelope + 7 operations (local_search, global_search, hybrid_search, entity_lookup, path_search, neighborhood, community_members) contracts/retrieval.py — done, real
2 Subgraph Context Uniform response: entities, relationships, paths, communities, text chunks protocol.py — done, real
3 Schema Discovery Backend-agnostic schema introspection for LLM planning contracts/schema_discovery.py — done, real
4 Construction Document → knowledge-graph ingestion pipeline contracts/construction.py — done, real writes
5 Provenance Citation & audit trail, incl. entities visited but not cited contracts/provenance.py — done, real
6 Federation Query multiple graphs + transparent result merging contracts/federation.py — done, real fan-out
7 Streaming Real-time graph change events contracts/streaming.py — done, real pub/sub + SSE
8 Prompt Formatting Context → LLM-ready, token-bounded text formatters/ — done (PromptFormatConfig model + schema)
9 Evaluation Standard, backend-comparable metrics contracts/evaluation.py — done; judge/BERTScore null when unavailable
10 Authorization 5-tier RBAC + HMAC capability tokens contracts/authorization.py — done, enforced on writes
11 Semantic Similarity Cosine (vector) + Jaccard (lexical) similarity between entities or text contracts/similarity.py — done
12 Temporal Query Date-range filtering on any subgraph retrieval result contracts/temporal.py — done
13 Explanation Natural-language "why retrieved" narratives per entity, LLM-polished contracts/explanation.py — done
14 Diff Structural delta between two SubgraphContexts or two queries contracts/diff.py — done
15 Aggregate OLAP-style count, group_by, top_n, stats_summary over the graph contracts/aggregate.py — done
16 Subgraph Export Export subgraphs to GraphML, Cypher MERGE, JSON-LD, and RDF Turtle contracts/export.py — done
17 Batch Runner Concurrent execution fan-out for up to 25 parallel tool calls contracts/batch.py — done
18 Watch & Subscriptions Filtered graph change querying & replay over persistent SQLite store contracts/watch.py — done
19 Conflict & Uncertainty Contradiction detection, temporal & authority resolution contracts/conflicts.py — done
20 Query Triage & ROI Semantic complexity routing & cost-benefit recommendation contracts/triage.py — done

JSON Schemas for Contracts 1–10 live in schemas/; tests/test_schemas.py fails if any schema drifts from its Pydantic model.

MCP Tool Surface (50 tools)

Core & Retrieval Tools (27 tools)

Tool Contract Description
graphrag_search 1 Auto-routed search with semantic prototype classification
graphrag_local_search 1 Keyword-graph subgraph search
graphrag_global_search 1 Community-summary synthesis
graphrag_hybrid_search 1 Vector + graph score fusion
graphrag_entity 1 Single entity lookup + context
graphrag_path 1 Shortest paths between entities
graphrag_neighborhood 1 Expand around an entity
graphrag_community 1 Community members + summary
graphrag_schema 3 Full graph schema
graphrag_entity_types 3 Vertex type list
graphrag_relationship_types 3 Edge type list
graphrag_sample 3 Sample entities of a type
graphrag_provenance 5 Citation trace for an entity
graphrag_trajectory 5 Traversal log
graphrag_sources 5 Source documents for an entity
graphrag_audit 5 Provenance completeness audit
graphrag_format 8 Format a SubgraphContext for LLM consumption
graphrag_status Backend health + statistics
graphrag_config Protocol configuration
graphrag_list_backends 6 List registered backends
graphrag_ingest 4 Document → knowledge graph (admin)
graphrag_delete_document 4 Delete a document vertex (admin)
graphrag_federated_search 6 Fan-out + merge across graphs
graphrag_entity_link 6 Cross-graph entity resolution
graphrag_events 7 Recent streaming events
graphrag_evaluate 9 Retrieval + answer quality evaluation
graphrag_authorize 10 Permission check

Analytical & Operational Tools (15 tools)

Tool Contract Description
graphrag_similarity 11 Cosine/Jaccard similarity between two texts
graphrag_entity_similarity 11 Entity-to-entity similarity by id
graphrag_batch_similarity 11 Rank candidates by similarity to anchor
graphrag_temporal_search 12 Search + date-range filter
graphrag_explain 13 Why-retrieved narrative per entity
graphrag_explain_path 13 Path reasoning narrative
graphrag_diff 14 Structural delta between two contexts
graphrag_diff_queries 14 Run two queries and diff their results
graphrag_count 15 Count entities by type ± filters
graphrag_group_by 15 Group entities by attribute
graphrag_top_n 15 Top-N entities ranked by attribute
graphrag_stats_summary 15 Full graph statistics summary
graphrag_job_status 4-ext Async ingestion job status
graphrag_register_backend 6-ext Register a new federated backend
graphrag_audit_log 10-ext Immutable mutation audit log

Autonomous Agentic & Advanced Tools (8 tools)

Tool Contract Description
graphrag_agent_investigate Harness Autonomous multi-step investigation emitting an AgenticTrace
graphrag_resolve_conflicts 19 Detect and resolve contradictory facts using recency & provenance
graphrag_triage_query 20 Predict optimal pipeline (RAG vs GraphRAG vs Agentic) and token-ROI
graphrag_export_subgraph 16 Export subgraphs to GraphML, Cypher, JSON-LD, RDF Turtle
graphrag_batch 17 Parallel tool execution fan-out (up to 25 queries)
graphrag_watch 18 Event replay & streaming change query with filtering
graphrag_next_page 2-ext Cursor-based pagination for large subgraph neighborhoods
graphrag_capability_token 10-ext Issue signed, short-lived HMAC capability tokens

Repo Layout

graphrag-protocol/
├── SPEC.md                      # Full protocol specification
├── MCP_SERVER_AUDIT.md          # Audit report + upgrade roadmap
├── schemas/                     # JSON Schema definitions (language-agnostic)
│   ├── retrieval-request.json   # Contract 1
│   ├── subgraph-context.json    # Contract 2
│   ├── graph-schema.json        # Contract 3
│   ├── ingestion-config.json    # Contract 4 (+ IngestionReport, Triple)
│   ├── provenance.json          # Contract 5
│   ├── federation-config.json   # Contract 6
│   ├── stream-event.json        # Contract 7
│   ├── prompt-format-config.json# Contract 8
│   ├── evaluation-report.json   # Contract 9
│   └── access-policy.json       # Contract 10
├── mcp_server/                  # Reference implementation
│   ├── protocol.py              # Canonical Pydantic v2 models (contracts 1-5, 8)
│   ├── protocol_extensions.py   # Models for contracts 4, 6, 7, 9, 10
│   ├── contracts/               # 18 contracts: retrieval, schema, provenance,
│   │   ├── retrieval.py         #   construction, federation, streaming, evaluation,
│   │   ├── schema_discovery.py  #   authorization, similarity, temporal, explanation,
│   │   ├── provenance.py        #   diff, aggregate, export, batch, watch
│   │   ├── construction.py
│   │   ├── federation.py
│   │   ├── streaming.py
│   │   ├── evaluation.py
│   │   ├── authorization.py
│   │   ├── similarity.py        # Contract 11
│   │   ├── temporal.py          # Contract 12
│   │   ├── explanation.py       # Contract 13
│   │   ├── diff.py              # Contract 14
│   │   ├── aggregate.py         # Contract 15
│   │   ├── export.py            # Contract 16
│   │   ├── batch.py             # Contract 17
│   │   └── watch.py             # Contract 18
│   ├── adapters/                # TigerGraph, Neo4j (Cypher), and demo memory adapter
│   ├── storage.py               # SQLite WAL-mode persistent store
│   ├── cache.py                 # TTL query cache with LRU & auto-invalidation
│   ├── rate_limiter.py          # Token-bucket sliding window rate limiter
│   ├── formatters/              # Contract 8: Markdown / structured, token-bounded
│   ├── pipelines.py             # Shared 3-pipeline runner (server + eval harness)
│   ├── mcp_server.py            # MCP stdio server (47 tools, v0.3.0)
│   └── server.py                # FastAPI dashboard server (+ SSE event feed)
├── frontend/                    # Next.js 14 dashboard (query lab, graph, benchmark, ingest & stream)
├── hackathon/                   # TigerGraph dataset, GSQL loaders, evaluation harness
├── scripts/                     # Live smoke tests (construction, connection)
├── tests/
│   ├── test_contracts.py        # Contracts 1, 3, 5 hermetic tests
│   ├── test_new_contracts.py    # Contracts 11-18, storage, cache, neo4j tests
│   ├── test_mcp_server.py       # 47-tool MCP server hermetic tests
│   ├── test_formatters.py       # Contract 8 formatter tests
│   ├── test_schemas.py          # JSON schema drift detection
│   ├── test_server.py           # FastAPI server tests
│   └── test_tigergraph_adapter.py # TigerGraph adapter integration tests
└── pyproject.toml

License

MIT

Release files for grip-protocol 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for grip-protocol 0.4.0
File Size Uploaded
grip_protocol-0.4.0.tar.gz 139.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for grip-protocol 0.4.0
File Interpreter ABI Platform
grip_protocol-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 269.5 kB

Release files / grip_protocol-0.4.0.tar.gz

Download URL grip_protocol-0.4.0.tar.gz
Size 139.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5f46731cb689d173dc35d982a0eed846f238cd7429916c8a121bd55718a3ba91
BLAKE2b-256 checksum
How to use checksums
e438773d57a40141487ae06b43e01bbf9158a5f6bbe4f0d671385e61d0b2248e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release files / grip_protocol-0.4.0-py3-none-any.whl

Download URL grip_protocol-0.4.0-py3-none-any.whl
Size 130.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
53c059cd047e14b0b975f3a65e5c3d7ca896d5c0271b46a3bcc75502548fff11
BLAKE2b-256 checksum
How to use checksums
c415f562e3895e452a1d168ebf3c6c80a76951283c9446bc3db259bc74cd4efc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.7

Release history Release notifications | RSS feed

0.5.0

2 release files

This release

0.4.0 This release

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page