Skip to main content

MCP server for AWS VPC network topology analysis using NetworkX directed graphs

Project description

NetGraph

MCP server for AWS VPC network path analysis and security auditing

Python 3.10+ License: MIT

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.json in 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 SettingsMCP 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:

  1. AWS CLI configured with a profile, or
  2. Environment variables set (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY), or
  3. 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:

  1. Resolves the source to its ENI and subnet
  2. Evaluates Security Group egress rules (stateful - only checks outbound)
  3. Evaluates NACL outbound rules (stateless - must also check return path)
  4. Traverses the route table using Longest Prefix Match (LPM)
  5. Follows the path through gateways until reaching the destination
  6. Evaluates destination NACL inbound and Security Group ingress rules
  7. 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:AssumeRole permission
  • Trust relationship on target account roles
  • Set NETGRAPH_ROLE_ARN environment variable

Documentation

License

MIT

Contributing

Contributions welcome! Please read our Contributing Guide for details on our development process and how to submit pull requests.

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

aws_vpc_analyzer-0.5.1.tar.gz (139.5 kB view details)

Uploaded Source

Built Distribution

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

aws_vpc_analyzer-0.5.1-py3-none-any.whl (67.3 kB view details)

Uploaded Python 3

File details

Details for the file aws_vpc_analyzer-0.5.1.tar.gz.

File metadata

  • Download URL: aws_vpc_analyzer-0.5.1.tar.gz
  • Upload date:
  • Size: 139.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for aws_vpc_analyzer-0.5.1.tar.gz
Algorithm Hash digest
SHA256 6712db4f69da180213af0f95ac248491c8970136cdf217bd49a5b4b7a249df85
MD5 8c6cf080c60e4a57b194a2682044deff
BLAKE2b-256 2e644ac4cc10034a27ace3ed83e9751e0c8512b880cce6968ea67553900dc7fd

See more details on using hashes here.

Provenance

The following attestation bundles were made for aws_vpc_analyzer-0.5.1.tar.gz:

Publisher: release.yml on ayushgoel24/mcp-netgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file aws_vpc_analyzer-0.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for aws_vpc_analyzer-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 16472126b06b0c62066ec227b4a2134268fcaceabd601009071ef8bb78104adc
MD5 c602844364ad1224f24e90f21c6e9c56
BLAKE2b-256 e54d9bb369b296e7994785a7f535715c8231fa38abe1b263851bc56c32996309

See more details on using hashes here.

Provenance

The following attestation bundles were made for aws_vpc_analyzer-0.5.1-py3-none-any.whl:

Publisher: release.yml on ayushgoel24/mcp-netgraph

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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