AST-based Python/Flask codebase indexer for AI agents
Project description
pygraph
AST-based Python/Flask codebase indexer for AI coding agents.
pygraph parses your Python project into a queryable graph (graph.json) using static analysis (AST). It detects Flask routes, blueprints, templates, CLI commands, decorators, dependencies, and more — with zero network calls and no telemetry.
Designed as a companion tool for AI agents (opencode, Cline, etc.) via MCP, or for direct CLI use during development.
Quick Start
pip install pygraph-mcp
# Or with uv:
uv pip install pygraph-mcp
Index your project and start querying:
cd my-python-project
pygraph build
pygraph public
pygraph node "my_function"
pygraph callers "my_function"
Commands
| Command | Description |
|---|---|
build |
Index project into .pygraph/graph.json |
node |
Show details of a symbol |
callers |
Show who calls the given symbol |
callees |
Show what the given symbol calls |
source |
Show source code of a file |
query |
Search symbols by pattern (regex or substring) |
context |
Show symbol with callers, callees, tests, and source |
imports |
Show imports of a file |
public |
List all exported (public) symbols |
focus |
Show JSON detail for a symbol |
impact |
Show downstream impact (BFS from symbol) |
path |
Show shortest call path between two symbols |
orphans |
List uncalled private symbols |
trace |
Find error messages and trace their call paths |
complexity |
Show McCabe cyclomatic complexity |
coupling |
Show afferent/efferent coupling metrics |
hotspot |
Show high-risk symbols (complexity x coupling) |
deps |
List external dependencies |
boundaries |
Check architecture boundary violations |
changes |
Show symbol changes since a git ref |
stale |
List files not modified in N days |
plan |
Generate a change plan report |
review |
Generate a Markdown code review report |
graph-report |
Generate a Markdown report about the codebase |
add-opencode-plugin |
Create .opencode.json with pygraph MCP config |
mcp |
Start MCP stdio server for AI agent integration |
MCP Integration
Start the MCP server and connect your AI agent:
pygraph mcp --root /path/to/project
All query commands are exposed as MCP tools, making them callable from opencode, Cline, and any MCP-compatible client.
Flask Support
pygraph detects Flask-specific constructs out of the box:
- Route decorators (
@app.route) with HTTP methods and URL parameters - Blueprint creation and registration (
register_blueprint) - Template rendering (
render_template,render_template_string) - Error handlers (
@app.errorhandler) - CLI commands (
@app.cli.command) - Flask extension usage
Architecture Enforcement
Create .pygraph/boundaries.json:
{
"layers": [
{"name": "views", "pattern": "src/views/", "allowed": ["services"]},
{"name": "services", "pattern": "src/services/", "allowed": ["models", "repos"]},
{"name": "models", "pattern": "src/models/", "allowed": []},
{"name": "repos", "pattern": "src/repos/", "allowed": ["models"]}
]
}
Then run:
pygraph boundaries
Requirements
- Python 3.11+
uv(recommended) orpip
Development
git clone https://github.com/shvmgyl15/pygraph.git
cd pygraph
uv sync
uv run pytest
uv run mypy src
uv run ruff check
How It Works
┌──────────┐ ┌──────────────┐ ┌───────────┐
│ Scanner │ → │ Extractors │ → │ Graph │
│ (walker) │ │ (AST, Flask) │ │ (JSON) │
└──────────┘ └──────────────┘ └───────────┘
↓
┌──────────┐
│ Query │
│ Engine │
└──────────┘
- Scan — walks the project tree, respects
.gitignore, classifies files - Extract — parses Python source with
ast, extracts symbols, calls, imports, Flask decorators, dependencies - Graph — serializes everything to
.pygraph/graph.json(incremental builds supported) - Query — CLI or MCP tools query the graph for callers, callees, impact, paths, orphans, complexity, coupling, etc.
Inspiration
pygraph was inspired by and follows the same design philosophy as:
Both projects use AST-based static analysis to create queryable code graphs for AI coding agents. pygraph adapts the same concept to Python and Flask.
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 pygraph_mcp-0.2.4.tar.gz.
File metadata
- Download URL: pygraph_mcp-0.2.4.tar.gz
- Upload date:
- Size: 128.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4058f0130100a5bdf6b41d535c6fcc218aac0b0a7bca4e60fc93deab7f90a98d
|
|
| MD5 |
fb43f85c2a9421311148d2ea680f9815
|
|
| BLAKE2b-256 |
d133f64f867100588f98c283a69d8f1b200744510aadd62b60adecf9f47788a9
|
File details
Details for the file pygraph_mcp-0.2.4-py3-none-any.whl.
File metadata
- Download URL: pygraph_mcp-0.2.4-py3-none-any.whl
- Upload date:
- Size: 51.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.19 {"installer":{"name":"uv","version":"0.11.19","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eff6be7d2c0b60e78fb86c6c0cf2df2b3160df91d396b9b78fbdffa710199761
|
|
| MD5 |
e4694cfa2f50c4be2278cdb56da79e75
|
|
| BLAKE2b-256 |
b1ca21f541d92e9e808504ee64eedb3121a69acf9e9382778ff7fa48320cb93a
|