A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
MCP server for AWS infrastructure analysis — Lambda, DynamoDB, SQS, PostgreSQL, MongoDB, EventBridge & more. Works with
Understand your infrastructure, not just your code.
Infrawise gives AI coding assistants deterministic infrastructure awareness.
It statically analyzes your codebase, cloud infrastructure, and database schemas, then exposes that context through MCP so tools like Claude Code can understand your actual tables, indexes, query patterns, and service relationships instead of guessing from source files alone.
New software developers don't write wrong code. Claude Code writes wrong code and they ship it. Infrawise is the only thing standing between Claude Code's generated output and a production incident.
AI coding assistants can read your source files but have no deterministic knowledge of your infrastructure. They do not know which GSIs exist, how tables are partitioned, which functions already trigger scans, or where indexes are missing. So they guess.
Infrawise replaces guessing with infrastructure-aware context.
Without Infrawise, an AI assistant might:
.scan() on your Orders table that has 50M rowsstatus that you already haveSELECT * when you need to keep query cost lowWith Infrawise, it knows:
CREATE INDEX SQL or GSI config for your tables — not generic adviceInfrawise is not an AI agent framework, an infrastructure provisioning tool, an observability platform, or a cloud management dashboard.
It is a deterministic infrastructure intelligence layer for AI-assisted development.
npm install -g infrawise
or use without installing:
npx infrawise start --claude
cd your-project
infrawise start --claude
That's it. Infrawise will:
infrawise.yaml (first time only).mcp.json so your editor auto-connects on every future launchEvery time after:
claude # no infrawise command needed — editor manages the connection
Analysis is cached for 24 hours. When the cache is stale, infrawise stdio (spawned automatically by your editor) refreshes it at session start. File changes are detected within the session and the code graph is updated automatically.
Findings (3 total)
1. [HIGH] Full table scan detected on DynamoDB table "Orders"
listAllOrders() scans without any filter — reads every item in the table.
Recommendation: Replace Scan with Query using a partition key or add a GSI.
2. [MEDIUM] PostgreSQL table "users" has no index on column "email"
Filtering on "email" causes sequential scans.
Recommendation: CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
3. [MEDIUM] DynamoDB table "Sessions" accessed by 6 distinct code paths
High access concentration may create hot partition issues at scale.
infrawise start --claude
Writes .mcp.json to your project root and opens Claude Code. Claude Code reads .mcp.json automatically on every launch and manages the infrawise stdio process — no server to start, no ports to configure.
infrawise start --cursor
Writes .cursor/mcp.json and opens Cursor. All 15 infrawise tools are available in Cursor's MCP panel.
infrawise start --windsurf
Writes to ~/.codeium/windsurf/mcp_config.json and opens Windsurf.
infrawise start
Writes .mcp.json and exits. Open whichever editor you prefer — point it at infrawise stdio --config /path/to/infrawise.yaml as an MCP server command.
If your editor or workflow requires an HTTP MCP endpoint instead of stdio:
infrawise dev # starts server at http://localhost:3000/mcp
Add to your editor's MCP config:
{
"mcpServers": {
"infrawise": {
"url": "http://localhost:3000/mcp"
}
}
}
| Tool | What it provides |
|---|---|
get_infra_overview | Complete snapshot — all services, counts, and high-severity findings |
get_graph_summary | Full infrastructure graph — all nodes, edges, and findings |
analyze_function | Issues in a specific function — scans, missing indexes, N+1, trigger event shapes |
suggest_gsi | Exact GSI config for a DynamoDB table + attribute |
postgres_index_suggestions | Exact CREATE INDEX SQL for your actual table |
suggest_mongo_index | Exact createIndex command for a MongoDB collection + field |
mysql_index_suggestions | Exact ALTER TABLE ADD INDEX SQL for your MySQL table |
get_queue_details | SQS queues — DLQ status, encryption, message counts |
get_topic_details | SNS topics — subscription counts, protocols, and filter policies (required message attributes per subscription) |
get_secrets_overview | Secrets Manager — names and rotation status (values never included) |
get_parameter_overview | SSM Parameter Store — names, types, tiers (values never included) |
get_lambda_overview | Lambda functions — runtime, memory, timeout, triggers (SQS/DynamoDB/Kinesis/EventBridge/S3), env var key names |
get_eventbridge_details | EventBridge rules — name, state, schedule/event pattern, target functions |
get_s3_overview | S3 buckets — versioning, encryption, public access, event notifications |
get_log_errors | CloudWatch error patterns and counts (no raw log messages) |
| Command | What it does |
|---|---|
infrawise start | Primary command — init + analyze + write editor MCP config, then exit |
infrawise start --claude | Same as above, then opens Claude Code |
infrawise start --cursor | Same as above, then opens Cursor |
infrawise start --windsurf | Same as above, then opens Windsurf |
infrawise init | Generate infrawise.yaml only (no analysis, no editor config) |
infrawise auth | Select or switch AWS profile |
infrawise analyze | Force a full re-scan — useful after major infrastructure changes |
infrawise dev | HTTP transport alternative — starts server at localhost:3000/mcp |
infrawise stdio | Stdio transport — auto-managed by editors via .mcp.json (rarely run directly) |
infrawise doctor | Validate AWS access, DB connectivity, and config |
infrawise analyze options| Flag | Description |
|---|---|
-c, --config <path> | Path to infrawise.yaml (default: infrawise.yaml) |
-r, --repo <path> | Repository to scan (default: current directory) |
--no-cache | Skip reading/writing the cache |
-o, --output <path> | Save findings as a markdown report, e.g. report.md |
--severity <level> | Only show findings at or above this level: high | medium | low | verify |
# Export a shareable findings report
infrawise analyze --output report.md
# Only show high-severity issues
infrawise analyze --severity high
# High-severity issues only, saved to a file
infrawise analyze --severity high --output report.md
infrawise.yaml is generated by infrawise start (or infrawise init to create the file only) and lives in your repo root. Every service must be explicitly enabled: true — infrawise never connects to anything not listed in config.
Connection strings support ${ENV_VAR} substitution so passwords never need to be committed:
postgres:
enabled: true
connectionString: postgresql://infrawise_ro:${DB_PASSWORD}@host:5432/mydb
Full example:
project: payments-service
aws:
profile: default # AWS profile from ~/.aws/credentials
region: ap-south-1
dynamodb:
enabled: true
includeTables: # omit to include all tables
- Orders
- Users
postgres:
enabled: true
connectionString: postgresql://infrawise_ro:${DB_PASSWORD}@host:5432/mydb
mysql:
enabled: false
connectionString: ''
mongodb:
enabled: false
connectionString: ''
sqs:
enabled: true
sns:
enabled: true
ssm:
enabled: true
paths: [] # filter by prefix e.g. ["/myapp/prod"]
secretsManager:
enabled: true
lambda:
enabled: true
includeFunctions: # omit to include all functions
- myFunction
- anotherFunction
eventbridge:
enabled: true
rds:
enabled: false
s3:
enabled: false
kafka:
enabled: false
cloudwatchLogs:
enabled: false
logGroupPrefixes: []
windowHours: 24
analysis:
sampleSize: 100
Infrawise is read-only. Minimum IAM policy required:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["dynamodb:ListTables", "dynamodb:DescribeTable"],
"Resource": "*"
}
]
}
For SSO profiles, log in before running infrawise:
aws sso login --profile myprofile
Create a read-only user for infrawise:
CREATE USER infrawise_ro WITH PASSWORD 'yourpassword';
GRANT CONNECT ON DATABASE yourdb TO infrawise_ro;
GRANT USAGE ON SCHEMA public TO infrawise_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO infrawise_ro;
For Amazon RDS: allow inbound on port 5432 from your machine's IP in the security group.
Infrawise has two analysis layers:
Works from AWS APIs, database schema introspection, and IaC files — no dependency on application code:
| Service | What it checks |
|---|---|
| DynamoDB schema | Tables, GSIs, partition keys |
| PostgreSQL / MySQL schema | Tables, indexes, column types |
| MongoDB schema | Collections, indexes |
| SQS | Missing DLQs, unencrypted queues, large backlogs |
| SNS | Subscription filter policies — required message attributes per subscription |
| Kafka (kafkajs) | Producer/consumer topic mapping from code |
| Secrets Manager | Missing secret rotation |
| Lambda | Default memory (128 MB), high timeouts, triggers (SQS/DynamoDB/Kinesis/EventBridge/S3), missing DLQ on trigger source |
| S3 | Public access blocking (verify), missing versioning, missing encryption |
| EventBridge | Rules, schedules, event patterns, target Lambda functions |
| RDS | Publicly accessible, no backups, unencrypted, no deletion protection, single-AZ |
| CloudWatch Logs | Log groups with no retention policy |
| Terraform / CloudFormation / CDK | IaC drift vs deployed state |
Uses ts-morph AST analysis to detect which functions call which tables and how:
| Analyzer | Severity | What it detects |
|---|---|---|
| Full Table Scan (DynamoDB) | High | .scan() calls without filters |
| Missing GSI | Medium | Queries on attributes without a matching GSI |
| Hot Partition | Medium | 5+ distinct code paths hitting the same table |
| Missing Index (PostgreSQL) | Medium | Tables queried without indexes |
| N+1 Query | Medium | Repeated query patterns from ORM loops |
| Large SELECT | Low | SELECT * usage |
| Missing MySQL Index | Medium | MySQL tables queried without indexes |
| MySQL Full Table Scan | High | Full table scan patterns in MySQL queries |
| Missing Mongo Index | Medium | Collections queried without secondary indexes |
| Collection Scan | High | find() calls without filter predicates |
Non-TypeScript/JavaScript projects still get full value from infrastructure-level analyzers — code correlation (function-to-table mapping, N+1 patterns) is skipped.
The scanner supports: AWS SDK v3/v2 for DynamoDB, pg/Prisma/Knex for PostgreSQL, mysql2/Knex for MySQL, driver/Mongoose for MongoDB, AWS SDK v3 for SQS/SNS/SSM/Secrets/Lambda, and kafkajs for Kafka topics (producer/consumer).
Infrawise does not use an LLM to analyze your infrastructure. All extraction and analysis are deterministic: AST parsing, schema introspection, rule-based analyzers, and graph correlation. LLMs are only consumers of the generated context through MCP.
src/
types.ts Shared type definitions
core/ Config (Zod + YAML), logger (Pino), local cache
graph/ Graph engine — nodes, edges, builder
adapters/
aws/ DynamoDB, Lambda, SQS/SNS/SSM/Secrets/EventBridge/RDS, CloudWatch
db/ PostgreSQL, MySQL, MongoDB
iac/ Terraform, CDK, CloudFormation (local file parsing)
analyzers/ 23 rule-based analyzers
context/ Repository scanner (ts-morph AST)
server/ Fastify MCP server (@modelcontextprotocol/sdk, Streamable HTTP)
cli/ CLI commands (Commander.js)
Feature roadmap is tracked in the GitHub Project. Feature requests and upvotes welcome.
The demo/localstack/ directory runs infrawise against real AWS APIs emulated locally via LocalStack — an open-source tool that spins up a full AWS environment in Docker so you can test AWS integrations at zero cost, with no real AWS account needed. See demo/localstack/README.md for setup instructions.
See CONTRIBUTING.md for a full walkthrough — including how to add a new service adapter, a new analyzer, and the PR checklist.
pnpm release patch # 0.1.2 → 0.1.3 (bug fixes)
pnpm release minor # 0.1.2 → 0.2.0 (new features, backwards compatible)
pnpm release major # 0.1.2 → 1.0.0 (breaking changes)
pnpm release 1.5.0 # explicit version
Bumps package.json, commits, tags, pushes, and creates a draft GitHub release with notes from commit messages. Then publish the draft on GitHub to trigger npm publish.
MIT
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Secure MCP server for MySQL database interaction, queries, and schema management
English-first Korean equity intelligence MCP — DART filings, foreign-holder 5%-rule flows, activist filings, KRX news. F