cloudvault-mcp 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +45 -16
  2. package/dist/adapters/azure.d.ts +44 -0
  3. package/dist/adapters/azure.d.ts.map +1 -0
  4. package/dist/adapters/azure.js +393 -0
  5. package/dist/adapters/azure.js.map +1 -0
  6. package/dist/adapters/gcp.d.ts +38 -0
  7. package/dist/adapters/gcp.d.ts.map +1 -0
  8. package/dist/adapters/gcp.js +364 -0
  9. package/dist/adapters/gcp.js.map +1 -0
  10. package/dist/index.js +78 -0
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/providers.d.ts.map +1 -1
  13. package/dist/lib/providers.js +7 -3
  14. package/dist/lib/providers.js.map +1 -1
  15. package/dist/premium/compliance_snapshot.d.ts +23 -0
  16. package/dist/premium/compliance_snapshot.d.ts.map +1 -0
  17. package/dist/premium/compliance_snapshot.js +184 -0
  18. package/dist/premium/compliance_snapshot.js.map +1 -0
  19. package/dist/premium/cost_anomalies.d.ts +22 -0
  20. package/dist/premium/cost_anomalies.d.ts.map +1 -0
  21. package/dist/premium/cost_anomalies.js +108 -0
  22. package/dist/premium/cost_anomalies.js.map +1 -0
  23. package/dist/premium/cost_forecast.d.ts +22 -0
  24. package/dist/premium/cost_forecast.d.ts.map +1 -0
  25. package/dist/premium/cost_forecast.js +111 -0
  26. package/dist/premium/cost_forecast.js.map +1 -0
  27. package/dist/premium/cross_cloud_report.d.ts +42 -0
  28. package/dist/premium/cross_cloud_report.d.ts.map +1 -0
  29. package/dist/premium/cross_cloud_report.js +139 -0
  30. package/dist/premium/cross_cloud_report.js.map +1 -0
  31. package/dist/premium/idle_resources.d.ts +23 -0
  32. package/dist/premium/idle_resources.d.ts.map +1 -0
  33. package/dist/premium/idle_resources.js +88 -0
  34. package/dist/premium/idle_resources.js.map +1 -0
  35. package/dist/premium/security_scan.d.ts +24 -0
  36. package/dist/premium/security_scan.d.ts.map +1 -0
  37. package/dist/premium/security_scan.js +159 -0
  38. package/dist/premium/security_scan.js.map +1 -0
  39. package/dist/tools/cost_current.d.ts +16 -0
  40. package/dist/tools/cost_current.d.ts.map +1 -0
  41. package/dist/tools/cost_current.js +78 -0
  42. package/dist/tools/cost_current.js.map +1 -0
  43. package/dist/tools/health_dashboard.d.ts +15 -0
  44. package/dist/tools/health_dashboard.d.ts.map +1 -0
  45. package/dist/tools/health_dashboard.js +41 -0
  46. package/dist/tools/health_dashboard.js.map +1 -0
  47. package/dist/tools/resource_tags.d.ts +18 -0
  48. package/dist/tools/resource_tags.d.ts.map +1 -0
  49. package/dist/tools/resource_tags.js +50 -0
  50. package/dist/tools/resource_tags.js.map +1 -0
  51. package/package.json +1 -1
@@ -0,0 +1,364 @@
1
+ /**
2
+ * GCP Adapter — implements CloudProvider using native fetch to GCP REST APIs.
3
+ * Auth: GOOGLE_ACCESS_TOKEN env var (direct token for MCP context simplicity).
4
+ *
5
+ * Env vars:
6
+ * GOOGLE_CLOUD_PROJECT — GCP project ID
7
+ * GOOGLE_ACCESS_TOKEN — OAuth2 access token
8
+ */
9
+ export class GcpAdapter {
10
+ project;
11
+ token;
12
+ constructor() {
13
+ if (!process.env.GOOGLE_CLOUD_PROJECT) {
14
+ throw new Error('GOOGLE_CLOUD_PROJECT environment variable required');
15
+ }
16
+ if (!process.env.GOOGLE_ACCESS_TOKEN) {
17
+ throw new Error('GOOGLE_ACCESS_TOKEN environment variable required');
18
+ }
19
+ this.project = process.env.GOOGLE_CLOUD_PROJECT;
20
+ this.token = process.env.GOOGLE_ACCESS_TOKEN;
21
+ }
22
+ async gcpFetch(url, options) {
23
+ const response = await fetch(url, {
24
+ ...options,
25
+ headers: {
26
+ Authorization: `Bearer ${this.token}`,
27
+ 'Content-Type': 'application/json',
28
+ ...(options?.headers ?? {}),
29
+ },
30
+ });
31
+ if (response.status === 401 || response.status === 403) {
32
+ throw new Error('Insufficient permissions for gcp. Check IAM policy.');
33
+ }
34
+ if (!response.ok) {
35
+ const text = await response.text();
36
+ throw new Error(`GCP API error ${response.status}: ${text}`);
37
+ }
38
+ return response.json();
39
+ }
40
+ async listInstances(options) {
41
+ const url = `https://compute.googleapis.com/compute/v1/projects/${this.project}/aggregated/instances`;
42
+ const data = await this.gcpFetch(url);
43
+ const instances = [];
44
+ for (const [zone, zoneData] of Object.entries(data.items ?? {})) {
45
+ const zoneName = zone.replace('zones/', '');
46
+ for (const inst of zoneData.instances ?? []) {
47
+ const mapped = this.mapInstance(inst, zoneName);
48
+ if (options?.state && mapped.state !== options.state)
49
+ continue;
50
+ if (options?.tags) {
51
+ const labels = inst.labels ?? {};
52
+ const match = Object.entries(options.tags).every(([k, v]) => labels[k] === v);
53
+ if (!match)
54
+ continue;
55
+ }
56
+ instances.push(mapped);
57
+ }
58
+ }
59
+ return instances;
60
+ }
61
+ mapInstance(inst, zone) {
62
+ const tags = { ...(inst.labels ?? {}) };
63
+ const stateMap = {
64
+ RUNNING: 'running',
65
+ STOPPED: 'stopped',
66
+ TERMINATED: 'terminated',
67
+ STOPPING: 'stopped',
68
+ STAGING: 'pending',
69
+ PROVISIONING: 'pending',
70
+ SUSPENDED: 'stopped',
71
+ };
72
+ const rawState = inst.status ?? 'UNKNOWN';
73
+ const state = stateMap[rawState] ?? 'unknown';
74
+ // Extract region from zone (e.g., us-central1-a -> us-central1)
75
+ const region = zone.replace(/-[a-z]$/, '');
76
+ // Extract machine type name from full URL
77
+ const machineType = inst.machineType
78
+ ? inst.machineType.split('/').pop() ?? inst.machineType
79
+ : 'unknown';
80
+ // Get public/private IPs from network interfaces
81
+ const networkInterface = (inst.networkInterfaces ?? [])[0];
82
+ const ip_private = networkInterface?.networkIP;
83
+ const ip_public = networkInterface?.accessConfigs?.[0]?.natIP;
84
+ return {
85
+ id: inst.id ?? '',
86
+ name: inst.name ?? '',
87
+ type: machineType,
88
+ state,
89
+ ip_public,
90
+ ip_private,
91
+ region,
92
+ zone,
93
+ launch_time: inst.creationTimestamp,
94
+ tags,
95
+ provider: 'gcp',
96
+ };
97
+ }
98
+ async listDatabases(options) {
99
+ const url = `https://sqladmin.googleapis.com/v1/projects/${this.project}/instances`;
100
+ const data = await this.gcpFetch(url);
101
+ const databases = [];
102
+ for (const db of data.items ?? []) {
103
+ const mapped = this.mapDatabase(db);
104
+ if (options?.engine && mapped.engine !== options.engine)
105
+ continue;
106
+ databases.push(mapped);
107
+ }
108
+ return databases;
109
+ }
110
+ mapDatabase(db) {
111
+ const tags = {};
112
+ const statusMap = {
113
+ RUNNABLE: 'available',
114
+ CREATING: 'creating',
115
+ DELETING: 'deleting',
116
+ SUSPENDED: 'stopped',
117
+ FAILED: 'error',
118
+ UNKNOWN_STATE: 'unknown',
119
+ };
120
+ const rawStatus = db.state ?? 'UNKNOWN_STATE';
121
+ const status = statusMap[rawStatus] ?? 'unknown';
122
+ // Extract engine from databaseVersion e.g., POSTGRES_15 -> postgres
123
+ const dbVersion = db.databaseVersion ?? '';
124
+ let engine = 'unknown';
125
+ let version = 'unknown';
126
+ if (dbVersion.startsWith('POSTGRES')) {
127
+ engine = 'postgres';
128
+ version = dbVersion.replace('POSTGRES_', '');
129
+ }
130
+ else if (dbVersion.startsWith('MYSQL')) {
131
+ engine = 'mysql';
132
+ version = dbVersion.replace('MYSQL_', '').replace(/_/g, '.');
133
+ }
134
+ else if (dbVersion.startsWith('SQLSERVER')) {
135
+ engine = 'sqlserver';
136
+ version = dbVersion.replace('SQLSERVER_', '').replace(/_/g, ' ');
137
+ }
138
+ const region = db.region ?? 'unknown';
139
+ const storageGb = db.settings?.dataDiskSizeGb
140
+ ? parseInt(db.settings.dataDiskSizeGb, 10)
141
+ : 0;
142
+ const backupEnabled = db.settings?.backupConfiguration?.enabled ?? false;
143
+ const backupRetention = db.settings?.backupConfiguration?.backupRetentionSettings?.retainedBackups
144
+ ? parseInt(db.settings.backupConfiguration.backupRetentionSettings.retainedBackups, 10)
145
+ : undefined;
146
+ const endpoint = db.ipAddresses?.find((ip) => ip.type === 'PRIMARY')?.ipAddress;
147
+ return {
148
+ id: db.name ?? '',
149
+ name: db.name ?? '',
150
+ engine,
151
+ version,
152
+ instance_class: db.settings?.tier ?? 'unknown',
153
+ storage_gb: storageGb,
154
+ status,
155
+ endpoint,
156
+ backup_enabled: backupEnabled,
157
+ backup_retention_days: backupRetention,
158
+ region,
159
+ tags,
160
+ provider: 'gcp',
161
+ };
162
+ }
163
+ async listStorage(_options) {
164
+ const url = `https://storage.googleapis.com/storage/v1/b?project=${this.project}`;
165
+ const data = await this.gcpFetch(url);
166
+ const buckets = [];
167
+ for (const bucket of data.items ?? []) {
168
+ buckets.push(this.mapBucket(bucket));
169
+ }
170
+ return buckets;
171
+ }
172
+ mapBucket(bucket) {
173
+ const isPublic = (bucket.iamConfiguration?.publicAccessPrevention === 'inherited') ||
174
+ (bucket.acl ?? []).some((acl) => acl.entity === 'allUsers' || acl.entity === 'allAuthenticatedUsers');
175
+ const encrypted = bucket.encryption !== undefined ||
176
+ bucket.defaultObjectAcl !== undefined ||
177
+ true; // GCS always encrypts at rest by default
178
+ return {
179
+ name: bucket.name ?? '',
180
+ region: bucket.location?.toLowerCase() ?? 'unknown',
181
+ size_bytes: undefined,
182
+ object_count: undefined,
183
+ public_access: isPublic,
184
+ encryption: encrypted,
185
+ versioning: bucket.versioning?.enabled ?? false,
186
+ created_at: bucket.timeCreated,
187
+ provider: 'gcp',
188
+ };
189
+ }
190
+ async getSecrets(options) {
191
+ const url = `https://secretmanager.googleapis.com/v1/projects/${this.project}/secrets`;
192
+ const data = await this.gcpFetch(url);
193
+ const secrets = [];
194
+ for (const secret of data.secrets ?? []) {
195
+ // Extract name from full resource path: projects/{project}/secrets/{name}
196
+ const shortName = secret.name?.split('/').pop() ?? secret.name ?? '';
197
+ if (options?.prefix && !shortName.startsWith(options.prefix))
198
+ continue;
199
+ const tags = { ...(secret.labels ?? {}) };
200
+ const rotationEnabled = secret.rotation !== undefined;
201
+ secrets.push({
202
+ name: shortName,
203
+ created_at: secret.createTime,
204
+ rotation_enabled: rotationEnabled,
205
+ tags,
206
+ provider: 'gcp',
207
+ });
208
+ }
209
+ return secrets;
210
+ }
211
+ async getResourcesByTag(tagKey, tagValue) {
212
+ const resources = [];
213
+ const instances = await this.listInstances();
214
+ for (const inst of instances) {
215
+ if (tagKey in inst.tags &&
216
+ (tagValue === undefined || inst.tags[tagKey] === tagValue)) {
217
+ resources.push({
218
+ resource_id: inst.id,
219
+ resource_type: 'instance',
220
+ resource_name: inst.name,
221
+ tags: inst.tags,
222
+ provider: 'gcp',
223
+ });
224
+ }
225
+ }
226
+ const databases = await this.listDatabases();
227
+ for (const db of databases) {
228
+ if (tagKey in db.tags &&
229
+ (tagValue === undefined || db.tags[tagKey] === tagValue)) {
230
+ resources.push({
231
+ resource_id: db.id,
232
+ resource_type: 'database',
233
+ resource_name: db.name,
234
+ tags: db.tags,
235
+ provider: 'gcp',
236
+ });
237
+ }
238
+ }
239
+ return resources;
240
+ }
241
+ async getHealthStatus() {
242
+ const [instances, databases, storage] = await Promise.all([
243
+ this.listInstances(),
244
+ this.listDatabases(),
245
+ this.listStorage(),
246
+ ]);
247
+ const instStats = {
248
+ running: instances.filter((i) => i.state === 'running').length,
249
+ stopped: instances.filter((i) => i.state === 'stopped').length,
250
+ error: instances.filter((i) => i.state === 'unknown').length,
251
+ total: instances.length,
252
+ };
253
+ const dbStats = {
254
+ available: databases.filter((d) => d.status === 'available').length,
255
+ error: databases.filter((d) => d.status === 'error').length,
256
+ total: databases.length,
257
+ };
258
+ const storageStats = {
259
+ total_buckets: storage.length,
260
+ public_buckets: storage.filter((b) => b.public_access).length,
261
+ };
262
+ let overall = 'healthy';
263
+ if (instStats.error > 0 || dbStats.error > 0) {
264
+ overall = 'critical';
265
+ }
266
+ else if (storageStats.public_buckets > 0 || instStats.stopped > 0) {
267
+ overall = 'warning';
268
+ }
269
+ return {
270
+ provider: 'gcp',
271
+ instances: instStats,
272
+ databases: dbStats,
273
+ storage: storageStats,
274
+ pending_maintenance: [],
275
+ overall,
276
+ };
277
+ }
278
+ async getCurrentCost(month) {
279
+ const now = new Date();
280
+ const targetMonth = month ??
281
+ `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`;
282
+ // GCP Cloud Billing uses the billing account; here we query the project's billing
283
+ // For simplicity, we use a lightweight approach: return 0 if billing not configured
284
+ // In practice, billing API requires a billing account ID which we don't have from env
285
+ const url = `https://cloudbilling.googleapis.com/v1/projects/${this.project}/billingInfo`;
286
+ let billingAccountName = '';
287
+ try {
288
+ const billingInfo = await this.gcpFetch(url);
289
+ billingAccountName = billingInfo.billingAccountName ?? '';
290
+ }
291
+ catch {
292
+ // Billing info not accessible — return zero breakdown
293
+ return {
294
+ provider: 'gcp',
295
+ period: targetMonth,
296
+ total_usd: 0,
297
+ by_service: [],
298
+ };
299
+ }
300
+ if (!billingAccountName) {
301
+ return {
302
+ provider: 'gcp',
303
+ period: targetMonth,
304
+ total_usd: 0,
305
+ by_service: [],
306
+ };
307
+ }
308
+ // Query billing account costs
309
+ const [year, mon] = targetMonth.split('-').map(Number);
310
+ if (!year || !mon) {
311
+ throw new Error(`Invalid month format: ${targetMonth}. Expected YYYY-MM`);
312
+ }
313
+ const startDate = `${targetMonth}-01`;
314
+ const endDate = new Date(year, mon, 0);
315
+ const endDateStr = `${targetMonth}-${String(endDate.getDate()).padStart(2, '0')}`;
316
+ const costUrl = `https://cloudbilling.googleapis.com/v1/${billingAccountName}:query`;
317
+ try {
318
+ const costData = await this.gcpFetch(costUrl, {
319
+ method: 'POST',
320
+ body: JSON.stringify({
321
+ query: {
322
+ dateRange: {
323
+ startDate: { year: year, month: mon, day: 1 },
324
+ endDate: {
325
+ year: endDate.getFullYear(),
326
+ month: endDate.getMonth() + 1,
327
+ day: endDate.getDate(),
328
+ },
329
+ },
330
+ groupBy: [{ type: 'SERVICE' }],
331
+ },
332
+ }),
333
+ });
334
+ void startDate;
335
+ void endDateStr;
336
+ const byService = [];
337
+ let total = 0;
338
+ for (const row of costData.costRecords ?? []) {
339
+ const amount = row.cost?.amount ?? 0;
340
+ total += amount;
341
+ byService.push({
342
+ service: row.serviceName ?? 'Unknown',
343
+ amount_usd: amount,
344
+ pct: 0,
345
+ });
346
+ }
347
+ // Calculate percentages
348
+ for (const svc of byService) {
349
+ svc.pct = total > 0 ? Math.round((svc.amount_usd / total) * 100) : 0;
350
+ }
351
+ return {
352
+ provider: 'gcp',
353
+ period: targetMonth,
354
+ total_usd: total,
355
+ by_service: byService,
356
+ };
357
+ }
358
+ catch (err) {
359
+ const message = err instanceof Error ? err.message : String(err);
360
+ throw new Error(`Cost data unavailable. Cost Explorer API costs $0.01/request. Error: ${message}`);
361
+ }
362
+ }
363
+ }
364
+ //# sourceMappingURL=gcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gcp.js","sourceRoot":"","sources":["../../src/adapters/gcp.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10,6 +10,15 @@ import { list_instances } from './tools/list_instances.js';
10
10
  import { list_databases } from './tools/list_databases.js';
11
11
  import { list_storage } from './tools/list_storage.js';
12
12
  import { get_secrets } from './tools/get_secrets.js';
13
+ import { resource_tags } from './tools/resource_tags.js';
14
+ import { health_dashboard } from './tools/health_dashboard.js';
15
+ import { cost_current } from './tools/cost_current.js';
16
+ import { cost_forecast } from './premium/cost_forecast.js';
17
+ import { cost_anomalies } from './premium/cost_anomalies.js';
18
+ import { idle_resources } from './premium/idle_resources.js';
19
+ import { security_scan } from './premium/security_scan.js';
20
+ import { cross_cloud_report } from './premium/cross_cloud_report.js';
21
+ import { compliance_snapshot } from './premium/compliance_snapshot.js';
13
22
  const server = new McpServer({
14
23
  name: 'cloudvault-mcp',
15
24
  version: '1.0.0',
@@ -45,6 +54,75 @@ server.tool('get_secrets', 'List secret names and metadata. SECURITY: Secret val
45
54
  }, async (input) => {
46
55
  return get_secrets(input);
47
56
  });
57
+ // resource_tags
58
+ server.tool('resource_tags', 'List and search resources by tag key/value pairs across instances, databases, and storage.', {
59
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
60
+ tag_key: z.string().describe('Tag/label key to search for (e.g., Environment)'),
61
+ tag_value: z.string().optional().describe('Tag/label value to filter by (e.g., production)'),
62
+ resource_type: z
63
+ .enum(['instance', 'database', 'storage', 'secret', 'other'])
64
+ .optional()
65
+ .describe('Filter by resource type'),
66
+ }, async (input) => {
67
+ return resource_tags(input);
68
+ });
69
+ // health_dashboard
70
+ server.tool('health_dashboard', 'Get aggregate health status: running/stopped/error counts, pending maintenance, and overall health level.', {
71
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
72
+ }, async (input) => {
73
+ return health_dashboard(input);
74
+ });
75
+ // cost_current
76
+ server.tool('cost_current', 'Current month cost breakdown by service with comparison to previous month. NOTE: AWS Cost Explorer costs $0.01/request.', {
77
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
78
+ month: z
79
+ .string()
80
+ .optional()
81
+ .describe('Month in YYYY-MM format (defaults to current month)'),
82
+ }, async (input) => {
83
+ return cost_current(input);
84
+ });
85
+ // cost_forecast (PRO)
86
+ server.tool('cost_forecast', '[PRO] 3/6/12-month cost projections with conservative, realistic, and optimistic scenarios.', {
87
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
88
+ months: z.union([z.literal(3), z.literal(6), z.literal(12)]).optional().describe('Forecast horizon in months (default 6)'),
89
+ based_on_months: z.union([z.literal(3), z.literal(6)]).optional().describe('Historical months to base forecast on (default 3)'),
90
+ }, async (input) => {
91
+ return cost_forecast(input);
92
+ });
93
+ // cost_anomalies (PRO)
94
+ server.tool('cost_anomalies', '[PRO] Detect cost spikes vs 30-day baseline. Flags services with >50% deviation by default.', {
95
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
96
+ threshold_pct: z.number().optional().describe('Deviation threshold percentage to flag as anomaly (default 50)'),
97
+ }, async (input) => {
98
+ return cost_anomalies(input);
99
+ });
100
+ // idle_resources (PRO)
101
+ server.tool('idle_resources', '[PRO] Detect underutilized resources: stopped instances, empty buckets, unattached volumes.', {
102
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
103
+ }, async (input) => {
104
+ return idle_resources(input);
105
+ });
106
+ // security_scan (PRO)
107
+ server.tool('security_scan', '[PRO] INFORMATIONAL ONLY — Scan for public buckets, unencrypted storage, unrotated secrets. Not a security audit.', {
108
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
109
+ }, async (input) => {
110
+ return security_scan(input);
111
+ });
112
+ // cross_cloud_report (PRO)
113
+ server.tool('cross_cloud_report', '[PRO] Unified inventory across all cloud providers with inconsistency flags (e.g., missing env parity).', {
114
+ providers: z
115
+ .array(z.enum(['aws', 'gcp', 'azure']))
116
+ .describe('Cloud providers to include in the report'),
117
+ }, async (input) => {
118
+ return cross_cloud_report(input);
119
+ });
120
+ // compliance_snapshot (PRO)
121
+ server.tool('compliance_snapshot', '[PRO] NOT LEGAL ADVICE — Map infrastructure to SOC2/ISO27001 controls as a reference guide.', {
122
+ provider: z.enum(['aws', 'gcp', 'azure']).describe('Cloud provider'),
123
+ }, async (input) => {
124
+ return compliance_snapshot(input);
125
+ });
48
126
  // Start server
49
127
  const transport = new StdioServerTransport();
50
128
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/lib/providers.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAkB7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAEnE;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/lib/providers.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAC;AAEnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAoB7D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,aAAa,EAAE,CAEnE;AAED,4CAA4C;AAC5C,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -8,6 +8,8 @@
8
8
  * Phase 3: + azure
9
9
  */
10
10
  import { AwsAdapter } from '../adapters/aws.js';
11
+ import { GcpAdapter } from '../adapters/gcp.js';
12
+ import { AzureAdapter } from '../adapters/azure.js';
11
13
  const cache = new Map();
12
14
  export function getProvider(name) {
13
15
  if (cache.has(name))
@@ -18,11 +20,13 @@ export function getProvider(name) {
18
20
  adapter = new AwsAdapter();
19
21
  break;
20
22
  case 'gcp':
21
- throw new Error('Unknown provider: gcp. Supported: aws');
23
+ adapter = new GcpAdapter();
24
+ break;
22
25
  case 'azure':
23
- throw new Error('Unknown provider: azure. Supported: aws');
26
+ adapter = new AzureAdapter();
27
+ break;
24
28
  default:
25
- throw new Error(`Unknown provider: ${name}. Supported: aws`);
29
+ throw new Error(`Unknown provider: ${name}. Supported: aws, gcp, azure`);
26
30
  }
27
31
  cache.set(name, adapter);
28
32
  return adapter;
@@ -1 +1 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/lib/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGhD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAI/C,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAE7C,IAAI,OAAsB,CAAC;IAC3B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM;QACR,KAAK,KAAK;YACR,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,KAAK,OAAO;YACV,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAc,kBAAkB,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAqB;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB;IAChC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/lib/providers.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;AAI/C,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;IAE7C,IAAI,OAAsB,CAAC;IAC3B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK;YACR,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM;QACR,KAAK,KAAK;YACR,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;YAC3B,MAAM;QACR,KAAK,OAAO;YACV,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAc,8BAA8B,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAqB;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,kBAAkB;IAChC,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * compliance_snapshot tool (PRO) — map findings to SOC2/ISO27001 controls.
3
+ *
4
+ * Controls checked:
5
+ * SOC2 CC6.1 — Logical and physical access controls (encryption)
6
+ * SOC2 CC6.6 — Logical access controls (secrets rotation / access control)
7
+ * ISO27001 A.10.1 — Cryptographic controls (encryption at rest)
8
+ * ISO27001 A.12.3 — Information backup (backup enabled for databases)
9
+ *
10
+ * DISCLAIMER: NOT LEGAL ADVICE. This tool provides a reference mapping only.
11
+ * It does not constitute a compliance certification or formal audit.
12
+ */
13
+ import { type ProviderName } from '../lib/providers.js';
14
+ export interface ComplianceSnapshotInput {
15
+ provider: ProviderName;
16
+ }
17
+ export declare function compliance_snapshot(input: ComplianceSnapshotInput): Promise<{
18
+ content: Array<{
19
+ type: 'text';
20
+ text: string;
21
+ }>;
22
+ }>;
23
+ //# sourceMappingURL=compliance_snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance_snapshot.d.ts","sourceRoot":"","sources":["../../src/premium/compliance_snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAIrE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,YAAY,CAAC;CACxB;AAKD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC;IACjF,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD,CAAC,CAuLD"}