aws-mcpBLOCK
AWS MCP server, streamlines AWS SSO login from inside AI assistants
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://yaw.sh/mcp/install?name=AWS&command=npx&args=-y%2C%40yawlabs%2Faws-mcp&env=AWSPROFILE%2CAWSREGION&description=Call%20any%20AWS%20API%20from%20one%20server%20-%20CCAPI%20CRUD%2C%20multi-region%2C%20SSO%20re-login&source=https%3A%2F%2Fgithub.com%2FYawLabs%2Faws-mcp)
One click adds this to your local Yaw MCP config so it's available in every Yaw Terminal session. Or install manually below.
A small AWS MCP for AI assistants: one server, one config entry, SSO re-auth baked in, generic CRUD over 1,300+ resource types, live docs lookup, server-side scripting for batched workflows.
It's an alternative to AWS's official MCP server, not a complement -- both reach any AWS API, so running both hands the model two overlapping ways to do the same thing. (AWS gives the same advice about its own older servers: its setup guide says to remove them "to avoid tool conflicts that can confuse AI agents".) Pick one. They overlap in coverage and differ in shape. The honest comparison:
- [AWS MCP Server](https://docs.aws.amazon.com/agent-toolkit/latest/userguide/getting-started-aws-mcp-server.html) -- AWS's hosted server, GA since May 2026 and part of the Agent Toolkit for AWS. Strong on AWS-team-curated skills, a server-side Python sandbox (
run_script) with days-fresh API coverage, a read-only serverless troubleshooting capability (Lambdadiagnose, recent changes, X-Ray trace summaries), IAM condition keys that tell its calls apart from direct API calls, and per-tool CloudWatch metrics. As of September 2026,run_scriptis its only general-purpose way to call an AWS API -- the single-callcall_awstool has been removed -- so every call, even a one-offdescribe, is a Python script the model writes. The endpoint runs inus-east-1andeu-central-1. Two ways to connect: - OAuth through AWS Sign-in (since July 2026): nothing to install -- your client opens a browser and connec
cb2d983c9f87OBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add aws-mcp -- npx -y @yawlabs/[email protected]
Exposed tools (22)
12 read · 7 write · 3 destructive. Blast radius: 3 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
aws_call | write | Run an arbitrary AWS API operation via the aws CLI. Use kebab-case service and operation names as in |
aws_docs_read | read | Fetch an AWS documentation page and return it as markdown. |
aws_iam_simulate | read | Simulate IAM permissions for a principal: can principal X do actions Y on resources Z? Wraps |
aws_lambda_invoke | write | Invoke a Lambda function synchronously (RequestResponse) and return its response payload plus the DECODED tail of its execution log in one call. Use this instead of aws_call for Lambda invokes: |
aws_list_profiles | read | List AWS profiles configured in ~/.aws/config. Returns profile name, region, and SSO metadata (start URL, region, session name) where set, plus an |
aws_login_complete | read | Block until the SSO login started by aws_login_start finishes (user completed auth in browser, or subprocess exited with error). Returns the new identity on success, or a structured error. |
aws_logs_query | write | Run a CloudWatch Logs Insights query and wait for it to finish -- StartQuery, poll GetQueryResults until the query reaches a terminal status, return the rows -- in ONE call, replacing the three-step start/poll/interpret-status dance you would otherwise write with aws_call. |
aws_logs_tail | read | Fetch the newest CloudWatch Logs events for one log group over the last \ |
aws_metrics_query | read | Query CloudWatch metrics via GetMetricData (the modern multi-metric / expression-capable API, not the legacy get-metric-statistics). Pass |
aws_multi_account | write | Run the same AWS API operation across multiple ACCOUNTS in parallel by assuming the same role name in each. Same shape as aws_call (service, operation, params?, query?, outputFormat?, region?, timeoutMs?) plus |
aws_paginate | read | Fetch one page of a paginated AWS list/describe operation. Identical to aws_call plus |
aws_refresh_if_expiring_soon | read | Proactive SSO token check. If the cached token has fewer than |
aws_resource_create | write | Create an AWS resource via Cloud Control API. Async by default: returns a ProgressEvent with OperationStatus=IN_PROGRESS and a |
aws_resource_delete | destructive | Delete an AWS resource via Cloud Control API. Async by default: returns a ProgressEvent with OperationStatus=IN_PROGRESS and a top-level |
aws_resource_get | read | Read a single AWS resource via Cloud Control API. Covers hundreds of resource types with a CloudFormation schema. |
aws_resource_list | read | List resources of a given type via Cloud Control API, paginated. Returns an array of {identifier, properties}, a |
aws_resource_status | destructive | Poll the status of an async Cloud Control API request (create/update/delete). Pass the |
aws_resource_update | write | Update an AWS resource via Cloud Control API using RFC 6902 JSON Patch. Async by default: returns a ProgressEvent with OperationStatus=IN_PROGRESS and a top-level |
aws_session_clear | destructive | Remove session-set profile and/or region overrides so subsequent calls fall back to env vars / defaults. No args clears both. Pass |
aws_session_get | read | Show the current session |
aws_session_set | write | Set the default AWS profile and/or region for the rest of this MCP session. Subsequent calls to aws_whoami, aws_login_*, and other AWS tools will use these values unless they override explicitly. Use when the user says |
aws_whoami | read | Show the current AWS identity (account, role ARN, user ID) plus SSO token status and time remaining. Use this first to verify auth before running other AWS operations. Returns a structured fix-it message if SSO is expired. |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- declared (6 observation(s))
- Shell
- declared (5 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
const SSH = 'ssh -i ~/.ssh/gh_woods -o IdentitiesOnly=yes';
payload: { password: "hunter2-should-not-leak" },aws_resource_delete, aws_resource_status, aws_session_clear
return new Function(`${pieces}\nreturn runtimePlan;`)() as RuntimePlan;return new Function(`${pieces}\nreturn { pickNewest, floor: OAM_MIN };`)() as {const remedyFor = new Function(
const childEnv = new Function(
const discover = new Function(
: "a cp1252 byte in ~/.aws/config cannot parse where the preferred encoding is UTF-8",
"file://~/.aws/credentials",
"file://$HOME/.aws/credentials",
"file://%USERPROFILE%/.aws/credentials",
const err = new Error("connect ECONNREFUSED 169.254.169.254:80");'\r\naws: [ERROR]: Read timeout on endpoint URL: "http://127.0.0.1:28763/2015-03-31/functions/slow-6000/invocations"\r\n',
'\r\nRead timeout on endpoint URL: "http://127.0.0.1:28841/2015-03-31/functions/slow-4000/invocations?Qualifier=PROD"\r\n',
'\r\naws: [ERROR]: Connect timeout on endpoint URL: "http://192.0.2.1:9/2015-03-31/functions/ok/invocations"\r\n',
'\r\naws: [ERROR]: Connection was closed before we received a valid response from endpoint URL: "http://127.0.0.1:28763/2015-03-31/functions/reset/invocations".\r\n',
const m = READ_TIMEOUT_RE.exec('\r\naws: [ERROR]: Read timeout on endpoint URL: "http://127.0.0.1:28842/"\r\n');@modelcontextprotocol/sdk, @types/node, @types/turndown, @yawlabs/mcp-compliance, esbuild, node-html-parser, postject, turndown
- **The bundled MCP SDK moves from 1.30.0 to 1.32.1** (GHSA-6qxp-vccf-f47h, high: the SDK's OAuth client could send credentials to an authorization server chosen by the MCP server). The SDK is bundled
- **The 0600 on the two files that can hold credentials is verified now rather than assumed, and a filesystem that cannot honour it fails the call instead of leaking.** The `--cli-input-json` params f
- **Blob-typed `params` are always base64.** This is a behavior change for one configuration. With `cli_binary_format = raw-in-base64-out` in your AWS config -- common advice, AWS's own docs suggest i
- **`aws_docs_read` could not open the `index.html` pages `aws_docs_search` hands out.** docs.aws.amazon.com answers every `<path>/index.html` with a 301 to `<path>/`, and the post-redirect check adde
- **A Registry-driven install had no way to offer a profile, so it wrote none.** `server.json` declared no environment variables, so an installer reading the MCP Registry entry had nothing to prompt f
- **`aws_lambda_invoke` could run a function three times and still return nothing.** A function slower than 60 s hit the AWS CLI's default socket read timeout, and the CLI's standard retry mode then s
Gates applied: no_behavioural_pass.
cb2d983c9f87full audit observations/trust-audit/mcp-server/yawlabs__aws-mcp.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | cb2d983c9f87 | BLOCK | D | 69 | first audit |
Questions
What is the aws-mcp MCP server?
AWS MCP server, streamlines AWS SSO login from inside AI assistants
What tools does aws-mcp expose?
22 in total: 12 read-only, 7 that write, and 3 that can delete or overwrite (aws_resource_delete, aws_resource_status, aws_session_clear). Every one is listed on this page with its risk.
Is aws-mcp safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 3 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does aws-mcp need?
It reads AWS_ACCESS_KEY_ID, AWS_CREDENTIAL_EXPIRATION, AWS_SECRET_ACCESS_KEY, AWS_SECURITY_TOKEN, AWS_SESSION_TOKEN, AWS_SHARED_CREDENTIALS_FILE, GH_TOKEN, GITHUB_TOKEN and SSH_KEYGEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does aws-mcp run?
It speaks stdio, so it runs as a local process your client starts. It is published on npm as @yawlabs/aws-mcp at 2.5.2.
How current is this page?
The grade is for one exact copy of the source (cb2d983c9f87), read on 2026-10-11. The repository is watched and re-audited when it changes.