mcp-aws-manager 0.3.9 → 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 +713 -35
- 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 -1158
- package/bin/mcp-aws-manager.js +9465 -747
- 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,6 +190,17 @@ 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
|
|
@@ -105,6 +209,54 @@ mcp-aws-manager discover --profiles default --html-out ./inventory.html --open-h
|
|
|
105
209
|
|
|
106
210
|
By default, HTML open is enabled. Use `--no-open-html` to disable.
|
|
107
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
|
+
|
|
108
260
|
## User Confirmation Required
|
|
109
261
|
|
|
110
262
|
These are normally the only manual steps (agent-guided):
|
|
@@ -113,29 +265,67 @@ These are normally the only manual steps (agent-guided):
|
|
|
113
265
|
- IAM permission approval in organization account
|
|
114
266
|
- For EC2 runtime visibility: attach `AmazonSSMManagedInstanceCore` and keep SSM Agent/network healthy
|
|
115
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
|
+
|
|
116
276
|
## MCP Tool Usage
|
|
117
277
|
|
|
118
|
-
Run MCP server:
|
|
278
|
+
Run single-entry MCP server (default: `--surface all`):
|
|
119
279
|
|
|
120
280
|
```bash
|
|
121
281
|
mcp-aws-manager-mcp
|
|
122
282
|
```
|
|
123
283
|
|
|
124
|
-
|
|
284
|
+
Choose exposure profile:
|
|
285
|
+
|
|
286
|
+
- `mcp-aws-manager-mcp --surface all|readonly|mutate` (gateway-only)
|
|
125
287
|
|
|
126
|
-
|
|
127
|
-
- `ec2_start_instances`
|
|
128
|
-
- `ec2_stop_instances`
|
|
129
|
-
- `ec2_reboot_instances`
|
|
130
|
-
- `ec2_apply_instance_profile`
|
|
131
|
-
- `mcp_aws_discover_cli_help`
|
|
288
|
+
Gateway model (`tools/list`) exposes exactly 3 tools:
|
|
132
289
|
|
|
133
|
-
|
|
290
|
+
- `capabilities_summary`
|
|
291
|
+
- `capabilities_detail`
|
|
292
|
+
- `gateway_execute`
|
|
134
293
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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.
|
|
139
329
|
|
|
140
330
|
Example tool args:
|
|
141
331
|
|
|
@@ -143,9 +333,38 @@ Example tool args:
|
|
|
143
333
|
{
|
|
144
334
|
"profiles": ["default"],
|
|
145
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,
|
|
146
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",
|
|
147
352
|
"publicOnly": true,
|
|
148
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",
|
|
149
368
|
"htmlOutPath": "C:\\tmp\\inventory.html",
|
|
150
369
|
"openHtml": true,
|
|
151
370
|
"manualServerListPath": "C:\\tmp\\servers.csv",
|
|
@@ -169,6 +388,42 @@ Common `ACTION_REQUIRED` codes:
|
|
|
169
388
|
- `SSM_ROLE_OR_AGENT_REQUIRED`
|
|
170
389
|
- `INSTANCE_HAS_PROFILE`
|
|
171
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`
|
|
172
427
|
- `SSM_RUNCOMMAND_PERMISSION_REQUIRED`
|
|
173
428
|
- `LAMBDA_LIST_PERMISSION_REQUIRED`
|
|
174
429
|
- `ELBV2_LIST_PERMISSION_REQUIRED`
|
|
@@ -176,21 +431,86 @@ Common `ACTION_REQUIRED` codes:
|
|
|
176
431
|
- `RDS_LIST_PERMISSION_REQUIRED`
|
|
177
432
|
- `ELASTICACHE_LIST_PERMISSION_REQUIRED`
|
|
178
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`
|
|
179
462
|
- `MANUAL_SERVER_LIST_EMPTY`
|
|
180
463
|
- `MANUAL_SERVER_HOST_REQUIRED`
|
|
464
|
+
- `WEB_IDENTITY_CONFIG_REQUIRED`
|
|
465
|
+
- `WEB_IDENTITY_TOKEN_FILE_NOT_FOUND`
|
|
181
466
|
- `PEM_KEY_NOT_FOUND`
|
|
467
|
+
- `BASTION_PEM_KEY_NOT_FOUND`
|
|
182
468
|
- `PEM_MAPPING_REQUIRED`
|
|
183
469
|
- `SSH_CLIENT_NOT_FOUND`
|
|
184
470
|
- `SSH_AUTH_OR_CONNECT_FAILED`
|
|
185
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
|
+
|
|
186
494
|
<details>
|
|
187
495
|
<summary>Detailed AWS Auth Setup (SSO vs Access Key)</summary>
|
|
188
496
|
|
|
189
|
-
|
|
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:
|
|
504
|
+
|
|
505
|
+
- Avoids storing long-lived keys on local machines
|
|
506
|
+
- Makes MFA/session-expiry behavior consistent
|
|
507
|
+
- Improves centralized access revocation and auditability
|
|
190
508
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
-
|
|
509
|
+
Prerequisites:
|
|
510
|
+
|
|
511
|
+
- AWS CLI v2
|
|
512
|
+
- IAM Identity Center configured in the organization account
|
|
513
|
+
- Target account + permission set assignment completed
|
|
194
514
|
|
|
195
515
|
SSO setup:
|
|
196
516
|
|
|
@@ -200,13 +520,202 @@ aws sso login --profile default
|
|
|
200
520
|
aws sts get-caller-identity --profile default
|
|
201
521
|
```
|
|
202
522
|
|
|
203
|
-
Access key setup (
|
|
523
|
+
Access key setup (fallback):
|
|
204
524
|
|
|
205
525
|
```bash
|
|
206
526
|
aws configure --profile default
|
|
207
527
|
aws sts get-caller-identity --profile default
|
|
208
528
|
```
|
|
209
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
|
+
|
|
210
719
|
</details>
|
|
211
720
|
|
|
212
721
|
<details>
|
|
@@ -214,6 +723,12 @@ aws sts get-caller-identity --profile default
|
|
|
214
723
|
|
|
215
724
|
- `--profiles <a,b,c>`
|
|
216
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>`
|
|
217
732
|
- `--instance-ids <id1,id2>`
|
|
218
733
|
- `--include-lambda`
|
|
219
734
|
- `--include-ec2` / `--no-ec2`
|
|
@@ -222,12 +737,77 @@ aws sts get-caller-identity --profile default
|
|
|
222
737
|
- `--include-rds` / `--no-include-rds`
|
|
223
738
|
- `--include-elasticache` / `--no-include-elasticache`
|
|
224
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>`
|
|
225
798
|
- `--public-only`
|
|
226
799
|
- `--managed-only`
|
|
227
800
|
- `--auto-remediate-ssm`
|
|
228
801
|
- `--ssm-instance-profile-name <name>` / `--ssm-instance-profile-arn <arn>`
|
|
229
802
|
- `--allow-replace-profile`
|
|
230
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>`
|
|
231
811
|
- `--snapshot-timeout <seconds>`
|
|
232
812
|
- `--snapshot-concurrency <n>`
|
|
233
813
|
- `--snapshot-max-kb <n>`
|
|
@@ -236,15 +816,74 @@ aws sts get-caller-identity --profile default
|
|
|
236
816
|
- `--ssh-user <name>`
|
|
237
817
|
- `--ssh-port <port>`
|
|
238
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>`
|
|
239
824
|
- `--html-out <path>` (default: auto path, workspace/home `aws-inventory.html`)
|
|
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>`
|
|
240
834
|
- `--open-html` (open; default is on)
|
|
241
835
|
- `--no-open-html` (disable auto-open)
|
|
242
836
|
- `--auto-sso-login` / `--no-auto-sso-login`
|
|
243
|
-
- `--format <json|csv>`
|
|
837
|
+
- `--format <json|csv|markdown|html>`
|
|
244
838
|
- `--out <path>`
|
|
245
839
|
|
|
246
840
|
</details>
|
|
247
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
|
+
|
|
248
887
|
<details>
|
|
249
888
|
<summary>Permission Checklist</summary>
|
|
250
889
|
|
|
@@ -257,22 +896,61 @@ Minimum permissions depend on enabled features.
|
|
|
257
896
|
- RDS: `rds:DescribeDBInstances`
|
|
258
897
|
- ElastiCache: `elasticache:DescribeCacheClusters`
|
|
259
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`
|
|
260
926
|
- Runtime snapshot: `ssm:SendCommand`, `ssm:GetCommandInvocation`, `ssm:DescribeInstanceInformation`
|
|
261
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)
|
|
262
934
|
|
|
263
935
|
Manual fallback mode:
|
|
264
936
|
|
|
265
937
|
- Inventory uses user-provided server list file (no AWS API required)
|
|
266
|
-
- Runtime snapshot
|
|
938
|
+
- Runtime snapshot supports direct PEM SSH and ProxyJump/Bastion routing (`--ssh-proxy-jump`, `--ssh-bastion-*`)
|
|
267
939
|
|
|
268
940
|
</details>
|
|
269
941
|
|
|
270
942
|
## Related Docs
|
|
271
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
|
+
|
|
272
948
|
- `README_KO.md`: Korean overview and quick start
|
|
273
|
-
- `MCP_CLIENT_SETUP_KO.md`: Korean MCP client registration guide
|
|
274
|
-
- `AWS_SSO_SETUP_GUIDE_KO.md`: Korean AWS auth setup guide
|
|
275
|
-
- `MCP_CLIENT_SETUP.md`: MCP registration and stdio config details
|
|
276
|
-
- `AGENT_GUIDANCE_LOOP_TEMPLATE_KO.md`: agent retry/guidance template
|
|
277
949
|
- `IMPLEMENTATION_INTEGRATIONS.md`: API/CLI integration inventory
|
|
278
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
|
+
|