Skip to main content

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) or pip

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  │
                                   └──────────┘
  1. Scan — walks the project tree, respects .gitignore, classifies files
  2. Extract — parses Python source with ast, extracts symbols, calls, imports, Flask decorators, dependencies
  3. Graph — serializes everything to .pygraph/graph.json (incremental builds supported)
  4. 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:

  • tsgraph — TypeScript codebase indexer
  • gograph — Go codebase indexer

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pygraph_mcp-0.4.0.tar.gz (132.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pygraph_mcp-0.4.0-py3-none-any.whl (54.5 kB view details)

Uploaded Python 3

File details

Details for the file pygraph_mcp-0.4.0.tar.gz.

File metadata

  • Download URL: pygraph_mcp-0.4.0.tar.gz
  • Upload date:
  • Size: 132.6 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

Hashes for pygraph_mcp-0.4.0.tar.gz
Algorithm Hash digest
SHA256 3c552abca68b71e5ed96b099f1c1e470775abdaf19e5599ffcdd6dd59c7db5f7
MD5 5cb52edde7d0c0171296a893a85cf61a
BLAKE2b-256 4aa06ed68155bb9dcdfa44cb4218c17e8f2b09726bb142b752f1d25e94d7281a

See more details on using hashes here.

File details

Details for the file pygraph_mcp-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pygraph_mcp-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 54.5 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

Hashes for pygraph_mcp-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3d8d2bb2b845f46857d253804000efec4f27a7ee322f8338bd4d12948d08e670
MD5 a6b31418423a4a7f0bf8facc74e43da9
BLAKE2b-256 22b088438a5a56a00bade6b0fa8183c3c51ca52c06529137b82a5490b7f18846

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page