mcp-aws-manager 0.3.9 → 0.4.1
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 +736 -37
- package/README_KO.md +903 -48
- package/bin/lib/enterprise-controls.js +353 -0
- package/bin/lib/integrations.js +730 -0
- package/bin/lib/mcp-server-core.js +5199 -0
- package/bin/lib/output-presentation.js +601 -0
- package/bin/mcp-aws-manager-mcp.js +104 -1158
- package/bin/mcp-aws-manager.js +9670 -752
- package/package.json +54 -7
- package/schemas/mcp-tool-response.schema.json +58 -0
- package/scripts/check-utf8.js +73 -0
- package/scripts/e2e-aws-scenarios.js +350 -0
- package/scripts/smoke-clients.js +178 -0
- package/AWS_SSO_SETUP_GUIDE.md +0 -133
- package/AWS_SSO_SETUP_GUIDE_KO.md +0 -70
- package/IMPLEMENTATION_INTEGRATIONS.md +0 -124
- package/MCP_CLIENT_SETUP.md +0 -107
- package/MCP_CLIENT_SETUP_KO.md +0 -107
- package/MCP_DIFFERENTIATION.md +0 -39
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# mcp-aws-manager
|
|
1
|
+
# mcp-aws-manager
|
|
2
2
|
|
|
3
3
|
AWS operations CLI + MCP stdio server (SSM-first).
|
|
4
4
|
|
|
@@ -15,37 +15,118 @@ mcp-aws-manager discover --profiles default --no-progress
|
|
|
15
15
|
|
|
16
16
|
## What It Does
|
|
17
17
|
|
|
18
|
-
- Multi-service inventory: EC2, Lambda, ALB/NLB, ASG, RDS, ElastiCache, Route53
|
|
18
|
+
- Multi-service inventory: EC2, Lambda, ALB/NLB, ASG, RDS, ElastiCache, Route53, VPC/Subnet/SecurityGroup, ECS, S3, IAM, KMS, CloudWatch, CloudTrail, Config, Secrets Manager, ECR, DynamoDB, SNS, EventBridge, SQS, ACM, Kinesis, MSK, Budgets, Cost Anomaly, EBS, EFS, EKS, API Gateway (REST/v2), CloudFront, WAF, Shield, Step Functions, CloudWatch Logs, X-Ray, Inspector2, Redshift, OpenSearch, Organizations, ControlTower
|
|
19
19
|
- SSM state visibility: managed/online status
|
|
20
|
+
- Domain analysis pipeline: IaC drift, CI/CD signals, backup/DR posture, security posture, FinOps cost signals, application layer health, incident severity recommendation
|
|
20
21
|
- Optional runtime snapshot and SSM remediation
|
|
21
|
-
-
|
|
22
|
+
- Mutate surface extension: EC2 + ECS + ASG + RDS + EKS controlled change tools
|
|
23
|
+
- Policy-aware routing: mode/surface/schema-tier selection for safer defaults
|
|
24
|
+
- Multi-account scaling controls: Organizations AssumeRole fan-out + profile/region sharding
|
|
25
|
+
- Manual fallback mode: JSON/CSV server list + PEM SSH/ProxyJump/Bastion runtime snapshot (when AWS auth is unavailable)
|
|
22
26
|
- Human-in-the-loop retry flow via `ACTION_REQUIRED`
|
|
23
27
|
- Internal-only execution path (AWS SDK + AWS CLI)
|
|
28
|
+
- Presentation layer controls: output profile presets, section/field projection, and client-aware default layout
|
|
29
|
+
- Persistent governance log + topology/relationship JSON artifacts
|
|
30
|
+
- Optional incident escalation webhook dispatch with local incident payload artifact
|
|
31
|
+
|
|
32
|
+
## When To Use This Project
|
|
33
|
+
|
|
34
|
+
Use `mcp-aws-manager` when you need an operations workflow MCP, not just generic AWS API access.
|
|
35
|
+
|
|
36
|
+
- Choose this project for deterministic inventory/runtime/remediation loops.
|
|
37
|
+
- Choose this project when `ACTION_REQUIRED` guidance and operator artifacts are required.
|
|
38
|
+
- For broad ad-hoc AWS API control only, an umbrella API-style AWS MCP may be enough.
|
|
39
|
+
|
|
40
|
+
See detailed comparison and product boundaries in:
|
|
41
|
+
|
|
42
|
+
- `docs/MCP_DIFFERENTIATION.md`
|
|
43
|
+
|
|
44
|
+
## Quick Comparison
|
|
45
|
+
|
|
46
|
+
| Selection Point | `mcp-aws-manager` | Umbrella API-style AWS MCP |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| Primary goal | Deterministic operations workflow (inventory/runtime/remediation) | Broad ad-hoc API/tool access |
|
|
49
|
+
| Tool exposure model | Fixed gateway 3-tool (`capabilities_summary`, `capabilities_detail`, `gateway_execute`) | Many direct service/action tools |
|
|
50
|
+
| Change safety | Built-in confirmation/policy gates for mutate paths | Depends on each tool/server policy |
|
|
51
|
+
| Response contract | Normalized (`ok/summary/records/requiredActions/meta`) | Varies by implementation |
|
|
52
|
+
| Best fit | Reproducible ops loops with operator guidance | Exploratory or wide API probing |
|
|
53
|
+
|
|
54
|
+
For full rationale and boundaries, see `docs/MCP_DIFFERENTIATION.md` and `docs/MCP_DIFFERENTIATION_KO.md`.
|
|
24
55
|
|
|
25
56
|
## API Coverage Snapshot
|
|
26
57
|
|
|
27
58
|
- AWS API total: no fixed official single number, but the action surface is on the order of tens of thousands across services (and continuously expanding).
|
|
28
59
|
- Current implementation scope is not "all AWS APIs".
|
|
29
|
-
- AWS SDK service clients used: `
|
|
30
|
-
- AWS SDK operation calls used: `
|
|
60
|
+
- AWS SDK service clients used: `49`
|
|
61
|
+
- AWS SDK operation calls used: `95`
|
|
31
62
|
- AWS CLI commands used: `1` (`aws sso login --profile <profile>`)
|
|
63
|
+
- Note: enterprise controls (policy gate/rollback/governance verification) remain in place while inventory coverage has been expanded.
|
|
32
64
|
|
|
33
|
-
Current
|
|
65
|
+
Current 95 AWS SDK operations:
|
|
34
66
|
|
|
35
67
|
- STS: `GetCallerIdentity`
|
|
36
|
-
- EC2: `DescribeRegions`, `DescribeInstances`, `StartInstances`, `StopInstances`, `RebootInstances`, `DescribeIamInstanceProfileAssociations`, `AssociateIamInstanceProfile`, `ReplaceIamInstanceProfileAssociation`
|
|
37
|
-
- SSM: `DescribeInstanceInformation`, `SendCommand`, `GetCommandInvocation`
|
|
68
|
+
- EC2: `DescribeRegions`, `DescribeInstances`, `DescribeVpcs`, `DescribeSubnets`, `DescribeSecurityGroups`, `StartInstances`, `StopInstances`, `RebootInstances`, `DescribeIamInstanceProfileAssociations`, `AssociateIamInstanceProfile`, `ReplaceIamInstanceProfileAssociation`
|
|
69
|
+
- SSM: `DescribeInstanceInformation`, `DescribeParameters`, `SendCommand`, `GetCommandInvocation`
|
|
38
70
|
- Lambda: `ListFunctions`
|
|
39
71
|
- ELBv2: `DescribeLoadBalancers`, `DescribeTargetGroups`
|
|
40
|
-
- Auto Scaling: `DescribeAutoScalingGroups`
|
|
41
|
-
- RDS: `DescribeDBInstances`
|
|
72
|
+
- Auto Scaling: `DescribeAutoScalingGroups`, `SetDesiredCapacity`
|
|
73
|
+
- RDS: `DescribeDBInstances`, `StartDBInstance`, `StopDBInstance`, `RebootDBInstance`
|
|
42
74
|
- ElastiCache: `DescribeCacheClusters`
|
|
43
75
|
- Route53: `ListHostedZones`, `ListResourceRecordSets`
|
|
76
|
+
- ECS: `ListClusters`, `DescribeClusters`, `ListServices`, `DescribeServices`, `UpdateService`
|
|
77
|
+
- S3: `ListBuckets`, `GetBucketLocation`
|
|
78
|
+
- IAM: `ListRoles`
|
|
79
|
+
- KMS: `ListKeys`, `DescribeKey`
|
|
80
|
+
- CloudWatch: `DescribeAlarms`
|
|
81
|
+
- CloudTrail: `DescribeTrails`
|
|
82
|
+
- AWS Config: `DescribeConfigurationRecorders`, `DescribeConfigurationRecorderStatus`, `DescribeDeliveryChannels`, `DescribeConfigRules`, `DescribeComplianceByConfigRule`
|
|
83
|
+
- Secrets Manager: `ListSecrets`
|
|
84
|
+
- ECR: `DescribeRepositories`
|
|
85
|
+
- DynamoDB: `ListTables`, `DescribeTable`
|
|
86
|
+
- SNS: `ListTopics`
|
|
87
|
+
- EventBridge: `ListEventBuses`
|
|
88
|
+
- SQS: `ListQueues`, `GetQueueAttributes`
|
|
89
|
+
- ACM: `ListCertificates`, `DescribeCertificate`
|
|
90
|
+
- Kinesis: `ListStreams`, `DescribeStreamSummary`
|
|
91
|
+
- MSK: `ListClustersV2`
|
|
92
|
+
- AWS Budgets: `DescribeBudgets`
|
|
93
|
+
- EBS: `DescribeVolumes`
|
|
94
|
+
- EFS: `DescribeFileSystems`
|
|
95
|
+
- EKS: `ListClusters`, `DescribeCluster`, `DescribeNodegroup`, `UpdateNodegroupConfig`
|
|
96
|
+
- API Gateway (REST): `GetRestApis`
|
|
97
|
+
- API Gateway v2: `GetApis`
|
|
98
|
+
- CloudFront: `ListDistributions`
|
|
99
|
+
- WAFv2: `ListWebACLs`
|
|
100
|
+
- Shield: `ListProtections`
|
|
101
|
+
- Step Functions: `ListStateMachines`
|
|
102
|
+
- CloudWatch Logs: `DescribeLogGroups`
|
|
103
|
+
- X-Ray: `GetGroups`
|
|
104
|
+
- Inspector2: `ListFindings`
|
|
105
|
+
- Redshift: `DescribeClusters`
|
|
106
|
+
- OpenSearch: `ListDomainNames`, `DescribeDomain`
|
|
107
|
+
- Organizations: `ListAccounts`
|
|
108
|
+
- ControlTower: `ListLandingZones`
|
|
109
|
+
- CloudFormation: `DescribeStacks`
|
|
110
|
+
- CodePipeline: `ListPipelines`, `ListPipelineExecutions`
|
|
111
|
+
- CodeBuild: `ListProjects`, `ListBuildsForProject`, `BatchGetBuilds`
|
|
112
|
+
- CodeDeploy: `ListApplications`, `ListDeploymentGroups`, `ListDeployments`, `BatchGetDeployments`
|
|
113
|
+
- AWS Backup: `ListBackupPlans`, `ListProtectedResources`
|
|
114
|
+
- SecurityHub: `GetFindings`
|
|
115
|
+
- GuardDuty: `ListDetectors`, `ListFindings`
|
|
116
|
+
- Cost Explorer: `GetCostAndUsage`, `GetAnomalies`, `GetSavingsPlansUtilization`, `GetReservationCoverage`
|
|
44
117
|
|
|
45
118
|
## Binaries
|
|
46
119
|
|
|
47
120
|
- CLI: `mcp-aws-manager`
|
|
48
|
-
- MCP stdio server: `mcp-aws-manager-mcp`
|
|
121
|
+
- MCP stdio server (single-entry; default: `--surface all`): `mcp-aws-manager-mcp`
|
|
122
|
+
|
|
123
|
+
`mcp-aws-manager-mcp` uses gateway routing with selectable surface scope:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
mcp-aws-manager-mcp --surface all
|
|
127
|
+
mcp-aws-manager-mcp --surface readonly
|
|
128
|
+
mcp-aws-manager-mcp --surface mutate
|
|
129
|
+
```
|
|
49
130
|
|
|
50
131
|
## Agent-Assisted First-Time Setup
|
|
51
132
|
|
|
@@ -58,6 +139,23 @@ npm.cmd install -g mcp-aws-manager@latest
|
|
|
58
139
|
mcp-aws-manager
|
|
59
140
|
```
|
|
60
141
|
|
|
142
|
+
Bootstrap registers the default single MCP server for detected clients:
|
|
143
|
+
|
|
144
|
+
- `mcp-aws-manager` (single-entry, `--surface all`)
|
|
145
|
+
- Runtime command is auto-resolved for host stability.
|
|
146
|
+
- Windows priority: absolute `mcp-aws-manager-mcp.cmd`
|
|
147
|
+
- macOS/Linux priority: absolute `mcp-aws-manager-mcp` binary
|
|
148
|
+
- Fallback: `node <installed-package>/bin/mcp-aws-manager-mcp.js`
|
|
149
|
+
- Last fallback (ephemeral npx context): pinned `npx -y -p mcp-aws-manager@<version> mcp-aws-manager-mcp`
|
|
150
|
+
|
|
151
|
+
Optional explicit registration:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
mcp-aws-manager setup
|
|
155
|
+
mcp-aws-manager setup --clients codex,claude
|
|
156
|
+
mcp-aws-manager setup --clients cursor,windsurf,antigravity
|
|
157
|
+
```
|
|
158
|
+
|
|
61
159
|
2. Health check:
|
|
62
160
|
|
|
63
161
|
```bash
|
|
@@ -97,6 +195,17 @@ GUI report is generated by default (auto path: workspace/home `aws-inventory.htm
|
|
|
97
195
|
mcp-aws-manager discover --profiles default --no-progress
|
|
98
196
|
```
|
|
99
197
|
|
|
198
|
+
GUI includes:
|
|
199
|
+
- summary cards (records/services/profiles/regions/EC2/SSM/public-IP/issues)
|
|
200
|
+
- tab view (`Report`, `Diagrams`, `Evidence`, `Inventory`)
|
|
201
|
+
- detailed markdown report (`report.md`) with per-resource-type sections
|
|
202
|
+
- topology diagram (Profile -> Region -> Type -> Resource)
|
|
203
|
+
- relationship diagram (DNS / TargetGroup-ALB / ASG heuristic links)
|
|
204
|
+
- focused server/resource selector with per-resource detail and focused relation diagram (`focus.svg`)
|
|
205
|
+
- evidence view and export (`evidence.json`)
|
|
206
|
+
- diagram export (`diagram.drawio`, `topology.svg`, `relationship.svg`)
|
|
207
|
+
- downloaded artifacts include generation timestamp in filename (for example `report-20260304-113000.md`)
|
|
208
|
+
|
|
100
209
|
Custom path / open behavior:
|
|
101
210
|
|
|
102
211
|
```bash
|
|
@@ -105,6 +214,69 @@ mcp-aws-manager discover --profiles default --html-out ./inventory.html --open-h
|
|
|
105
214
|
|
|
106
215
|
By default, HTML open is enabled. Use `--no-open-html` to disable.
|
|
107
216
|
|
|
217
|
+
### Manual MCP Client Configuration (Fallback)
|
|
218
|
+
|
|
219
|
+
Use this only when automatic `bootstrap/setup` registration is unavailable.
|
|
220
|
+
|
|
221
|
+
1) Local repository (development):
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"mcpServers": {
|
|
226
|
+
"mcp-aws-manager": {
|
|
227
|
+
"command": "node",
|
|
228
|
+
"args": [
|
|
229
|
+
"<repo>/bin/mcp-aws-manager-mcp.js",
|
|
230
|
+
"--surface",
|
|
231
|
+
"all"
|
|
232
|
+
],
|
|
233
|
+
"cwd": "<repo>"
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
2) Global npm install (manual fallback):
|
|
240
|
+
|
|
241
|
+
Windows (recommended):
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"mcpServers": {
|
|
246
|
+
"mcp-aws-manager": {
|
|
247
|
+
"command": "C:\\Users\\<user>\\AppData\\Roaming\\npm\\mcp-aws-manager-mcp.cmd",
|
|
248
|
+
"args": ["--surface", "all"]
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
macOS/Linux:
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"mcpServers": {
|
|
259
|
+
"mcp-aws-manager": {
|
|
260
|
+
"command": "mcp-aws-manager-mcp",
|
|
261
|
+
"args": ["--surface", "all"]
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
3) `npx` (without global install):
|
|
268
|
+
|
|
269
|
+
```json
|
|
270
|
+
{
|
|
271
|
+
"mcpServers": {
|
|
272
|
+
"mcp-aws-manager": {
|
|
273
|
+
"command": "npx",
|
|
274
|
+
"args": ["-y", "-p", "mcp-aws-manager", "mcp-aws-manager-mcp", "--surface", "all"]
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
108
280
|
## User Confirmation Required
|
|
109
281
|
|
|
110
282
|
These are normally the only manual steps (agent-guided):
|
|
@@ -113,29 +285,67 @@ These are normally the only manual steps (agent-guided):
|
|
|
113
285
|
- IAM permission approval in organization account
|
|
114
286
|
- For EC2 runtime visibility: attach `AmazonSSMManagedInstanceCore` and keep SSM Agent/network healthy
|
|
115
287
|
|
|
288
|
+
Agent retry loop (recommended):
|
|
289
|
+
|
|
290
|
+
1. Execute tool call.
|
|
291
|
+
2. If `requiresUserAction=false`, summarize and finish.
|
|
292
|
+
3. If `requiresUserAction=true`, present one `requiredActions[]` item and ask user to complete it.
|
|
293
|
+
4. When user confirms completion, retry using `guidance.retryTool` + `guidance.retryArgs`.
|
|
294
|
+
5. Repeat until `requiresUserAction=false`.
|
|
295
|
+
|
|
116
296
|
## MCP Tool Usage
|
|
117
297
|
|
|
118
|
-
Run MCP server:
|
|
298
|
+
Run single-entry MCP server (default: `--surface all`):
|
|
119
299
|
|
|
120
300
|
```bash
|
|
121
301
|
mcp-aws-manager-mcp
|
|
122
302
|
```
|
|
123
303
|
|
|
124
|
-
|
|
304
|
+
Choose exposure profile:
|
|
305
|
+
|
|
306
|
+
- `mcp-aws-manager-mcp --surface all|readonly|mutate` (gateway-only)
|
|
307
|
+
|
|
308
|
+
Gateway model (`tools/list`) exposes exactly 3 tools:
|
|
309
|
+
|
|
310
|
+
- `capabilities_summary`
|
|
311
|
+
- `capabilities_detail`
|
|
312
|
+
- `gateway_execute`
|
|
313
|
+
|
|
314
|
+
Gateway call flow:
|
|
315
|
+
|
|
316
|
+
1. Call `capabilities_summary` to receive operation categories and `operationId` list.
|
|
317
|
+
2. Call `capabilities_detail` with one `operationId` to inspect execution contract.
|
|
318
|
+
3. Call `gateway_execute` with `{ "operationId": "...", "args": { ... } }`.
|
|
319
|
+
|
|
320
|
+
Typical `operationId` families:
|
|
125
321
|
|
|
126
|
-
- `
|
|
127
|
-
- `ec2_start_instances`
|
|
128
|
-
- `
|
|
129
|
-
- `ec2_reboot_instances`
|
|
130
|
-
- `ec2_apply_instance_profile`
|
|
131
|
-
- `mcp_aws_discover_cli_help`
|
|
322
|
+
- Discovery: `discover.aws_inventory_basic`, `discover.aws_inventory_advanced`, `discover.aws_inventory_summary`, `discover.aws_inventory_detail`, `discover.list_bedrock_endpoints`, `discover.list_sagemaker_endpoints`.
|
|
323
|
+
- Mutation: `mutate.ec2_start_instances`, `mutate.ec2_stop_instances`, `mutate.ec2_reboot_instances`, `mutate.ec2_apply_instance_profile`, `mutate.ec2_rollback_last_change`, `mutate.ecs_update_service_desired_count`, `mutate.asg_set_desired_capacity`, `mutate.rds_start_instances`, `mutate.rds_stop_instances`, `mutate.rds_reboot_instances`, `mutate.eks_update_nodegroup_scaling`.
|
|
324
|
+
- Governance/System: `governance.verify_chain`, `system.get_server_runtime`, `system.cli_help`.
|
|
132
325
|
|
|
133
|
-
|
|
326
|
+
Gateway execute examples:
|
|
134
327
|
|
|
135
|
-
-
|
|
136
|
-
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
328
|
+
- Discovery summary: `{ "operationId": "discover.aws_inventory_summary", "args": { "profiles": ["default"], "regions": ["ap-southeast-1"] } }`
|
|
329
|
+
- Discovery detail: `{ "operationId": "discover.aws_inventory_detail", "args": { "profiles": ["default"], "regions": ["ap-southeast-1"], "resourceTypes": ["ec2"], "limit": 50 } }`
|
|
330
|
+
- AI/ML read: `{ "operationId": "discover.list_bedrock_endpoints", "args": { "profile": "default", "region": "us-east-1", "metricWindowMinutes": 60 } }`
|
|
331
|
+
- Mutation: `{ "operationId": "mutate.ec2_start_instances", "args": { "profile": "default", "region": "ap-southeast-1", "instanceIds": ["i-123"], "userConfirmation": "yes" } }`
|
|
332
|
+
|
|
333
|
+
Discover operation notes:
|
|
334
|
+
|
|
335
|
+
- `discover.aws_inventory_basic` uses a compact input schema.
|
|
336
|
+
- `discover.aws_inventory_advanced` exposes full inventory/runtime options.
|
|
337
|
+
- `discover.aws_inventory_summary` is summary-first and returns selector hints.
|
|
338
|
+
- `discover.aws_inventory_detail` returns filtered/paged detailed records (`resourceTypes`, `resourceIds`, `offset`, `limit`).
|
|
339
|
+
- Output layout options are supported: `outputProfile`, `sections`, `includeFields`, `excludeFields`, `rendererTemplate`.
|
|
340
|
+
- Routing/control options are supported: `mode`, `schemaTier`, `userConfirmation`, `profileShard`, `regionShard`, `orgRoleName`, `orgAccountIds`, `orgIncludeAllAccounts`, `orgMaxAccounts`, `enterprisePolicyPath`, `approvalTicket`, `changeReason`.
|
|
341
|
+
- Evidence/output artifact options are supported: `topologyOutPath`, `relationshipsOutPath`, `governanceLogPath`, `verifyGovernanceChain`, `incidentWebhookUrl`, `incidentWebhookTimeoutMs`, `incidentWebhookAuthHeader`, `incidentWebhookToken`, `incidentOutPath`.
|
|
342
|
+
- `workingDirectory` is checked against allowlist roots (`cwd`, home, and optional `MCP_AWS_ALLOWED_WORKDIRS`).
|
|
343
|
+
- Structured JSON logs are emitted to stderr; control verbosity with `LOG_LEVEL=error|warn|info|debug` (default: `info`).
|
|
344
|
+
|
|
345
|
+
Runtime introspection:
|
|
346
|
+
|
|
347
|
+
- In gateway mode, use `gateway_execute` with `operationId: "system.get_server_runtime"`.
|
|
348
|
+
- Runtime payload includes current surface, exposed operations/tools, confirmation policy, and response contract metadata.
|
|
139
349
|
|
|
140
350
|
Example tool args:
|
|
141
351
|
|
|
@@ -143,9 +353,38 @@ Example tool args:
|
|
|
143
353
|
{
|
|
144
354
|
"profiles": ["default"],
|
|
145
355
|
"regions": ["ap-northeast-2"],
|
|
356
|
+
"profileShard": { "index": 1, "total": 2 },
|
|
357
|
+
"regionShard": { "index": 1, "total": 3 },
|
|
358
|
+
"orgRoleName": "OrganizationAccountAccessRole",
|
|
359
|
+
"orgIncludeAllAccounts": false,
|
|
360
|
+
"orgAccountIds": ["111111111111", "222222222222"],
|
|
361
|
+
"orgMaxAccounts": 25,
|
|
146
362
|
"includeLambda": true,
|
|
363
|
+
"includeIac": true,
|
|
364
|
+
"includeCicd": true,
|
|
365
|
+
"includeBackupDr": true,
|
|
366
|
+
"includeSecurity": true,
|
|
367
|
+
"includeFinops": true,
|
|
368
|
+
"includeApplication": true,
|
|
369
|
+
"includeIncident": true,
|
|
370
|
+
"mode": "observe",
|
|
371
|
+
"schemaTier": "advanced",
|
|
147
372
|
"publicOnly": true,
|
|
148
373
|
"runtimeSnapshot": true,
|
|
374
|
+
"outputProfile": "operator",
|
|
375
|
+
"sections": ["overview", "runtime", "application", "actions"],
|
|
376
|
+
"includeFields": ["resourceType", "resourceId", "state", "ssmOnline", "runtimeSnapshotStatus"],
|
|
377
|
+
"excludeFields": ["runtimeSnapshotOutput"],
|
|
378
|
+
"clientProfile": "codex",
|
|
379
|
+
"rendererTemplate": "compact",
|
|
380
|
+
"userConfirmation": "yes",
|
|
381
|
+
"topologyOutPath": "C:\\tmp\\topology.json",
|
|
382
|
+
"relationshipsOutPath": "C:\\tmp\\relationships.json",
|
|
383
|
+
"governanceLogPath": "C:\\tmp\\governance.jsonl",
|
|
384
|
+
"incidentWebhookUrl": "https://example.com/hooks/oncall",
|
|
385
|
+
"incidentWebhookAuthHeader": "Authorization",
|
|
386
|
+
"incidentWebhookToken": "Bearer ***",
|
|
387
|
+
"incidentOutPath": "C:\\tmp\\incident.json",
|
|
149
388
|
"htmlOutPath": "C:\\tmp\\inventory.html",
|
|
150
389
|
"openHtml": true,
|
|
151
390
|
"manualServerListPath": "C:\\tmp\\servers.csv",
|
|
@@ -169,6 +408,42 @@ Common `ACTION_REQUIRED` codes:
|
|
|
169
408
|
- `SSM_ROLE_OR_AGENT_REQUIRED`
|
|
170
409
|
- `INSTANCE_HAS_PROFILE`
|
|
171
410
|
- `IAM_PROFILE_ASSOCIATION_FAILED`
|
|
411
|
+
- `CHANGE_CONFIRMATION_REQUIRED`
|
|
412
|
+
- `CHANGE_NOT_CONFIRMED`
|
|
413
|
+
- `APPROVAL_TICKET_REQUIRED`
|
|
414
|
+
- `APPROVAL_TICKET_INVALID`
|
|
415
|
+
- `CHANGE_REASON_REQUIRED`
|
|
416
|
+
- `ENTERPRISE_POLICY_NOT_FOUND`
|
|
417
|
+
- `ENTERPRISE_POLICY_INVALID`
|
|
418
|
+
- `ENTERPRISE_POLICY_BLOCKED_ACTION`
|
|
419
|
+
- `ENTERPRISE_POLICY_DISCOVER_REMEDIATION_BLOCKED`
|
|
420
|
+
- `ENTERPRISE_POLICY_BLOCKED_PROFILE`
|
|
421
|
+
- `ENTERPRISE_POLICY_BLOCKED_REGION`
|
|
422
|
+
- `ENTERPRISE_POLICY_BATCH_TOO_LARGE`
|
|
423
|
+
- `INCIDENT_WEBHOOK_DISPATCH_FAILED`
|
|
424
|
+
- `GOVERNANCE_LOG_WRITE_FAILED`
|
|
425
|
+
- `GOVERNANCE_CHAIN_BROKEN`
|
|
426
|
+
- `GOVERNANCE_LOG_NOT_FOUND`
|
|
427
|
+
- `GOVERNANCE_LOG_INVALID_JSON`
|
|
428
|
+
- `GOVERNANCE_CHAIN_HASH_MISMATCH`
|
|
429
|
+
- `GOVERNANCE_CHAIN_PREV_HASH_MISMATCH`
|
|
430
|
+
- `IAC_CLOUDFORMATION_PERMISSION_REQUIRED`
|
|
431
|
+
- `CICD_CODEPIPELINE_PERMISSION_REQUIRED`
|
|
432
|
+
- `CICD_CODEBUILD_PERMISSION_REQUIRED`
|
|
433
|
+
- `CICD_CODEDEPLOY_PERMISSION_REQUIRED`
|
|
434
|
+
- `BACKUP_PERMISSION_REQUIRED`
|
|
435
|
+
- `BACKUP_COVERAGE_REVIEW_REQUIRED`
|
|
436
|
+
- `SECURITY_POSTURE_PERMISSION_REQUIRED`
|
|
437
|
+
- `SECURITY_CONFIG_PERMISSION_REQUIRED`
|
|
438
|
+
- `SECURITY_INSPECTOR2_PERMISSION_REQUIRED`
|
|
439
|
+
- `SECURITY_ACM_PERMISSION_REQUIRED`
|
|
440
|
+
- `SECURITY_ACM_CERT_EXPIRING`
|
|
441
|
+
- `FINOPS_COST_EXPLORER_PERMISSION_REQUIRED`
|
|
442
|
+
- `INCIDENT_ESCALATION_RECOMMENDED`
|
|
443
|
+
- `WORKING_DIRECTORY_INVALID`
|
|
444
|
+
- `WORKING_DIRECTORY_NOT_FOUND`
|
|
445
|
+
- `WORKING_DIRECTORY_NOT_DIRECTORY`
|
|
446
|
+
- `WORKING_DIRECTORY_NOT_ALLOWED`
|
|
172
447
|
- `SSM_RUNCOMMAND_PERMISSION_REQUIRED`
|
|
173
448
|
- `LAMBDA_LIST_PERMISSION_REQUIRED`
|
|
174
449
|
- `ELBV2_LIST_PERMISSION_REQUIRED`
|
|
@@ -176,21 +451,86 @@ Common `ACTION_REQUIRED` codes:
|
|
|
176
451
|
- `RDS_LIST_PERMISSION_REQUIRED`
|
|
177
452
|
- `ELASTICACHE_LIST_PERMISSION_REQUIRED`
|
|
178
453
|
- `ROUTE53_LIST_PERMISSION_REQUIRED`
|
|
454
|
+
- `VPC_LIST_PERMISSION_REQUIRED`
|
|
455
|
+
- `ECS_LIST_PERMISSION_REQUIRED`
|
|
456
|
+
- `S3_LIST_PERMISSION_REQUIRED`
|
|
457
|
+
- `IAM_LIST_PERMISSION_REQUIRED`
|
|
458
|
+
- `KMS_LIST_PERMISSION_REQUIRED`
|
|
459
|
+
- `SNS_LIST_PERMISSION_REQUIRED`
|
|
460
|
+
- `EVENTBRIDGE_LIST_PERMISSION_REQUIRED`
|
|
461
|
+
- `SQS_LIST_PERMISSION_REQUIRED`
|
|
462
|
+
- `ACM_LIST_PERMISSION_REQUIRED`
|
|
463
|
+
- `KINESIS_LIST_PERMISSION_REQUIRED`
|
|
464
|
+
- `MSK_LIST_PERMISSION_REQUIRED`
|
|
465
|
+
- `CLOUDWATCH_LIST_PERMISSION_REQUIRED`
|
|
466
|
+
- `EBS_LIST_PERMISSION_REQUIRED`
|
|
467
|
+
- `EFS_LIST_PERMISSION_REQUIRED`
|
|
468
|
+
- `EKS_LIST_PERMISSION_REQUIRED`
|
|
469
|
+
- `APIGATEWAY_LIST_PERMISSION_REQUIRED`
|
|
470
|
+
- `APIGATEWAYV2_LIST_PERMISSION_REQUIRED`
|
|
471
|
+
- `CLOUDFRONT_LIST_PERMISSION_REQUIRED`
|
|
472
|
+
- `WAF_LIST_PERMISSION_REQUIRED`
|
|
473
|
+
- `SHIELD_LIST_PERMISSION_REQUIRED`
|
|
474
|
+
- `STEPFUNCTIONS_LIST_PERMISSION_REQUIRED`
|
|
475
|
+
- `CLOUDWATCH_LOGS_LIST_PERMISSION_REQUIRED`
|
|
476
|
+
- `XRAY_LIST_PERMISSION_REQUIRED`
|
|
477
|
+
- `INSPECTOR2_LIST_PERMISSION_REQUIRED`
|
|
478
|
+
- `REDSHIFT_LIST_PERMISSION_REQUIRED`
|
|
479
|
+
- `OPENSEARCH_LIST_PERMISSION_REQUIRED`
|
|
480
|
+
- `ORGANIZATIONS_LIST_PERMISSION_REQUIRED`
|
|
481
|
+
- `CONTROLTOWER_LIST_PERMISSION_REQUIRED`
|
|
179
482
|
- `MANUAL_SERVER_LIST_EMPTY`
|
|
180
483
|
- `MANUAL_SERVER_HOST_REQUIRED`
|
|
484
|
+
- `WEB_IDENTITY_CONFIG_REQUIRED`
|
|
485
|
+
- `WEB_IDENTITY_TOKEN_FILE_NOT_FOUND`
|
|
181
486
|
- `PEM_KEY_NOT_FOUND`
|
|
487
|
+
- `BASTION_PEM_KEY_NOT_FOUND`
|
|
182
488
|
- `PEM_MAPPING_REQUIRED`
|
|
183
489
|
- `SSH_CLIENT_NOT_FOUND`
|
|
184
490
|
- `SSH_AUTH_OR_CONNECT_FAILED`
|
|
185
491
|
|
|
492
|
+
`ACTION_REQUIRED` metadata includes:
|
|
493
|
+
|
|
494
|
+
- `severity`
|
|
495
|
+
- `owner`
|
|
496
|
+
- `autoFixable`
|
|
497
|
+
|
|
498
|
+
## Response Contract
|
|
499
|
+
|
|
500
|
+
- Runtime contract fields are included in every tool response:
|
|
501
|
+
- `meta.schemaVersion`
|
|
502
|
+
- `meta.compatibility`
|
|
503
|
+
- `meta.responseType`
|
|
504
|
+
- View envelope (CLI JSON / MCP parsed payload) includes:
|
|
505
|
+
- `outputProfile`
|
|
506
|
+
- `sections`
|
|
507
|
+
- `fields`
|
|
508
|
+
- `view.records`
|
|
509
|
+
- `rawNormalized` (always included for re-processing stability)
|
|
510
|
+
- `schema` / `schemaVersion`
|
|
511
|
+
- Contract schema: `schemas/mcp-tool-response.schema.json`
|
|
512
|
+
- Compatibility policy: `docs/RESPONSE_COMPATIBILITY_POLICY.md`
|
|
513
|
+
|
|
186
514
|
<details>
|
|
187
515
|
<summary>Detailed AWS Auth Setup (SSO vs Access Key)</summary>
|
|
188
516
|
|
|
189
|
-
|
|
517
|
+
Recommended approach:
|
|
518
|
+
|
|
519
|
+
- `SSO (IAM Identity Center)` for human operators (recommended)
|
|
520
|
+
- `Access Key` only as a local fallback when SSO is unavailable
|
|
521
|
+
- For CI/CD automation, prefer IAM Role/OIDC over long-lived user keys
|
|
522
|
+
|
|
523
|
+
Why SSO is preferred:
|
|
524
|
+
|
|
525
|
+
- Avoids storing long-lived keys on local machines
|
|
526
|
+
- Makes MFA/session-expiry behavior consistent
|
|
527
|
+
- Improves centralized access revocation and auditability
|
|
190
528
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
-
|
|
529
|
+
Prerequisites:
|
|
530
|
+
|
|
531
|
+
- AWS CLI v2
|
|
532
|
+
- IAM Identity Center configured in the organization account
|
|
533
|
+
- Target account + permission set assignment completed
|
|
194
534
|
|
|
195
535
|
SSO setup:
|
|
196
536
|
|
|
@@ -200,13 +540,202 @@ aws sso login --profile default
|
|
|
200
540
|
aws sts get-caller-identity --profile default
|
|
201
541
|
```
|
|
202
542
|
|
|
203
|
-
Access key setup (
|
|
543
|
+
Access key setup (fallback):
|
|
204
544
|
|
|
205
545
|
```bash
|
|
206
546
|
aws configure --profile default
|
|
207
547
|
aws sts get-caller-identity --profile default
|
|
208
548
|
```
|
|
209
549
|
|
|
550
|
+
OIDC/WebIdentity setup (CI/CD or Kubernetes):
|
|
551
|
+
|
|
552
|
+
```bash
|
|
553
|
+
export AWS_ROLE_ARN=arn:aws:iam::123456789012:role/oidc-workload-role
|
|
554
|
+
export AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
|
555
|
+
aws sts get-caller-identity
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
CLI option equivalent:
|
|
559
|
+
|
|
560
|
+
```bash
|
|
561
|
+
mcp-aws-manager discover \
|
|
562
|
+
--auth-mode web-identity \
|
|
563
|
+
--web-identity-role-arn arn:aws:iam::123456789012:role/oidc-workload-role \
|
|
564
|
+
--web-identity-token-file /var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
Quick checks:
|
|
568
|
+
|
|
569
|
+
```bash
|
|
570
|
+
aws configure list-profiles
|
|
571
|
+
aws configure list --profile default
|
|
572
|
+
aws ec2 describe-regions --profile default
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Frequent errors:
|
|
576
|
+
|
|
577
|
+
- `Missing the following required SSO configuration values`
|
|
578
|
+
Re-run `aws configure sso --profile default` and complete all prompts.
|
|
579
|
+
- `Unable to locate credentials`
|
|
580
|
+
SSO session expired or credentials are missing. Run `aws sso login --profile default` or reconfigure access keys.
|
|
581
|
+
- `AccessDenied` / `not authorized`
|
|
582
|
+
The profile is valid, but IAM permission set/policy is insufficient for the requested API.
|
|
583
|
+
|
|
584
|
+
</details>
|
|
585
|
+
|
|
586
|
+
<details>
|
|
587
|
+
<summary>AWS Access Path Setup (Profile / SSO / OIDC WebIdentity)</summary>
|
|
588
|
+
|
|
589
|
+
Auth modes:
|
|
590
|
+
|
|
591
|
+
- `auto` (default): uses profile by default, but can switch to WebIdentity when token+role are provided.
|
|
592
|
+
- `profile`: always uses AWS profile credentials (`fromIni`).
|
|
593
|
+
- `web-identity`: always uses OIDC/WebIdentity token path (`fromTokenFile`).
|
|
594
|
+
|
|
595
|
+
Recommended selection:
|
|
596
|
+
|
|
597
|
+
- Human operator workstation: `profile` + SSO login.
|
|
598
|
+
- CI/CD or Kubernetes workload identity: `web-identity`.
|
|
599
|
+
- Mixed environments: keep `auto` and pass explicit fields when needed.
|
|
600
|
+
|
|
601
|
+
Profile/SSO path:
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
aws configure sso --profile prod-admin
|
|
605
|
+
aws sso login --profile prod-admin
|
|
606
|
+
mcp-aws-manager discover --profiles prod-admin --regions us-east-1 --auth-mode profile
|
|
607
|
+
```
|
|
608
|
+
|
|
609
|
+
WebIdentity path:
|
|
610
|
+
|
|
611
|
+
```bash
|
|
612
|
+
export AWS_ROLE_ARN=arn:aws:iam::123456789012:role/oidc-workload-role
|
|
613
|
+
export AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
|
|
614
|
+
mcp-aws-manager discover --auth-mode web-identity --regions us-east-1
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
Gateway/mutation and AI-read input fields:
|
|
618
|
+
|
|
619
|
+
- `authMode`
|
|
620
|
+
- `webIdentityRoleArn`
|
|
621
|
+
- `webIdentityTokenFile`
|
|
622
|
+
- `webIdentitySessionName` (optional)
|
|
623
|
+
|
|
624
|
+
Input precedence:
|
|
625
|
+
|
|
626
|
+
- explicit tool input/CLI option
|
|
627
|
+
- `MCP_AWS_WEB_IDENTITY_*`
|
|
628
|
+
- `AWS_ROLE_ARN` / `AWS_WEB_IDENTITY_TOKEN_FILE`
|
|
629
|
+
|
|
630
|
+
Common auth-related ACTION_REQUIRED:
|
|
631
|
+
|
|
632
|
+
- `WEB_IDENTITY_CONFIG_REQUIRED`
|
|
633
|
+
- `WEB_IDENTITY_TOKEN_FILE_NOT_FOUND`
|
|
634
|
+
- `AWS_CREDENTIALS_REQUIRED`
|
|
635
|
+
|
|
636
|
+
</details>
|
|
637
|
+
|
|
638
|
+
<details>
|
|
639
|
+
<summary>Server Internal Access Path Setup (SSM / PEM SSH / ProxyJump / Bastion)</summary>
|
|
640
|
+
|
|
641
|
+
Runtime snapshot route selection:
|
|
642
|
+
|
|
643
|
+
- AWS-managed EC2 (`manualInput=false`): SSM RunCommand path.
|
|
644
|
+
- Manual server list (`manualInput=true`): SSH path.
|
|
645
|
+
- SSH path uses:
|
|
646
|
+
- `ssh-pem` (direct key)
|
|
647
|
+
- `ssh-proxyjump` (`--ssh-proxy-jump`)
|
|
648
|
+
- `ssh-bastion` (`--ssh-bastion-*`, internally via ProxyCommand)
|
|
649
|
+
|
|
650
|
+
Manual list + direct PEM example:
|
|
651
|
+
|
|
652
|
+
```bash
|
|
653
|
+
mcp-aws-manager discover \
|
|
654
|
+
--manual-server-list ./servers.json \
|
|
655
|
+
--pem-paths ~/.ssh/target.pem \
|
|
656
|
+
--runtime-snapshot
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
Manual list + ProxyJump example:
|
|
660
|
+
|
|
661
|
+
```bash
|
|
662
|
+
mcp-aws-manager discover \
|
|
663
|
+
--manual-server-list ./servers.json \
|
|
664
|
+
--pem-paths ~/.ssh/target.pem \
|
|
665
|
+
--ssh-proxy-jump ec2-user@bastion.example.com \
|
|
666
|
+
--runtime-snapshot
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
Manual list + Bastion key split example:
|
|
670
|
+
|
|
671
|
+
```bash
|
|
672
|
+
mcp-aws-manager discover \
|
|
673
|
+
--manual-server-list ./servers.json \
|
|
674
|
+
--pem-paths ~/.ssh/target.pem \
|
|
675
|
+
--ssh-bastion-host bastion.example.com \
|
|
676
|
+
--ssh-bastion-user ec2-user \
|
|
677
|
+
--ssh-bastion-port 22 \
|
|
678
|
+
--ssh-bastion-pem-path ~/.ssh/bastion.pem \
|
|
679
|
+
--runtime-snapshot
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
Manual server JSON fields (optional per host):
|
|
683
|
+
|
|
684
|
+
- `host`/`publicIp`/`privateIp`/`publicDns`
|
|
685
|
+
- `sshUser`, `sshPort`, `pemPath`
|
|
686
|
+
- `proxyJump` or `sshProxyJump`
|
|
687
|
+
- `bastionHost`, `bastionUser`, `bastionPort`, `bastionPemPath`
|
|
688
|
+
|
|
689
|
+
Common access-path ACTION_REQUIRED:
|
|
690
|
+
|
|
691
|
+
- `MANUAL_SERVER_HOST_REQUIRED`
|
|
692
|
+
- `PEM_MAPPING_REQUIRED`
|
|
693
|
+
- `BASTION_PEM_KEY_NOT_FOUND`
|
|
694
|
+
- `SSH_AUTH_OR_CONNECT_FAILED`
|
|
695
|
+
|
|
696
|
+
</details>
|
|
697
|
+
|
|
698
|
+
<details>
|
|
699
|
+
<summary>Integration Connector Management (No-Code)</summary>
|
|
700
|
+
|
|
701
|
+
State file default:
|
|
702
|
+
|
|
703
|
+
- `~/.mcp-aws-manager/integrations.json`
|
|
704
|
+
|
|
705
|
+
List/show:
|
|
706
|
+
|
|
707
|
+
```bash
|
|
708
|
+
mcp-aws-manager integration list
|
|
709
|
+
mcp-aws-manager integration show
|
|
710
|
+
```
|
|
711
|
+
|
|
712
|
+
Configure + enable:
|
|
713
|
+
|
|
714
|
+
```bash
|
|
715
|
+
mcp-aws-manager integration configure pagerduty --set routingKey=XXXX --enable
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
Policy pack:
|
|
719
|
+
|
|
720
|
+
```bash
|
|
721
|
+
mcp-aws-manager integration policy show
|
|
722
|
+
mcp-aws-manager integration policy set strict_change
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
Doctor:
|
|
726
|
+
|
|
727
|
+
```bash
|
|
728
|
+
mcp-aws-manager integration doctor
|
|
729
|
+
mcp-aws-manager integration doctor --check-live --timeout-ms 8000
|
|
730
|
+
```
|
|
731
|
+
|
|
732
|
+
Discover-time overrides:
|
|
733
|
+
|
|
734
|
+
- `--integration-config <path>`
|
|
735
|
+
- `--integration-timeout-ms <n>`
|
|
736
|
+
- `--policy-pack <balanced|strict_change|readonly_only>`
|
|
737
|
+
- `--policy-override`
|
|
738
|
+
|
|
210
739
|
</details>
|
|
211
740
|
|
|
212
741
|
<details>
|
|
@@ -214,6 +743,12 @@ aws sts get-caller-identity --profile default
|
|
|
214
743
|
|
|
215
744
|
- `--profiles <a,b,c>`
|
|
216
745
|
- `--regions <a,b,c>`
|
|
746
|
+
- `--profile-shard <index/total>`
|
|
747
|
+
- `--region-shard <index/total>`
|
|
748
|
+
- `--org-role-name <role-name>`
|
|
749
|
+
- `--org-account-ids <a,b,c>`
|
|
750
|
+
- `--org-include-all-accounts`
|
|
751
|
+
- `--org-max-accounts <n>`
|
|
217
752
|
- `--instance-ids <id1,id2>`
|
|
218
753
|
- `--include-lambda`
|
|
219
754
|
- `--include-ec2` / `--no-ec2`
|
|
@@ -222,12 +757,77 @@ aws sts get-caller-identity --profile default
|
|
|
222
757
|
- `--include-rds` / `--no-include-rds`
|
|
223
758
|
- `--include-elasticache` / `--no-include-elasticache`
|
|
224
759
|
- `--include-route53` / `--no-include-route53`
|
|
760
|
+
- `--include-vpc` / `--no-include-vpc`
|
|
761
|
+
- `--include-ecs` / `--no-include-ecs`
|
|
762
|
+
- `--include-s3` / `--no-include-s3`
|
|
763
|
+
- `--include-iam` / `--no-include-iam`
|
|
764
|
+
- `--include-kms` / `--no-include-kms`
|
|
765
|
+
- `--include-cloudwatch` / `--no-include-cloudwatch`
|
|
766
|
+
- `--include-cloudtrail` / `--no-include-cloudtrail`
|
|
767
|
+
- `--include-config` / `--no-include-config`
|
|
768
|
+
- `--include-secrets` / `--no-include-secrets`
|
|
769
|
+
- `--include-parameter-store` / `--no-include-parameter-store`
|
|
770
|
+
- `--include-ecr` / `--no-include-ecr`
|
|
771
|
+
- `--include-dynamodb` / `--no-include-dynamodb`
|
|
772
|
+
- `--include-sns` / `--no-include-sns`
|
|
773
|
+
- `--include-eventbridge` / `--no-include-eventbridge`
|
|
774
|
+
- `--include-sqs` / `--no-include-sqs`
|
|
775
|
+
- `--include-acm` / `--no-include-acm`
|
|
776
|
+
- `--include-kinesis` / `--no-include-kinesis`
|
|
777
|
+
- `--include-msk` / `--no-include-msk`
|
|
778
|
+
- `--include-budgets` / `--no-include-budgets`
|
|
779
|
+
- `--include-cost-anomaly` / `--no-include-cost-anomaly`
|
|
780
|
+
- `--include-ebs` / `--no-include-ebs`
|
|
781
|
+
- `--include-efs` / `--no-include-efs`
|
|
782
|
+
- `--include-eks` / `--no-include-eks`
|
|
783
|
+
- `--include-apigateway` / `--no-include-apigateway`
|
|
784
|
+
- `--include-apigatewayv2` / `--no-include-apigatewayv2`
|
|
785
|
+
- `--include-cloudfront` / `--no-include-cloudfront`
|
|
786
|
+
- `--include-waf` / `--no-include-waf`
|
|
787
|
+
- `--include-shield` / `--no-include-shield`
|
|
788
|
+
- `--include-step-functions` / `--no-include-step-functions`
|
|
789
|
+
- `--include-cloudwatch-logs` / `--no-include-cloudwatch-logs`
|
|
790
|
+
- `--include-xray` / `--no-include-xray`
|
|
791
|
+
- `--include-inspector2` / `--no-include-inspector2`
|
|
792
|
+
- `--include-redshift` / `--no-include-redshift`
|
|
793
|
+
- `--include-opensearch` / `--no-include-opensearch`
|
|
794
|
+
- `--include-organizations` / `--no-include-organizations`
|
|
795
|
+
- `--include-controltower` / `--no-include-controltower`
|
|
796
|
+
- `--include-iac` / `--no-include-iac`
|
|
797
|
+
- `--include-cicd` / `--no-include-cicd`
|
|
798
|
+
- `--include-backup-dr` / `--no-include-backup-dr`
|
|
799
|
+
- `--include-security` / `--no-include-security`
|
|
800
|
+
- `--include-finops` / `--no-include-finops`
|
|
801
|
+
- `--include-application` / `--no-include-application`
|
|
802
|
+
- `--include-incident` / `--no-include-incident`
|
|
803
|
+
- `--incident-force-escalate`
|
|
804
|
+
- `--mode <auto|observe|change|incident>`
|
|
805
|
+
- `--schema-tier <auto|basic|advanced>`
|
|
806
|
+
- `--auth-mode <auto|profile|web-identity>`
|
|
807
|
+
- `--web-identity-role-arn <arn>`
|
|
808
|
+
- `--web-identity-token-file <path>`
|
|
809
|
+
- `--web-identity-session-name <name>`
|
|
810
|
+
- `--user-confirmation <yes|no>`
|
|
811
|
+
- `--enterprise-policy <path>`
|
|
812
|
+
- `--approval-ticket <id>`
|
|
813
|
+
- `--change-reason <text>`
|
|
814
|
+
- `--policy-pack <balanced|strict_change|readonly_only>`
|
|
815
|
+
- `--policy-override`
|
|
816
|
+
- `--integration-config <path>`
|
|
817
|
+
- `--integration-timeout-ms <n>`
|
|
225
818
|
- `--public-only`
|
|
226
819
|
- `--managed-only`
|
|
227
820
|
- `--auto-remediate-ssm`
|
|
228
821
|
- `--ssm-instance-profile-name <name>` / `--ssm-instance-profile-arn <arn>`
|
|
229
822
|
- `--allow-replace-profile`
|
|
230
823
|
- `--runtime-snapshot` / `--no-runtime-snapshot`
|
|
824
|
+
- `--snapshot-profile <quick|standard|deep>`
|
|
825
|
+
- `--output-profile <operator|audit|exec|finops|incident|compact|auditable>`
|
|
826
|
+
- `--sections <overview,inventory,runtime,application,iac,cicd,backupDr,security,finops,incident,actions,governance>`
|
|
827
|
+
- `--include-fields <a,b,c>`
|
|
828
|
+
- `--exclude-fields <a,b,c>`
|
|
829
|
+
- `--client-profile <codex|claude|cursor|operator>`
|
|
830
|
+
- `--renderer-template <default|compact>`
|
|
231
831
|
- `--snapshot-timeout <seconds>`
|
|
232
832
|
- `--snapshot-concurrency <n>`
|
|
233
833
|
- `--snapshot-max-kb <n>`
|
|
@@ -236,15 +836,74 @@ aws sts get-caller-identity --profile default
|
|
|
236
836
|
- `--ssh-user <name>`
|
|
237
837
|
- `--ssh-port <port>`
|
|
238
838
|
- `--ssh-connect-timeout <seconds>`
|
|
839
|
+
- `--ssh-proxy-jump <user@host[:port][,hop2...]>`
|
|
840
|
+
- `--ssh-bastion-host <host>`
|
|
841
|
+
- `--ssh-bastion-user <user>`
|
|
842
|
+
- `--ssh-bastion-port <port>`
|
|
843
|
+
- `--ssh-bastion-pem-path <path>`
|
|
239
844
|
- `--html-out <path>` (default: auto path, workspace/home `aws-inventory.html`)
|
|
845
|
+
- `--topology-out <path>` (default: auto path, workspace/home `aws-topology.json`)
|
|
846
|
+
- `--relationships-out <path>` (default: auto path, workspace/home `aws-relationships.json`)
|
|
847
|
+
- `--governance-log <path>` (default: auto path, workspace/home `mcp-aws-governance-log.jsonl`)
|
|
848
|
+
- `--verify-governance-chain` / `--no-verify-governance-chain`
|
|
849
|
+
- `--incident-webhook-url <url>`
|
|
850
|
+
- `--incident-webhook-timeout-ms <n>`
|
|
851
|
+
- `--incident-webhook-auth-header <name>`
|
|
852
|
+
- `--incident-webhook-token <token>`
|
|
853
|
+
- `--incident-out <path>`
|
|
240
854
|
- `--open-html` (open; default is on)
|
|
241
855
|
- `--no-open-html` (disable auto-open)
|
|
242
856
|
- `--auto-sso-login` / `--no-auto-sso-login`
|
|
243
|
-
- `--format <json|csv>`
|
|
857
|
+
- `--format <json|csv|markdown|html>`
|
|
244
858
|
- `--out <path>`
|
|
245
859
|
|
|
246
860
|
</details>
|
|
247
861
|
|
|
862
|
+
Governance verification command:
|
|
863
|
+
|
|
864
|
+
```bash
|
|
865
|
+
mcp-aws-manager governance verify --governance-log ./mcp-aws-governance-log.jsonl --strict
|
|
866
|
+
```
|
|
867
|
+
|
|
868
|
+
## Client Smoke Automation
|
|
869
|
+
|
|
870
|
+
Run cross-client smoke checks:
|
|
871
|
+
|
|
872
|
+
```bash
|
|
873
|
+
npm run smoke:clients
|
|
874
|
+
npm run smoke:clients:strict
|
|
875
|
+
node scripts/smoke-clients.js --clients codex,claude --json-out ./smoke-report.json
|
|
876
|
+
```
|
|
877
|
+
|
|
878
|
+
- Default mode reports status and exits `0`.
|
|
879
|
+
- `--strict` exits non-zero when any selected client is not healthy.
|
|
880
|
+
|
|
881
|
+
## AWS E2E Scenario Automation
|
|
882
|
+
|
|
883
|
+
Run real-account scenario checks (permission/region/recovery path):
|
|
884
|
+
|
|
885
|
+
```bash
|
|
886
|
+
npm run e2e:aws -- --profile default --region us-east-1 --out-dir ./.e2e-aws
|
|
887
|
+
npm run e2e:aws:strict -- --profile default --region us-east-1
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
Current scenarios include:
|
|
891
|
+
|
|
892
|
+
- baseline observe contract (`schema` + `rawNormalized`)
|
|
893
|
+
- invalid region handling
|
|
894
|
+
- mutable confirmation gate (`missing` / `yes`)
|
|
895
|
+
- incident escalation artifact generation
|
|
896
|
+
- enterprise policy approval-ticket enforcement
|
|
897
|
+
- governance chain verification (`governance verify --strict`)
|
|
898
|
+
|
|
899
|
+
The E2E runner validates:
|
|
900
|
+
|
|
901
|
+
- baseline observe flow (JSON contract + `rawNormalized`)
|
|
902
|
+
- invalid region handling path
|
|
903
|
+
- mutable discover confirmation gate (`CHANGE_CONFIRMATION_REQUIRED`)
|
|
904
|
+
- confirmation-approved path (`--user-confirmation yes`)
|
|
905
|
+
- forced incident escalation payload artifact (`INCIDENT_ESCALATION_RECOMMENDED`)
|
|
906
|
+
|
|
248
907
|
<details>
|
|
249
908
|
<summary>Permission Checklist</summary>
|
|
250
909
|
|
|
@@ -257,22 +916,62 @@ Minimum permissions depend on enabled features.
|
|
|
257
916
|
- RDS: `rds:DescribeDBInstances`
|
|
258
917
|
- ElastiCache: `elasticache:DescribeCacheClusters`
|
|
259
918
|
- Route53: `route53:ListHostedZones`, `route53:ListResourceRecordSets`
|
|
919
|
+
- VPC/Subnet/SecurityGroup: `ec2:DescribeVpcs`, `ec2:DescribeSubnets`, `ec2:DescribeSecurityGroups`
|
|
920
|
+
- ECS: `ecs:ListClusters`, `ecs:DescribeClusters`, `ecs:ListServices`, `ecs:DescribeServices`
|
|
921
|
+
- S3: `s3:ListAllMyBuckets`, `s3:GetBucketLocation`
|
|
922
|
+
- IAM: `iam:ListRoles`
|
|
923
|
+
- KMS: `kms:ListKeys`, `kms:DescribeKey`
|
|
924
|
+
- ACM: `acm:ListCertificates`, `acm:DescribeCertificate`
|
|
925
|
+
- Kinesis: `kinesis:ListStreams`, `kinesis:DescribeStreamSummary`
|
|
926
|
+
- MSK: `kafka:ListClustersV2`
|
|
927
|
+
- CloudWatch: `cloudwatch:DescribeAlarms`
|
|
928
|
+
- EBS: `ec2:DescribeVolumes`
|
|
929
|
+
- EFS: `elasticfilesystem:DescribeFileSystems`
|
|
930
|
+
- EKS: `eks:ListClusters`, `eks:DescribeCluster`
|
|
931
|
+
- API Gateway: `apigateway:GET`
|
|
932
|
+
- CloudFront: `cloudfront:ListDistributions`
|
|
933
|
+
- WAFv2: `wafv2:ListWebACLs`
|
|
934
|
+
- Shield: `shield:ListProtections`
|
|
935
|
+
- Step Functions: `states:ListStateMachines`
|
|
936
|
+
- CloudWatch Logs: `logs:DescribeLogGroups`
|
|
937
|
+
- X-Ray: `xray:GetGroups`
|
|
938
|
+
- Inspector2: `inspector2:ListFindings`
|
|
939
|
+
- Redshift: `redshift:DescribeClusters`
|
|
940
|
+
- OpenSearch: `es:ListDomainNames`, `es:DescribeDomain`
|
|
941
|
+
- Organizations: `organizations:ListAccounts`
|
|
942
|
+
- ControlTower: `controltower:ListLandingZones`
|
|
943
|
+
- CI/CD analysis: `codepipeline:ListPipelines`, `codepipeline:ListPipelineExecutions`, `codebuild:ListProjects`, `codebuild:ListBuildsForProject`, `codebuild:BatchGetBuilds`, `codedeploy:ListApplications`, `codedeploy:ListDeploymentGroups`, `codedeploy:ListDeployments`, `codedeploy:BatchGetDeployments`
|
|
944
|
+
- Security analysis extension: `config:DescribeConfigRules`, `config:DescribeComplianceByConfigRule`, `acm:ListCertificates`, `acm:DescribeCertificate`
|
|
945
|
+
- FinOps analysis extension: `ce:GetSavingsPlansUtilization`, `ce:GetReservationCoverage`
|
|
260
946
|
- Runtime snapshot: `ssm:SendCommand`, `ssm:GetCommandInvocation`, `ssm:DescribeInstanceInformation`
|
|
261
947
|
- Auto-remediation: `ec2:AssociateIamInstanceProfile`, optional `ec2:ReplaceIamInstanceProfileAssociation`, `iam:PassRole`
|
|
948
|
+
- Mutate tool extension:
|
|
949
|
+
- ECS: `ecs:DescribeServices`, `ecs:UpdateService`
|
|
950
|
+
- ASG: `autoscaling:SetDesiredCapacity`
|
|
951
|
+
- RDS: `rds:StartDBInstance`, `rds:StopDBInstance`, `rds:RebootDBInstance`
|
|
952
|
+
- EKS: `eks:DescribeNodegroup`, `eks:UpdateNodegroupConfig`
|
|
953
|
+
- Organizations fan-out (optional): `organizations:ListAccounts`, `sts:AssumeRole` (target account role trust required)
|
|
262
954
|
|
|
263
955
|
Manual fallback mode:
|
|
264
956
|
|
|
265
957
|
- Inventory uses user-provided server list file (no AWS API required)
|
|
266
|
-
- Runtime snapshot
|
|
958
|
+
- Runtime snapshot supports direct PEM SSH and ProxyJump/Bastion routing (`--ssh-proxy-jump`, `--ssh-bastion-*`)
|
|
267
959
|
|
|
268
960
|
</details>
|
|
269
961
|
|
|
270
962
|
## Related Docs
|
|
271
963
|
|
|
964
|
+
Document status:
|
|
965
|
+
- Canonical (keep synchronized with implementation): `README.md`, `docs/RESPONSE_COMPATIBILITY_POLICY.md`
|
|
966
|
+
- Reference (detail/positioning): `docs/IMPLEMENTATION_INTEGRATIONS.md`, `docs/MCP_DIFFERENTIATION.md`, `docs/MCP_DIFFERENTIATION_KO.md`, `workflow/AGENT_WORKING_CONTEXT_KO.md`, `docs/RECORDS_FIELD_REFERENCE_KO.md`
|
|
967
|
+
|
|
272
968
|
- `README_KO.md`: Korean overview and quick start
|
|
273
|
-
- `
|
|
274
|
-
- `
|
|
275
|
-
- `
|
|
276
|
-
- `
|
|
277
|
-
- `
|
|
278
|
-
- `
|
|
969
|
+
- `docs/IMPLEMENTATION_INTEGRATIONS.md`: API/CLI integration inventory
|
|
970
|
+
- `docs/MCP_DIFFERENTIATION.md`: differentiation from existing AWS MCP servers
|
|
971
|
+
- `docs/MCP_DIFFERENTIATION_KO.md`: Korean differentiation guide and selection criteria
|
|
972
|
+
- `workflow/AGENT_WORKING_CONTEXT_KO.md`: agent-focused implementation invariants, gateway loop, and operation catalog quick reference
|
|
973
|
+
- `docs/RECORDS_FIELD_REFERENCE_KO.md`: full `records[]` field reference (292 fields)
|
|
974
|
+
- `docs/RESPONSE_COMPATIBILITY_POLICY.md`: response schema/version compatibility rules
|
|
975
|
+
- `schemas/mcp-tool-response.schema.json`: canonical tool response JSON schema
|
|
976
|
+
|
|
977
|
+
|