@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.
- package/LICENSE +21 -0
- package/README.md +141 -0
- package/dist/core/aws-analyzer.d.ts +73 -0
- package/dist/core/aws-analyzer.d.ts.map +1 -0
- package/dist/core/aws-analyzer.js +429 -0
- package/dist/core/aws-analyzer.js.map +1 -0
- package/dist/core/cdk-generator.d.ts +26 -0
- package/dist/core/cdk-generator.d.ts.map +1 -0
- package/dist/core/cdk-generator.js +790 -0
- package/dist/core/cdk-generator.js.map +1 -0
- package/dist/core/template-engine.d.ts +32 -0
- package/dist/core/template-engine.d.ts.map +1 -0
- package/dist/core/template-engine.js +131 -0
- package/dist/core/template-engine.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +21 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +158 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/aws-add-compute.d.ts +8 -0
- package/dist/tools/aws-add-compute.d.ts.map +1 -0
- package/dist/tools/aws-add-compute.js +269 -0
- package/dist/tools/aws-add-compute.js.map +1 -0
- package/dist/tools/aws-add-database.d.ts +8 -0
- package/dist/tools/aws-add-database.d.ts.map +1 -0
- package/dist/tools/aws-add-database.js +230 -0
- package/dist/tools/aws-add-database.js.map +1 -0
- package/dist/tools/aws-add-network.d.ts +8 -0
- package/dist/tools/aws-add-network.d.ts.map +1 -0
- package/dist/tools/aws-add-network.js +240 -0
- package/dist/tools/aws-add-network.js.map +1 -0
- package/dist/tools/aws-add-storage.d.ts +8 -0
- package/dist/tools/aws-add-storage.d.ts.map +1 -0
- package/dist/tools/aws-add-storage.js +207 -0
- package/dist/tools/aws-add-storage.js.map +1 -0
- package/dist/tools/aws-analyze.d.ts +8 -0
- package/dist/tools/aws-analyze.d.ts.map +1 -0
- package/dist/tools/aws-analyze.js +123 -0
- package/dist/tools/aws-analyze.js.map +1 -0
- package/dist/tools/aws-generate-all.d.ts +8 -0
- package/dist/tools/aws-generate-all.d.ts.map +1 -0
- package/dist/tools/aws-generate-all.js +197 -0
- package/dist/tools/aws-generate-all.js.map +1 -0
- package/dist/tools/aws-init.d.ts +8 -0
- package/dist/tools/aws-init.d.ts.map +1 -0
- package/dist/tools/aws-init.js +114 -0
- package/dist/tools/aws-init.js.map +1 -0
- package/dist/tools/aws-status.d.ts +8 -0
- package/dist/tools/aws-status.d.ts.map +1 -0
- package/dist/tools/aws-status.js +110 -0
- package/dist/tools/aws-status.js.map +1 -0
- package/dist/tools/index.d.ts +51 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +35 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +644 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- 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"}
|