agentsclimarketplace

Code graph

Skill Manav1011/mcp-and-skills/code-graph

Use this skill whenever the user wants to visualize, map, or understand the structure of a codebase as a graph or diagram. Triggers include: "show me the call graph", "visualize my code", "map the entry point", "show feature flow", "generate a dependency graph", "trace execution from main", "show me how functions connect", "diagram my codebase", "graph this feature", "show module dependencies", "how does X connect to Y in the code". Use even when the request is informal: "how does this code hang together?", "what calls what?", "draw my code". Supports multi-language codebases: Python, JavaScript/TypeScript, Java, Go, Rust, C/C++, Ruby, PHP, and more. Output format: Mermaid diagrams rendered inline and saved to ./docs/graphs/.From its SKILL.md

Install
npx -y skills add Manav1011/mcp-and-skills --skill code-graph

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

8.5 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it

Code Graph Skill

Generates Mermaid diagrams that visualize codebase structure — call graphs, dependency trees, feature flows — from entry point down to individual features.

Two Core Modes

1. Full Codebase Graph

Traces from all entry point(s) outward, showing all modules/functions/classes and their relationships.

2. Feature / Sub-graph

Focuses on a specific function, class, module, or feature and shows only its call tree and dependencies.


Workflow

Step 1: Understand the Input

The user may provide:

  • Uploaded files — read from /mnt/user-data/uploads/
  • Pasted code — already in context
  • A directory path — scan with bash tools

If files are uploaded but not yet read, check /mnt/user-data/uploads/ first.

Clarify if unclear:

  • Entry point file? (e.g., main.py, index.js) — or auto-detect
  • Full graph or specific feature name?
  • Depth limit? (default: 5 hops from entry)
  • Which language(s)?

Step 2: Parse the Code Using the Extraction Script

Always use scripts/extract_graph.py for directory-based codebases. This handles cross-file call resolution, entry point detection, depth limiting, and feature scoping automatically.

# Full codebase graph (auto-detect entry)
python scripts/extract_graph.py <directory> --depth 5

# Explicit entry point
python scripts/extract_graph.py <directory> --entry main.py --depth 5

# Feature sub-graph
python scripts/extract_graph.py <directory> --feature auth --depth 3

# Shallow overview (module-level only)
python scripts/extract_graph.py <directory> --depth 1

The script outputs JSON:

{
  "nodes": [{ "id": "...", "label": "...", "type": "entrypoint|module|func|class|external", "file": "..." }],
  "edges": [{ "from": "...", "to": "...", "label": "calls|imports|inherits", "cross_file": true }],
  "entry_points": ["..."],
  "warnings": ["..."],
  "stats": { "total_files": 12, "total_nodes": 47, "total_edges": 63 }
}

For pasted/uploaded code snippets (not a directory), parse manually using the strategies in references/parsers.md.

Cross-file calls: The script resolves these automatically — when login() in auth.py calls query_user() in db.py, the edge is marked cross_file: true and rendered as a bold edge in the diagram.

Step 3: Handle Multiple Entry Points (Monorepos / Frameworks)

When the script detects multiple entry points, treat each as a root and generate:

  1. One unified overview graph showing all entry points and their downstream modules
  2. One per-entry-point sub-graph if the user wants drill-down detail

Common multi-entry patterns:

Project TypeEntry PointsStrategy
Next.jsEvery file in pages/Group pages into a [Pages] cluster node; graph routes → components
DjangoEach app's views.py + urls.pyOne sub-graph per Django app
MicroservicesEach main.go / index.js per serviceOne overview graph per service
React<App> component treeComponent hierarchy graph
Spring BootEach @RestControllerOne sub-graph per controller

Step 4: Apply Depth Control

Always respect the --depth flag. Default is 5 hops. Advise the user:

DepthBest For
1Module/file-level overview only
2–3Feature sub-graphs, focused areas
4–5Full codebase with reasonable detail
6+Only on user request; warn about large graphs

If the graph exceeds 50 nodes after depth limiting, automatically fall back to depth-1 (module-level) and tell the user:

"The full graph has X nodes — showing module-level overview. Use --feature <n> or --depth 3 to drill in."

Step 5: Build and Render the Mermaid Diagram

Use flowchart TD for call graphs. Use flowchart LR for flat import/dependency graphs.

Node Styling

classDef entry    fill:#4f46e5,color:#fff,stroke:#3730a3
classDef module   fill:#0ea5e9,color:#fff,stroke:#0284c7
classDef func     fill:#10b981,color:#fff,stroke:#059669
classDef class_   fill:#f59e0b,color:#fff,stroke:#d97706
classDef external fill:#6b7280,color:#fff,stroke:#4b5563,stroke-dasharray:5 3
classDef async_   fill:#8b5cf6,color:#fff,stroke:#7c3aed

Node shapes:

  • Entry point: A([🚀 main.py]):::entry
  • Module/file: A[auth_module]:::module
  • Function: A["login()"]:::func
  • Class: A["UserService"]:::class_
  • External/DB: A[(PostgreSQL)]:::external or A>requests]:::external

Edge types:

A -->|calls| B          # normal call
A ==>|cross-file| B     # cross-file call (bold)
A -.->|imports| B       # import / dependency
A ==>|inherits| B       # class inheritance
A -.->|async| B         # async/event call

Feature Sub-graph with Subgraph Block

flowchart TD
    entry([🚀 main]):::entry

    subgraph auth ["🔐 Auth Feature"]
        login["login()"]:::func
        validate["validate_token()"]:::func
        hash["hash_password()"]:::func
    end

    login ==>|cross-file| query["db.query_user()"]:::func
    entry --> login
    login --> validate
    login --> hash
    query --> db[(UserDB)]:::external

Step 6: Save Graphs to ./docs/graphs/

Always save every generated graph. Never silently overwrite — check first.

mkdir -p ./docs/graphs

File naming:

  • Full overview: ./docs/graphs/overview.md
  • Feature sub-graph: ./docs/graphs/<feature-name>.md
  • Entry-point graph: ./docs/graphs/<entry-filename>.md

Before writing, check if file exists:

[ -f ./docs/graphs/<name>.md ] && echo "EXISTS" || echo "NEW"
  • If NEW: write directly.
  • If EXISTS: tell the user: "./docs/graphs/<name>.md already exists — overwrite or save as <name>-<timestamp>.md?" then follow their choice.

File format:

# Graph: <Title>
_Generated: <YYYY-MM-DD>_
_Entry: <entry file(s)>_
_Depth: <n>_

```mermaid
flowchart TD
    ...
```

After saving, confirm: "Saved to ./docs/graphs/<filename>.md"

Step 7: Update the Graph Index

After every run, update ./docs/graphs/README.md with a table of all saved graphs:

# Code Graphs Index
_Last updated: <date>_

| Graph | Description | Entry Point | Depth | Generated |
|---|---|---|---|---|
| [overview](./overview.md) | Full codebase | main.py | 5 | 2024-01-15 |
| [auth](./auth.md) | Auth feature | auth.py | 3 | 2024-01-15 |

Create it if it doesn't exist. Append new rows; update existing rows matched by filename.


Multiple Graphs in One Response

For complex codebases, generate in this order:

  1. Overview graph — module-level, all entry points
  2. Per-feature graphs — one per major feature (auth, db, API, etc.)

Each with a heading and one-sentence explanation. Save each separately and update the index.


Handling Large Codebases

If more than ~20 files or ~100 functions:

  1. Run script at --depth 1 for module-level overview first
  2. Render and save that
  3. Ask: "Which module or feature would you like to drill into?"
  4. Rerun with --feature <n> --depth 3

Edge Cases

  • Circular dependencies: A -->|↩ circular| A or A <--> B with a warning comment
  • Dynamic calls (eval, reflection, __getattr__): dashed edge with ? label
  • Async/await: -.->|async| dashed edges, :::async_ node style
  • Unknown entry point: Ask the user, or default to file with most outgoing edges
  • Minified/transpiled code: Note limitation, parse source if available
  • No files found: Confirm directory path and language extensions

Reference Files

  • references/parsers.md — Manual parsing strategies per language (for snippets/uploads)
  • references/mermaid-patterns.md — Advanced Mermaid patterns: subgraphs, async, circular deps, layered arch
  • scripts/extract_graph.py — Automated multi-language static analysis script

What ships with it: 3 files

23.9 KB alongside SKILL.md, 1 of them executable

references/

scripts/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.