NetGraph
MCP server for AWS VPC network path analysis and security auditing
NetGraph enables AI assistants to analyze AWS VPC network connectivity by modeling infrastructure as a graph. Ask questions like "Can my web server reach the database on port 5432?" and get deterministic answers with full path analysis.
Why NetGraph?
Without NetGraph, debugging AWS network connectivity requires:
- Manually tracing Security Groups, NACLs, and route tables
- Checking stateful vs stateless rule semantics
- Verifying return path routing for NACLs
- Cross-referencing multiple AWS console pages
With NetGraph, your AI assistant can:
- Analyze complete network paths in seconds
- Identify exactly where traffic is blocked
- Find resources exposed to the public internet
- Discover resources by name or tags when you don't have IDs
Quick Start
Installation
pip install aws-vpc-analyzer
Or install from source:
git clone https://github.com/ayushgoel24/mcp-netgraph.git
cd mcp-netgraph
pip install -e .
For detailed setup instructions, see the Installation Guide.
Configure Your MCP Client
Add NetGraph to your MCP client configuration. Replace your-profile with your AWS CLI profile name.
Claude Desktop
Config file location:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Add this configuration:
{
"mcpServers": {
"netgraph": {
"command": "aws-vpc-analyzer",
"env": {
"AWS_PROFILE": "your-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
Alternative using uvx (no pip install required):
{
"mcpServers": {
"netgraph": {
"command": "uvx",
"args": ["aws-vpc-analyzer"],
"env": {
"AWS_PROFILE": "your-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
Restart Claude Desktop after saving.
Claude Code (CLI)
Config file location:
- Global:
~/.claude.json - Project-specific:
.mcp.jsonin your project root
Add this configuration:
{
"mcpServers": {
"netgraph": {
"command": "aws-vpc-analyzer",
"env": {
"AWS_PROFILE": "your-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
Restart Claude Code or start a new session.
Cursor
Open Settings → MCP and add:
{
"mcpServers": {
"netgraph": {
"command": "aws-vpc-analyzer",
"env": {
"AWS_PROFILE": "your-profile",
"AWS_REGION": "us-east-1"
}
}
}
}
Restart Cursor after saving.
For detailed setup instructions including troubleshooting, see the Installation Guide.
AWS Credentials
NetGraph uses your standard AWS credentials. Ensure you have:
- AWS CLI configured with a profile, or
- Environment variables set (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY), or - IAM role attached (for EC2/Lambda environments)
Required IAM permissions: See AWS Permissions | Full IAM Policy
Tools
analyze_path
Analyze network reachability between a source and destination with hop-by-hop evaluation of Security Groups, NACLs, and route tables.
Can instance i-0abc123 reach 10.0.2.50 on port 443?
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
source_id |
string | Yes | EC2 instance ID (i-xxx) or ENI ID (eni-xxx) |
destination_ip |
string | Yes | IPv4 or IPv6 destination address |
port |
integer | Yes | Destination port (1-65535) |
protocol |
string | No | tcp, udp, icmp, or -1 for all (default: tcp) |
force_refresh |
boolean | No | Bypass cache and fetch fresh data (default: false) |
Returns: Path status (REACHABLE, BLOCKED, or UNKNOWN), hop-by-hop details, and blocking reason if blocked.
find_public_exposure
Scan a VPC to find resources exposed to the public internet on a specific port.
Show me all resources in vpc-12345678 exposed to SSH on port 22
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
vpc_id |
string | Yes | VPC ID to scan (vpc-xxx) |
port |
integer | Yes | Port to check for exposure (1-65535) |
protocol |
string | No | tcp, udp, or -1 for all (default: tcp) |
force_refresh |
boolean | No | Bypass cache (default: false) |
Returns: List of exposed resources with exposure paths, allowing Security Group rules, and remediation guidance.
find_resources
Discover AWS resources by name pattern or tags. Useful when you know a resource by name but need its ID.
Find all production web servers in vpc-12345678
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
vpc_id |
string | Yes | VPC ID to search (vpc-xxx) |
tags |
object | No | Tag key-value filters (e.g., {"Environment": "prod"}) |
resource_types |
array | No | Filter by type: instance, eni, subnet, igw, nat, peering, tgw |
name_pattern |
string | No | Glob pattern for Name tag (e.g., web-*, *-prod-*) |
max_results |
integer | No | Maximum results to return (default: 50, max: 50) |
Returns: Matching resources with IDs, names, IPs, subnets, and tags.
list_vpcs
List and search VPCs in your account. Use this when you need a VPC ID but only know the name or tags.
What VPCs do I have? I'm looking for the production one.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
name_pattern |
string | No | Glob pattern for VPC Name tag (e.g., prod-*) |
tags |
object | No | Tag key-value filters (e.g., {"Environment": "production"}) |
cidr |
string | No | Filter by CIDR block (e.g., 10.0.0.0/16) |
Returns: List of VPCs with IDs, names, CIDRs, state, and tags.
refresh_topology
Pre-warm the cache by fetching all resources in specified VPCs. Optional optimization for faster subsequent queries.
Pre-load the topology for vpc-12345678
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
vpc_ids |
array | Yes | List of VPC IDs to pre-warm (["vpc-xxx", "vpc-yyy"]) |
Returns: Node/edge counts, resources by type, and duration.
get_cache_stats
Get cache performance statistics.
Returns: Cache hits, misses, hit rate, TTL, and entry counts.
Configuration
Configure NetGraph via environment variables:
| Variable | Default | Description |
|---|---|---|
AWS_REGION |
us-east-1 |
AWS region to query |
AWS_PROFILE |
(none) | AWS CLI profile to use |
NETGRAPH_TTL |
60 |
Cache TTL in seconds |
NETGRAPH_ROLE_ARN |
(none) | IAM role ARN for cross-account access |
NETGRAPH_LOG_LEVEL |
INFO |
Log level: DEBUG, INFO, WARNING, ERROR |
Example Prompts
Connectivity debugging:
Can my web server i-0abc123 reach the database at 10.0.3.50 on port 5432?
Security audit:
Find all resources in vpc-prod12345 exposed to the internet on SSH port 22
Resource discovery:
Find all instances tagged Environment=production in vpc-12345678
VPC lookup:
List my VPCs - I need to find the one named "production"
Pre-deployment validation:
Verify that i-gateway123 can reach 10.0.2.100 on port 8080
See docs/examples.md for more detailed examples.
How It Works
NetGraph models your VPC as a directed graph:
- Nodes: EC2 instances, ENIs, subnets, Internet Gateways, NAT Gateways, VPC Peering connections
- Edges: Routing relationships with CIDR destinations and prefix lengths
When you ask about connectivity, NetGraph:
- Resolves the source to its ENI and subnet
- Evaluates Security Group egress rules (stateful - only checks outbound)
- Evaluates NACL outbound rules (stateless - must also check return path)
- Traverses the route table using Longest Prefix Match (LPM)
- Follows the path through gateways until reaching the destination
- Evaluates destination NACL inbound and Security Group ingress rules
- Verifies return path routing to prevent asymmetric routing failures
AWS Permissions
NetGraph requires read-only EC2 permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"ec2:DescribeNetworkAcls",
"ec2:DescribeRouteTables",
"ec2:DescribeInternetGateways",
"ec2:DescribeNatGateways",
"ec2:DescribeVpcs",
"ec2:DescribeVpcPeeringConnections",
"ec2:DescribeTransitGateways",
"ec2:DescribeTransitGatewayAttachments",
"ec2:GetManagedPrefixListEntries"
],
"Resource": "*"
}
]
}
For cross-account analysis, also add:
sts:AssumeRolepermission- Trust relationship on target account roles
- Set
NETGRAPH_ROLE_ARNenvironment variable
Documentation
- Installation Guide - Detailed setup instructions
- IAM Policy - Copy-paste IAM policies
- Examples - Detailed usage examples
- Changelog - Release notes and version history
License
MIT
Contributing
Contributions welcome! Please read our Contributing Guide for details on our development process and how to submit pull requests.
Metadata
Release files for aws-vpc-analyzer 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aws_vpc_analyzer-0.5.1.tar.gz | 139.5 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aws_vpc_analyzer-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 206.8 kB
Release files / aws_vpc_analyzer-0.5.1.tar.gz
| Download URL | aws_vpc_analyzer-0.5.1.tar.gz |
|---|---|
| Size | 139.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6712db4f69da180213af0f95ac248491c8970136cdf217bd49a5b4b7a249df85
|
|
BLAKE2b-256 checksum How to use checksums |
2e644ac4cc10034a27ace3ed83e9751e0c8512b880cce6968ea67553900dc7fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 16, 2026.
Transparency logRelease files / aws_vpc_analyzer-0.5.1-py3-none-any.whl
| Download URL | aws_vpc_analyzer-0.5.1-py3-none-any.whl |
|---|---|
| Size | 67.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
16472126b06b0c62066ec227b4a2134268fcaceabd601009071ef8bb78104adc
|
|
BLAKE2b-256 checksum How to use checksums |
e54d9bb369b296e7994785a7f535715c8231fa38abe1b263851bc56c32996309
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 16, 2026.
Transparency logSecurity for aws-vpc-analyzer 0.5.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for aws_vpc_analyzer-0.5.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 16, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.