@ampeco/public-api-mcp 0.2.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/LICENSE +21 -0
  2. package/README.md +734 -0
  3. package/dist/build/flattener.d.ts +39 -0
  4. package/dist/build/flattener.d.ts.map +1 -0
  5. package/dist/build/flattener.js +193 -0
  6. package/dist/build/flattener.js.map +1 -0
  7. package/dist/build/index.d.ts +13 -0
  8. package/dist/build/index.d.ts.map +1 -0
  9. package/dist/build/index.js +175 -0
  10. package/dist/build/index.js.map +1 -0
  11. package/dist/build/optimizer.d.ts +32 -0
  12. package/dist/build/optimizer.d.ts.map +1 -0
  13. package/dist/build/optimizer.js +222 -0
  14. package/dist/build/optimizer.js.map +1 -0
  15. package/dist/build/parser.d.ts +35 -0
  16. package/dist/build/parser.d.ts.map +1 -0
  17. package/dist/build/parser.js +83 -0
  18. package/dist/build/parser.js.map +1 -0
  19. package/dist/build/types.d.ts +91 -0
  20. package/dist/build/types.d.ts.map +1 -0
  21. package/dist/build/types.js +5 -0
  22. package/dist/build/types.js.map +1 -0
  23. package/dist/build/zod-generator.d.ts +34 -0
  24. package/dist/build/zod-generator.d.ts.map +1 -0
  25. package/dist/build/zod-generator.js +317 -0
  26. package/dist/build/zod-generator.js.map +1 -0
  27. package/dist/cli/index.d.ts +7 -0
  28. package/dist/cli/index.d.ts.map +1 -0
  29. package/dist/cli/index.js +99 -0
  30. package/dist/cli/index.js.map +1 -0
  31. package/dist/generated/build-stats.json +7 -0
  32. package/dist/generated/endpoints.json +32181 -0
  33. package/dist/generated/schemas.d.ts +8157 -0
  34. package/dist/generated/schemas.d.ts.map +1 -0
  35. package/dist/generated/schemas.js +2726 -0
  36. package/dist/generated/schemas.js.map +1 -0
  37. package/dist/generated/schemas.ts +3171 -0
  38. package/dist/server/factory.d.ts +11 -0
  39. package/dist/server/factory.d.ts.map +1 -0
  40. package/dist/server/factory.js +450 -0
  41. package/dist/server/factory.js.map +1 -0
  42. package/dist/server/factory.test.d.ts +5 -0
  43. package/dist/server/factory.test.d.ts.map +1 -0
  44. package/dist/server/factory.test.js +77 -0
  45. package/dist/server/factory.test.js.map +1 -0
  46. package/dist/server/http.d.ts +10 -0
  47. package/dist/server/http.d.ts.map +1 -0
  48. package/dist/server/http.js +110 -0
  49. package/dist/server/http.js.map +1 -0
  50. package/dist/server/index.d.ts +8 -0
  51. package/dist/server/index.d.ts.map +1 -0
  52. package/dist/server/index.js +1502 -0
  53. package/dist/server/index.js.map +1 -0
  54. package/dist/server/loader.d.ts +10 -0
  55. package/dist/server/loader.d.ts.map +1 -0
  56. package/dist/server/loader.js +19 -0
  57. package/dist/server/loader.js.map +1 -0
  58. package/dist/server/prompts.d.ts +6 -0
  59. package/dist/server/prompts.d.ts.map +1 -0
  60. package/dist/server/prompts.js +462 -0
  61. package/dist/server/prompts.js.map +1 -0
  62. package/dist/server/stdio.d.ts +10 -0
  63. package/dist/server/stdio.d.ts.map +1 -0
  64. package/dist/server/stdio.js +25 -0
  65. package/dist/server/stdio.js.map +1 -0
  66. package/package.json +60 -0
@@ -0,0 +1,317 @@
1
+ /**
2
+ * Zod Schema Generation Module
3
+ *
4
+ * This module handles:
5
+ * - Converting OpenAPI schemas to Zod validation schemas
6
+ * - Supporting complex types, enums, unions, and validation rules
7
+ * - Enabling runtime type safety and parameter validation
8
+ */
9
+ /**
10
+ * Generate Zod schema code from OpenAPI JSON schema
11
+ *
12
+ * @param schema - OpenAPI JSON schema
13
+ * @returns Zod schema as a string of TypeScript code
14
+ */
15
+ export function generateZodSchema(schema) {
16
+ if (!schema) {
17
+ return "z.unknown()";
18
+ }
19
+ // Handle references (should be dereferenced already, but just in case)
20
+ if (schema.$ref) {
21
+ console.warn(`[ZodGen] Found unresolved reference: ${schema.$ref}`);
22
+ return "z.unknown()";
23
+ }
24
+ // Handle nullable
25
+ const nullable = schema.nullable === true;
26
+ let zodSchema = generateZodSchemaCore(schema);
27
+ // Add nullable wrapper if needed
28
+ if (nullable) {
29
+ zodSchema = `${zodSchema}.nullable()`;
30
+ }
31
+ return zodSchema;
32
+ }
33
+ /**
34
+ * Generate core Zod schema without nullable wrapper
35
+ *
36
+ * @param schema - OpenAPI JSON schema
37
+ * @returns Zod schema string
38
+ */
39
+ function generateZodSchemaCore(schema) {
40
+ // Handle allOf (should be flattened already, but handle it)
41
+ if (schema.allOf) {
42
+ const schemas = schema.allOf.map((s) => generateZodSchemaCore(s));
43
+ return `z.intersection(${schemas.join(", ")})`;
44
+ }
45
+ // Handle anyOf
46
+ if (schema.anyOf) {
47
+ const schemas = schema.anyOf.map((s) => generateZodSchemaCore(s));
48
+ // Zod union requires at least 2 schemas
49
+ if (schemas.length === 1) {
50
+ return schemas[0];
51
+ }
52
+ return `z.union([${schemas.join(", ")}])`;
53
+ }
54
+ // Handle oneOf
55
+ if (schema.oneOf) {
56
+ const schemas = schema.oneOf.map((s) => generateZodSchemaCore(s));
57
+ // Zod union requires at least 2 schemas
58
+ if (schemas.length === 1) {
59
+ return schemas[0];
60
+ }
61
+ return `z.union([${schemas.join(", ")}])`;
62
+ }
63
+ // Handle enum
64
+ if (schema.enum) {
65
+ // Check if all enum values are strings
66
+ const allStrings = schema.enum.every((v) => typeof v === "string");
67
+ if (allStrings && schema.enum.length >= 1) {
68
+ const enumValues = schema.enum.map((v) => JSON.stringify(v)).join(", ");
69
+ return `z.enum([${enumValues}])`;
70
+ }
71
+ else {
72
+ // Fall back to union of literals for mixed types or non-string enums
73
+ const literalValues = schema.enum.map((v) => {
74
+ if (v === null)
75
+ return "z.null()";
76
+ if (typeof v === "number")
77
+ return `z.literal(${v})`;
78
+ return `z.literal(${JSON.stringify(v)})`;
79
+ }).join(", ");
80
+ if (schema.enum.length === 1) {
81
+ return literalValues;
82
+ }
83
+ return `z.union([${literalValues}])`;
84
+ }
85
+ }
86
+ // Handle type-specific schemas
87
+ switch (schema.type) {
88
+ case "string":
89
+ return generateStringSchema(schema);
90
+ case "number":
91
+ case "integer":
92
+ return generateNumberSchema(schema);
93
+ case "boolean":
94
+ return "z.boolean()";
95
+ case "array":
96
+ return generateArraySchema(schema);
97
+ case "object":
98
+ return generateObjectSchema(schema);
99
+ case "null":
100
+ return "z.null()";
101
+ default:
102
+ // No type specified, try to infer from other properties
103
+ if (schema.properties) {
104
+ return generateObjectSchema(schema);
105
+ }
106
+ if (schema.items) {
107
+ return generateArraySchema(schema);
108
+ }
109
+ return "z.unknown()";
110
+ }
111
+ }
112
+ /**
113
+ * Generate Zod string schema with validation
114
+ */
115
+ function generateStringSchema(schema) {
116
+ let zodSchema = "z.string()";
117
+ // Add format validation
118
+ if (schema.format) {
119
+ switch (schema.format) {
120
+ case "email":
121
+ zodSchema += ".email()";
122
+ break;
123
+ case "uri":
124
+ case "url":
125
+ zodSchema += ".url()";
126
+ break;
127
+ case "uuid":
128
+ zodSchema += ".uuid()";
129
+ break;
130
+ case "date-time":
131
+ zodSchema += ".datetime()";
132
+ break;
133
+ // Note: Other formats like "date", "time" could be added with custom validation
134
+ }
135
+ }
136
+ // Add length validation
137
+ if (schema.minLength !== undefined) {
138
+ zodSchema += `.min(${schema.minLength})`;
139
+ }
140
+ if (schema.maxLength !== undefined) {
141
+ zodSchema += `.max(${schema.maxLength})`;
142
+ }
143
+ // Add pattern validation
144
+ if (schema.pattern) {
145
+ const escapedPattern = schema.pattern.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
146
+ zodSchema += `.regex(new RegExp("${escapedPattern}"))`;
147
+ }
148
+ return zodSchema;
149
+ }
150
+ /**
151
+ * Generate Zod number schema with validation
152
+ */
153
+ function generateNumberSchema(schema) {
154
+ let zodSchema = schema.type === "integer" ? "z.number().int()" : "z.number()";
155
+ // Add range validation
156
+ if (schema.minimum !== undefined) {
157
+ if (schema.exclusiveMinimum) {
158
+ zodSchema += `.gt(${schema.minimum})`;
159
+ }
160
+ else {
161
+ zodSchema += `.min(${schema.minimum})`;
162
+ }
163
+ }
164
+ if (schema.maximum !== undefined) {
165
+ if (schema.exclusiveMaximum) {
166
+ zodSchema += `.lt(${schema.maximum})`;
167
+ }
168
+ else {
169
+ zodSchema += `.max(${schema.maximum})`;
170
+ }
171
+ }
172
+ // Add multiple of validation
173
+ if (schema.multipleOf !== undefined) {
174
+ zodSchema += `.multipleOf(${schema.multipleOf})`;
175
+ }
176
+ return zodSchema;
177
+ }
178
+ /**
179
+ * Generate Zod array schema
180
+ */
181
+ function generateArraySchema(schema) {
182
+ const itemsSchema = schema.items ? generateZodSchemaCore(schema.items) : "z.unknown()";
183
+ let zodSchema = `z.array(${itemsSchema})`;
184
+ // Add array length validation
185
+ if (schema.minItems !== undefined) {
186
+ zodSchema += `.min(${schema.minItems})`;
187
+ }
188
+ if (schema.maxItems !== undefined) {
189
+ zodSchema += `.max(${schema.maxItems})`;
190
+ }
191
+ return zodSchema;
192
+ }
193
+ /**
194
+ * Generate Zod object schema
195
+ */
196
+ function generateObjectSchema(schema) {
197
+ if (!schema.properties || Object.keys(schema.properties).length === 0) {
198
+ // Empty object or additionalProperties only
199
+ if (schema.additionalProperties) {
200
+ if (schema.additionalProperties === true) {
201
+ return "z.record(z.unknown())";
202
+ }
203
+ else {
204
+ const valueSchema = generateZodSchemaCore(schema.additionalProperties);
205
+ return `z.record(${valueSchema})`;
206
+ }
207
+ }
208
+ return "z.object({})";
209
+ }
210
+ const properties = [];
211
+ const required = new Set(schema.required || []);
212
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
213
+ const isRequired = required.has(propName);
214
+ let propZodSchema = generateZodSchemaCore(propSchema);
215
+ // Make optional if not required
216
+ if (!isRequired) {
217
+ propZodSchema += ".optional()";
218
+ }
219
+ // Escape property name if needed
220
+ const safePropName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(propName)
221
+ ? propName
222
+ : JSON.stringify(propName);
223
+ properties.push(`${safePropName}: ${propZodSchema}`);
224
+ }
225
+ let zodSchema = `z.object({\n ${properties.join(",\n ")}\n})`;
226
+ // Handle additionalProperties
227
+ if (schema.additionalProperties === false) {
228
+ zodSchema += ".strict()";
229
+ }
230
+ else if (schema.additionalProperties && schema.additionalProperties !== true) {
231
+ // passthrough() allows additional properties without validation
232
+ zodSchema += ".passthrough()";
233
+ }
234
+ return zodSchema;
235
+ }
236
+ /**
237
+ * Generate Zod schema for request parameters
238
+ *
239
+ * @param parameters - Array of parameter definitions
240
+ * @returns Object with Zod schemas for different parameter locations
241
+ */
242
+ export function generateParameterSchemas(parameters) {
243
+ const byLocation = {
244
+ path: [],
245
+ query: [],
246
+ header: [],
247
+ };
248
+ // Group parameters by location
249
+ for (const param of parameters) {
250
+ if (param.in && byLocation[param.in]) {
251
+ byLocation[param.in].push(param);
252
+ }
253
+ }
254
+ const result = {};
255
+ // Generate schema for each location
256
+ for (const [location, params] of Object.entries(byLocation)) {
257
+ if (params.length === 0)
258
+ continue;
259
+ const properties = [];
260
+ const required = new Set(params.filter((p) => p.required).map((p) => p.name));
261
+ for (const param of params) {
262
+ const isRequired = required.has(param.name);
263
+ let paramSchema = param.schema ? generateZodSchemaCore(param.schema) : "z.string()";
264
+ if (!isRequired) {
265
+ paramSchema += ".optional()";
266
+ }
267
+ const safeName = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(param.name)
268
+ ? param.name
269
+ : JSON.stringify(param.name);
270
+ properties.push(`${safeName}: ${paramSchema}`);
271
+ }
272
+ result[location] = `z.object({\n ${properties.join(",\n ")}\n})`;
273
+ }
274
+ return result;
275
+ }
276
+ /**
277
+ * Generate complete Zod schemas file for all endpoints
278
+ *
279
+ * @param endpoints - Array of optimized endpoints
280
+ * @returns TypeScript code for Zod schemas
281
+ */
282
+ export function generateZodSchemasFile(endpoints) {
283
+ const lines = [
284
+ 'import { z } from "zod";',
285
+ "",
286
+ "// Auto-generated Zod schemas from OpenAPI specification",
287
+ "// Do not edit manually - regenerate with build script",
288
+ "",
289
+ ];
290
+ for (const endpoint of endpoints) {
291
+ const safeOperationId = endpoint.operationId
292
+ ?.replace(/[^a-zA-Z0-9]/g, "_")
293
+ .replace(/^(\d)/, "_$1") || `${endpoint.method}_${endpoint.path.replace(/[^a-zA-Z0-9]/g, "_")}`;
294
+ lines.push(`// ${endpoint.method} ${endpoint.path}`);
295
+ // Generate parameter schemas
296
+ if (endpoint.parameters && endpoint.parameters.length > 0) {
297
+ const paramSchemas = generateParameterSchemas(endpoint.parameters);
298
+ if (paramSchemas.path) {
299
+ lines.push(`export const ${safeOperationId}PathParams = ${paramSchemas.path};`);
300
+ }
301
+ if (paramSchemas.query) {
302
+ lines.push(`export const ${safeOperationId}QueryParams = ${paramSchemas.query};`);
303
+ }
304
+ if (paramSchemas.header) {
305
+ lines.push(`export const ${safeOperationId}HeaderParams = ${paramSchemas.header};`);
306
+ }
307
+ }
308
+ // Generate request body schema
309
+ if (endpoint.requestBody?.content?.["application/json"]?.schema) {
310
+ const bodySchema = generateZodSchema(endpoint.requestBody.content["application/json"].schema);
311
+ lines.push(`export const ${safeOperationId}Body = ${bodySchema};`);
312
+ }
313
+ lines.push("");
314
+ }
315
+ return lines.join("\n");
316
+ }
317
+ //# sourceMappingURL=zod-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-generator.js","sourceRoot":"","sources":["../../src/build/zod-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAW;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,uEAAuE;IACvE,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,wCAAwC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IAE1C,IAAI,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE9C,iCAAiC;IACjC,IAAI,QAAQ,EAAE,CAAC;QACb,SAAS,GAAG,GAAG,SAAS,aAAa,CAAC;IACxC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,MAAW;IACxC,4DAA4D;IAC5D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,OAAO,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IACjD,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,wCAAwC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,eAAe;IACf,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,wCAAwC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5C,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,uCAAuC;QACvC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;QACxE,IAAI,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,OAAO,WAAW,UAAU,IAAI,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,qEAAqE;YACrE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;gBAC/C,IAAI,CAAC,KAAK,IAAI;oBAAE,OAAO,UAAU,CAAC;gBAClC,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,aAAa,CAAC,GAAG,CAAC;gBACpD,OAAO,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,OAAO,YAAY,aAAa,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEtC,KAAK,QAAQ,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEtC,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC;QAEvB,KAAK,OAAO;YACV,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAErC,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEtC,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;QAEpB;YACE,wDAAwD;YACxD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YACD,OAAO,aAAa,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAW;IACvC,IAAI,SAAS,GAAG,YAAY,CAAC;IAE7B,wBAAwB;IACxB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,KAAK,OAAO;gBACV,SAAS,IAAI,UAAU,CAAC;gBACxB,MAAM;YACR,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,SAAS,IAAI,QAAQ,CAAC;gBACtB,MAAM;YACR,KAAK,MAAM;gBACT,SAAS,IAAI,SAAS,CAAC;gBACvB,MAAM;YACR,KAAK,WAAW;gBACd,SAAS,IAAI,aAAa,CAAC;gBAC3B,MAAM;YACR,gFAAgF;QAClF,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,SAAS,IAAI,QAAQ,MAAM,CAAC,SAAS,GAAG,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,SAAS,IAAI,QAAQ,MAAM,CAAC,SAAS,GAAG,CAAC;IAC3C,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAClF,SAAS,IAAI,sBAAsB,cAAc,KAAK,CAAC;IACzD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAW;IACvC,IAAI,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC;IAE9E,uBAAuB;IACvB,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,SAAS,IAAI,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,SAAS,IAAI,QAAQ,MAAM,CAAC,OAAO,GAAG,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,SAAS,IAAI,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,SAAS,IAAI,QAAQ,MAAM,CAAC,OAAO,GAAG,CAAC;QACzC,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,SAAS,IAAI,eAAe,MAAM,CAAC,UAAU,GAAG,CAAC;IACnD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,MAAW;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;IACvF,IAAI,SAAS,GAAG,WAAW,WAAW,GAAG,CAAC;IAE1C,8BAA8B;IAC9B,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,SAAS,IAAI,QAAQ,MAAM,CAAC,QAAQ,GAAG,CAAC;IAC1C,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,SAAS,IAAI,QAAQ,MAAM,CAAC,QAAQ,GAAG,CAAC;IAC1C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAW;IACvC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,4CAA4C;QAC5C,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,IAAI,MAAM,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;gBACzC,OAAO,uBAAuB,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBACvE,OAAO,YAAY,WAAW,GAAG,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAEhD,KAAK,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,aAAa,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAEtD,gCAAgC;QAChC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,aAAa,IAAI,aAAa,CAAC;QACjC,CAAC;QAED,iCAAiC;QACjC,MAAM,YAAY,GAAG,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9D,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAE7B,UAAU,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,aAAa,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,SAAS,GAAG,iBAAiB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAEhE,8BAA8B;IAC9B,IAAI,MAAM,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;QAC1C,SAAS,IAAI,WAAW,CAAC;IAC3B,CAAC;SAAM,IAAI,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;QAC/E,gEAAgE;QAChE,SAAS,IAAI,gBAAgB,CAAC;IAChC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAiB;IAKxD,MAAM,UAAU,GAA0B;QACxC,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACX,CAAC;IAEF,+BAA+B;IAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,EAAE,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACrC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAuD,EAAE,CAAC;IAEtE,oCAAoC;IACpC,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAElC,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YAEpF,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,WAAW,IAAI,aAAa,CAAC;YAC/B,CAAC;YAED,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5D,CAAC,CAAC,KAAK,CAAC,IAAI;gBACZ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE/B,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,WAAW,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,CAAC,QAA+B,CAAC,GAAG,iBAAiB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5F,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,SAAgB;IACrD,MAAM,KAAK,GAAa;QACtB,0BAA0B;QAC1B,EAAE;QACF,0DAA0D;QAC1D,wDAAwD;QACxD,EAAE;KACH,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW;YAC1C,EAAE,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;aAC9B,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC;QAElG,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAErD,6BAA6B;QAC7B,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,YAAY,GAAG,wBAAwB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAEnE,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,eAAe,gBAAgB,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,gBAAgB,eAAe,iBAAiB,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,gBAAgB,eAAe,kBAAkB,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAED,+BAA+B;QAC/B,IAAI,QAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;YAChE,MAAM,UAAU,GAAG,iBAAiB,CAClC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CACxD,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,gBAAgB,eAAe,UAAU,UAAU,GAAG,CAAC,CAAC;QACrE,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI Entry Point for MCP Server
4
+ * Supports both stdio and HTTP modes
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;GAGG"}
@@ -0,0 +1,99 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * CLI Entry Point for MCP Server
4
+ * Supports both stdio and HTTP modes
5
+ */
6
+ import { parseArgs } from 'node:util';
7
+ import { startStdioServer } from '../server/stdio.js';
8
+ import { startHttpServer } from '../server/http.js';
9
+ function printHelp() {
10
+ console.log(`
11
+ AMPECO Public API MCP Server
12
+
13
+ Usage:
14
+ ampeco-api-mcp [options]
15
+
16
+ Options:
17
+ --stdio Run in stdio mode (for Claude Desktop, NPX)
18
+ --http Run in HTTP mode (for remote access)
19
+ --hostname <url> Target API hostname (required for stdio mode)
20
+ --token <token> Bearer token for API authentication (stdio mode)
21
+ --port <port> Port for HTTP server (default: 3000)
22
+ --help Show this help message
23
+
24
+ Examples:
25
+ Stdio mode (local):
26
+ ampeco-api-mcp --stdio --hostname http://demo.charge.alex2.dev.ampeco.tech --token $AMPECO_TOKEN
27
+
28
+ HTTP mode (remote):
29
+ ampeco-api-mcp --http --port 3001
30
+
31
+ Environment Variables:
32
+ AMPECO_BEARER_TOKEN Bearer token (alternative to --token)
33
+
34
+ Notes:
35
+ - Stdio mode uses stderr for all logging to avoid interfering with MCP protocol
36
+ - For development, use 'npm run dev:stdio' which redirects build logs to stderr
37
+ - For production, run 'npm run build' first, then use the compiled CLI
38
+ `);
39
+ }
40
+ async function main() {
41
+ const { values } = parseArgs({
42
+ options: {
43
+ stdio: { type: 'boolean', default: false },
44
+ http: { type: 'boolean', default: false },
45
+ port: { type: 'string', default: '3000' },
46
+ hostname: { type: 'string' },
47
+ token: { type: 'string' },
48
+ help: { type: 'boolean', default: false },
49
+ },
50
+ allowPositionals: false,
51
+ });
52
+ if (values.help) {
53
+ printHelp();
54
+ process.exit(0);
55
+ }
56
+ // Validate arguments
57
+ if (values.stdio && values.http) {
58
+ console.error('Error: Cannot specify both --stdio and --http');
59
+ console.error('\nUsage:');
60
+ console.error(' Stdio mode: ampeco-api-mcp --stdio --hostname <hostname> [--token <token>]');
61
+ console.error(' HTTP mode: ampeco-api-mcp --http [--port <port>]');
62
+ process.exit(1);
63
+ }
64
+ // Default to stdio if neither specified (for NPX compatibility)
65
+ const useStdio = values.stdio || !values.http;
66
+ if (useStdio) {
67
+ // Stdio mode: requires hostname and token
68
+ if (!values.hostname) {
69
+ console.error('Error: --hostname is required in stdio mode');
70
+ console.error('\nUsage:');
71
+ console.error(' ampeco-api-mcp --stdio --hostname <hostname> [--token <token>]');
72
+ console.error('\nExample:');
73
+ console.error(' ampeco-api-mcp --stdio --hostname http://demo.charge.alex2.dev.ampeco.tech --token $AMPECO_TOKEN');
74
+ console.error('\nNote: Token can also be provided via AMPECO_BEARER_TOKEN environment variable');
75
+ process.exit(1);
76
+ }
77
+ const token = values.token || process.env.AMPECO_BEARER_TOKEN || '';
78
+ if (!token) {
79
+ console.error('Warning: No bearer token provided. API requests may fail without authentication.');
80
+ console.error('Provide token via --token argument or AMPECO_BEARER_TOKEN environment variable.\n');
81
+ }
82
+ await startStdioServer(token, values.hostname);
83
+ }
84
+ else {
85
+ // HTTP mode: requires port
86
+ const port = parseInt(values.port || '3000', 10);
87
+ if (isNaN(port) || port < 1 || port > 65535) {
88
+ console.error(`Error: Invalid port number: ${values.port}`);
89
+ console.error('Port must be a number between 1 and 65535');
90
+ process.exit(1);
91
+ }
92
+ await startHttpServer(port);
93
+ }
94
+ }
95
+ main().catch((error) => {
96
+ console.error('Fatal error:', error);
97
+ process.exit(1);
98
+ });
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ {
2
+ "totalEndpoints": 445,
3
+ "originalSize": 815026,
4
+ "optimizedSize": 537657,
5
+ "reductionPercent": 34.03,
6
+ "buildDuration": 584
7
+ }