Code-Graph-RAG
Code-Graph-RAG parses a multi-language codebase with Tree-sitter, builds a knowledge graph of its structure in Memgraph, and lets you query, edit, and optimise that code in plain English. It works across a monorepo of mixed languages under one unified graph schema.
What It Does
Point it at a repository and it reads every source file, extracts functions, classes, methods, and modules along with the relationships between them, and stores the result as an interconnected graph. Once the graph exists you can:
- Ask questions about the codebase in natural language and get answers grounded in the real structure.
- Retrieve the actual source of any function, class, or method by name or by intent.
- Edit code through the agent with AST-based surgical patching and a diff preview before anything changes.
- Search and rewrite code structurally by AST pattern with ast-grep, instead of text or regex.
- Trace data flow through assignments, calls, and I/O sinks via
FLOWS_TOtaint edges. - Optimise code against language best practices or your own coding standards.
- Find dead code by walking call and reference edges from entry points.
- Group several repositories into a named workspace and query them as one graph.
- Trace calls between microservices: route decorators become endpoint templates, and HTTP client URLs resolve to the handlers that serve them, linking services across project boundaries.
Supported Languages
Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, and Dart are fully supported. Scala is in development, and Ruby has structural support (modules, functions, classes, and imports) through the pluggable ast-grep tier, which requires the ast-grep extra (pip install 'code-graph-rag[ast-grep]').
Install
pip install code-graph-rag
With all Tree-sitter grammars (Python, JS, TS, Rust, Go, Java, Scala, C, C++, C#, PHP, Lua, Dart):
pip install 'code-graph-rag[treesitter-full]'
With semantic code search (UniXcoder embeddings):
pip install 'code-graph-rag[semantic]'
Qdrant is the default vector store for semantic search. To use Milvus Lite,
install code-graph-rag[semantic,milvus], then set
CGR_VECTOR_STORE_BACKEND=milvus and MILVUS_URI=./.milvus_code_embeddings.db
before indexing.
To compute embeddings on an OpenAI-compatible endpoint (OpenAI, Ollama, vLLM)
instead of locally, set CGR_EMBEDDING_PROVIDER=openai with
OPENAI_EMBEDDING_BASE_URL and OPENAI_EMBEDDING_MODEL; torch and
transformers are then not required locally.
Prerequisites
- Python 3.12+
- Docker (for Memgraph)
cmake(for building pymgclient)ripgrep(rg) (for shell command text searching)
CLI Quick Start
The package installs a cgr command.
Start Memgraph, parse a repo, and query it:
cgr daemon up # start Memgraph + Qdrant
cgr start --repo-path ./my-project \
--update-graph --clean # parse & launch interactive chat
Index to protobuf for offline use:
cgr index -o ./index-output --repo-path ./my-project
Export knowledge graph to JSON:
cgr export -o graph.json
AI-guided optimisation:
cgr optimize python --repo-path ./my-project
Find dead code (functions unreachable from any entry point):
cgr dead-code # scan the indexed project
cgr dead-code -e main --exclude '*.gen.*' # add roots, skip generated code
cgr dead-code --format json --fail-on-found # CI-friendly report
Results are candidates for review, not a guaranteed delete list. See the Dead Code Detection guide.
Group repositories into a workspace and query them together:
cgr workspace create my-platform
cgr workspace add-repo my-platform ./service-a
cgr workspace add-repo my-platform ./service-b
cgr start --workspace my-platform
Inspect the graph and the stack:
cgr stats # node and relationship counts
cgr status # stack state and last sync per project
cgr doctor # check dependencies and configuration
MCP Server
Run cgr mcp-server to serve the tools over stdio or HTTP for Claude Code and other MCP clients. The MCP surface registers:
- Ask and retrieve:
ask_agent,query_code_graph,get_code_snippet, andsemantic_search(needs thesemanticextra) - Structural editing:
surgical_replace_code, plusstructural_searchandstructural_replace(need theast-grepextra) - Files and projects:
read_file,write_file,list_directory,list_projects,index_repository,update_repository,delete_project,wipe_database
Python SDK
The cgr package provides short imports for programmatic use.
Load and query an exported graph
from cgr import load_graph
graph = load_graph("graph.json")
print(graph.summary())
functions = graph.find_nodes_by_label("Function")
for fn in functions[:5]:
rels = graph.get_relationships_for_node(fn.node_id)
print(f"{fn.properties['name']}: {len(rels)} relationships")
Query Memgraph with Cypher
from cgr import MemgraphIngestor
with MemgraphIngestor(host="localhost", port=7687) as db:
rows = db.fetch_all("MATCH (f:Function) RETURN f.name LIMIT 10")
for row in rows:
print(row)
Generate Cypher from natural language
import asyncio
from cgr import CypherGenerator
async def main():
gen = CypherGenerator()
cypher = await gen.generate("Find all classes that inherit from BaseModel")
print(cypher)
asyncio.run(main())
Semantic code search
Requires the semantic extra.
from cgr import embed_code
embedding = embed_code("def authenticate(user, password): ...")
print(f"Embedding dimension: {len(embedding)}")
Configuration
from cgr import settings
settings.set_orchestrator("openai", "gpt-5.6-terra", api_key="sk-...")
settings.set_cypher("google", "gemini-3.5-flash-lite", api_key="your-key")
Environment Variables
Configure via .env or environment variables:
| Variable | Default | Description |
|---|---|---|
MEMGRAPH_HOST |
localhost |
Memgraph hostname |
MEMGRAPH_PORT |
7687 |
Memgraph port |
ORCHESTRATOR_PROVIDER |
Provider: google, openai, anthropic, azure, ollama, minimax, litellm_proxy |
|
ORCHESTRATOR_MODEL |
Model ID (e.g. gpt-5.6-terra, gemini-3.6-flash, claude-sonnet-5, qwen2.5-coder) |
|
ORCHESTRATOR_API_KEY |
API key for the provider (not needed for ollama) |
|
CYPHER_PROVIDER |
Provider for Cypher generation | |
CYPHER_MODEL |
Model ID for Cypher generation (e.g. qwen2.5-coder, gpt-5.6-luna, gemini-3.5-flash-lite) |
|
CYPHER_API_KEY |
API key for Cypher provider (not needed for ollama) |
|
TARGET_REPO_PATH |
. |
Default repository path |
Documentation
Full documentation, architecture details, and contribution guide: docs.code-graph-rag.com
License
MIT
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 code_graph_rag-0.0.589.tar.gz.
File metadata
- Download URL: code_graph_rag-0.0.589.tar.gz
- Upload date:
- Size: 808.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
43ebe97d7f83cf5935625f56929f0e7dee6f86583277cf3cc982e65b1299a7bc
|
|
| MD5 |
cf24a4b93dd95608b5dc655a5abdca6d
|
|
| BLAKE2b-256 |
fdfa58a9f8ba77cc8578e0211d49d79eaef99db3c361bf240f447bd95ea84b92
|
Provenance
The following attestation bundles were made for code_graph_rag-0.0.589.tar.gz:
Publisher:
publish.yml on vitali87/code-graph-rag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
code_graph_rag-0.0.589.tar.gz -
Subject digest:
43ebe97d7f83cf5935625f56929f0e7dee6f86583277cf3cc982e65b1299a7bc - Sigstore transparency entry: 2401813378
- Sigstore integration time:
-
Permalink:
vitali87/code-graph-rag@76b8d6c25e85c7531797c0e946110570b857064d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/vitali87
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@76b8d6c25e85c7531797c0e946110570b857064d -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file code_graph_rag-0.0.589-py3-none-any.whl.
File metadata
- Download URL: code_graph_rag-0.0.589-py3-none-any.whl
- Upload date:
- Size: 927.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f2a3b3972b76e92f1586ab7e18c1f950c0b63eec185f7cf739e5a8b58da7811
|
|
| MD5 |
5efdda5bc1ab908e6e02b8269ba1c680
|
|
| BLAKE2b-256 |
61443e8da653e9f4e12128e78b4c0d6b10e05d7033f121c13db4f9b5a639b7b9
|
Provenance
The following attestation bundles were made for code_graph_rag-0.0.589-py3-none-any.whl:
Publisher:
publish.yml on vitali87/code-graph-rag
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
code_graph_rag-0.0.589-py3-none-any.whl -
Subject digest:
4f2a3b3972b76e92f1586ab7e18c1f950c0b63eec185f7cf739e5a8b58da7811 - Sigstore transparency entry: 2401813420
- Sigstore integration time:
-
Permalink:
vitali87/code-graph-rag@76b8d6c25e85c7531797c0e946110570b857064d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/vitali87
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@76b8d6c25e85c7531797c0e946110570b857064d -
Trigger Event:
workflow_dispatch
-
Statement type: