@yawlabs/aws-mcp 0.9.10 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/dist/index.js +19 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -241,6 +241,41 @@ The token is cached in `~/.aws/sso/cache/<hash>.json` the same way a normal `aws
|
|
|
241
241
|
|
|
242
242
|
SSO tokens live in `~/.aws/sso/cache/` on *your* device. A remote MCP server can't read them. So this is a stdio server, not a hosted one. That's a constraint of AWS SSO, not a limitation of mcp.hosting.
|
|
243
243
|
|
|
244
|
+
## Stability
|
|
245
|
+
|
|
246
|
+
From 1.0 onward this package follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). The 0.x line is the pre-stability tightening phase -- breaking changes are documented in [`CHANGELOG.md`](./CHANGELOG.md) but are not necessarily gated on a major bump.
|
|
247
|
+
|
|
248
|
+
**Stable in 1.x (anything below is a breaking change requiring a major bump):**
|
|
249
|
+
|
|
250
|
+
- **Tool names** -- the 24 tool names listed in the Tools table above will not be renamed or removed.
|
|
251
|
+
- **Tool annotations** -- `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`. These signal to MCP hosts how to gate calls; flipping them silently would break host UIs.
|
|
252
|
+
- **Required input fields** -- the required fields per tool will not change shape or be removed. New *optional* fields may be added.
|
|
253
|
+
- **Success envelope shape per tool** -- the `data` object on `{ok: true, data}` responses, specifically:
|
|
254
|
+
- `aws_call` -> `{command, result}`
|
|
255
|
+
- `aws_paginate` -> `{command, result, nextToken, hasMore}`
|
|
256
|
+
- `aws_multi_region` -> `{service, operation, regionCount, okCount, errorCount, results: [{region, ok, data?, command?, error?, errorKind?}]}`
|
|
257
|
+
- `aws_whoami` -> `{account, userId, arn, profile, region, ssoToken: {expiresAt, minutesLeft, startUrl} | null}`
|
|
258
|
+
- `aws_assume_role` -> `{profile, credentialsPath, expiration, assumedRoleArn, assumedRoleId, sourceProfile, hint}`
|
|
259
|
+
- `aws_login_start` / `aws_refresh_if_expiring_soon` -> `{sessionId, profile, verificationUrl, userCode, instructions, reused?}`
|
|
260
|
+
- `aws_resource_get` -> `{command, typeName, identifier, properties, propertiesRaw?}`
|
|
261
|
+
- `aws_resource_list` -> `{command, typeName, resources: [{identifier, properties}], nextToken, hasMore}`
|
|
262
|
+
- `aws_resource_create` / `_update` / `_delete` / `_status` -> flat-promoted `{command, requestToken, operationStatus, identifier, errorCode, statusMessage, retryAfter, progressEvent}` plus an `awaited: {attempts, elapsedMs}` block when `awaitCompletion: true` was passed
|
|
263
|
+
- `aws_resource_diff` -> `{command, typeName, identifier, before, after, changes, changeCount}`
|
|
264
|
+
- `aws_logs_tail` -> `{command, logGroupName, since, eventCount, events}`
|
|
265
|
+
- `aws_iam_simulate` -> `{command, principalArn, summary: {allowed, denied, total}, results, evaluationResults}`
|
|
266
|
+
- `aws_session_get` -> `{profile, region, profileSource, regionSource}` where `*Source` is `"session" | "env" | "default"`
|
|
267
|
+
- **Error envelope** -- `{ok: false, error: string, rawBody?: string}`. The `error` string is human-readable; its *wording* is best-effort (see below).
|
|
268
|
+
- **`errorKind` enum on `aws_multi_region`** -- `"sso_expired" | "no_creds" | "bad_input" | "spawn_failure" | "timeout" | "output_too_large" | "nonzero_exit"`. New variants may be added (additive); existing ones won't be renamed or repurposed.
|
|
269
|
+
|
|
270
|
+
**Best-effort (may change in a minor or patch):**
|
|
271
|
+
|
|
272
|
+
- **Error message wording.** Strings like "SSO session expired for profile 'X'. Call aws_login_start..." may be retuned for clarity. Anchor on `errorKind` (for `aws_multi_region`) or the structured envelope, not on regex-matching `error` text.
|
|
273
|
+
- **`rawBody`** content -- raw stderr/stdout from the underlying `aws` CLI for diagnostic purposes. Format follows whatever the CLI emits in your installed version.
|
|
274
|
+
- **`command`** strings -- the human-readable command shown alongside results. Argv ordering and the exact redaction-stub format (`<redacted len=N>`) may shift.
|
|
275
|
+
- **Tool *descriptions*** -- the prose surfaced to the model. Tightening these is non-breaking.
|
|
276
|
+
|
|
277
|
+
**Deprecation policy:** breaking a stable shape requires a major bump. A deprecation lands first in a minor (the old shape continues to work and the new shape becomes available alongside it), with a removal scheduled for the next major. Both the deprecation and the removal show up in `CHANGELOG.md`.
|
|
278
|
+
|
|
244
279
|
## License
|
|
245
280
|
|
|
246
281
|
MIT
|
package/dist/index.js
CHANGED
|
@@ -54092,6 +54092,12 @@ var assumeTools = [
|
|
|
54092
54092
|
const sourceProfile = i.sourceProfile || getProfile();
|
|
54093
54093
|
const useRegion = i.region || getRegion();
|
|
54094
54094
|
const targetProfile = resolveTargetProfile({ targetProfile: i.targetProfile, sessionName: i.sessionName });
|
|
54095
|
+
if (!isValidProfileName(sourceProfile)) {
|
|
54096
|
+
return {
|
|
54097
|
+
ok: false,
|
|
54098
|
+
error: `Invalid sourceProfile name '${sourceProfile}'. Must be 1-128 chars from [A-Za-z0-9_+=,.@:-], must not start with '-' or '='. Check the 'sourceProfile' arg or AWS_PROFILE env var.`
|
|
54099
|
+
};
|
|
54100
|
+
}
|
|
54095
54101
|
if (!isValidProfileName(targetProfile)) {
|
|
54096
54102
|
return {
|
|
54097
54103
|
ok: false,
|
|
@@ -56110,7 +56116,7 @@ var resourceTools = [
|
|
|
56110
56116
|
},
|
|
56111
56117
|
{
|
|
56112
56118
|
name: "aws_resource_diff",
|
|
56113
|
-
description: "Dry-run a CCAPI update: fetch the current resource state, simulate applying a JSON Patch in memory, and return before/after plus a flat list of changed paths. No mutation is sent to AWS. Use this before aws_resource_update to verify the patch does what you expect. Supports the add/remove/replace subset of RFC 6902 (covers the vast majority of CCAPI updates); 'move'/'copy'/'test' are
|
|
56119
|
+
description: "Dry-run a CCAPI update: fetch the current resource state, simulate applying a JSON Patch in memory, and return before/after plus a flat list of changed paths. No mutation is sent to AWS. Use this before aws_resource_update to verify the patch does what you expect. Supports the add/remove/replace subset of RFC 6902 (covers the vast majority of CCAPI updates); 'move'/'copy'/'test' are rejected at schema validation -- use aws_resource_update directly if you need those (CCAPI accepts them, this preview tool just doesn't simulate them locally).",
|
|
56114
56120
|
annotations: {
|
|
56115
56121
|
title: "Preview a CCAPI update without applying it",
|
|
56116
56122
|
readOnlyHint: true,
|
|
@@ -56123,12 +56129,21 @@ var resourceTools = [
|
|
|
56123
56129
|
identifier: external_exports3.string().min(1).describe("Primary identifier for the resource."),
|
|
56124
56130
|
patchDocument: external_exports3.array(
|
|
56125
56131
|
external_exports3.object({
|
|
56126
|
-
|
|
56132
|
+
// Diff simulates patches locally via applyJsonPatch; only the
|
|
56133
|
+
// add/remove/replace subset is implemented. Reject the other
|
|
56134
|
+
// three RFC 6902 ops here so the model gets schema-validation
|
|
56135
|
+
// feedback instead of a runtime "not implemented" error
|
|
56136
|
+
// surfaced as a generic "Patch application failed". The
|
|
56137
|
+
// sibling aws_resource_update tool accepts the full op set
|
|
56138
|
+
// because CCAPI does -- only this preview tool is restricted.
|
|
56139
|
+
op: external_exports3.enum(["add", "remove", "replace"]),
|
|
56127
56140
|
path: external_exports3.string(),
|
|
56128
56141
|
value: external_exports3.unknown().optional(),
|
|
56129
56142
|
from: external_exports3.string().optional()
|
|
56130
56143
|
})
|
|
56131
|
-
).min(1).describe(
|
|
56144
|
+
).min(1).describe(
|
|
56145
|
+
"RFC 6902 JSON Patch (add/remove/replace subset). For move/copy/test, use aws_resource_update directly."
|
|
56146
|
+
),
|
|
56132
56147
|
...baseFields
|
|
56133
56148
|
}),
|
|
56134
56149
|
handler: async (input) => {
|
|
@@ -56663,7 +56678,7 @@ var sessionTools = [
|
|
|
56663
56678
|
];
|
|
56664
56679
|
|
|
56665
56680
|
// src/index.ts
|
|
56666
|
-
var version2 = true ? "0.
|
|
56681
|
+
var version2 = true ? "1.0.0" : (await null).createRequire(import.meta.url)("../package.json").version;
|
|
56667
56682
|
var subcommand = process.argv[2];
|
|
56668
56683
|
if (subcommand === "version" || subcommand === "--version") {
|
|
56669
56684
|
console.log(version2);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yawlabs/aws-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"mcpName": "io.github.YawLabs/aws-mcp",
|
|
5
5
|
"description": "AWS MCP server — call any AWS API from AI assistants, with first-class SSO re-login (no more 'browser won't open' dead ends)",
|
|
6
6
|
"license": "MIT",
|