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 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
- - Manual fallback mode: JSON/CSV server list + PEM SSH runtime snapshot (when AWS auth is unavailable)
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: `9`
30
- - AWS SDK operation calls used: `20`
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 20 AWS SDK operations:
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
- Exposed MCP tools:
284
+ Choose exposure profile:
285
+
286
+ - `mcp-aws-manager-mcp --surface all|readonly|mutate` (gateway-only)
125
287
 
126
- - `discover_ec2_with_ssm`
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
- Mutation tool examples:
290
+ - `capabilities_summary`
291
+ - `capabilities_detail`
292
+ - `gateway_execute`
134
293
 
135
- - `ec2_start_instances`: `{ "profile": "default", "region": "ap-southeast-1", "instanceIds": ["i-123"] }`
136
- - `ec2_stop_instances`: `{ "profile": "default", "region": "ap-southeast-1", "instanceIds": ["i-123"], "force": false }`
137
- - `ec2_reboot_instances`: `{ "profile": "default", "region": "ap-southeast-1", "instanceIds": ["i-123"] }`
138
- - `ec2_apply_instance_profile`: `{ "profile": "default", "region": "ap-southeast-1", "instanceId": "i-123", "instanceProfileName": "my-ssm-profile", "allowReplaceProfile": true }`
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
- SSO is recommended because:
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
- - Avoids long-lived access keys on user machines
192
- - Enforces session-based login and MFA more easily
193
- - Improves centralized revoke/audit handling
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 (optional):
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 uses local `ssh` client + PEM key access
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
+