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