Graphify Mesh
A scheduled sync engine plus a companion MCP query server that merges
many per-repo graphify knowledge
graphs into one safe, repo-attributed, human-named global graph — with a
cross-project dependency / similarity / API overlay, and a query server that
respects "search only in my current repo unless I ask for more."
- pip / PyPI name:
graphify-mesh - import package:
graphify_mesh - console scripts:
graphify-mesh-sync,graphify-mesh-server,graphify-mesh-reap - Graphify: github.com/Graphify-Labs/graphify
- Docs: see Documentation below
Why this exists
graphify is an AST + LLM code-knowledge-graph tool: point it at a repo and it
produces a per-project graph.json. That works great for a single repo. The
moment you have many repos — say a dozen or two: PHP/Symfony backends,
TS/React frontends, a couple of infra repos — and you want to ask questions
across them, a pile of independent graph.json files stops being enough.
This engine was extracted from a real setup with ~16 independent
graphify-indexed repos. A documented before/after baseline probe suite
surfaced nine concrete failures that this package fixes:
- No repo attribution. Merge repos into one global graph naively and every result looks like it could be from any of them.
- Keyword-seed traps. Naive query engines match literal common words ("Usage", "path", "Events") instead of concepts.
- Noise flooding. Generic getters / loggers / setters dominate BFS neighborhoods and crowd out the actually-relevant hit.
- Inferred-edge pollution. Heuristically-guessed
calls/similar_toedges create nonsense neighbors and shortest paths, indistinguishable from ground-truth extracted edges. - Community-id collisions after merging. "What's in community 3?" returns nodes from six unrelated repos.
- No cross-project answers. "Does repo A depend on repo B?", "which repos use a similar auth pattern?" are unanswerable without manual grep across checkouts.
- Stale data, no repeatable rebuild. Merging graphs incrementally corrupts shared external-node identity over successive runs.
- No human-readable names. Communities show up as "Community 47" instead of a real name.
- Deprecated / dead code not down-weighted. A
DEPRECATED/folder's stale client code dominates results for a still-maintained API.
graphify-mesh solves this generically for anyone with multiple
graphify-indexed repos who wants: a scheduled sync engine that merges them
safely, human-named communities, a cross-project dependency/similarity/API
overlay, and a query server that only widens scope when you ask it to.
Architecture at a glance
per-repo graphify-out/graph.json (one per registered repo)
|
v
+------------------+ graphify-mesh-sync (scheduled, single run)
| sync pipeline |
| update -> merge -> recluster+remap -> name ->
| embed-changed -> overlay-resolve -> lexical-index ->
| validate -> atomic publish
+------------------+
| publishes a new immutable "generation"
v
<mesh_root>/graphify/global/current/ -> generations/<id>/
|-- global-graph.json (structural graph, repo-attributed,
| human-named communities, NO cross-repo edges)
|-- cross-project-overlay.json (depends_on / provides_api / consumes_api /
| similar_approach -- a SEPARATE artifact)
+-- lexical-index.json (tokenized postings for hybrid search)
|
v
+------------------+ graphify-mesh-server (stdio, one per session,
| MCP query server | or --transport http, one shared daemon)
| | tools: search, cross_project, find_similar,
| | project_map, context_pack,
| | neighbors
+------------------+
Two hard invariants worth stating up front:
- The structural graph never contains cross-repo edges. Those live only in the separate overlay artifact, so a cross-project guess can never be confused with a ground-truth extracted edge.
- Each generation is rebuilt from empty, never incrementally merged, so shared external-node identity cannot corrupt over successive runs.
See docs/architecture.md for the full pipeline.
Quickstart
# 1. Install graphify-mesh (pulls in the upstream `graphifyy` library dependency
# automatically):
pip install graphify-mesh # or: pip install -e . (from a checkout)
# 2. (Optional) Also install the standalone `graphify` CLI command, isolated,
# if you want to run ad-hoc queries yourself outside the sync engine:
pipx install graphifyy
# 3. Describe your repos in a registry.json (see examples/registry.example.json):
cp examples/registry.example.json /path/to/your/workspace/graph-mesh/bin/registry.json
$EDITOR /path/to/your/workspace/graph-mesh/bin/registry.json
# 4. Dry run (writes nothing outside a private staging dir):
graphify-mesh-sync --once --dry-run \
--mesh-root /path/to/your/workspace/graph-mesh \
--scan-root /path/to/your/workspace/checkouts \
--scan-root /path/to/your/workspace/other-checkouts
# 5. Real run:
graphify-mesh-sync --once \
--mesh-root /path/to/your/workspace/graph-mesh \
--scan-root /path/to/your/workspace/checkouts \
--scan-depth 4
# 6. Register the MCP server with your MCP-capable client (stdio, default):
# command: graphify-mesh-server
# env: GRAPHIFY_MESH_ROOT=/path/to/your/workspace/graph-mesh
# Or run one shared daemon for every local agent: graphify-mesh-server --transport http
# (needs GRAPHIFY_MESH_HTTP_TOKEN — see docs/setup.md)
Full walkthrough: docs/setup.md.
Documentation
| Doc | What it covers |
|---|---|
docs/setup.md |
Install, configure a registry for your repos, first dry-run + real run, register the MCP server, install-from-index URL. |
docs/keeping-sync-up-to-date.md |
Scheduled re-indexing: step-by-step systemd timer setup (env file, units, cadence, reaper), cron alternative, adding/removing repos, troubleshooting. |
docs/configuration.md |
Every GRAPHIFY_MESH_* env var, every Settings field, the registry.json and manual-relations.json schemas. |
docs/architecture.md |
Pipeline stages, the two-MCP-server concept, and the structural-vs-overlay / rebuild-from-empty invariants. |
docs/mcp-server.md |
The 7 tools, both transports (stdio and shared HTTP), how to register the server. |
docs/publishing.md |
Why GitHub Packages does not host Python, and how the gh-pages PEP 503 "simple" index substitutes for it. |
License
MIT — see LICENSE.
Metadata
Release files for graphify-mesh 0.0.22
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| graphify_mesh-0.0.22.tar.gz | 1.4 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| graphify_mesh-0.0.22-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.7 MB
Release files / graphify_mesh-0.0.22.tar.gz
| Download URL | graphify_mesh-0.0.22.tar.gz |
|---|---|
| Size | 1.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9f1840967c2d8b45d6b7aba9eb8618a5c9781b20a19a29aca6edcd6e00d09985
|
|
BLAKE2b-256 checksum How to use checksums |
ceddd3985229bb9cf848fffd633a9e63e73ed4ad94bfd8425bf2ba26c1ca3670
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / graphify_mesh-0.0.22-py3-none-any.whl
| Download URL | graphify_mesh-0.0.22-py3-none-any.whl |
|---|---|
| Size | 269.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f408e7d818209d7b6329964f999ee2328de059742b1ac3055f1bd85f7ad3bdb
|
|
BLAKE2b-256 checksum How to use checksums |
f00dbb67561b59939d43bedc2b26a09cfa4c40d05e9c20eb8c4f0052fd7fd823
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for graphify-mesh 0.0.22
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.