@ampeco/public-api-mcp 0.3.0 → 0.4.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 (38) hide show
  1. package/README.md +61 -0
  2. package/dist/build/index.js +52 -7
  3. package/dist/build/index.js.map +1 -1
  4. package/dist/build/types.d.ts +24 -2
  5. package/dist/build/types.d.ts.map +1 -1
  6. package/dist/generated/build-stats.json +7 -1
  7. package/dist/generated/endpoints.json +9 -3
  8. package/dist/generated/response-schemas.json +84437 -0
  9. package/dist/generated/schemas.d.ts +46 -46
  10. package/dist/server/factory.d.ts +2 -2
  11. package/dist/server/factory.d.ts.map +1 -1
  12. package/dist/server/factory.js +129 -27
  13. package/dist/server/factory.js.map +1 -1
  14. package/dist/server/factory.test.js +5 -5
  15. package/dist/server/factory.test.js.map +1 -1
  16. package/dist/server/http.d.ts.map +1 -1
  17. package/dist/server/http.js +4 -2
  18. package/dist/server/http.js.map +1 -1
  19. package/dist/server/index.js +5 -2
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/server/loader.d.ts +6 -1
  22. package/dist/server/loader.d.ts.map +1 -1
  23. package/dist/server/loader.js +9 -0
  24. package/dist/server/loader.js.map +1 -1
  25. package/dist/server/resources/handlers.js +2 -2
  26. package/dist/server/resources/handlers.js.map +1 -1
  27. package/dist/server/stdio.d.ts.map +1 -1
  28. package/dist/server/stdio.js +4 -2
  29. package/dist/server/stdio.js.map +1 -1
  30. package/dist/server/utils/response-transformer.d.ts +78 -0
  31. package/dist/server/utils/response-transformer.d.ts.map +1 -0
  32. package/dist/server/utils/response-transformer.js +423 -0
  33. package/dist/server/utils/response-transformer.js.map +1 -0
  34. package/dist/server/utils/response-transformer.test.d.ts +2 -0
  35. package/dist/server/utils/response-transformer.test.d.ts.map +1 -0
  36. package/dist/server/utils/response-transformer.test.js +103 -0
  37. package/dist/server/utils/response-transformer.test.js.map +1 -0
  38. package/package.json +2 -1
@@ -118,20 +118,20 @@ export declare const chargePointSetChargingProfileBody: z.ZodObject<{
118
118
  limit: z.ZodNumber;
119
119
  numberPhases: z.ZodOptional<z.ZodNumber>;
120
120
  }, "strip", z.ZodTypeAny, {
121
- startPeriod: number;
122
121
  limit: number;
122
+ startPeriod: number;
123
123
  numberPhases?: number | undefined;
124
124
  }, {
125
- startPeriod: number;
126
125
  limit: number;
126
+ startPeriod: number;
127
127
  numberPhases?: number | undefined;
128
128
  }>, "many">;
129
129
  minChargingRate: z.ZodOptional<z.ZodNumber>;
130
130
  }, "strip", z.ZodTypeAny, {
131
131
  chargingRateUnit: "A" | "W";
132
132
  chargingSchedulePeriod: {
133
- startPeriod: number;
134
133
  limit: number;
134
+ startPeriod: number;
135
135
  numberPhases?: number | undefined;
136
136
  }[];
137
137
  id?: number | undefined;
@@ -141,8 +141,8 @@ export declare const chargePointSetChargingProfileBody: z.ZodObject<{
141
141
  }, {
142
142
  chargingRateUnit: "A" | "W";
143
143
  chargingSchedulePeriod: {
144
- startPeriod: number;
145
144
  limit: number;
145
+ startPeriod: number;
146
146
  numberPhases?: number | undefined;
147
147
  }[];
148
148
  id?: number | undefined;
@@ -157,8 +157,8 @@ export declare const chargePointSetChargingProfileBody: z.ZodObject<{
157
157
  chargingSchedule: {
158
158
  chargingRateUnit: "A" | "W";
159
159
  chargingSchedulePeriod: {
160
- startPeriod: number;
161
160
  limit: number;
161
+ startPeriod: number;
162
162
  numberPhases?: number | undefined;
163
163
  }[];
164
164
  id?: number | undefined;
@@ -177,8 +177,8 @@ export declare const chargePointSetChargingProfileBody: z.ZodObject<{
177
177
  chargingSchedule: {
178
178
  chargingRateUnit: "A" | "W";
179
179
  chargingSchedulePeriod: {
180
- startPeriod: number;
181
180
  limit: number;
181
+ startPeriod: number;
182
182
  numberPhases?: number | undefined;
183
183
  }[];
184
184
  id?: number | undefined;
@@ -234,20 +234,20 @@ export declare const chargePointStartChargingSessionBody: z.ZodObject<{
234
234
  limit: z.ZodNumber;
235
235
  numberPhases: z.ZodOptional<z.ZodNumber>;
236
236
  }, "strip", z.ZodTypeAny, {
237
- startPeriod: number;
238
237
  limit: number;
238
+ startPeriod: number;
239
239
  numberPhases?: number | undefined;
240
240
  }, {
241
- startPeriod: number;
242
241
  limit: number;
242
+ startPeriod: number;
243
243
  numberPhases?: number | undefined;
244
244
  }>, "many">;
245
245
  minChargingRate: z.ZodOptional<z.ZodNumber>;
246
246
  }, "strip", z.ZodTypeAny, {
247
247
  chargingRateUnit: "A" | "W";
248
248
  chargingSchedulePeriod: {
249
- startPeriod: number;
250
249
  limit: number;
250
+ startPeriod: number;
251
251
  numberPhases?: number | undefined;
252
252
  }[];
253
253
  id?: number | undefined;
@@ -257,8 +257,8 @@ export declare const chargePointStartChargingSessionBody: z.ZodObject<{
257
257
  }, {
258
258
  chargingRateUnit: "A" | "W";
259
259
  chargingSchedulePeriod: {
260
- startPeriod: number;
261
260
  limit: number;
261
+ startPeriod: number;
262
262
  numberPhases?: number | undefined;
263
263
  }[];
264
264
  id?: number | undefined;
@@ -273,8 +273,8 @@ export declare const chargePointStartChargingSessionBody: z.ZodObject<{
273
273
  chargingSchedule: {
274
274
  chargingRateUnit: "A" | "W";
275
275
  chargingSchedulePeriod: {
276
- startPeriod: number;
277
276
  limit: number;
277
+ startPeriod: number;
278
278
  numberPhases?: number | undefined;
279
279
  }[];
280
280
  id?: number | undefined;
@@ -293,8 +293,8 @@ export declare const chargePointStartChargingSessionBody: z.ZodObject<{
293
293
  chargingSchedule: {
294
294
  chargingRateUnit: "A" | "W";
295
295
  chargingSchedulePeriod: {
296
- startPeriod: number;
297
296
  limit: number;
297
+ startPeriod: number;
298
298
  numberPhases?: number | undefined;
299
299
  }[];
300
300
  id?: number | undefined;
@@ -320,8 +320,8 @@ export declare const chargePointStartChargingSessionBody: z.ZodObject<{
320
320
  chargingSchedule: {
321
321
  chargingRateUnit: "A" | "W";
322
322
  chargingSchedulePeriod: {
323
- startPeriod: number;
324
323
  limit: number;
324
+ startPeriod: number;
325
325
  numberPhases?: number | undefined;
326
326
  }[];
327
327
  id?: number | undefined;
@@ -347,8 +347,8 @@ export declare const chargePointStartChargingSessionBody: z.ZodObject<{
347
347
  chargingSchedule: {
348
348
  chargingRateUnit: "A" | "W";
349
349
  chargingSchedulePeriod: {
350
- startPeriod: number;
351
350
  limit: number;
351
+ startPeriod: number;
352
352
  numberPhases?: number | undefined;
353
353
  }[];
354
354
  id?: number | undefined;
@@ -607,20 +607,20 @@ export declare const evseStartChargingWithEvseIdBody: z.ZodObject<{
607
607
  limit: z.ZodNumber;
608
608
  numberPhases: z.ZodOptional<z.ZodNumber>;
609
609
  }, "strip", z.ZodTypeAny, {
610
- startPeriod: number;
611
610
  limit: number;
611
+ startPeriod: number;
612
612
  numberPhases?: number | undefined;
613
613
  }, {
614
- startPeriod: number;
615
614
  limit: number;
615
+ startPeriod: number;
616
616
  numberPhases?: number | undefined;
617
617
  }>, "many">;
618
618
  minChargingRate: z.ZodOptional<z.ZodNumber>;
619
619
  }, "strip", z.ZodTypeAny, {
620
620
  chargingRateUnit: "A" | "W";
621
621
  chargingSchedulePeriod: {
622
- startPeriod: number;
623
622
  limit: number;
623
+ startPeriod: number;
624
624
  numberPhases?: number | undefined;
625
625
  }[];
626
626
  id?: number | undefined;
@@ -630,8 +630,8 @@ export declare const evseStartChargingWithEvseIdBody: z.ZodObject<{
630
630
  }, {
631
631
  chargingRateUnit: "A" | "W";
632
632
  chargingSchedulePeriod: {
633
- startPeriod: number;
634
633
  limit: number;
634
+ startPeriod: number;
635
635
  numberPhases?: number | undefined;
636
636
  }[];
637
637
  id?: number | undefined;
@@ -646,8 +646,8 @@ export declare const evseStartChargingWithEvseIdBody: z.ZodObject<{
646
646
  chargingSchedule: {
647
647
  chargingRateUnit: "A" | "W";
648
648
  chargingSchedulePeriod: {
649
- startPeriod: number;
650
649
  limit: number;
650
+ startPeriod: number;
651
651
  numberPhases?: number | undefined;
652
652
  }[];
653
653
  id?: number | undefined;
@@ -666,8 +666,8 @@ export declare const evseStartChargingWithEvseIdBody: z.ZodObject<{
666
666
  chargingSchedule: {
667
667
  chargingRateUnit: "A" | "W";
668
668
  chargingSchedulePeriod: {
669
- startPeriod: number;
670
669
  limit: number;
670
+ startPeriod: number;
671
671
  numberPhases?: number | undefined;
672
672
  }[];
673
673
  id?: number | undefined;
@@ -693,8 +693,8 @@ export declare const evseStartChargingWithEvseIdBody: z.ZodObject<{
693
693
  chargingSchedule: {
694
694
  chargingRateUnit: "A" | "W";
695
695
  chargingSchedulePeriod: {
696
- startPeriod: number;
697
696
  limit: number;
697
+ startPeriod: number;
698
698
  numberPhases?: number | undefined;
699
699
  }[];
700
700
  id?: number | undefined;
@@ -720,8 +720,8 @@ export declare const evseStartChargingWithEvseIdBody: z.ZodObject<{
720
720
  chargingSchedule: {
721
721
  chargingRateUnit: "A" | "W";
722
722
  chargingSchedulePeriod: {
723
- startPeriod: number;
724
723
  limit: number;
724
+ startPeriod: number;
725
725
  numberPhases?: number | undefined;
726
726
  }[];
727
727
  id?: number | undefined;
@@ -2013,12 +2013,12 @@ export declare const chargePointCreateBody: z.ZodObject<{
2013
2013
  limit: z.ZodOptional<z.ZodNumber>;
2014
2014
  numberPhases: z.ZodOptional<z.ZodNumber>;
2015
2015
  }, "strip", z.ZodTypeAny, {
2016
- startPeriod?: number | undefined;
2017
2016
  limit?: number | undefined;
2017
+ startPeriod?: number | undefined;
2018
2018
  numberPhases?: number | undefined;
2019
2019
  }, {
2020
- startPeriod?: number | undefined;
2021
2020
  limit?: number | undefined;
2021
+ startPeriod?: number | undefined;
2022
2022
  numberPhases?: number | undefined;
2023
2023
  }>, "many">>;
2024
2024
  scheduleStart: z.ZodOptional<z.ZodString>;
@@ -2042,8 +2042,8 @@ export declare const chargePointCreateBody: z.ZodObject<{
2042
2042
  chargingRateUnit?: "A" | "W" | undefined;
2043
2043
  minChargingRate?: number | undefined;
2044
2044
  schedulePeriods?: {
2045
- startPeriod?: number | undefined;
2046
2045
  limit?: number | undefined;
2046
+ startPeriod?: number | undefined;
2047
2047
  numberPhases?: number | undefined;
2048
2048
  }[] | undefined;
2049
2049
  scheduleStart?: string | undefined;
@@ -2060,8 +2060,8 @@ export declare const chargePointCreateBody: z.ZodObject<{
2060
2060
  chargingRateUnit?: "A" | "W" | undefined;
2061
2061
  minChargingRate?: number | undefined;
2062
2062
  schedulePeriods?: {
2063
- startPeriod?: number | undefined;
2064
2063
  limit?: number | undefined;
2064
+ startPeriod?: number | undefined;
2065
2065
  numberPhases?: number | undefined;
2066
2066
  }[] | undefined;
2067
2067
  scheduleStart?: string | undefined;
@@ -2141,8 +2141,8 @@ export declare const chargePointCreateBody: z.ZodObject<{
2141
2141
  chargingRateUnit?: "A" | "W" | undefined;
2142
2142
  minChargingRate?: number | undefined;
2143
2143
  schedulePeriods?: {
2144
- startPeriod?: number | undefined;
2145
2144
  limit?: number | undefined;
2145
+ startPeriod?: number | undefined;
2146
2146
  numberPhases?: number | undefined;
2147
2147
  }[] | undefined;
2148
2148
  scheduleStart?: string | undefined;
@@ -2238,8 +2238,8 @@ export declare const chargePointCreateBody: z.ZodObject<{
2238
2238
  chargingRateUnit?: "A" | "W" | undefined;
2239
2239
  minChargingRate?: number | undefined;
2240
2240
  schedulePeriods?: {
2241
- startPeriod?: number | undefined;
2242
2241
  limit?: number | undefined;
2242
+ startPeriod?: number | undefined;
2243
2243
  numberPhases?: number | undefined;
2244
2244
  }[] | undefined;
2245
2245
  scheduleStart?: string | undefined;
@@ -4446,12 +4446,12 @@ export declare const evseUpdateDeprecatedBody: z.ZodObject<{
4446
4446
  limit: z.ZodOptional<z.ZodNumber>;
4447
4447
  numberPhases: z.ZodOptional<z.ZodNumber>;
4448
4448
  }, "strip", z.ZodTypeAny, {
4449
- startPeriod?: number | undefined;
4450
4449
  limit?: number | undefined;
4450
+ startPeriod?: number | undefined;
4451
4451
  numberPhases?: number | undefined;
4452
4452
  }, {
4453
- startPeriod?: number | undefined;
4454
4453
  limit?: number | undefined;
4454
+ startPeriod?: number | undefined;
4455
4455
  numberPhases?: number | undefined;
4456
4456
  }>, "many">>;
4457
4457
  scheduleStart: z.ZodOptional<z.ZodString>;
@@ -4475,8 +4475,8 @@ export declare const evseUpdateDeprecatedBody: z.ZodObject<{
4475
4475
  chargingRateUnit?: "A" | "W" | undefined;
4476
4476
  minChargingRate?: number | undefined;
4477
4477
  schedulePeriods?: {
4478
- startPeriod?: number | undefined;
4479
4478
  limit?: number | undefined;
4479
+ startPeriod?: number | undefined;
4480
4480
  numberPhases?: number | undefined;
4481
4481
  }[] | undefined;
4482
4482
  scheduleStart?: string | undefined;
@@ -4493,8 +4493,8 @@ export declare const evseUpdateDeprecatedBody: z.ZodObject<{
4493
4493
  chargingRateUnit?: "A" | "W" | undefined;
4494
4494
  minChargingRate?: number | undefined;
4495
4495
  schedulePeriods?: {
4496
- startPeriod?: number | undefined;
4497
4496
  limit?: number | undefined;
4497
+ startPeriod?: number | undefined;
4498
4498
  numberPhases?: number | undefined;
4499
4499
  }[] | undefined;
4500
4500
  scheduleStart?: string | undefined;
@@ -4565,8 +4565,8 @@ export declare const evseUpdateDeprecatedBody: z.ZodObject<{
4565
4565
  chargingRateUnit?: "A" | "W" | undefined;
4566
4566
  minChargingRate?: number | undefined;
4567
4567
  schedulePeriods?: {
4568
- startPeriod?: number | undefined;
4569
4568
  limit?: number | undefined;
4569
+ startPeriod?: number | undefined;
4570
4570
  numberPhases?: number | undefined;
4571
4571
  }[] | undefined;
4572
4572
  scheduleStart?: string | undefined;
@@ -4612,8 +4612,8 @@ export declare const evseUpdateDeprecatedBody: z.ZodObject<{
4612
4612
  chargingRateUnit?: "A" | "W" | undefined;
4613
4613
  minChargingRate?: number | undefined;
4614
4614
  schedulePeriods?: {
4615
- startPeriod?: number | undefined;
4616
4615
  limit?: number | undefined;
4616
+ startPeriod?: number | undefined;
4617
4617
  numberPhases?: number | undefined;
4618
4618
  }[] | undefined;
4619
4619
  scheduleStart?: string | undefined;
@@ -7725,12 +7725,12 @@ export declare const partnerSettlementReportPartnerSettlementRecordCreateBody: z
7725
7725
  note: z.ZodString;
7726
7726
  }, "strip", z.ZodTypeAny, {
7727
7727
  date: string;
7728
- paidAmount: number;
7729
7728
  note: string;
7729
+ paidAmount: number;
7730
7730
  }, {
7731
7731
  date: string;
7732
- paidAmount: number;
7733
7732
  note: string;
7733
+ paidAmount: number;
7734
7734
  }>;
7735
7735
  export declare const partnerSettlementReportPartnerSettlementRecordUpdateBody: z.ZodObject<{
7736
7736
  date: z.ZodString;
@@ -7738,12 +7738,12 @@ export declare const partnerSettlementReportPartnerSettlementRecordUpdateBody: z
7738
7738
  note: z.ZodString;
7739
7739
  }, "strip", z.ZodTypeAny, {
7740
7740
  date: string;
7741
- paidAmount: number;
7742
7741
  note: string;
7742
+ paidAmount: number;
7743
7743
  }, {
7744
7744
  date: string;
7745
- paidAmount: number;
7746
7745
  note: string;
7746
+ paidAmount: number;
7747
7747
  }>;
7748
7748
  export declare const partnerCreateDeprecatedBody: z.ZodObject<{
7749
7749
  id: z.ZodOptional<z.ZodNumber>;
@@ -10583,7 +10583,7 @@ export declare const tariffCreateBody: z.ZodObject<{
10583
10583
  lockEnergyPriceOnSessionStart?: boolean | undefined;
10584
10584
  lockDurationPriceOnSessionStart?: boolean | undefined;
10585
10585
  lockIdlePriceOnSessionStart?: boolean | undefined;
10586
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
10586
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
10587
10587
  averagePowerIdleThreshold?: number | undefined;
10588
10588
  }, {
10589
10589
  pricePerSession?: number | undefined;
@@ -10702,7 +10702,7 @@ export declare const tariffCreateBody: z.ZodObject<{
10702
10702
  lockEnergyPriceOnSessionStart?: boolean | undefined;
10703
10703
  lockDurationPriceOnSessionStart?: boolean | undefined;
10704
10704
  lockIdlePriceOnSessionStart?: boolean | undefined;
10705
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
10705
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
10706
10706
  averagePowerIdleThreshold?: number | undefined;
10707
10707
  }>>;
10708
10708
  currency: z.ZodOptional<z.ZodString>;
@@ -10927,7 +10927,7 @@ export declare const tariffCreateBody: z.ZodObject<{
10927
10927
  lockEnergyPriceOnSessionStart?: boolean | undefined;
10928
10928
  lockDurationPriceOnSessionStart?: boolean | undefined;
10929
10929
  lockIdlePriceOnSessionStart?: boolean | undefined;
10930
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
10930
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
10931
10931
  averagePowerIdleThreshold?: number | undefined;
10932
10932
  } | undefined;
10933
10933
  stopSession?: {
@@ -11086,7 +11086,7 @@ export declare const tariffCreateBody: z.ZodObject<{
11086
11086
  lockEnergyPriceOnSessionStart?: boolean | undefined;
11087
11087
  lockDurationPriceOnSessionStart?: boolean | undefined;
11088
11088
  lockIdlePriceOnSessionStart?: boolean | undefined;
11089
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
11089
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
11090
11090
  averagePowerIdleThreshold?: number | undefined;
11091
11091
  } | undefined;
11092
11092
  stopSession?: {
@@ -11547,7 +11547,7 @@ export declare const tariffUpdateBody: z.ZodObject<{
11547
11547
  lockEnergyPriceOnSessionStart?: boolean | undefined;
11548
11548
  lockDurationPriceOnSessionStart?: boolean | undefined;
11549
11549
  lockIdlePriceOnSessionStart?: boolean | undefined;
11550
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
11550
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
11551
11551
  averagePowerIdleThreshold?: number | undefined;
11552
11552
  }, {
11553
11553
  pricePerSession?: number | undefined;
@@ -11666,7 +11666,7 @@ export declare const tariffUpdateBody: z.ZodObject<{
11666
11666
  lockEnergyPriceOnSessionStart?: boolean | undefined;
11667
11667
  lockDurationPriceOnSessionStart?: boolean | undefined;
11668
11668
  lockIdlePriceOnSessionStart?: boolean | undefined;
11669
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
11669
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
11670
11670
  averagePowerIdleThreshold?: number | undefined;
11671
11671
  }>>;
11672
11672
  currency: z.ZodOptional<z.ZodString>;
@@ -11891,7 +11891,7 @@ export declare const tariffUpdateBody: z.ZodObject<{
11891
11891
  lockEnergyPriceOnSessionStart?: boolean | undefined;
11892
11892
  lockDurationPriceOnSessionStart?: boolean | undefined;
11893
11893
  lockIdlePriceOnSessionStart?: boolean | undefined;
11894
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
11894
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
11895
11895
  averagePowerIdleThreshold?: number | undefined;
11896
11896
  } | undefined;
11897
11897
  stopSession?: {
@@ -12050,7 +12050,7 @@ export declare const tariffUpdateBody: z.ZodObject<{
12050
12050
  lockEnergyPriceOnSessionStart?: boolean | undefined;
12051
12051
  lockDurationPriceOnSessionStart?: boolean | undefined;
12052
12052
  lockIdlePriceOnSessionStart?: boolean | undefined;
12053
- stateOfChargeIdleThreshold?: 100 | 95 | 90 | 75 | 80 | 85 | undefined;
12053
+ stateOfChargeIdleThreshold?: 100 | 75 | 95 | 90 | 80 | 85 | undefined;
12054
12054
  averagePowerIdleThreshold?: number | undefined;
12055
12055
  } | undefined;
12056
12056
  stopSession?: {
@@ -3,10 +3,10 @@
3
3
  * Creates and configures MCP server instances with shared logic for resources, tools, and prompts
4
4
  */
5
5
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
- import type { BuildOutput } from '../build/types.js';
6
+ import type { BuildOutput, ResponseSchemaMap } from '../build/types.js';
7
7
  import type { ServerOptions } from './types.js';
8
8
  /**
9
9
  * Create and configure the MCP server
10
10
  */
11
- export declare function createServer(endpoints: BuildOutput, options: ServerOptions): McpServer;
11
+ export declare function createServer(endpoints: BuildOutput, responseSchemas: ResponseSchemaMap, options: ServerOptions): McpServer;
12
12
  //# sourceMappingURL=factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/server/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAMhD;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,CAwTtF"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/server/factory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqBhD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,WAAW,EACtB,eAAe,EAAE,iBAAiB,EAClC,OAAO,EAAE,aAAa,GACrB,SAAS,CA2aX"}
@@ -10,11 +10,32 @@ import { getPromptContent } from './prompts.js';
10
10
  import { getNativeResourceInstructions, getToolEmulationInstructions } from './instructions.js';
11
11
  import { registerNativeResources } from './resources/native.js';
12
12
  import { registerEmulationTools } from './resources/tools.js';
13
+ import { transformResponse } from './utils/response-transformer.js';
14
+ /**
15
+ * Helper to get response schema for an endpoint
16
+ */
17
+ function getResponseSchema(responseSchemas, operationId, statusCode) {
18
+ if (!operationId || !responseSchemas[operationId]) {
19
+ return null;
20
+ }
21
+ return responseSchemas[operationId][statusCode]?.schema || null;
22
+ }
13
23
  /**
14
24
  * Create and configure the MCP server
15
25
  */
16
- export function createServer(endpoints, options) {
26
+ export function createServer(endpoints, responseSchemas, options) {
17
27
  const { hostname, bearerToken, emulateResourcesViaTools = false, } = options;
28
+ // Validate hostname
29
+ if (!hostname) {
30
+ throw new Error('Hostname is required but was not provided');
31
+ }
32
+ // Validate hostname is a valid URL
33
+ try {
34
+ new URL(hostname);
35
+ }
36
+ catch (error) {
37
+ throw new Error(`Invalid hostname URL: ${hostname}`);
38
+ }
18
39
  const server = new McpServer({
19
40
  name: 'public-api-mcp',
20
41
  version: '0.1.0',
@@ -39,15 +60,60 @@ export function createServer(endpoints, options) {
39
60
  // Register the API request tool
40
61
  server.tool('api_request', `Make an authenticated HTTP request to any active API endpoint from the OpenAPI specification. Deprecated endpoints cannot be called and will return an error. Authentication is handled automatically using the Bearer token from the MCP request. The target API hostname is: ${hostname}
41
62
 
42
- IMPORTANT - Pagination: Always prefer cursor-based pagination when available. For list endpoints that support both offset and cursor pagination, you MUST use cursor pagination by including an empty "cursor" query parameter (cursor="") in your initial request to engage cursor-based pagination. Subsequent requests should use the cursor value returned in the response.`, {
63
+ **Smart Response Transformation** (Enabled by Default):
64
+ When responses are large (>20KB), automatic transformation is applied to:
65
+ - Preserve ALL pagination metadata (cursor, total, hasMore, nextPage)
66
+ - Provide statistical summaries (min, max, avg, median, percentiles)
67
+ - Include categorical distributions (status counts, type breakdowns)
68
+ - Sample representative items for context
69
+
70
+ This ensures you can:
71
+ ✓ Navigate paginated results reliably
72
+ ✓ Understand data distributions without loading all items
73
+ ✓ Make data-driven decisions with statistical insights
74
+ ✓ Reduce token consumption by 80-95% for large responses
75
+
76
+ Field types are automatically detected from OpenAPI schemas (zero configuration required).
77
+
78
+ To disable transformation: Set transform_response=false
79
+
80
+ **Pagination Best Practice**:
81
+ Always prefer cursor-based pagination when available. For list endpoints that support both offset and cursor pagination, include an empty "cursor" query parameter (cursor="") in your initial request to engage cursor-based pagination.`, {
43
82
  endpoint: z.string().describe('The API endpoint path (e.g., "/users/{id}")'),
44
83
  method: z.enum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS']).describe('HTTP method'),
45
84
  path_params: z.preprocess((val) => (val === null || val === undefined || val === '' ? {} : val), z.record(z.any()).default({})).optional().describe('Path parameter values as key-value pairs (optional)'),
46
85
  query_params: z.preprocess((val) => (val === null || val === undefined || val === '' ? {} : val), z.record(z.any()).default({})).optional().describe('Query string parameters as key-value pairs (optional)'),
47
86
  body: z.preprocess((val) => (val === null || val === undefined || val === '' ? undefined : val), z.any()).optional().describe('Request body for POST/PUT/PATCH requests (optional)'),
48
87
  headers: z.preprocess((val) => (val === null || val === undefined || val === '' ? {} : val), z.record(z.string()).default({})).optional().describe('Additional HTTP headers (optional)'),
88
+ // NEW: Smart transformation parameters
89
+ transform_response: z.boolean()
90
+ .default(true)
91
+ .optional()
92
+ .describe('Enable smart response transformation for large responses. When enabled, large array-based responses ' +
93
+ 'are automatically transformed to include: (1) pagination metadata, (2) statistical summaries ' +
94
+ '(min/max/avg/distribution), and (3) sample items. This dramatically reduces token usage while ' +
95
+ 'preserving critical navigation and analytical information. Default: true'),
96
+ transform_options: z.object({
97
+ maxResponseSize: z.number()
98
+ .min(1000)
99
+ .max(1000000)
100
+ .optional()
101
+ .describe('Maximum response size in bytes before transformation is applied (default: 20000, range: 1000-1000000)'),
102
+ sampleSize: z.number()
103
+ .int()
104
+ .min(1)
105
+ .max(20)
106
+ .optional()
107
+ .describe('Number of sample items to include in transformed response (default: 5, range: 1-20)'),
108
+ computeStats: z.boolean()
109
+ .optional()
110
+ .describe('Whether to compute numeric statistics and categorical distributions (default: true)'),
111
+ includeDistribution: z.boolean()
112
+ .optional()
113
+ .describe('Whether to include categorical field distributions (default: true)'),
114
+ }).optional().describe('Advanced transformation options (optional). Field selection is automatic via OpenAPI schema detection.'),
49
115
  }, async (args) => {
50
- const { endpoint, method, path_params = {}, query_params = {}, body, headers = {}, } = args;
116
+ const { endpoint, method, path_params = {}, query_params = {}, body, headers = {}, transform_response = true, transform_options = {}, } = args;
51
117
  // Check if endpoint is deprecated
52
118
  const endpointDef = endpoints.endpoints.find((e) => e.path === endpoint && e.method.toUpperCase() === method.toUpperCase());
53
119
  if (endpointDef?.deprecated) {
@@ -111,38 +177,74 @@ IMPORTANT - Pagination: Always prefer cursor-based pagination when available. Fo
111
177
  }
112
178
  // Log the response
113
179
  console.error(`[API Response] ${response.status} ${response.statusText}`);
114
- // Prepare structured response with truncation
115
- const responseObject = {
116
- status: response.status,
117
- body: responseBody,
118
- };
119
- let responseText = JSON.stringify(responseObject, null, 2);
120
- // Truncate if response exceeds 20000 characters (leaving room for metadata)
121
- const MAX_RESPONSE_LENGTH = 20000;
122
- let wasTruncated = false;
123
- if (responseText.length > MAX_RESPONSE_LENGTH) {
124
- wasTruncated = true;
125
- const originalLength = responseText.length;
126
- responseText = responseText.substring(0, MAX_RESPONSE_LENGTH);
127
- // Try to truncate at a reasonable boundary (end of a line)
128
- const lastNewlineIndex = responseText.lastIndexOf('\n');
129
- if (lastNewlineIndex > MAX_RESPONSE_LENGTH * 0.9) {
130
- responseText = responseText.substring(0, lastNewlineIndex);
180
+ // NEW: Apply smart transformation if enabled
181
+ let finalResponse;
182
+ if (transform_response && responseBody && typeof responseBody === "object") {
183
+ // Smart 2XX response schema selection
184
+ let responseSchema = null;
185
+ const statusCode = response.status.toString();
186
+ // Try exact status code first
187
+ responseSchema = getResponseSchema(responseSchemas, endpointDef?.operationId, statusCode);
188
+ // Fallback: try common success codes in priority order
189
+ if (!responseSchema) {
190
+ const successCodes = ["200", "201", "202", "204", "2XX", "default"];
191
+ for (const code of successCodes) {
192
+ responseSchema = getResponseSchema(responseSchemas, endpointDef?.operationId, code);
193
+ if (responseSchema) {
194
+ console.error(`[Transformer] Using schema for status ${code} (fallback from ${statusCode})`);
195
+ break;
196
+ }
197
+ }
198
+ }
199
+ else {
200
+ console.error(`[Transformer] Using schema for status ${statusCode}`);
201
+ }
202
+ if (!responseSchema) {
203
+ console.error(`[Transformer] No schema found for ${method} ${endpoint} ` +
204
+ `(operationId: ${endpointDef?.operationId}, status: ${statusCode})`);
131
205
  }
132
- // Add truncation notice
133
- responseText += `\n\n... [Response truncated - original size: ${originalLength} characters, showing first ${responseText.length} characters]\n\nNote: The response was too large to display in full. This is typically because the API returned detailed error information or a large dataset. Check the status code and the visible portion of the response for key information.`;
206
+ // Apply transformation
207
+ const transformResult = transformResponse(responseBody, {
208
+ ...transform_options,
209
+ enabled: true,
210
+ }, responseSchema // Pass the selected schema
211
+ );
212
+ finalResponse = {
213
+ ...transformResult,
214
+ };
215
+ // Log transformation results
216
+ if (transformResult.data._transformation.applied) {
217
+ const reduction = (((transformResult.data._transformation.originalSize -
218
+ transformResult.data._transformation.transformedSize) /
219
+ transformResult.data._transformation.originalSize) *
220
+ 100).toFixed(1);
221
+ console.error(`[Transformer] Applied transformation: ${transformResult.data._transformation.originalSize} → ` +
222
+ `${transformResult.data._transformation.transformedSize} bytes (${reduction}% reduction)`);
223
+ }
224
+ }
225
+ else {
226
+ finalResponse = {
227
+ status: response.status,
228
+ body: responseBody,
229
+ };
134
230
  }
135
- const toolResponse = {
231
+ let responseText = JSON.stringify(finalResponse, null, 2);
232
+ // Fallback truncation (should rarely trigger now)
233
+ const MAX_RESPONSE_LENGTH = 50000; // Increased since transformation reduces size
234
+ if (responseText.length > MAX_RESPONSE_LENGTH) {
235
+ console.error(`[Warning] Response still exceeds limit after transformation ` +
236
+ `(${responseText.length} chars, status ${response.status})`);
237
+ responseText = responseText.substring(0, MAX_RESPONSE_LENGTH) + "\n\n... [Response truncated]";
238
+ }
239
+ // Return structured response
240
+ return {
136
241
  content: [
137
242
  {
138
- type: 'text',
243
+ type: "text",
139
244
  text: responseText,
140
245
  },
141
246
  ],
142
247
  };
143
- console.error(`[Tool Response] Returning response with ${responseText.length} characters${wasTruncated ? ' (truncated)' : ''}`);
144
- // Return structured response
145
- return toolResponse;
146
248
  }
147
249
  catch (error) {
148
250
  const errorMessage = error instanceof Error ? error.message : String(error);