Unified Context Engine
Project description
Unified Context Engine (UCE)
UCE builds a deterministic knowledge graph of a codebase in Neo4j and exposes reasoning tools over that graph. It works across repositories, supports multiple languages, and continuously updates when files change.
This package is pip-installable and CLI-friendly.
What UCE Does
- Ingests source code, schema, requirements, and policies into a Neo4j graph.
- Tracks files, functions, classes, methods, tables, columns, requirements, and policies.
- Provides deterministic impact analysis and risk assessment.
- Keeps the graph up-to-date via a file watcher.
- Exposes reasoning tools through an MCP server.
Supported Languages
UCE uses Tree-sitter and supports:
- Python
- TypeScript
- JavaScript
- Go
- Java
- C
- C++
Prerequisites
- Install Python 3.10+. On Windows, Python 3.10 is recommended for Tree-sitter wheels.
- Install and start Neo4j Desktop or Neo4j Server.
- Note your Bolt URI, username, and password. The typical default is
bolt://localhost:7687with userneo4j.
Quickstart (Detailed)
1. Install UCE
pip install uce-engine
2. Create config.yaml
Create config.yaml in the repo you want to analyze.
Example:
project_root: .
languages:
- python
- typescript
- javascript
- go
- java
- c
- cpp
paths:
code:
- core
- ingestion
- runtime
- server
- reasoning
schema: []
requirements:
- artifacts/requirements
policies:
- artifacts/policies
identifiers: # optional: limit identifier usage indexing to these paths
- server
ignore:
- .git
- .next
- __pycache__
- node_modules
- venv
- dist
- build
- coverage
- .idea
- .vscode
- ui
- views
- public
- assets
- styles
- css
- scss
- .env
- .DS_Store
- ".log"
- ".tmp"
- ".bak"
- ".swp"
- ".swo"
- ".pyc"
- ".class"
- ".o"
- ".so"
- ".dll"
- ".exe"
- ".dylib"
- ".zip"
- ".tar"
- ".gz"
- ".7z"
- ".rar"
aliases:
"@/": src/
neo4j:
uri: bolt://localhost:7687
user: neo4j
password: testpassword
3. Understand the key config.yaml fields
project_root: The root folder for this repository. Relative paths are resolved from here.languages: Which language parsers to enable.paths.code: One or more folders that contain code.paths.codecan include multiple folders. Use.if you want to scan the entire repo.paths.schema: Schema files or folders (SQL, JSON, YAML, etc.).paths.requirements: Folders with requirement docs.paths.policies: Folders with policy docs.paths.identifiers: Optional list of folders where identifier usage indexing is enabled.paths.identifierscan also point at a single file. If empty, identifier indexing is disabled.ignore: Substring filters applied to relative paths. If a path contains a token, it is skipped.aliases: Import alias mapping for resolving internal imports.neo4j.uri,neo4j.user,neo4j.password: Connection settings.
4. Create .env (optional but recommended)
UCE can load environment variables from a .env file.
Defaults:
- UCE looks for
.envnext toconfig.yaml. - You can override this location with
UCE_DOTENV_PATH.
Templates:
- In the repo, use
.env.exampleas a starting point. - When installed from PyPI, the template is bundled at
core/.env.exampleinside the package. Do not commit.envto source control; it contains secrets.
Common variables:
NEO4J_URI,NEO4J_USERNAME,NEO4J_PASSWORDLLM_PROVIDER,OPENAI_API_KEYNEO4J_TRANSPORT_MODE,NEO4J_MCP_HTTP_URL
5. Run UCE (CLI)
From anywhere:
uce --config path/to/config.yaml
What happens:
- Loads configuration.
- Connects to Neo4j.
- Builds or updates the graph.
- Starts the file watcher.
- Launches the MCP server.
LLM Ingestion (End-to-End)
If you want LLM-based requirements or policies ingestion, you also need the Neo4j MCP server running.
1. Set required .env values
LLM_PROVIDER=openai
OPENAI_API_KEY=your_key_here
NEO4J_TRANSPORT_MODE=http
NEO4J_MCP_HTTP_URL=http://127.0.0.1:8000/mcp/
2. Start the Neo4j MCP server
neo4j-mcp --transport http --server-host 127.0.0.1 --server-port 8000 --server-path /mcp/
3. Run UCE
uce --config path/to/config.yaml
Stdio MCP (optional)
If you prefer stdio, set:
NEO4J_TRANSPORT_MODE=stdio
NEO4J_MCP_COMMAND=neo4j-mcp --transport stdio
Then run uce --config path/to/config.yaml.
Run (Library)
from run import run_uce
run_uce("path/to/config.yaml")
Identifier Indexing (Optional)
If you want identifier usage (variable names, type names, field names) indexed into the graph, set paths.identifiers in config.yaml or UCE_IDENTIFIER_PATHS in .env. If it is empty, identifier indexing is disabled.
MCP Tools
UCE exposes reasoning tools via MCP:
impact_analysisexplain_changerisk_assessmentcount_functions_in_file(AST-lite helper)find_identifier_usage(AST-lite helper)
These tools query the graph (no ingestion logic).
What Nodes Are In The Graph
FileFunctionClassMethodTableColumnRequirementPolicyIdentifier(optional, AST-lite usage index)
If you want additional node types (e.g., Dependencies, Endpoints, Services), add them in ingestion and reasoning layers.
License
MIT
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 uce_engine-0.1.5.tar.gz.
File metadata
- Download URL: uce_engine-0.1.5.tar.gz
- Upload date:
- Size: 46.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3fd8b51a2e9106262cd5699c6cfe965390bf9067d02b837a129f7083d806e33
|
|
| MD5 |
55bb500188219b520d83a30a10fc246c
|
|
| BLAKE2b-256 |
eb0febf85fbebeb4f23c367ac935da4f3abbc2bb4e030a221cfb636c60f11cb2
|
File details
Details for the file uce_engine-0.1.5-py3-none-any.whl.
File metadata
- Download URL: uce_engine-0.1.5-py3-none-any.whl
- Upload date:
- Size: 49.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
355f3a4ea60f568559c16960d26ca6669fabb1fb33e78e1cf17fc07e7add45e2
|
|
| MD5 |
77d65044b131f88a25af5190d5fe9d32
|
|
| BLAKE2b-256 |
c92cef943e2a316d374fce6763bee9d09c3859f1377a75fb1e1d7c40bfa2d2d1
|