-
Notifications
You must be signed in to change notification settings - Fork 1.4k
RFC: Extend aws-network-mcp-server with Load Balancer, Route 53, and VPC Endpoint tools #2868
Description
RFC: Extend aws-network-mcp-server with Load Balancer, Route 53, VPC Endpoint, and Profiles tools
Summary
This RFC proposes adding 11 new read-only tools to the existing aws-network-mcp-server, organized into 4 phases:
- Phase 1 — Load Balancer (3 tools)
- Phase 2 — Route 53 / DNS (5 tools, including DNS Firewall)
- Phase 3 — VPC Endpoints / PrivateLink (2 tools)
- Phase 4 — Route 53 Profiles (1 tool)
All tools follow the server's existing patterns: plain async def functions registered via mcp.tool(func) in server.py, boto3 clients via the get_aws_client() helper, structured return dicts, and ToolError from fastmcp.exceptions for error handling. All operations are strictly read-only (Describe/Get/List).
Excluded: Route 53 Global Resolver (GA March 2026) — the boto3 client (route53globalresolver) does not exist yet in the SDK. Will add once available.
Motivation
"I can't connect to my instance/service" is the #1 AWS support request. The most common root causes — unhealthy LB targets, DNS misconfigurations, DNS Firewall blocking, and broken PrivateLink connectivity — have zero MCP tool coverage today:
- Load Balancer gap: The server's IAM policy already includes
elasticloadbalancing:DescribeLoadBalancers, but no tools use it. - DNS gap: Across all 67+ AWS MCP servers, there is zero Route 53 / DNS coverage.
- DNS Firewall gap: DNS Firewall rule groups block/allow DNS queries per VPC — critical for "my DNS is being blocked" troubleshooting. Uses the same
route53resolverclient. - VPC Endpoint gap: The server has
ec2:DescribeVpcEndpointsin its IAM policy but no dedicated endpoint diagnostic tools. - Profiles gap: Enterprise customers managing DNS across hundreds of VPCs use Route 53 Profiles — no visibility exists.
Proposed Tools
Phase 1 — Load Balancer (3 tools)
| Tool | Description | AWS APIs |
|---|---|---|
list_load_balancers |
List all ALBs/NLBs/GLBs with optional type filtering | elbv2:DescribeLoadBalancers |
get_lb_details |
Detailed LB config: listeners, target groups, security groups, AZ mapping | elbv2:DescribeLoadBalancers, DescribeListeners, DescribeTargetGroups |
get_lb_target_health |
Per-target health status with failure reasons | elbv2:DescribeTargetGroups, DescribeTargetHealth |
Phase 2 — Route 53 / DNS (5 tools)
| Tool | Description | AWS APIs |
|---|---|---|
list_hosted_zones |
List hosted zones with type (public/private) and VPC associations | route53:ListHostedZones, GetHostedZone |
query_dns_records |
Search DNS records by type or name prefix within a hosted zone | route53:ListResourceRecordSets |
check_health_checks |
Health check statuses with per-region checker details | route53:ListHealthChecks, GetHealthCheckStatus, cloudwatch:GetMetricStatistics |
list_resolver_rules |
Resolver endpoints and forwarding rules across VPCs | route53resolver:ListResolverRules, ListResolverRuleAssociations, ListResolverEndpoints, ListResolverEndpointIpAddresses |
list_dns_firewall_rules |
DNS Firewall rule groups with VPC associations and individual rules | route53resolver:ListFirewallRuleGroups, ListFirewallRuleGroupAssociations, ListFirewallRules |
Phase 3 — VPC Endpoints / PrivateLink (2 tools)
| Tool | Description | AWS APIs |
|---|---|---|
list_vpc_endpoints_detailed |
Detailed inventory of interface/gateway endpoints with DNS entries and SG associations | ec2:DescribeVpcEndpoints |
check_endpoint_connectivity |
Verify DNS resolution, SG rules, and ENI details for a PrivateLink endpoint | ec2:DescribeVpcEndpoints, DescribeSecurityGroups, DescribeNetworkInterfaces |
Phase 4 — Route 53 Profiles (1 tool)
| Tool | Description | AWS APIs |
|---|---|---|
list_route53_profiles |
List Profiles with VPC associations and attached resources (PHZs, resolver rules, DNS Firewall rule groups) | route53profiles:ListProfiles, ListProfileAssociations, ListProfileResourceAssociations |
New IAM Permissions Required
Phase 1 — Load Balancer
elasticloadbalancing:DescribeLoadBalancers— already in IAM policyelasticloadbalancing:DescribeListeners— NEWelasticloadbalancing:DescribeTargetGroups— NEWelasticloadbalancing:DescribeTargetHealth— NEW
Phase 2 — Route 53 / DNS
route53:ListHostedZones,GetHostedZone,ListResourceRecordSets,ListHealthChecks,GetHealthCheckStatus— NEWroute53resolver:ListResolverRules,ListResolverEndpoints,ListResolverRuleAssociations,ListResolverEndpointIpAddresses— NEWroute53resolver:ListFirewallRuleGroups,ListFirewallRuleGroupAssociations,ListFirewallRules— NEWcloudwatch:GetMetricStatistics— NEW (calculated health check status, must use us-east-1)
Phase 3 — VPC Endpoints
- All permissions already exist in the IAM policy. Zero new permissions.
Phase 4 — Route 53 Profiles
route53profiles:ListProfiles— NEWroute53profiles:ListProfileAssociations— NEWroute53profiles:ListProfileResourceAssociations— NEW
Phased PR Approach
4 separate PRs, one per phase:
- PR 1 — Load Balancer (3 tools) + tests + IAM updates
- PR 2 — Route 53 / DNS (5 tools including DNS Firewall) + tests + IAM updates
- PR 3 — VPC Endpoints (2 tools) + tests + documentation
- PR 4 — Route 53 Profiles (1 tool) + tests + IAM updates
Potential Overlaps
-
list_vpc_endpoints_detailedvsget_vpc_network: Existing tool returns basic endpoint info for a single VPC, skips Gateway endpoints. Our tool adds cross-VPC listing, service name filtering, Gateway support, and detailed fields (DNS entries, private DNS, SG IDs, ENI IDs). Fallback: rename toget_vpc_endpoint_detailswith specific endpoint ID. -
check_endpoint_connectivityvsget_eni_details: Different entry point (VPC endpoint vs ENI), aggregates endpoint state + private DNS + SGs + ENIs into one diagnostic view.
Design Decisions
- Follow existing patterns exactly — plain async functions, ToolError, get_aws_client()
- Client-side filtering for Route 53 — ListResourceRecordSets uses pagination cursors, not filters
- CloudWatch fallback for calculated health checks — GetHealthCheckStatus doesn't work for calculated HCs; CloudWatch metrics only in us-east-1
- Graceful partial results — get_lb_details and check_endpoint_connectivity return what succeeded + error indicators for failed sub-calls
- Rate-limit awareness — GetHealthCheckStatus only called when specific HC requested or count ≤ 20
- Single-pass association lookups — resolver rules, DNS Firewall, and Profiles all fetch associations once and build lookup dicts instead of N+1 queries
- Separate module for Profiles — uses different boto3 service (
route53profiles) so gets its owntools/route53_profiles/module
Questions for Maintainers
- Should Phase 3 VPC Endpoint tools be renamed to avoid overlap with
get_vpc_network? - Is the phased PR approach acceptable, or would you prefer fewer PRs?
- Any concerns about Route 53 tools being in the network server vs a dedicated Route 53 server?
- Should
list_dns_firewall_rulesbe a separate tool or merged intolist_resolver_rules? - Should Route 53 Profiles go in
tools/route53/or separatetools/route53_profiles/?
All code is implemented and tested — 326 tests passing, 94% branch coverage, zero conflicts with existing 27 tools.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status