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.1.0.tar.gz (126.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.1.0-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pygraph_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 126.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.1.0.tar.gz
Algorithm Hash digest
SHA256 dbde8a4c9269e6273e884ffb4f77528dad88edee80eb8eb063743ef0ce26b2d1
MD5 2d3c318d5295972b3e0818163fefad11
BLAKE2b-256 693ac3ccc533b8450b76bc3b461f9130854b2ece919fc8a5a83452ed1e1f2874

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygraph_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 49.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5102fe6a95387a19c143824096911f760d179bca027c9c0c05108c1f727b5e1e
MD5 d3852b1fdc2a65386b94e18f0990a8e2
BLAKE2b-256 c7862939ecfca436548c66ce78499f1e81df4d62ccb338f212c63cefdc51dc3d

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