@jaypie/mcp 0.4.0 → 0.5.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 (66) hide show
  1. package/README.md +3 -2
  2. package/dist/createMcpServer.js +34 -0
  3. package/dist/createMcpServer.js.map +1 -0
  4. package/dist/index.js +3 -92
  5. package/dist/index.js.map +1 -1
  6. package/dist/mcpExpressHandler.js +56 -0
  7. package/dist/mcpExpressHandler.js.map +1 -0
  8. package/dist/suite.d.ts +12 -0
  9. package/dist/suite.js +23 -2426
  10. package/dist/suite.js.map +1 -1
  11. package/dist/suites/aws/aws.js +328 -0
  12. package/dist/suites/aws/aws.js.map +1 -0
  13. package/dist/suites/aws/help.md +42 -0
  14. package/dist/suites/aws/index.d.ts +102 -0
  15. package/dist/suites/aws/index.js +258 -0
  16. package/dist/suites/aws/index.js.map +1 -0
  17. package/dist/suites/datadog/datadog.js +828 -0
  18. package/dist/suites/datadog/datadog.js.map +1 -0
  19. package/dist/suites/datadog/help.md +39 -0
  20. package/dist/suites/datadog/index.d.ts +24 -0
  21. package/dist/suites/datadog/index.js +156 -0
  22. package/dist/suites/datadog/index.js.map +1 -0
  23. package/dist/suites/docs/index.d.ts +14 -0
  24. package/dist/suites/docs/index.js +246 -0
  25. package/dist/suites/docs/index.js.map +1 -0
  26. package/dist/suites/docs/release-notes/help.md +37 -0
  27. package/dist/suites/llm/help.md +46 -0
  28. package/dist/suites/llm/index.d.ts +23 -0
  29. package/dist/suites/llm/index.js +65 -0
  30. package/dist/suites/llm/index.js.map +1 -0
  31. package/dist/suites/llm/llm.js +96 -0
  32. package/dist/suites/llm/llm.js.map +1 -0
  33. package/package.json +4 -3
  34. package/release-notes/constructs/1.2.18.md +12 -0
  35. package/release-notes/dynamodb/0.4.0.md +44 -0
  36. package/release-notes/fabric/0.2.0.md +77 -0
  37. package/release-notes/llm/1.2.5.md +25 -0
  38. package/release-notes/llm/1.2.6.md +55 -0
  39. package/release-notes/mcp/0.5.0.md +70 -0
  40. package/release-notes/testkit/1.2.17.md +30 -0
  41. package/skills/agents.md +18 -8
  42. package/skills/aws.md +232 -60
  43. package/skills/contents.md +15 -0
  44. package/skills/datadog.md +98 -64
  45. package/skills/development.md +19 -0
  46. package/skills/documentation.md +27 -0
  47. package/skills/dynamodb.md +37 -28
  48. package/skills/fabric.md +2 -2
  49. package/skills/infrastructure.md +21 -0
  50. package/skills/issues.md +55 -0
  51. package/skills/llm.md +381 -0
  52. package/skills/meta.md +17 -0
  53. package/skills/patterns.md +17 -0
  54. package/skills/secrets.md +74 -18
  55. package/skills/skills.md +22 -0
  56. package/skills/style.md +1 -24
  57. package/skills/tools-aws.md +166 -0
  58. package/skills/tools-datadog.md +199 -0
  59. package/skills/tools-dynamodb.md +168 -0
  60. package/skills/tools.md +58 -80
  61. package/skills/vocabulary.md +160 -0
  62. package/skills/topics.md +0 -116
  63. package/skills/writing.md +0 -153
  64. /package/dist/{aws.d.ts → suites/aws/aws.d.ts} +0 -0
  65. /package/dist/{datadog.d.ts → suites/datadog/datadog.d.ts} +0 -0
  66. /package/dist/{llm.d.ts → suites/llm/llm.d.ts} +0 -0
@@ -0,0 +1,258 @@
1
+ import { fabricService } from '@jaypie/fabric';
2
+ import * as fs from 'node:fs/promises';
3
+ import * as path from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { purgeSQSQueue, receiveSQSMessage, getSQSQueueAttributes, listSQSQueues, getDynamoDBItem, queryDynamoDB, scanDynamoDB, describeDynamoDBTable, describeStack, listS3Objects, filterLogEvents, stopStepFunctionExecution, listStepFunctionExecutions, getLambdaFunction, listLambdaFunctions, listAwsProfiles } from './aws.js';
6
+ export { executeAwsCommand } from './aws.js';
7
+
8
+ /**
9
+ * AWS Suite - Unified AWS CLI access
10
+ */
11
+ const __dirname$1 = path.dirname(fileURLToPath(import.meta.url));
12
+ // Silent logger for direct execution
13
+ const log = {
14
+ error: () => { },
15
+ info: () => { },
16
+ };
17
+ async function getHelp() {
18
+ return fs.readFile(path.join(__dirname$1, "help.md"), "utf-8");
19
+ }
20
+ const awsService = fabricService({
21
+ alias: "aws",
22
+ description: "Access AWS services via CLI. Commands: list_profiles, lambda_*, stepfunctions_*, logs_*, s3_*, cloudformation_*, dynamodb_*, sqs_*. Call with no args for help.",
23
+ input: {
24
+ command: {
25
+ description: "Command to execute (omit for help)",
26
+ required: false,
27
+ type: String,
28
+ },
29
+ input: {
30
+ description: "Command parameters",
31
+ required: false,
32
+ type: Object,
33
+ },
34
+ },
35
+ service: async ({ command, input: params, }) => {
36
+ if (!command || command === "help") {
37
+ return getHelp();
38
+ }
39
+ const p = params || {};
40
+ switch (command) {
41
+ case "list_profiles": {
42
+ const result = await listAwsProfiles(log);
43
+ if (!result.success)
44
+ throw new Error(result.error);
45
+ return result.data;
46
+ }
47
+ case "lambda_list_functions": {
48
+ const result = await listLambdaFunctions({
49
+ functionNamePrefix: p.functionNamePrefix,
50
+ maxResults: p.maxResults,
51
+ profile: p.profile,
52
+ region: p.region,
53
+ }, log);
54
+ if (!result.success)
55
+ throw new Error(result.error);
56
+ return result.data;
57
+ }
58
+ case "lambda_get_function": {
59
+ if (!p.functionName)
60
+ throw new Error("functionName is required");
61
+ const result = await getLambdaFunction({
62
+ functionName: p.functionName,
63
+ profile: p.profile,
64
+ region: p.region,
65
+ }, log);
66
+ if (!result.success)
67
+ throw new Error(result.error);
68
+ return result.data;
69
+ }
70
+ case "stepfunctions_list_executions": {
71
+ if (!p.stateMachineArn)
72
+ throw new Error("stateMachineArn is required");
73
+ const result = await listStepFunctionExecutions({
74
+ maxResults: p.maxResults,
75
+ profile: p.profile,
76
+ region: p.region,
77
+ stateMachineArn: p.stateMachineArn,
78
+ statusFilter: p.statusFilter,
79
+ }, log);
80
+ if (!result.success)
81
+ throw new Error(result.error);
82
+ return result.data;
83
+ }
84
+ case "stepfunctions_stop_execution": {
85
+ if (!p.executionArn)
86
+ throw new Error("executionArn is required");
87
+ const result = await stopStepFunctionExecution({
88
+ cause: p.cause,
89
+ executionArn: p.executionArn,
90
+ profile: p.profile,
91
+ region: p.region,
92
+ }, log);
93
+ if (!result.success)
94
+ throw new Error(result.error);
95
+ return result.data;
96
+ }
97
+ case "logs_filter_log_events": {
98
+ if (!p.logGroupName)
99
+ throw new Error("logGroupName is required");
100
+ const result = await filterLogEvents({
101
+ endTime: p.endTime || "now",
102
+ filterPattern: p.filterPattern,
103
+ limit: p.limit || 100,
104
+ logGroupName: p.logGroupName,
105
+ profile: p.profile,
106
+ region: p.region,
107
+ startTime: p.startTime || "now-15m",
108
+ }, log);
109
+ if (!result.success)
110
+ throw new Error(result.error);
111
+ return result.data;
112
+ }
113
+ case "s3_list_objects": {
114
+ if (!p.bucket)
115
+ throw new Error("bucket is required");
116
+ const result = await listS3Objects({
117
+ bucket: p.bucket,
118
+ maxResults: p.maxResults,
119
+ prefix: p.prefix,
120
+ profile: p.profile,
121
+ region: p.region,
122
+ }, log);
123
+ if (!result.success)
124
+ throw new Error(result.error);
125
+ return result.data;
126
+ }
127
+ case "cloudformation_describe_stack": {
128
+ if (!p.stackName)
129
+ throw new Error("stackName is required");
130
+ const result = await describeStack({
131
+ profile: p.profile,
132
+ region: p.region,
133
+ stackName: p.stackName,
134
+ }, log);
135
+ if (!result.success)
136
+ throw new Error(result.error);
137
+ return result.data;
138
+ }
139
+ case "dynamodb_describe_table": {
140
+ if (!p.tableName)
141
+ throw new Error("tableName is required");
142
+ const result = await describeDynamoDBTable({
143
+ profile: p.profile,
144
+ region: p.region,
145
+ tableName: p.tableName,
146
+ }, log);
147
+ if (!result.success)
148
+ throw new Error(result.error);
149
+ return result.data;
150
+ }
151
+ case "dynamodb_scan": {
152
+ if (!p.tableName)
153
+ throw new Error("tableName is required");
154
+ const result = await scanDynamoDB({
155
+ expressionAttributeValues: p.expressionAttributeValues,
156
+ filterExpression: p.filterExpression,
157
+ limit: p.limit || 25,
158
+ profile: p.profile,
159
+ region: p.region,
160
+ tableName: p.tableName,
161
+ }, log);
162
+ if (!result.success)
163
+ throw new Error(result.error);
164
+ return result.data;
165
+ }
166
+ case "dynamodb_query": {
167
+ if (!p.tableName)
168
+ throw new Error("tableName is required");
169
+ if (!p.keyConditionExpression)
170
+ throw new Error("keyConditionExpression is required");
171
+ if (!p.expressionAttributeValues)
172
+ throw new Error("expressionAttributeValues is required");
173
+ const result = await queryDynamoDB({
174
+ expressionAttributeValues: p.expressionAttributeValues,
175
+ filterExpression: p.filterExpression,
176
+ indexName: p.indexName,
177
+ keyConditionExpression: p.keyConditionExpression,
178
+ limit: p.limit,
179
+ profile: p.profile,
180
+ region: p.region,
181
+ scanIndexForward: p.scanIndexForward,
182
+ tableName: p.tableName,
183
+ }, log);
184
+ if (!result.success)
185
+ throw new Error(result.error);
186
+ return result.data;
187
+ }
188
+ case "dynamodb_get_item": {
189
+ if (!p.tableName)
190
+ throw new Error("tableName is required");
191
+ if (!p.key)
192
+ throw new Error("key is required");
193
+ const result = await getDynamoDBItem({
194
+ key: p.key,
195
+ profile: p.profile,
196
+ region: p.region,
197
+ tableName: p.tableName,
198
+ }, log);
199
+ if (!result.success)
200
+ throw new Error(result.error);
201
+ return result.data;
202
+ }
203
+ case "sqs_list_queues": {
204
+ const result = await listSQSQueues({
205
+ profile: p.profile,
206
+ queueNamePrefix: p.queueNamePrefix,
207
+ region: p.region,
208
+ }, log);
209
+ if (!result.success)
210
+ throw new Error(result.error);
211
+ return result.data;
212
+ }
213
+ case "sqs_get_queue_attributes": {
214
+ if (!p.queueUrl)
215
+ throw new Error("queueUrl is required");
216
+ const result = await getSQSQueueAttributes({
217
+ profile: p.profile,
218
+ queueUrl: p.queueUrl,
219
+ region: p.region,
220
+ }, log);
221
+ if (!result.success)
222
+ throw new Error(result.error);
223
+ return result.data;
224
+ }
225
+ case "sqs_receive_message": {
226
+ if (!p.queueUrl)
227
+ throw new Error("queueUrl is required");
228
+ const result = await receiveSQSMessage({
229
+ maxNumberOfMessages: p.maxNumberOfMessages || 1,
230
+ profile: p.profile,
231
+ queueUrl: p.queueUrl,
232
+ region: p.region,
233
+ visibilityTimeout: p.visibilityTimeout || 30,
234
+ }, log);
235
+ if (!result.success)
236
+ throw new Error(result.error);
237
+ return result.data;
238
+ }
239
+ case "sqs_purge_queue": {
240
+ if (!p.queueUrl)
241
+ throw new Error("queueUrl is required");
242
+ const result = await purgeSQSQueue({
243
+ profile: p.profile,
244
+ queueUrl: p.queueUrl,
245
+ region: p.region,
246
+ }, log);
247
+ if (!result.success)
248
+ throw new Error(result.error);
249
+ return { success: true };
250
+ }
251
+ default:
252
+ throw new Error(`Unknown command: ${command}. Use aws() for help.`);
253
+ }
254
+ },
255
+ });
256
+
257
+ export { awsService, describeDynamoDBTable, describeStack, filterLogEvents, getDynamoDBItem, getLambdaFunction, getSQSQueueAttributes, listAwsProfiles, listLambdaFunctions, listS3Objects, listSQSQueues, listStepFunctionExecutions, purgeSQSQueue, queryDynamoDB, receiveSQSMessage, scanDynamoDB, stopStepFunctionExecution };
258
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/suites/aws/index.ts"],"sourcesContent":["/**\n * AWS Suite - Unified AWS CLI access\n */\nimport { fabricService } from \"@jaypie/fabric\";\nimport * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n describeDynamoDBTable,\n describeStack,\n filterLogEvents,\n getDynamoDBItem,\n getLambdaFunction,\n getSQSQueueAttributes,\n listAwsProfiles,\n listLambdaFunctions,\n listS3Objects,\n listSQSQueues,\n listStepFunctionExecutions,\n purgeSQSQueue,\n queryDynamoDB,\n receiveSQSMessage,\n scanDynamoDB,\n stopStepFunctionExecution,\n} from \"./aws.js\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\n// Silent logger for direct execution\nconst log = {\n error: () => {},\n info: () => {},\n};\n\nasync function getHelp(): Promise<string> {\n return fs.readFile(path.join(__dirname, \"help.md\"), \"utf-8\");\n}\n\n// Input type for the unified AWS service\ninterface AwsInput {\n bucket?: string;\n cause?: string;\n command?: string;\n endTime?: string;\n executionArn?: string;\n expressionAttributeValues?: string;\n filterExpression?: string;\n filterPattern?: string;\n functionName?: string;\n functionNamePrefix?: string;\n indexName?: string;\n key?: string;\n keyConditionExpression?: string;\n limit?: number;\n logGroupName?: string;\n maxNumberOfMessages?: number;\n maxResults?: number;\n prefix?: string;\n profile?: string;\n queueNamePrefix?: string;\n queueUrl?: string;\n region?: string;\n scanIndexForward?: boolean;\n stackName?: string;\n startTime?: string;\n stateMachineArn?: string;\n statusFilter?:\n | \"RUNNING\"\n | \"SUCCEEDED\"\n | \"FAILED\"\n | \"TIMED_OUT\"\n | \"ABORTED\"\n | \"PENDING_REDRIVE\";\n tableName?: string;\n visibilityTimeout?: number;\n}\n\nexport const awsService = fabricService({\n alias: \"aws\",\n description:\n \"Access AWS services via CLI. Commands: list_profiles, lambda_*, stepfunctions_*, logs_*, s3_*, cloudformation_*, dynamodb_*, sqs_*. Call with no args for help.\",\n input: {\n command: {\n description: \"Command to execute (omit for help)\",\n required: false,\n type: String,\n },\n input: {\n description: \"Command parameters\",\n required: false,\n type: Object,\n },\n },\n service: async ({\n command,\n input: params,\n }: {\n command?: string;\n input?: AwsInput;\n }) => {\n if (!command || command === \"help\") {\n return getHelp();\n }\n\n const p = params || {};\n\n switch (command) {\n case \"list_profiles\": {\n const result = await listAwsProfiles(log);\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"lambda_list_functions\": {\n const result = await listLambdaFunctions(\n {\n functionNamePrefix: p.functionNamePrefix,\n maxResults: p.maxResults,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"lambda_get_function\": {\n if (!p.functionName) throw new Error(\"functionName is required\");\n const result = await getLambdaFunction(\n {\n functionName: p.functionName,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"stepfunctions_list_executions\": {\n if (!p.stateMachineArn) throw new Error(\"stateMachineArn is required\");\n const result = await listStepFunctionExecutions(\n {\n maxResults: p.maxResults,\n profile: p.profile,\n region: p.region,\n stateMachineArn: p.stateMachineArn,\n statusFilter: p.statusFilter,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"stepfunctions_stop_execution\": {\n if (!p.executionArn) throw new Error(\"executionArn is required\");\n const result = await stopStepFunctionExecution(\n {\n cause: p.cause,\n executionArn: p.executionArn,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"logs_filter_log_events\": {\n if (!p.logGroupName) throw new Error(\"logGroupName is required\");\n const result = await filterLogEvents(\n {\n endTime: p.endTime || \"now\",\n filterPattern: p.filterPattern,\n limit: p.limit || 100,\n logGroupName: p.logGroupName,\n profile: p.profile,\n region: p.region,\n startTime: p.startTime || \"now-15m\",\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"s3_list_objects\": {\n if (!p.bucket) throw new Error(\"bucket is required\");\n const result = await listS3Objects(\n {\n bucket: p.bucket,\n maxResults: p.maxResults,\n prefix: p.prefix,\n profile: p.profile,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"cloudformation_describe_stack\": {\n if (!p.stackName) throw new Error(\"stackName is required\");\n const result = await describeStack(\n {\n profile: p.profile,\n region: p.region,\n stackName: p.stackName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_describe_table\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n const result = await describeDynamoDBTable(\n {\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_scan\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n const result = await scanDynamoDB(\n {\n expressionAttributeValues: p.expressionAttributeValues,\n filterExpression: p.filterExpression,\n limit: p.limit || 25,\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_query\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n if (!p.keyConditionExpression)\n throw new Error(\"keyConditionExpression is required\");\n if (!p.expressionAttributeValues)\n throw new Error(\"expressionAttributeValues is required\");\n const result = await queryDynamoDB(\n {\n expressionAttributeValues: p.expressionAttributeValues,\n filterExpression: p.filterExpression,\n indexName: p.indexName,\n keyConditionExpression: p.keyConditionExpression,\n limit: p.limit,\n profile: p.profile,\n region: p.region,\n scanIndexForward: p.scanIndexForward,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"dynamodb_get_item\": {\n if (!p.tableName) throw new Error(\"tableName is required\");\n if (!p.key) throw new Error(\"key is required\");\n const result = await getDynamoDBItem(\n {\n key: p.key,\n profile: p.profile,\n region: p.region,\n tableName: p.tableName,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_list_queues\": {\n const result = await listSQSQueues(\n {\n profile: p.profile,\n queueNamePrefix: p.queueNamePrefix,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_get_queue_attributes\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await getSQSQueueAttributes(\n {\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_receive_message\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await receiveSQSMessage(\n {\n maxNumberOfMessages: p.maxNumberOfMessages || 1,\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n visibilityTimeout: p.visibilityTimeout || 30,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return result.data;\n }\n\n case \"sqs_purge_queue\": {\n if (!p.queueUrl) throw new Error(\"queueUrl is required\");\n const result = await purgeSQSQueue(\n {\n profile: p.profile,\n queueUrl: p.queueUrl,\n region: p.region,\n },\n log,\n );\n if (!result.success) throw new Error(result.error);\n return { success: true };\n }\n\n default:\n throw new Error(`Unknown command: ${command}. Use aws() for help.`);\n }\n },\n});\n\n// Re-export types and functions for testing\nexport * from \"./aws.js\";\n"],"names":["__dirname"],"mappings":"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"}