Back to search
D
40 /100

Infrawise

Author Sidd27
Scanned 19d ago

MCP server for AWS infrastructure analysis — DynamoDB, Lambda, SQS, PostgreSQL, EventBridge & more.

Versions

0.10.1scored
first seen Jun 30, 2026
0.5.0
first seen Jun 5, 2026
0.6.0
first seen May 19, 2026

Trust breakdown

PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 22

get_infra_overview
annotations: none low

Returns a compact infrastructure snapshot: service counts, all databases, queues, topics, secrets, lambdas, and high-severity findings. Call this first at the start of any database or infrastructure task to understand what services are in scope. Prefer this over get_graph_summary for quick orientation; use get_graph_summary only when you need every node, edge, and finding in full. Also returns a `configured` flag — when false, the server has no infrawise.yaml loaded (e.g. a remotely hosted instance) and all tools return empty results; a `setupHint` explains how to run infrawise locally. Every response (this one included) carries a `dataHealth` block with a fixed shape: `analyzedAt`/`ageSeconds` for when the infrastructure was read, per-source `status`, `iac` for whether cdk.out was synthed since, and `refreshWith`. On this tool `dataHealth.sources` covers every source rather than one tool\'s. A source that is not `ok` means an empty result is "not read", not "none exist".

get_graph_summary
annotations: none low

Returns every node (tables, functions, lambdas, queues, etc.), every edge (query, scan, triggers, publishes_to), and all findings. Use this when you need to trace relationships across multiple services or require the complete finding set — not just high-severity ones. For a quick overview use get_infra_overview instead.

analyze_function
annotations: none low

Analyzes a single named function or Lambda handler for infrastructure issues: which tables it queries, how it queries them (scan vs query), queue publishing, secret access, and the correct event shape for each trigger (SQS, DynamoDB Streams, Kinesis, EventBridge). Call this before writing or reviewing a Lambda handler to get the exact trigger event shape and all findings scoped to this function. Per-file detail (file, accesses, missingPermissions) is returned in `matches`, one entry per source file defining a function with this name. Pass `file` to bind the answer to the one file you are editing: it matches a stored path exactly, or as a trailing fragment on a path-segment boundary, so a bare "orders.ts" resolves against the absolute path the scanner recorded. Matching is case sensitive. When `file` selects exactly one entry, that entry is returned alone with its `accesses`. When several deployed Lambdas link to the same function, `candidateLambdas` names them and `triggers` is absent rather than empty; re-call with `file` if the candidates come from different files. When several files match — with or without `file` — `ambiguous: true` is returned and `accesses` is withheld from every entry; re-call with `file` set to the file you are editing rather than guessing between them. When `file` matches nothing, `fileMatched: false` is returned with `availableFiles` listing the paths that do exist, so you can retry. When no deployed Lambda could be linked to this function, `unresolvedLambdas` names each Lambda that was considered and why it was refused (`no_match`, `multiple_functions`, or `multiple_lambdas` with the colliding names), so an empty `triggers` can be told apart from a function that is not deployed. Returns found: false if the function name was not discovered during analysis.

suggest_gsi
annotations: none low

Generates a ready-to-use DynamoDB GSI definition — index name, partition key, projection type, billing mode — for a given table and attribute. Call this when a query pattern needs an index that does not exist yet, or when the analyzer flags a missing GSI finding. Checks the table's existing indexes first: when one is already keyed on that attribute it returns `alreadyIndexed: true` with the existing index name to use as `IndexName`, instead of proposing a duplicate. Use get_table_schema for the full index list on a table.

postgres_index_suggestions
annotations: none low

Generates the exact CREATE INDEX CONCURRENTLY SQL for a PostgreSQL table column, including a partial index variant and a post-creation ANALYZE reminder. Call this when the analyzer flags a missing index finding or when writing a query that filters on a column without an existing index. Does not verify whether the index already exists.

suggest_mongo_index
annotations: none low

Generates the exact db.collection.createIndex() command for a MongoDB field, plus compound and text index variants and an explain query to verify. Call this when a collection scan is flagged by the analyzer or when writing a query that filters on an unindexed field. Does not check whether the index already exists.

mysql_index_suggestions
annotations: none low

Generates the exact ALTER TABLE ADD INDEX SQL for a MySQL table column, including a composite variant and EXPLAIN guidance to verify the index is used. Call this when the analyzer flags a missing MySQL index or full table scan finding. Does not verify whether the index already exists.

get_queue_details
annotations: none low

Returns all SQS queues with DLQ presence, encryption status, FIFO type (isFifo), visibility timeout, approximate message count, and retention days. When isFifo is true, all SendMessage calls must include a MessageGroupId. Call this when reviewing messaging architecture, investigating a message backlog, checking DLQ coverage, or verifying visibility timeout is set correctly relative to Lambda timeout (should be 6× the Lambda timeout). Use get_infra_overview for a quick queue count only. When runtime signals are enabled, oldestMessageAgeSec reports the age of the oldest message from CloudWatch.

get_topic_details
annotations: none low

Returns all SNS topics with subscription count, encryption status, and filter policies. Filter policies list the message attributes each subscription requires — publishers must include these attributes or messages are silently dropped. Call this before writing any SNS publish code or when reviewing event fan-out patterns.

get_secrets_overview
annotations: none low

Returns all Secrets Manager secrets with rotation status, rotation interval, and referencedKeys — key names (e.g. "password", "apiKey") inferred from application code that parses the secret, never the values. Call this when checking which secrets exist, confirming rotation is enabled before a security review, or before writing code that reads a secret so you use the correct key name instead of guessing.

get_parameter_overview
annotations: none low

Returns all SSM Parameter Store parameters with type (String, SecureString, StringList) and tier (Standard, Advanced). Parameter values are never returned. Call this when checking which config parameters exist for a service or verifying parameter types.

get_lambda_overview
annotations: none low

Returns all Lambda functions with runtime, memory (MB), timeout (sec), environment variable key names (values never returned), and event source triggers with the correct handler event shape for each. Call this when auditing Lambda configuration for default memory (128 MB) or high timeouts, or when you need the trigger event shape for a specific function without running analyze_function. When runtime signals are enabled, recentThrottles and recentErrors report CloudWatch counts for the analysis window. A costSignal note appears when memory is 3008 MB+ and there is no throttling evidence to justify it — no billing API involved, this is a config-level heuristic. A function carrying `unresolvedLink` could not be attributed to one source function: `reason` is `no_match`, `multiple_functions` (candidates are function node ids), or `multiple_lambdas` (candidates are the other Lambda names that normalize to the same key), so analyze_function on its handler will return no triggers for it.

get_eventbridge_details
annotations: none low

Returns all EventBridge rules with name, ENABLED/DISABLED state, schedule expression (rate/cron rules), event pattern (event-driven rules), and target Lambda function names. Call this when checking what schedule or event triggers a Lambda, or when reviewing rule coverage across the account.

get_s3_overview
annotations: none low

Returns all S3 buckets with versioning status, encryption, public access configuration, and security findings. Call this when checking which S3 buckets exist, reviewing bucket security posture, or before writing S3 upload/delete handlers to confirm the bucket name. Do NOT call when you only need a quick infrastructure count — use get_infra_overview for that. Object contents are never included.

get_api_routes
annotations: none low

Returns all API Gateway APIs (REST, HTTP, WebSocket) with their routes, HTTP methods, paths, and the Lambda function each route invokes. Call this before writing any API handler to understand which Lambda handles a route, or when reviewing API surface area and Lambda integration coverage.

get_log_errors
annotations: none low

Returns recent error pattern summaries from CloudWatch log groups: pattern counts and frequencies grouped by log group. Raw log messages are never returned. Use the optional logGroup filter to scope to one group by name substring. Call this when investigating errors or identifying log groups with no retention policy.

get_table_schema
annotations: none low

Returns the full schema for specific tables or collections by name: columns with data types and nullability, primary keys, foreign keys (join paths), indexes, DynamoDB partition/sort keys and billing mode, and MongoDB estimated document counts. Accepts short names ("orders" matches "public.orders") and is case-insensitive. Call this after get_infra_overview when you need column-level detail to write a SQL query, DynamoDB expression, or MongoDB filter for specific tables — instead of pulling every schema with get_graph_summary. Do NOT call for a table inventory; use get_infra_overview for that. Row data is never included. DynamoDB matches include a costSignal note for provisioned-capacity tables.

get_cache_overview
annotations: none low

Returns all ElastiCache clusters with engine, version, node type, node count, in-transit and at-rest encryption status, replication group, and automatic failover state. Call this before writing cache client code (TLS is required when transit encryption is on — rediss:// for Redis) or when reviewing cache availability and security posture. Cached data is never read or included. A costSignal note appears on clusters with more than 3 nodes.

get_cloudfront_overview
annotations: none low

Returns all CloudFront distributions with, per distribution: id, comment, domain name, alias domains, enabled state, origins (type s3 or custom, domain name, and the resolved API Gateway name when the origin is an execute-api endpoint), and every cache behavior with its path pattern, target origin, cache policy name, viewer protocol policy, and allowed methods. Behaviors are listed in CloudFront match order — ordered behaviors first, the default behavior last. Call this to answer which distribution and behavior serves a given path and which origin it hits, before changing a path-based routing rule, or when reviewing edge caching and HTTPS enforcement across a multi-API front door.

get_stream_details
annotations: none low

Returns all Kinesis data streams (status, shard count, retention hours, encryption, capacity mode) and Amazon MSK clusters (state, cluster type, Kafka version, broker count). Call this when writing Kinesis producer or consumer code, checking whether a stream is PROVISIONED or ON_DEMAND before writing PutRecord calls, or reviewing streaming architecture. For Kafka topic-level producer/consumer mappings extracted from application code, use get_topic_details instead.

get_cognito_overview
annotations: none low

Returns all Cognito user pools with MFA configuration and every app client config: allowed auth flows, OAuth flows/scopes, callback URLs, token validity, and whether the client has a secret (SDK auth calls must send SECRET_HASH when true). Client secret values are never returned. Call this before writing any Cognito sign-in, sign-up, or token-refresh code to use the correct auth flow and client settings. Do NOT call to look up users or tokens — infrawise never reads user data.

get_stack_outputs
annotations: none low

Returns all stack outputs and cross-stack exports parsed from local IaC files: Terraform output blocks and CloudFormation/CDK Outputs sections, with name, description, export name, and the raw value expression. Call this when wiring cross-stack references (Fn::ImportValue, terraform_remote_state) or when you need the exported name of a resource defined in another stack. Do NOT call for live resource attributes — outputs come from local IaC files, not the deployed stack. CDK outputs carry `stale: true` with a `staleReason` when their cdk.out template is no longer instantiated in the CDK app or predates the last `cdk synth` — do not rely on a stale export without re-synthesizing.

Permissions 4

network Server uses network capabilities via: fetch()
medium
filesystem Server uses filesystem capabilities via: fs, fs sync ops, open(), os
low
shell Server uses shell capabilities via: child_process, execSync(), spawn(), spawnSync()
high
env_vars Server uses env_vars capabilities via: process.env
low

Scan Findings 78

low
Tool 'get_infra_overview' has no annotations annotation_checker · 100%
low
Tool 'get_graph_summary' has no annotations annotation_checker · 100%
low
Tool 'analyze_function' has no annotations annotation_checker · 100%
low
Tool 'suggest_gsi' has no annotations annotation_checker · 100%
low
Tool 'postgres_index_suggestions' has no annotations annotation_checker · 100%
low
Tool 'suggest_mongo_index' has no annotations annotation_checker · 100%
low
Tool 'mysql_index_suggestions' has no annotations annotation_checker · 100%
low
Tool 'get_queue_details' has no annotations annotation_checker · 100%
low
Tool 'get_topic_details' has no annotations annotation_checker · 100%
low
Tool 'get_secrets_overview' has no annotations annotation_checker · 100%
low
Tool 'get_parameter_overview' has no annotations annotation_checker · 100%
low
Tool 'get_lambda_overview' has no annotations annotation_checker · 100%
low
Tool 'get_eventbridge_details' has no annotations annotation_checker · 100%
low
Tool 'get_s3_overview' has no annotations annotation_checker · 100%
low
Tool 'get_api_routes' has no annotations annotation_checker · 100%
low
Tool 'get_log_errors' has no annotations annotation_checker · 100%
low
Tool 'get_table_schema' has no annotations annotation_checker · 100%
low
Tool 'get_cache_overview' has no annotations annotation_checker · 100%
low
Tool 'get_cloudfront_overview' has no annotations annotation_checker · 100%
low
Tool 'get_stream_details' has no annotations annotation_checker · 100%
low
Tool 'get_cognito_overview' has no annotations annotation_checker · 100%
low
Tool 'get_stack_outputs' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: @modelcontextprotocol/sdk@1.30.0 (GHSA-6qxp-vccf-f47h) dependency_analyzer · 95%
medium
Vulnerable dependency: js-yaml@5.2.2 (GHSA-r3ph-w7gj-g6xm) dependency_analyzer · 95%
medium
Vulnerable dependency: js-yaml@4.1.1 (GHSA-2883-xcg3-v3hh) dependency_analyzer · 95%
medium
Vulnerable dependency: js-yaml@4.1.1 (GHSA-52cp-r559-cp3m) dependency_analyzer · 95%
medium
Vulnerable dependency: js-yaml@4.1.1 (GHSA-5p4m-2wfm-xmqj) dependency_analyzer · 95%
medium
Vulnerable dependency: js-yaml@4.1.1 (GHSA-h67p-54hq-rp68) dependency_analyzer · 95%
medium
Vulnerable dependency: sharp@0.35.4 (GHSA-wq5f-xc86-pv6w) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-3f6p-5ww8-9rcr) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-49j4-86m8-q2jw) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-4rch-2fh8-94vw) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-fpw7-j2hg-69v5) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-mqr2-w7wj-jjgr) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-pmh2-wpjm-fj45) dependency_analyzer · 95%
medium
Vulnerable dependency: mysql2@3.9.0 (GHSA-rgwj-5xj2-c3m3) dependency_analyzer · 95%
info
package.json metadata manifest_parser · 100%
info
Tool: get_infra_overview manifest_parser · 85%
info
Tool: get_graph_summary manifest_parser · 85%
info
Tool: analyze_function manifest_parser · 85%
info
Tool: suggest_gsi manifest_parser · 85%
info
Tool: postgres_index_suggestions manifest_parser · 85%
info
Tool: suggest_mongo_index manifest_parser · 85%
info
Tool: mysql_index_suggestions manifest_parser · 85%
info
Tool: get_queue_details manifest_parser · 85%
info
Tool: get_topic_details manifest_parser · 85%
info
Tool: get_secrets_overview manifest_parser · 85%
info
Tool: get_parameter_overview manifest_parser · 85%
info
Tool: get_lambda_overview manifest_parser · 85%
info
Tool: get_eventbridge_details manifest_parser · 85%
info
Tool: get_s3_overview manifest_parser · 85%
info
Tool: get_api_routes manifest_parser · 85%
info
Tool: get_log_errors manifest_parser · 85%
info
Tool: get_table_schema manifest_parser · 85%
info
Tool: get_cache_overview manifest_parser · 85%
info
Tool: get_cloudfront_overview manifest_parser · 85%
info
Tool: get_stream_details manifest_parser · 85%
info
Tool: get_cognito_overview manifest_parser · 85%
info
Tool: get_stack_outputs manifest_parser · 85%
info
Transport: streamable-http manifest_parser · 80%
info
Required env vars (12) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 70%
low
Permission: filesystem access detected permission_analyzer · 90%
high
Permission: shell access detected permission_analyzer · 95%
low
Permission: env_vars access detected permission_analyzer · 90%
critical
Tool poisoning in 'analyze_function': Cross-tool sequencing directive poisoning · 85%
critical
Tool poisoning in 'get_topic_details': Cross-tool sequencing directive poisoning · 85%
critical
Tool poisoning in 'get_api_routes': Cross-tool sequencing directive poisoning · 85%
critical
Tool poisoning in 'get_table_schema': Cross-tool sequencing directive poisoning · 85%
critical
Tool poisoning in 'get_cache_overview': Cross-tool sequencing directive poisoning · 85%
critical
Tool poisoning in 'get_cognito_overview': Cross-tool sequencing directive poisoning · 85%
info
SBOM generated: 128 components sbom_generator · 100%
critical
Database URL with Password found in Sidd27-infrawise-32e411f/README.md secret_scanner · 85%
critical
Database URL with Password found in Sidd27-infrawise-32e411f/website/src/content/docs/reference/configuration.md secret_scanner · 85%
critical
Database URL with Password found in Sidd27-infrawise-32e411f/website/src/content/docs/getting-started/quick-start.md secret_scanner · 85%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%