@frontpoint/aws-infra-mcp 0.1.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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +141 -0
  3. package/dist/core/aws-analyzer.d.ts +73 -0
  4. package/dist/core/aws-analyzer.d.ts.map +1 -0
  5. package/dist/core/aws-analyzer.js +429 -0
  6. package/dist/core/aws-analyzer.js.map +1 -0
  7. package/dist/core/cdk-generator.d.ts +26 -0
  8. package/dist/core/cdk-generator.d.ts.map +1 -0
  9. package/dist/core/cdk-generator.js +790 -0
  10. package/dist/core/cdk-generator.js.map +1 -0
  11. package/dist/core/template-engine.d.ts +32 -0
  12. package/dist/core/template-engine.d.ts.map +1 -0
  13. package/dist/core/template-engine.js +131 -0
  14. package/dist/core/template-engine.js.map +1 -0
  15. package/dist/index.d.ts +9 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +62 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/server.d.ts +21 -0
  20. package/dist/server.d.ts.map +1 -0
  21. package/dist/server.js +158 -0
  22. package/dist/server.js.map +1 -0
  23. package/dist/tools/aws-add-compute.d.ts +8 -0
  24. package/dist/tools/aws-add-compute.d.ts.map +1 -0
  25. package/dist/tools/aws-add-compute.js +269 -0
  26. package/dist/tools/aws-add-compute.js.map +1 -0
  27. package/dist/tools/aws-add-database.d.ts +8 -0
  28. package/dist/tools/aws-add-database.d.ts.map +1 -0
  29. package/dist/tools/aws-add-database.js +230 -0
  30. package/dist/tools/aws-add-database.js.map +1 -0
  31. package/dist/tools/aws-add-network.d.ts +8 -0
  32. package/dist/tools/aws-add-network.d.ts.map +1 -0
  33. package/dist/tools/aws-add-network.js +240 -0
  34. package/dist/tools/aws-add-network.js.map +1 -0
  35. package/dist/tools/aws-add-storage.d.ts +8 -0
  36. package/dist/tools/aws-add-storage.d.ts.map +1 -0
  37. package/dist/tools/aws-add-storage.js +207 -0
  38. package/dist/tools/aws-add-storage.js.map +1 -0
  39. package/dist/tools/aws-analyze.d.ts +8 -0
  40. package/dist/tools/aws-analyze.d.ts.map +1 -0
  41. package/dist/tools/aws-analyze.js +123 -0
  42. package/dist/tools/aws-analyze.js.map +1 -0
  43. package/dist/tools/aws-generate-all.d.ts +8 -0
  44. package/dist/tools/aws-generate-all.d.ts.map +1 -0
  45. package/dist/tools/aws-generate-all.js +197 -0
  46. package/dist/tools/aws-generate-all.js.map +1 -0
  47. package/dist/tools/aws-init.d.ts +8 -0
  48. package/dist/tools/aws-init.d.ts.map +1 -0
  49. package/dist/tools/aws-init.js +114 -0
  50. package/dist/tools/aws-init.js.map +1 -0
  51. package/dist/tools/aws-status.d.ts +8 -0
  52. package/dist/tools/aws-status.d.ts.map +1 -0
  53. package/dist/tools/aws-status.js +110 -0
  54. package/dist/tools/aws-status.js.map +1 -0
  55. package/dist/tools/index.d.ts +51 -0
  56. package/dist/tools/index.d.ts.map +1 -0
  57. package/dist/tools/index.js +35 -0
  58. package/dist/tools/index.js.map +1 -0
  59. package/dist/types.d.ts +644 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +12 -0
  62. package/dist/types.js.map +1 -0
  63. package/package.json +95 -0
@@ -0,0 +1,197 @@
1
+ /**
2
+ * aws-generate-all - Generate complete CDK project from configuration
3
+ */
4
+ import * as crypto from 'crypto';
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ import { CDK_OUTPUT_DIR, STATE_FILE, } from '../types.js';
8
+ import { CDKGenerator } from '../core/cdk-generator.js';
9
+ export const awsGenerateAllTool = {
10
+ name: 'aws-generate-all',
11
+ description: '설정된 모든 AWS 리소스를 AWS CDK TypeScript 프로젝트로 생성합니다.',
12
+ inputSchema: {
13
+ type: 'object',
14
+ properties: {
15
+ outputDir: {
16
+ type: 'string',
17
+ description: 'CDK 프로젝트 출력 디렉토리 (기본값: cdk-infra)',
18
+ },
19
+ force: {
20
+ type: 'boolean',
21
+ description: '기존 파일을 덮어쓸지 여부 (기본값: false)',
22
+ },
23
+ },
24
+ },
25
+ };
26
+ export async function handleAwsGenerateAll(args, context) {
27
+ const { configRoot, config, state } = context;
28
+ if (!config || !state) {
29
+ return {
30
+ success: false,
31
+ message: 'aws-init을 먼저 실행하세요.',
32
+ };
33
+ }
34
+ // Count total resources
35
+ const resourceCounts = {
36
+ compute: countComputeResources(config.compute),
37
+ database: countDatabaseResources(config.database),
38
+ storage: countStorageResources(config.storage),
39
+ network: countNetworkResources(config.network),
40
+ };
41
+ const totalResources = Object.values(resourceCounts).reduce((a, b) => a + b, 0);
42
+ if (totalResources === 0) {
43
+ return {
44
+ success: false,
45
+ message: '생성할 리소스가 없습니다. aws-add-* 명령으로 리소스를 추가하세요.',
46
+ nextSteps: [
47
+ 'aws-add-network type: vpc name: main-vpc',
48
+ 'aws-add-compute type: lambda name: my-function',
49
+ 'aws-add-database type: dynamodb name: my-table partitionKey: id:S',
50
+ 'aws-add-storage type: s3 name: my-bucket',
51
+ ],
52
+ };
53
+ }
54
+ // Determine output directory
55
+ const outputDirName = args.outputDir || CDK_OUTPUT_DIR;
56
+ const projectRoot = path.dirname(configRoot);
57
+ const outputDir = path.join(projectRoot, outputDirName);
58
+ const force = args.force === true;
59
+ // Check if output directory exists
60
+ if (fs.existsSync(outputDir) && !force) {
61
+ const files = fs.readdirSync(outputDir);
62
+ if (files.length > 0) {
63
+ return {
64
+ success: false,
65
+ message: `출력 디렉토리 '${outputDirName}'가 이미 존재합니다.`,
66
+ nextSteps: [
67
+ 'force: true 옵션으로 덮어쓰기',
68
+ `다른 디렉토리 지정: outputDir: "다른-경로"`,
69
+ ],
70
+ warnings: [`기존 디렉토리에 ${files.length}개의 파일/폴더가 있습니다.`],
71
+ };
72
+ }
73
+ }
74
+ // Generate CDK project
75
+ const generator = new CDKGenerator(config, outputDir);
76
+ const result = await generator.generate();
77
+ if (!result.success) {
78
+ const event = {
79
+ id: crypto.randomUUID(),
80
+ timestamp: new Date().toISOString(),
81
+ tool: 'aws-generate-all',
82
+ action: 'Generate CDK project',
83
+ files: [],
84
+ success: false,
85
+ error: result.error || 'Unknown error',
86
+ };
87
+ state.generationHistory.push(event);
88
+ state.lastModified = new Date().toISOString();
89
+ fs.writeFileSync(path.join(configRoot, STATE_FILE), JSON.stringify(state, null, 2));
90
+ return {
91
+ success: false,
92
+ message: `CDK 프로젝트 생성 실패: ${result.error}`,
93
+ };
94
+ }
95
+ // Update state
96
+ const now = new Date().toISOString();
97
+ state.generatedStacks = result.stacks;
98
+ state.lastModified = now;
99
+ const event = {
100
+ id: crypto.randomUUID(),
101
+ timestamp: now,
102
+ tool: 'aws-generate-all',
103
+ action: `Generated ${result.stacks.length} stacks with ${totalResources} resources`,
104
+ files: result.files,
105
+ success: true,
106
+ error: null,
107
+ };
108
+ state.generationHistory.push(event);
109
+ fs.writeFileSync(path.join(configRoot, STATE_FILE), JSON.stringify(state, null, 2));
110
+ // Build detailed summary
111
+ const stackNames = result.stacks.map(s => s.name);
112
+ const summary = buildResourceSummary(config);
113
+ return {
114
+ success: true,
115
+ message: `CDK 프로젝트가 '${outputDirName}/'에 생성되었습니다.`,
116
+ data: {
117
+ outputDir: result.outputDir,
118
+ stacks: stackNames,
119
+ filesGenerated: result.files.length,
120
+ resourceCounts,
121
+ totalResources,
122
+ summary,
123
+ },
124
+ generatedFiles: result.files,
125
+ nextSteps: [
126
+ `cd ${outputDirName} && npm install`,
127
+ 'npx cdk bootstrap (최초 1회)',
128
+ 'npx cdk diff (변경사항 확인)',
129
+ 'npx cdk deploy --all (배포)',
130
+ ],
131
+ };
132
+ }
133
+ function countComputeResources(compute) {
134
+ return ((compute.ec2Instances?.length ?? 0) +
135
+ (compute.autoScalingGroups?.length ?? 0) +
136
+ (compute.lambdaFunctions?.length ?? 0) +
137
+ (compute.ecsClusters?.length ?? 0) +
138
+ (compute.ecsServices?.length ?? 0) +
139
+ (compute.ecsTaskDefinitions?.length ?? 0) +
140
+ (compute.eksClusters?.length ?? 0));
141
+ }
142
+ function countDatabaseResources(database) {
143
+ return ((database.rdsInstances?.length ?? 0) +
144
+ (database.auroraClusters?.length ?? 0) +
145
+ (database.dynamoDBTables?.length ?? 0));
146
+ }
147
+ function countStorageResources(storage) {
148
+ return ((storage.s3Buckets?.length ?? 0) +
149
+ (storage.ebsVolumes?.length ?? 0) +
150
+ (storage.ecrRepositories?.length ?? 0));
151
+ }
152
+ function countNetworkResources(network) {
153
+ return ((network.vpcs?.length ?? 0) +
154
+ (network.apiGateways?.length ?? 0));
155
+ }
156
+ function buildResourceSummary(config) {
157
+ const lines = [];
158
+ // Network
159
+ if (config.network.vpcs?.length) {
160
+ lines.push(`VPC: ${config.network.vpcs.map(v => v.name).join(', ')}`);
161
+ }
162
+ if (config.network.apiGateways?.length) {
163
+ lines.push(`API Gateway: ${config.network.apiGateways.map(a => a.name).join(', ')}`);
164
+ }
165
+ // Compute
166
+ if (config.compute.ec2Instances?.length) {
167
+ lines.push(`EC2: ${config.compute.ec2Instances.map(e => e.name).join(', ')}`);
168
+ }
169
+ if (config.compute.lambdaFunctions?.length) {
170
+ lines.push(`Lambda: ${config.compute.lambdaFunctions.map(l => l.name).join(', ')}`);
171
+ }
172
+ if (config.compute.ecsClusters?.length) {
173
+ lines.push(`ECS Cluster: ${config.compute.ecsClusters.map(c => c.name).join(', ')}`);
174
+ }
175
+ if (config.compute.eksClusters?.length) {
176
+ lines.push(`EKS: ${config.compute.eksClusters.map(k => k.name).join(', ')}`);
177
+ }
178
+ // Database
179
+ if (config.database.rdsInstances?.length) {
180
+ lines.push(`RDS: ${config.database.rdsInstances.map(r => r.name).join(', ')}`);
181
+ }
182
+ if (config.database.auroraClusters?.length) {
183
+ lines.push(`Aurora: ${config.database.auroraClusters.map(a => a.name).join(', ')}`);
184
+ }
185
+ if (config.database.dynamoDBTables?.length) {
186
+ lines.push(`DynamoDB: ${config.database.dynamoDBTables.map(d => d.name).join(', ')}`);
187
+ }
188
+ // Storage
189
+ if (config.storage.s3Buckets?.length) {
190
+ lines.push(`S3: ${config.storage.s3Buckets.map(s => s.name).join(', ')}`);
191
+ }
192
+ if (config.storage.ecrRepositories?.length) {
193
+ lines.push(`ECR: ${config.storage.ecrRepositories.map(e => e.name).join(', ')}`);
194
+ }
195
+ return lines;
196
+ }
197
+ //# sourceMappingURL=aws-generate-all.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-generate-all.js","sourceRoot":"","sources":["../../src/tools/aws-generate-all.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * aws-init - Initialize AWS Infra MCP project
3
+ */
4
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
5
+ import { type ToolContext, type ToolResponse } from '../types.js';
6
+ export declare const awsInitTool: Tool;
7
+ export declare function handleAwsInit(args: Record<string, unknown>, context: ToolContext): Promise<ToolResponse>;
8
+ //# sourceMappingURL=aws-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-init.d.ts","sourceRoot":"","sources":["../../src/tools/aws-init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAG/D,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,YAAY,EAElB,MAAM,aAAa,CAAC;AASrB,eAAO,MAAM,WAAW,EAAE,IA+BzB,CAAC;AAEF,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CAgFvB"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * aws-init - Initialize AWS Infra MCP project
3
+ */
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import { createDefaultConfig, createDefaultState, saveConfig, saveState, } from '../server.js';
7
+ import { AWSAnalyzer } from '../core/aws-analyzer.js';
8
+ export const awsInitTool = {
9
+ name: 'aws-init',
10
+ description: 'AWS CDK 프로젝트를 초기화합니다. AWS 자격증명을 확인하고 설정 디렉토리를 생성합니다.',
11
+ inputSchema: {
12
+ type: 'object',
13
+ properties: {
14
+ projectName: {
15
+ type: 'string',
16
+ description: '프로젝트 이름 (CDK 스택 이름에 사용)',
17
+ },
18
+ region: {
19
+ type: 'string',
20
+ description: 'AWS 리전 (기본값: ap-northeast-2)',
21
+ enum: [
22
+ 'us-east-1', 'us-east-2', 'us-west-1', 'us-west-2',
23
+ 'eu-west-1', 'eu-west-2', 'eu-central-1',
24
+ 'ap-northeast-1', 'ap-northeast-2', 'ap-northeast-3',
25
+ 'ap-southeast-1', 'ap-southeast-2', 'sa-east-1',
26
+ ],
27
+ },
28
+ profile: {
29
+ type: 'string',
30
+ description: 'AWS CLI 프로필 이름 (선택사항)',
31
+ },
32
+ environment: {
33
+ type: 'string',
34
+ description: '환경 이름 (dev, staging, prod 등)',
35
+ },
36
+ },
37
+ required: ['projectName'],
38
+ },
39
+ };
40
+ export async function handleAwsInit(args, context) {
41
+ const projectName = args.projectName;
42
+ const region = args.region || 'ap-northeast-2';
43
+ const profile = args.profile;
44
+ const environment = args.environment;
45
+ // Check if already initialized
46
+ if (context.config) {
47
+ return {
48
+ success: false,
49
+ message: '이미 초기화되었습니다. 설정을 재설정하려면 .aws-infra-mcp 디렉토리를 삭제하세요.',
50
+ warnings: [`기존 프로젝트: ${context.config.projectName}`],
51
+ };
52
+ }
53
+ // Verify AWS credentials
54
+ let accountId;
55
+ try {
56
+ const analyzer = new AWSAnalyzer({ region, profile });
57
+ const credentials = await analyzer.verifyCredentials();
58
+ accountId = credentials.account;
59
+ }
60
+ catch (error) {
61
+ const message = error instanceof Error ? error.message : String(error);
62
+ return {
63
+ success: false,
64
+ message: `AWS 자격증명 확인 실패: ${message}`,
65
+ nextSteps: [
66
+ 'AWS CLI가 설치되어 있는지 확인하세요: aws --version',
67
+ 'AWS 자격증명이 구성되어 있는지 확인하세요: aws configure',
68
+ '프로필을 지정한 경우 해당 프로필이 존재하는지 확인하세요',
69
+ ],
70
+ };
71
+ }
72
+ // Create config directory
73
+ const configRoot = context.configRoot;
74
+ if (!fs.existsSync(configRoot)) {
75
+ fs.mkdirSync(configRoot, { recursive: true });
76
+ }
77
+ // Create config and state
78
+ const config = createDefaultConfig(projectName, region, profile);
79
+ config.account = accountId;
80
+ config.environment = environment;
81
+ const state = createDefaultState();
82
+ // Save files
83
+ saveConfig(configRoot, config);
84
+ saveState(configRoot, state);
85
+ // Create .gitignore for config directory
86
+ const gitignorePath = path.join(configRoot, '.gitignore');
87
+ fs.writeFileSync(gitignorePath, `# AWS Infra MCP
88
+ state.json
89
+ analysis-cache.json
90
+ `);
91
+ return {
92
+ success: true,
93
+ message: `AWS CDK 프로젝트 '${projectName}'가 초기화되었습니다.`,
94
+ data: {
95
+ projectName,
96
+ region,
97
+ account: accountId,
98
+ profile: profile || 'default',
99
+ environment: environment || 'default',
100
+ configDir: configRoot,
101
+ },
102
+ generatedFiles: [
103
+ path.join(configRoot, 'config.json'),
104
+ path.join(configRoot, 'state.json'),
105
+ gitignorePath,
106
+ ],
107
+ nextSteps: [
108
+ 'aws-analyze 명령으로 기존 AWS 리소스를 분석하세요',
109
+ 'aws-add-* 명령으로 인프라 리소스를 추가하세요',
110
+ 'aws-generate-all 명령으로 CDK 프로젝트를 생성하세요',
111
+ ],
112
+ };
113
+ }
114
+ //# sourceMappingURL=aws-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-init.js","sourceRoot":"","sources":["../../src/tools/aws-init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * aws-status - Show current configuration status
3
+ */
4
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
5
+ import type { ToolContext, ToolResponse } from '../types.js';
6
+ export declare const awsStatusTool: Tool;
7
+ export declare function handleAwsStatus(args: Record<string, unknown>, context: ToolContext): Promise<ToolResponse>;
8
+ //# sourceMappingURL=aws-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-status.d.ts","sourceRoot":"","sources":["../../src/tools/aws-status.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7D,eAAO,MAAM,aAAa,EAAE,IAY3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,YAAY,CAAC,CA0GvB"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * aws-status - Show current configuration status
3
+ */
4
+ export const awsStatusTool = {
5
+ name: 'aws-status',
6
+ description: '현재 AWS 인프라 설정 상태를 표시합니다. 구성된 리소스, 생성된 스택, 예상 비용을 보여줍니다.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ detailed: {
11
+ type: 'boolean',
12
+ description: '상세 정보 표시 (기본값: false)',
13
+ },
14
+ },
15
+ },
16
+ };
17
+ export async function handleAwsStatus(args, context) {
18
+ const { config, state } = context;
19
+ const detailed = args.detailed === true;
20
+ if (!config || !state) {
21
+ return {
22
+ success: false,
23
+ message: 'aws-init을 먼저 실행하세요.',
24
+ nextSteps: ['aws-init 명령으로 프로젝트를 초기화하세요'],
25
+ };
26
+ }
27
+ // Count configured resources
28
+ const resourceCounts = {
29
+ compute: {
30
+ ec2: config.compute.ec2Instances?.length || 0,
31
+ autoScaling: config.compute.autoScalingGroups?.length || 0,
32
+ lambda: config.compute.lambdaFunctions?.length || 0,
33
+ ecsClusters: config.compute.ecsClusters?.length || 0,
34
+ ecsServices: config.compute.ecsServices?.length || 0,
35
+ eksClusters: config.compute.eksClusters?.length || 0,
36
+ },
37
+ database: {
38
+ rds: config.database.rdsInstances?.length || 0,
39
+ aurora: config.database.auroraClusters?.length || 0,
40
+ dynamodb: config.database.dynamoDBTables?.length || 0,
41
+ },
42
+ storage: {
43
+ s3: config.storage.s3Buckets?.length || 0,
44
+ ebs: config.storage.ebsVolumes?.length || 0,
45
+ ecr: config.storage.ecrRepositories?.length || 0,
46
+ },
47
+ network: {
48
+ vpc: config.network.vpcs?.length || 0,
49
+ apiGateway: config.network.apiGateways?.length || 0,
50
+ },
51
+ };
52
+ const totalResources = Object.values(resourceCounts).reduce((sum, category) => sum + Object.values(category).reduce((s, n) => s + n, 0), 0);
53
+ // Build status data
54
+ const statusData = {
55
+ project: {
56
+ name: config.projectName,
57
+ region: config.region,
58
+ account: config.account || 'Unknown',
59
+ profile: config.awsProfile || 'default',
60
+ environment: config.environment || 'default',
61
+ },
62
+ resources: {
63
+ total: totalResources,
64
+ breakdown: resourceCounts,
65
+ },
66
+ generation: {
67
+ stacksGenerated: state.generatedStacks.length,
68
+ lastAnalyzed: state.analyzedAt || 'Never',
69
+ historyCount: state.generationHistory.length,
70
+ },
71
+ timestamps: {
72
+ configCreated: config.createdAt,
73
+ configModified: config.lastModified,
74
+ stateModified: state.lastModified,
75
+ },
76
+ };
77
+ if (detailed) {
78
+ statusData.configuredResources = {
79
+ compute: config.compute,
80
+ database: config.database,
81
+ storage: config.storage,
82
+ network: config.network,
83
+ };
84
+ statusData.generatedStacks = state.generatedStacks;
85
+ statusData.recentHistory = state.generationHistory.slice(-5);
86
+ }
87
+ // Build next steps based on current state
88
+ const nextSteps = [];
89
+ if (!state.analyzedAt) {
90
+ nextSteps.push('aws-analyze 명령으로 기존 AWS 리소스를 분석하세요');
91
+ }
92
+ if (totalResources === 0) {
93
+ nextSteps.push('aws-add-* 명령으로 인프라 리소스를 추가하세요');
94
+ }
95
+ else if (state.generatedStacks.length === 0) {
96
+ nextSteps.push('aws-generate-all 명령으로 CDK 프로젝트를 생성하세요');
97
+ }
98
+ // Build status message
99
+ let message = `프로젝트: ${config.projectName}\n`;
100
+ message += `리전: ${config.region}\n`;
101
+ message += `구성된 리소스: ${totalResources}개\n`;
102
+ message += `생성된 스택: ${state.generatedStacks.length}개`;
103
+ return {
104
+ success: true,
105
+ message,
106
+ data: statusData,
107
+ nextSteps: nextSteps.length > 0 ? nextSteps : undefined,
108
+ };
109
+ }
110
+ //# sourceMappingURL=aws-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-status.js","sourceRoot":"","sources":["../../src/tools/aws-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * AWS Infra MCP - Tool Registry
3
+ *
4
+ * Central registry for all MCP tools and their handlers.
5
+ */
6
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
7
+ import type { ToolContext, ToolResponse } from '../types.js';
8
+ export type ToolHandler = (args: Record<string, unknown>, context: ToolContext) => Promise<ToolResponse>;
9
+ export declare const toolRegistry: Map<string, {
10
+ inputSchema: {
11
+ [x: string]: unknown;
12
+ type: "object";
13
+ properties?: {
14
+ [x: string]: object;
15
+ } | undefined;
16
+ required?: string[] | undefined;
17
+ };
18
+ name: string;
19
+ description?: string | undefined;
20
+ outputSchema?: {
21
+ [x: string]: unknown;
22
+ type: "object";
23
+ properties?: {
24
+ [x: string]: object;
25
+ } | undefined;
26
+ required?: string[] | undefined;
27
+ } | undefined;
28
+ annotations?: {
29
+ title?: string | undefined;
30
+ readOnlyHint?: boolean | undefined;
31
+ destructiveHint?: boolean | undefined;
32
+ idempotentHint?: boolean | undefined;
33
+ openWorldHint?: boolean | undefined;
34
+ } | undefined;
35
+ execution?: {
36
+ taskSupport?: "required" | "optional" | "forbidden" | undefined;
37
+ } | undefined;
38
+ _meta?: {
39
+ [x: string]: unknown;
40
+ } | undefined;
41
+ icons?: {
42
+ src: string;
43
+ mimeType?: string | undefined;
44
+ sizes?: string[] | undefined;
45
+ theme?: "light" | "dark" | undefined;
46
+ }[] | undefined;
47
+ title?: string | undefined;
48
+ }>;
49
+ export declare const toolHandlers: Map<string, ToolHandler>;
50
+ export declare function registerTool(tool: Tool, handler: ToolHandler): void;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,YAAY,CAAC,CAAC;AAG3B,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA0B,CAAC;AACpD,eAAO,MAAM,YAAY,0BAAiC,CAAC;AAG3D,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAGnE"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * AWS Infra MCP - Tool Registry
3
+ *
4
+ * Central registry for all MCP tools and their handlers.
5
+ */
6
+ // Tool registry maps
7
+ export const toolRegistry = new Map();
8
+ export const toolHandlers = new Map();
9
+ // Helper to register tools
10
+ export function registerTool(tool, handler) {
11
+ toolRegistry.set(tool.name, tool);
12
+ toolHandlers.set(tool.name, handler);
13
+ }
14
+ // Import and register tools
15
+ // Phase 2: AWS Analysis
16
+ import { awsInitTool, handleAwsInit } from './aws-init.js';
17
+ import { awsAnalyzeTool, handleAwsAnalyze } from './aws-analyze.js';
18
+ import { awsStatusTool, handleAwsStatus } from './aws-status.js';
19
+ // Phase 3: Resource Configuration
20
+ import { awsAddComputeTool, handleAwsAddCompute } from './aws-add-compute.js';
21
+ import { awsAddDatabaseTool, handleAwsAddDatabase } from './aws-add-database.js';
22
+ import { awsAddStorageTool, handleAwsAddStorage } from './aws-add-storage.js';
23
+ import { awsAddNetworkTool, handleAwsAddNetwork } from './aws-add-network.js';
24
+ // Phase 4: CDK Generation
25
+ import { awsGenerateAllTool, handleAwsGenerateAll } from './aws-generate-all.js';
26
+ // Register all tools
27
+ registerTool(awsInitTool, handleAwsInit);
28
+ registerTool(awsAnalyzeTool, handleAwsAnalyze);
29
+ registerTool(awsStatusTool, handleAwsStatus);
30
+ registerTool(awsAddComputeTool, handleAwsAddCompute);
31
+ registerTool(awsAddDatabaseTool, handleAwsAddDatabase);
32
+ registerTool(awsAddStorageTool, handleAwsAddStorage);
33
+ registerTool(awsAddNetworkTool, handleAwsAddNetwork);
34
+ registerTool(awsGenerateAllTool, handleAwsGenerateAll);
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,qBAAqB;AACrB,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAgB,CAAC;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;AAE3D,2BAA2B;AAC3B,MAAM,UAAU,YAAY,CAAC,IAAU,EAAE,OAAoB;IAC3D,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,4BAA4B;AAC5B,wBAAwB;AACxB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEjE,kCAAkC;AAClC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,qBAAqB;AACrB,YAAY,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACzC,YAAY,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAC/C,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAC7C,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AACrD,YAAY,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;AACvD,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AACrD,YAAY,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;AACrD,YAAY,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC"}