Skip to main content

AST-based Python/Flask/FastAPI 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.7.0.tar.gz (137.5 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.7.0-py3-none-any.whl (58.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pygraph_mcp-0.7.0.tar.gz
  • Upload date:
  • Size: 137.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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.7.0.tar.gz
Algorithm Hash digest
SHA256 0980ef2a071fd64fc5b1e29ae0aecc3ec592e2b83ad51d91f221d0ccc69ce77b
MD5 5e459ff9b8e5dce1515a33097fa9579e
BLAKE2b-256 1de2c99780241405fd996fd3530af2218a0ad4ef794947cf672d8f2d8c171636

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pygraph_mcp-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 58.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","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.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c9ab6acb03264e1cdbeb63939c3a8f574377ba1e41360306384af011e191c258
MD5 b287aeb841f46fd30bf13cb04c28e649
BLAKE2b-256 8c7a80582c63290cd150849f8dfe8d4c4091f31da86a26b7f5d204bfc6af6083

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