Open Source · MIT

MCP Infrastructure Layer

Your AI coding assistant
finally knows your infra.

Infrawise gives Claude Code and Cursor a real-time, deterministic map of your AWS services, databases, and IaC — so they stop writing code that assumes wrong indexes, missing queues, and stale schemas.

Get Started
growing
MIT License
No telemetry · runs local

Demo

Ask about your infra. Claude already knows.

infrawise start --claude opens Claude Code; asked about an SQS-triggered Lambda, Claude pulls the queue details from infrawise and answers with the exact event shape plus the queue's missing DLQ and visibility timeout risks

The Problem

AI writes wrong code.
Infrawise is the fix.

"New software developers don't write wrong code. Claude Code writes wrong code and they ship it."
Without Infrawise
# AI writes from assumptions
response = table.query(
  FilterExpression=Attr('userId').eq(user_id)
)
# ❌ Full table scan — GSI doesn't exist
With Infrawise
# AI knows your actual schema
response = table.query(
  IndexName='userId-createdAt-index',
  KeyConditionExpression=Key('userId').eq(user_id)
)
# ✅ Uses real GSI from suggest_gsi

Where It Helps

The bugs that only appear at runtime.

AI hallucinates column names, queue types, event shapes, and filter policies. Infrawise gives it your actual infrastructure so it stops guessing.

get_table_schema

Pasting your schema into the chat, again

The oldest ritual in AI-assisted development: copy the table definitions out of the console, paste them into the chat, repeat next session. The pasted copy is partial, and it goes stale the moment someone runs a migration.

Without Infrawise
-- pasted by hand at the top of every session
CREATE TABLE orders (
  id uuid PRIMARY KEY,
  customer_id uuid,        -- FK to what? nullable?
  ...                      -- 40 more tables to go
);
-- ❌ partial, and stale after the next migration
With Infrawise
-- the assistant asks infrawise instead
get_table_schema({ tables: ["orders", "customers"] })
-- → columns, types, primary keys, foreign keys
SELECT o.id, c.email FROM orders o
  JOIN customers c ON c.id = o.customer_id;
-- ✅ real column names, real join path, live schema
analyze_function

Wrong Lambda event shape

AI guesses the handler signature. SQS, S3, and EventBridge all use different shapes — getting it wrong means silent undefined at runtime.

Without Infrawise
# AI guesses the payload structure
def handler(event, context):
    body = json.loads(event["body"])
    process(body["orderId"])
# ❌ SQS wraps in Records — event["body"] is None
With Infrawise
# analyze_function returns the exact event shape
def handler(event, context):
    body = json.loads(event["Records"][0]["body"])
    process(body["orderId"])
# ✅ Correct shape — no silent failures
get_queue_details

FIFO queue missing MessageGroupId

AI writes a standard SendMessage call without checking if the queue is FIFO. FIFO queues require MessageGroupId — omitting it throws a runtime error.

Without Infrawise
# AI writes a standard SendMessage call
sqs.send_message(
    QueueUrl=queue_url,
    MessageBody=json.dumps(order),
)
# ❌ FIFO queue — InvalidParameterValue at runtime
With Infrawise
# get_queue_details shows isFifo: true
sqs.send_message(
    QueueUrl=queue_url,
    MessageBody=json.dumps(order),
    MessageGroupId=order["customerId"],
)
# ✅ Required field included — no runtime error
get_topic_details

SNS message silently dropped

A subscription has a filter policy requiring specific message attributes. Missing one drops the message with no error, no retry, and no DLQ entry.

Without Infrawise
# AI publishes without checking filter policies
sns.publish(
    TopicArn=topic_arn,
    Message=json.dumps(payload),
)
# ❌ "eventType" required — subscription drops it silently
With Infrawise
# get_topic_details reveals requiredAttributes
sns.publish(
    TopicArn=topic_arn,
    Message=json.dumps(payload),
    MessageAttributes={
        "eventType": {"DataType": "String",
                      "StringValue": "order.created"},
    },
)
# ✅ All required attributes present — delivered

Who It Helps

The same graph, three different jobs.

Writing a handler is one use. The graph is just as useful for onboarding onto a service you did not build, reviewing someone else's pull request, or auditing an account you inherited.

Software engineer

Shipping the feature in front of you

Your first week on an unfamiliar service

get_infra_overview → get_graph_summary

Ask "what does checkout actually touch?" and get the blast radius back: every table, queue, and topic it reaches, and which Lambda sits behind each API route. No reading 40 Terraform files, no clicking through six console tabs.

Writing a query against a 200-table database

get_table_schema

Pull schemas for the three tables you need — columns, types, primary keys, and the foreign keys that give you the join path. The rest of the database never enters the context window.

Triage without leaving the editor

get_log_errors + get_queue_details

A queue is backing up. Is the consumer stuck or is the Lambda being throttled? oldestMessageAgeSec and recentThrottles answer it in one question, before you open CloudWatch.

Onboarding onto a service →

Principal engineer

Raising the floor for everyone else

The IAM policy nobody remembered to update

analyze_function

Run it on the handler in the pull request: what it reaches, what triggers it, and missingPermissions — the services the code calls that its execution role does not allow. Found in review instead of at 3am.

Make the standard enforce itself

infrawise check --fail-on high

A queue with no DLQ, a bucket with no encryption, a Lambda still on default memory — the build fails on the pull request. The convention stops depending on whoever happens to review it.

Know every consumer before you change the contract

get_graph_summary + get_topic_details

Before renaming a column or a topic, list every function that queries the table and every producer and consumer of the topic — mapped from real code, not from tribal memory.

Reviewing a pull request →

Architect

The estate, not the endpoint

Find the infrastructure nobody declared

IaC drift findings

Two lists worth having before any audit: resources running in the account with no Terraform, CloudFormation, or CDK definition behind them, and definitions that were never deployed at all.

One security posture sweep, not six

infrawise analyze

Public S3 buckets, unencrypted queues, secrets with rotation switched off, publicly accessible RDS instances, cache clusters without transit encryption — one report, severity-ranked, across every service at once.

A cost pass that arrives before the bill

cost signals

Provisioned-capacity DynamoDB tables, 3 GB Lambdas that have never once throttled, cache clusters carrying more nodes than they need — surfaced as advisory signals you can act on this month.

Auditing an inherited account →

Quick Start

Up and running in 60 seconds.

Terminal
$ npm install -g infrawise

$ infrawise start --claude

✔ Scanning AWS services…
✔ Scanning databases…
✔ Scanning IaC files…
✔ Running 37 analyzers…

✔ 22 MCP tools ready
✔ .mcp.json written
✔ Open Claude Code in this directory

12 findings — 3 high, 6 medium, 3 low

How It Works

Five steps. One command.

1Scan

Reads AWS services, databases, and IaC files statically — no agents, no polling.

2Build the graph

Constructs a typed graph of every node and edge: tables, queues, lambdas, topics, buckets.

3Analyze39 rule-based analyzers

Rule-based analyzers flag missing indexes, absent DLQs, default Lambda memory, and more.

4Serve via MCP22 tools

Exposes the graph and findings as 22 MCP tools your editor can query during generation.

5AI writes correct code

Right GSI name, right event shape, right DLQ config — grounded in your actual infrastructure.

Works With Your Editor

Drop-in for every AI coding tool.

Standard MCP protocol. No plugins, no extensions, no lock-in.

Claude Code
Cursor
VS Code
Any MCP client

Claude Code reads .mcp.json automatically — just run infrawise start and open your editor.

Full setup guide →

Architecture

How Infrawise connects to your tools.

Infrawise architecture: Your Infrastructure & Code → Adapters → Graph Engine → 37 Analyzers → Cache → MCP Server → AI Coding Assistants YOUR INFRASTRUCTURE & CODE INFRAWISE SERVE AI CODING ASSISTANTS D → A L → A L2 → A S → A P → A M → A T → A C → A A → G G → AN AN → CA CA → MCP MCP → CC MCP → CU MCP → MC DYNAMODB LAMBDA · SQS · SNS API GATEWAY · RDS EVENTBRIDGE COGNITO · KINESIS MSK · ELASTICACHE CLOUDFRONT SECRETS MANAGER · SSM CLOUDWATCH POSTGRESQL · MYSQL MONGODB TERRAFORM · CDK CLOUDFORMATION TYPESCRIPT / JS PYTHON ADAPTERS GRAPH ENGINE 37 ANALYZERS CACHE MCP SERVER LOCALHOST:3000/MCP CLAUDE CODE CURSOR ANY MCP CLIENT

Ready to go deeper?

Full configuration reference, all CLI flags, and all 22 MCP tools documented with inputs, return shapes, and usage patterns.

View full docs →