@nestia/sdk 11.2.0 → 11.3.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 (62) hide show
  1. package/assets/bundle/distribute/package.json +1 -1
  2. package/lib/NestiaSdkApplication.js +17 -2
  3. package/lib/NestiaSdkApplication.js.map +1 -1
  4. package/lib/NestiaSwaggerComposer.js +2 -0
  5. package/lib/NestiaSwaggerComposer.js.map +1 -1
  6. package/lib/analyses/AccessorAnalyzer.d.ts +4 -1
  7. package/lib/analyses/AccessorAnalyzer.js.map +1 -1
  8. package/lib/analyses/ReflectControllerAnalyzer.js +3 -2
  9. package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
  10. package/lib/analyses/ReflectMcpOperationAnalyzer.d.ts +20 -0
  11. package/lib/analyses/ReflectMcpOperationAnalyzer.js +84 -0
  12. package/lib/analyses/ReflectMcpOperationAnalyzer.js.map +1 -0
  13. package/lib/analyses/TypedMcpRouteAnalyzer.d.ts +15 -0
  14. package/lib/analyses/TypedMcpRouteAnalyzer.js +40 -0
  15. package/lib/analyses/TypedMcpRouteAnalyzer.js.map +1 -0
  16. package/lib/executable/internal/NestiaConfigLoader.js +3 -2
  17. package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
  18. package/lib/generates/SdkGenerator.js +48 -0
  19. package/lib/generates/SdkGenerator.js.map +1 -1
  20. package/lib/generates/internal/ImportDictionary.d.ts +1 -0
  21. package/lib/generates/internal/ImportDictionary.js +5 -4
  22. package/lib/generates/internal/ImportDictionary.js.map +1 -1
  23. package/lib/generates/internal/SdkDistributionComposer.d.ts +1 -0
  24. package/lib/generates/internal/SdkDistributionComposer.js +8 -1
  25. package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
  26. package/lib/generates/internal/SdkFileProgrammer.js +4 -1
  27. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  28. package/lib/generates/internal/SdkMcpRouteProgrammer.d.ts +25 -0
  29. package/lib/generates/internal/SdkMcpRouteProgrammer.js +192 -0
  30. package/lib/generates/internal/SdkMcpRouteProgrammer.js.map +1 -0
  31. package/lib/generates/internal/SdkRouteDirectory.d.ts +2 -1
  32. package/lib/generates/internal/SdkRouteDirectory.js.map +1 -1
  33. package/lib/structures/IReflectController.d.ts +2 -1
  34. package/lib/structures/IReflectMcpOperation.d.ts +37 -0
  35. package/lib/structures/IReflectMcpOperation.js +3 -0
  36. package/lib/structures/IReflectMcpOperation.js.map +1 -0
  37. package/lib/structures/IReflectMcpOperationParameter.d.ts +21 -0
  38. package/lib/structures/IReflectMcpOperationParameter.js +3 -0
  39. package/lib/structures/IReflectMcpOperationParameter.js.map +1 -0
  40. package/lib/structures/ITypedApplication.d.ts +2 -1
  41. package/lib/structures/ITypedMcpRoute.d.ts +33 -0
  42. package/lib/structures/ITypedMcpRoute.js +3 -0
  43. package/lib/structures/ITypedMcpRoute.js.map +1 -0
  44. package/package.json +5 -4
  45. package/src/NestiaSdkApplication.ts +23 -3
  46. package/src/NestiaSwaggerComposer.ts +1 -0
  47. package/src/analyses/AccessorAnalyzer.ts +7 -10
  48. package/src/analyses/ReflectControllerAnalyzer.ts +8 -1
  49. package/src/analyses/ReflectMcpOperationAnalyzer.ts +124 -0
  50. package/src/analyses/TypedMcpRouteAnalyzer.ts +40 -0
  51. package/src/executable/internal/NestiaConfigLoader.ts +2 -1
  52. package/src/generates/SdkGenerator.ts +55 -0
  53. package/src/generates/internal/ImportDictionary.ts +10 -8
  54. package/src/generates/internal/SdkDistributionComposer.ts +6 -0
  55. package/src/generates/internal/SdkFileProgrammer.ts +6 -2
  56. package/src/generates/internal/SdkMcpRouteProgrammer.ts +469 -0
  57. package/src/generates/internal/SdkRouteDirectory.ts +4 -1
  58. package/src/structures/IReflectController.ts +4 -1
  59. package/src/structures/IReflectMcpOperation.ts +40 -0
  60. package/src/structures/IReflectMcpOperationParameter.ts +29 -0
  61. package/src/structures/ITypedApplication.ts +2 -1
  62. package/src/structures/ITypedMcpRoute.ts +35 -0
@@ -74,6 +74,8 @@ var SdkDistributionComposer;
74
74
  execute("npm install --save-dev rimraf");
75
75
  execute(`npm install --save @nestia/fetcher@${v.version}`);
76
76
  execute(`npm install --save typia@${v.typia}`);
77
+ if (props.mcp)
78
+ execute(`npm install --save @modelcontextprotocol/sdk@${v["@modelcontextprotocol/sdk"]}`);
77
79
  if (props.websocket)
78
80
  execute(`npm install --save tgrid@${v.tgrid}`);
79
81
  execute("npx typia setup --manager npm");
@@ -108,7 +110,12 @@ var SdkDistributionComposer;
108
110
  const dependencies = () => __awaiter(this, void 0, void 0, function* () {
109
111
  const content = yield fs_1.default.promises.readFile(__dirname + "/../../../package.json", "utf8");
110
112
  const json = JSON.parse(content);
111
- return (() => { const _io0 = input => "string" === typeof input.version && "string" === typeof input.typia && "string" === typeof input.tgrid; const _ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input.version || __typia_transform__assertGuard._assertGuard(_exceptionable, {
113
+ return (() => { const _io0 = input => "string" === typeof input["@modelcontextprotocol/sdk"] && "string" === typeof input.version && "string" === typeof input.typia && "string" === typeof input.tgrid; const _ao0 = (input, _path, _exceptionable = true) => ("string" === typeof input["@modelcontextprotocol/sdk"] || __typia_transform__assertGuard._assertGuard(_exceptionable, {
114
+ method: "typia.assert",
115
+ path: _path + "[\"@modelcontextprotocol/sdk\"]",
116
+ expected: "string",
117
+ value: input["@modelcontextprotocol/sdk"]
118
+ }, _errorFactory)) && ("string" === typeof input.version || __typia_transform__assertGuard._assertGuard(_exceptionable, {
112
119
  method: "typia.assert",
113
120
  path: _path + ".version",
114
121
  expected: "string",
@@ -1 +1 @@
1
- {"version":3,"file":"SdkDistributionComposer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkDistributionComposer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAA+B;AAC/B,4CAAoB;AACpB,gDAAwB;AACxB,kDAA0B;AAI1B,IAAiB,uBAAuB,CAwFvC;AAxFD,WAAiB,uBAAuB;IACzB,+BAAO,GAAG,CAAO,KAG7B,EAAE,EAAE;QACH,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,UAAW,CAAC;YAC1C,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAW,CAAC,CAAC;QAEpD,MAAM,IAAI,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;QACnC,MAAM,MAAM,GAAW,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAO,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAW,CAAC,CAAC;QAExC,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,UAAU,EAAE;YAAE,OAAO,IAAI,EAAE,CAAC;QAEtC,aAAa;QACb,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,KAAK,MAAM,IAAI,IAAI,MAAM,YAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAExD,kBAAkB;QAClB,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;YAClD,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAExC,mBAAmB;QACnB,MAAM,CAAC,GAAkB,MAAM,YAAY,EAAE,CAAC;QAC9C,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACzC,OAAO,CAAC,sCAAsC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,+BAA+B,CAAC,CAAC;QAEzC,IAAI,EAAE,CAAC;IACT,CAAC,CAAA,CAAC;IAEF,MAAM,UAAU,GAAG,GAA2B,EAAE;QAC9C,OAAA,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,KAAK,CAAC,YAAE,CAAC,UAAU,CAAC;YACtD,CAAC,MAAM,CAAC,GAAS,EAAE;;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CACnD,CAAC;gBACF,OAAO,CAAC,CAAC,CAAA,MAAA,OAAO,CAAC,YAAY,0CAAG,iBAAiB,CAAC,CAAA,CAAC;YACrD,CAAC,CAAA,CAAC,EAAE,CAAC,CAAA;MAAA,CAAC;IAER,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC;QAC9B,uBAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,MAAM,OAAO,GACX,CAAC,KAAuC,EAAE,EAAE,CAC5C,CAAO,IAAY,EAAiB,EAAE;QACpC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,EAAU,EAAE,EAAE,CAChD,cAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,IAAI,GAAW,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,MAAM,GAAW,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,OAAO,GAAW,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAW,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,MAAM,YAAE,CAAC,QAAQ,CAAC,SAAS,CACzB,IAAI,EACJ,OAAO;aACJ,KAAK,CAAC,SAAS,CAAC;aAChB,IAAI,CAAC,IAAI,CAAC;aACV,KAAK,CAAC,WAAW,CAAC;aAClB,IAAI,CAAC,MAAM,CAAC;aACZ,KAAK,CAAC,YAAY,CAAC;aACnB,IAAI,CAAC,OAAO,CAAC,EAChB,MAAM,CACP,CAAC;IACJ,CAAC,CAAA,CAAC;IAEJ,MAAM,YAAY,GAAG,GAAiC,EAAE;QACtD,MAAM,OAAO,GAAW,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAChD,SAAS,GAAG,wBAAwB,EACpC,MAAM,CACP,CAAC;QACF,MAAM,IAAI,GAIN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DACK,IAAI,CAAC,eAAe,GACpB,IAAI,CAAC,YAAY,KACpB,OAAO,EAAE,IAAI,CAAC,OAAO,KACpB;IACL,CAAC,CAAA,CAAC;AACJ,CAAC,EAxFgB,uBAAuB,uCAAvB,uBAAuB,QAwFvC;AAOD,MAAM,MAAM,GAAG,SAAS,GAAG,oCAAoC,CAAC"}
1
+ {"version":3,"file":"SdkDistributionComposer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkDistributionComposer.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ const MapUtil_1 = require("../../utils/MapUtil");
19
19
  const FilePrinter_1 = require("./FilePrinter");
20
20
  const ImportDictionary_1 = require("./ImportDictionary");
21
21
  const SdkHttpRouteProgrammer_1 = require("./SdkHttpRouteProgrammer");
22
+ const SdkMcpRouteProgrammer_1 = require("./SdkMcpRouteProgrammer");
22
23
  const SdkRouteDirectory_1 = require("./SdkRouteDirectory");
23
24
  const SdkWebSocketRouteProgrammer_1 = require("./SdkWebSocketRouteProgrammer");
24
25
  var SdkFileProgrammer;
@@ -66,7 +67,9 @@ var SdkFileProgrammer;
66
67
  importer.declarations(route.imports);
67
68
  statements.push(...(route.protocol === "http"
68
69
  ? SdkHttpRouteProgrammer_1.SdkHttpRouteProgrammer.write(project)(importer)(route)
69
- : SdkWebSocketRouteProgrammer_1.SdkWebSocketRouteProgrammer.write(project)(importer)(route)));
70
+ : route.protocol === "websocket"
71
+ ? SdkWebSocketRouteProgrammer_1.SdkWebSocketRouteProgrammer.write(project)(importer)(route)
72
+ : SdkMcpRouteProgrammer_1.SdkMcpRouteProgrammer.write(project)(importer)(route)));
70
73
  if (i !== directory.routes.length - 1)
71
74
  statements.push(FilePrinter_1.FilePrinter.enter());
72
75
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SdkFileProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkFileProgrammer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SdkFileProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkFileProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,4DAA4B;AAO5B,iDAA8C;AAC9C,+CAA4C;AAC5C,yDAAsD;AACtD,qEAAkE;AAClE,mEAAgE;AAChE,2DAAwD;AACxD,+EAA4E;AAE5E,IAAiB,iBAAiB,CAiGjC;AAjGD,WAAiB,iBAAiB;IAChC;;kEAE8D;IACjD,0BAAQ,GAAG,CAAO,GAAsB,EAAiB,EAAE;QACtE,wBAAwB;QACxB,MAAM,IAAI,GAAsB,IAAI,qCAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAC1E,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAErD,gBAAgB;QAChB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;IAC9E,CAAC,CAAA,CAAC;IAEF,MAAM,OAAO,GACX,CAAC,SAA4B,EAAE,EAAE,CACjC,CAAC,KAA8D,EAAQ,EAAE;QACvE,mBAAmB;QACnB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,SAAS,GAAG,iBAAO,CAAC,IAAI,CACtB,SAAS,CAAC,QAAQ,EAClB,GAAG,EACH,GAAG,EAAE,CAAC,IAAI,qCAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAC5C,CAAC;QACJ,CAAC;QAED,YAAY;QACZ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEJ;;kEAE8D;IAC9D,MAAM,OAAO,GACX,CAAC,OAAuB,EAAE,EAAE,CAC5B,CAAC,SAA4B,EAAE,EAAE,CACjC,CAAO,MAAc,EAAiB,EAAE;QACtC,yBAAyB;QACzB,IAAI,CAAC;YACH,MAAM,YAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAAC,WAAM,CAAC,CAAA,CAAC;QAEV,mBAAmB;QACnB,MAAM,UAAU,GAAmB,EAAE,CAAC;QACtC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;YAClD,UAAU,CAAC,IAAI,CACb,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CAChC,SAAS,EACT,KAAK,EACL,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAAC,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAClE,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,GAAG,QAAQ,CAAC,EAChD,SAAS,CACV,CACF,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM;YAC9C,UAAU,CAAC,IAAI,CAAC,yBAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAEvC,iBAAiB;QACjB,MAAM,QAAQ,GAAqB,IAAI,mCAAgB,CACrD,GAAG,MAAM,WAAW,CACrB,CAAC;QACF,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC;gBAC/D,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,UAAU,CAAC,IAAI,CACb,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM;gBAC3B,CAAC,CAAC,+CAAsB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;gBACxD,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW;oBAC9B,CAAC,CAAC,yDAA2B,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC;oBAC7D,CAAC,CAAC,6CAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAC7D,CAAC;YACF,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC,yBAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAC/B,UAAU,CAAC,IAAI,CACb,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAChC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM;gBACxC,CAAC,CAAC,CAAC,yBAAW,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC,CAAC,EAAE,CAAC,EACP,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,CAC3C,CAAC;QACJ,MAAM,yBAAW,CAAC,KAAK,CAAC;YACtB,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,UAAU;YACV,GAAG,EACD,OAAO;gBACP,4BAA4B;gBAC5B,cAAc,SAAS,CAAC,MAAM,IAAI;gBAClC,uEAAuE;gBACvE,OAAO;gBACP,sEAAsE;SACzE,CAAC,CAAC;IACL,CAAC,CAAA,CAAC;AACN,CAAC,EAjGgB,iBAAiB,iCAAjB,iBAAiB,QAiGjC"}
@@ -0,0 +1,25 @@
1
+ import ts from "typescript";
2
+ import { INestiaProject } from "../../structures/INestiaProject";
3
+ import { ITypedMcpRoute } from "../../structures/ITypedMcpRoute";
4
+ import { ImportDictionary } from "./ImportDictionary";
5
+ /**
6
+ * Emits a typed client wrapper for an MCP tool.
7
+ *
8
+ * Output mirrors `SdkHttpRouteProgrammer` conventions: a top-level async
9
+ * function paired with a namespace that exposes `Input`, `Output`, and
10
+ * `METADATA`. Object output types are wrapped in `Primitive<T>` from typia
11
+ * because MCP round-trips values through JSON, matching the semantics of
12
+ * `Primitive`. Void MCP tools return `Promise<void>`.
13
+ *
14
+ * The response is typed via `CallToolResult` from `@modelcontextprotocol/sdk`
15
+ * and narrowed structurally (`isError === true`, `type === "text"`) rather than
16
+ * asserted with `as any`. The single unavoidable cast is on the `arguments`
17
+ * field of `client.callTool(...)`, which the MCP SDK types as `Record<string,
18
+ * unknown> | undefined`; a user interface without an index signature is not
19
+ * structurally assignable to that record.
20
+ *
21
+ * @author wildduck - https://github.com/wildduck2
22
+ */
23
+ export declare namespace SdkMcpRouteProgrammer {
24
+ const write: (project: INestiaProject) => (importer: ImportDictionary) => (route: ITypedMcpRoute) => ts.Statement[];
25
+ }
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SdkMcpRouteProgrammer = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const FilePrinter_1 = require("./FilePrinter");
9
+ /**
10
+ * Emits a typed client wrapper for an MCP tool.
11
+ *
12
+ * Output mirrors `SdkHttpRouteProgrammer` conventions: a top-level async
13
+ * function paired with a namespace that exposes `Input`, `Output`, and
14
+ * `METADATA`. Object output types are wrapped in `Primitive<T>` from typia
15
+ * because MCP round-trips values through JSON, matching the semantics of
16
+ * `Primitive`. Void MCP tools return `Promise<void>`.
17
+ *
18
+ * The response is typed via `CallToolResult` from `@modelcontextprotocol/sdk`
19
+ * and narrowed structurally (`isError === true`, `type === "text"`) rather than
20
+ * asserted with `as any`. The single unavoidable cast is on the `arguments`
21
+ * field of `client.callTool(...)`, which the MCP SDK types as `Record<string,
22
+ * unknown> | undefined`; a user interface without an index signature is not
23
+ * structurally assignable to that record.
24
+ *
25
+ * @author wildduck - https://github.com/wildduck2
26
+ */
27
+ var SdkMcpRouteProgrammer;
28
+ (function (SdkMcpRouteProgrammer) {
29
+ SdkMcpRouteProgrammer.write = (project) => (importer) => (route) => [
30
+ FilePrinter_1.FilePrinter.description(writeFunction(project)(importer)(route), writeDescription(route)),
31
+ writeNamespace(project)(importer)(route),
32
+ ];
33
+ /* ---------------------------------------------------------
34
+ FUNCTION
35
+ --------------------------------------------------------- */
36
+ const writeFunction = (_project) => (importer) => (route) => {
37
+ const clientType = typescript_1.default.factory.createTypeReferenceNode(importer.external({
38
+ declaration: true,
39
+ file: "@modelcontextprotocol/sdk/client/index.js",
40
+ type: "element",
41
+ name: "Client",
42
+ alias: "McpClient",
43
+ }));
44
+ const callToolResultTypeName = importer.external({
45
+ declaration: true,
46
+ file: "@modelcontextprotocol/sdk/types.js",
47
+ type: "element",
48
+ name: "CallToolResult",
49
+ alias: "McpCallToolResult",
50
+ });
51
+ const isVoid = isVoidReturn(route);
52
+ // Register Primitive import so Output type resolves.
53
+ if (!isVoid)
54
+ importer.external({
55
+ declaration: true,
56
+ file: "typia",
57
+ type: "element",
58
+ name: "Primitive",
59
+ });
60
+ const inputRef = route.input
61
+ ? typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Input`)
62
+ : typescript_1.default.factory.createTypeLiteralNode([]);
63
+ const outputRef = typescript_1.default.factory.createTypeReferenceNode(`${route.name}.Output`);
64
+ const params = [
65
+ typescript_1.default.factory.createParameterDeclaration(undefined, undefined, "client", undefined, clientType),
66
+ ];
67
+ if (route.input) {
68
+ params.push(typescript_1.default.factory.createParameterDeclaration(undefined, undefined, "args", undefined, inputRef));
69
+ }
70
+ const toolNameExpr = typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier(route.name), "METADATA"), "tool");
71
+ const callToolParams = [
72
+ typescript_1.default.factory.createPropertyAssignment("name", toolNameExpr),
73
+ ];
74
+ if (route.input) {
75
+ callToolParams.push(typescript_1.default.factory.createPropertyAssignment("arguments", typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createIdentifier("args"), typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword)), typescript_1.default.factory.createTypeReferenceNode("Record", [
76
+ typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.StringKeyword),
77
+ typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.UnknownKeyword),
78
+ ]))));
79
+ }
80
+ const body = typescript_1.default.factory.createBlock([
81
+ // const raw = await client.callTool({ ... });
82
+ // NOTE: callTool returns `CallToolResult | CompatibilityCallToolResult`
83
+ // (the pre-2024-11-05 compat variant has `toolResult`, no
84
+ // `content`). TypeScript cannot narrow the union structurally
85
+ // because both variants carry an `[x: string]: unknown` index
86
+ // signature. Branch at runtime, then cast to CallToolResult
87
+ // once for the modern path.
88
+ typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
89
+ typescript_1.default.factory.createVariableDeclaration("raw", undefined, undefined, typescript_1.default.factory.createAwaitExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("client"), "callTool"), undefined, [
90
+ typescript_1.default.factory.createObjectLiteralExpression(callToolParams, true),
91
+ ]))),
92
+ ], typescript_1.default.NodeFlags.Const)),
93
+ // if ("toolResult" in raw) throw ...;
94
+ typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createStringLiteral("toolResult"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.InKeyword), typescript_1.default.factory.createIdentifier("raw")), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("Error"), undefined, [
95
+ typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead('MCP tool "'), [
96
+ typescript_1.default.factory.createTemplateSpan(toolNameExpr, typescript_1.default.factory.createTemplateTail('" returned a legacy (pre-2024-11-05) compatibility result')),
97
+ ]),
98
+ ]))),
99
+ // const result: CallToolResult = raw;
100
+ // Safe: preceding branch rejected the compat variant.
101
+ typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
102
+ typescript_1.default.factory.createVariableDeclaration("result", undefined, typescript_1.default.factory.createTypeReferenceNode(callToolResultTypeName), typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createIdentifier("raw"), typescript_1.default.factory.createTypeReferenceNode(callToolResultTypeName))),
103
+ ], typescript_1.default.NodeFlags.Const)),
104
+ // if (result.isError === true) throw ...;
105
+ typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("result"), "isError"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken), typescript_1.default.factory.createTrue()), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("Error"), undefined, [
106
+ typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead('MCP tool "'), [
107
+ typescript_1.default.factory.createTemplateSpan(toolNameExpr, typescript_1.default.factory.createTemplateTail('" returned isError')),
108
+ ]),
109
+ ]))),
110
+ ...(isVoid
111
+ ? [typescript_1.default.factory.createReturnStatement()]
112
+ : [
113
+ // const first = result.content[0];
114
+ typescript_1.default.factory.createVariableStatement(undefined, typescript_1.default.factory.createVariableDeclarationList([
115
+ typescript_1.default.factory.createVariableDeclaration("first", undefined, undefined, typescript_1.default.factory.createElementAccessExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("result"), "content"), typescript_1.default.factory.createNumericLiteral(0))),
116
+ ], typescript_1.default.NodeFlags.Const)),
117
+ typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createIdentifier("first"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken), typescript_1.default.factory.createIdentifier("undefined")), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.BarBarToken), typescript_1.default.factory.createBinaryExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("first"), "type"), typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.ExclamationEqualsEqualsToken), typescript_1.default.factory.createStringLiteral("text"))), typescript_1.default.factory.createThrowStatement(typescript_1.default.factory.createNewExpression(typescript_1.default.factory.createIdentifier("Error"), undefined, [
118
+ typescript_1.default.factory.createTemplateExpression(typescript_1.default.factory.createTemplateHead('MCP tool "'), [
119
+ typescript_1.default.factory.createTemplateSpan(toolNameExpr, typescript_1.default.factory.createTemplateTail('" returned no text content')),
120
+ ]),
121
+ ]))),
122
+ typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("JSON"), "parse"), undefined, [
123
+ typescript_1.default.factory.createPropertyAccessExpression(typescript_1.default.factory.createIdentifier("first"), "text"),
124
+ ]), outputRef)),
125
+ ]),
126
+ ], true);
127
+ return typescript_1.default.factory.createFunctionDeclaration([
128
+ typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword),
129
+ typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.AsyncKeyword),
130
+ ], undefined, route.name, undefined, params, typescript_1.default.factory.createTypeReferenceNode("Promise", [outputRef]), body);
131
+ };
132
+ /* ---------------------------------------------------------
133
+ NAMESPACE
134
+ --------------------------------------------------------- */
135
+ const writeNamespace = (_project) => (importer) => (route) => {
136
+ const statements = [];
137
+ // Input type alias
138
+ if (route.input) {
139
+ statements.push(typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], "Input", undefined, typescript_1.default.factory.createTypeReferenceNode(route.input.type.name)));
140
+ }
141
+ // Output type alias
142
+ const isVoid = isVoidReturn(route);
143
+ const outputType = !isVoid && route.returnType !== null
144
+ ? typescript_1.default.factory.createTypeReferenceNode(importer.external({
145
+ declaration: true,
146
+ file: "typia",
147
+ type: "element",
148
+ name: "Primitive",
149
+ }), [
150
+ typescript_1.default.factory.createTypeReferenceNode(unwrapPromise(route.returnType.name)),
151
+ ])
152
+ : typescript_1.default.factory.createKeywordTypeNode(typescript_1.default.SyntaxKind.VoidKeyword);
153
+ statements.push(typescript_1.default.factory.createTypeAliasDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], "Output", undefined, outputType));
154
+ // METADATA const
155
+ const metadataProps = [
156
+ typescript_1.default.factory.createPropertyAssignment("protocol", typescript_1.default.factory.createStringLiteral("mcp")),
157
+ typescript_1.default.factory.createPropertyAssignment("tool", typescript_1.default.factory.createStringLiteral(route.toolName)),
158
+ typescript_1.default.factory.createPropertyAssignment("title", route.title === null
159
+ ? typescript_1.default.factory.createNull()
160
+ : typescript_1.default.factory.createStringLiteral(route.title)),
161
+ typescript_1.default.factory.createPropertyAssignment("description", route.toolDescription === null
162
+ ? typescript_1.default.factory.createNull()
163
+ : typescript_1.default.factory.createStringLiteral(route.toolDescription)),
164
+ ];
165
+ statements.push(typescript_1.default.factory.createVariableStatement([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createVariableDeclarationList([
166
+ typescript_1.default.factory.createVariableDeclaration("METADATA", undefined, undefined, typescript_1.default.factory.createAsExpression(typescript_1.default.factory.createObjectLiteralExpression(metadataProps, true), typescript_1.default.factory.createTypeReferenceNode("const"))),
167
+ ], typescript_1.default.NodeFlags.Const)));
168
+ return typescript_1.default.factory.createModuleDeclaration([typescript_1.default.factory.createModifier(typescript_1.default.SyntaxKind.ExportKeyword)], typescript_1.default.factory.createIdentifier(route.name), typescript_1.default.factory.createModuleBlock(statements), typescript_1.default.NodeFlags.Namespace);
169
+ };
170
+ /* ---------------------------------------------------------
171
+ DESCRIPTION
172
+ --------------------------------------------------------- */
173
+ const writeDescription = (route) => {
174
+ const lines = [];
175
+ if (route.toolDescription)
176
+ lines.push(...route.toolDescription.split("\n"));
177
+ else if (route.description)
178
+ lines.push(...route.description.split("\n"));
179
+ if (lines.length)
180
+ lines.push("");
181
+ lines.push(`@controller ${route.controller.class.name}.${route.function.name || route.name}`, `@tool ${route.toolName}`, `@accessor ${["api", "functional", ...route.accessor].join(".")}`, `@protocol mcp`, `@nestia Generated by Nestia - https://github.com/samchon/nestia`);
182
+ return lines.join("\n");
183
+ };
184
+ const unwrapPromise = (name) => {
185
+ const m = /^Promise<(.+)>$/.exec(name);
186
+ return m ? m[1] : name;
187
+ };
188
+ const isVoidReturn = (route) => route.returnType === null ||
189
+ isVoidName(unwrapPromise(route.returnType.name));
190
+ const isVoidName = (name) => name === "void" || name === "undefined";
191
+ })(SdkMcpRouteProgrammer || (exports.SdkMcpRouteProgrammer = SdkMcpRouteProgrammer = {}));
192
+ //# sourceMappingURL=SdkMcpRouteProgrammer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdkMcpRouteProgrammer.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkMcpRouteProgrammer.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import { ITypedHttpRoute } from "../../structures/ITypedHttpRoute";
2
+ import { ITypedMcpRoute } from "../../structures/ITypedMcpRoute";
2
3
  import { ITypedWebSocketRoute } from "../../structures/ITypedWebSocketRoute";
3
4
  export declare class SdkRouteDirectory {
4
5
  readonly parent: SdkRouteDirectory | null;
5
6
  readonly name: string;
6
7
  readonly module: string;
7
8
  readonly children: Map<string, SdkRouteDirectory>;
8
- readonly routes: Array<ITypedHttpRoute | ITypedWebSocketRoute>;
9
+ readonly routes: Array<ITypedHttpRoute | ITypedWebSocketRoute | ITypedMcpRoute>;
9
10
  constructor(parent: SdkRouteDirectory | null, name: string);
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SdkRouteDirectory.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkRouteDirectory.ts"],"names":[],"mappings":";;;AAGA,MAAa,iBAAiB;IAK5B,YACW,MAAgC,EAChC,IAAY;QADZ,WAAM,GAAN,MAAM,CAA0B;QAChC,SAAI,GAAJ,IAAI,CAAQ;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3E,CAAC;CACF;AAdD,8CAcC"}
1
+ {"version":3,"file":"SdkRouteDirectory.js","sourceRoot":"","sources":["../../../src/generates/internal/SdkRouteDirectory.ts"],"names":[],"mappings":";;;AAIA,MAAa,iBAAiB;IAO5B,YACW,MAAgC,EAChC,IAAY;QADZ,WAAM,GAAN,MAAM,CAA0B;QAChC,SAAI,GAAJ,IAAI,CAAQ;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM;YACT,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IAC3E,CAAC;CACF;AAhBD,8CAgBC"}
@@ -1,5 +1,6 @@
1
1
  import type { VERSION_NEUTRAL } from "@nestjs/common/interfaces";
2
2
  import { IReflectHttpOperation } from "./IReflectHttpOperation";
3
+ import { IReflectMcpOperation } from "./IReflectMcpOperation";
3
4
  import { IReflectWebSocketOperation } from "./IReflectWebSocketOperation";
4
5
  export interface IReflectController {
5
6
  class: Function;
@@ -7,7 +8,7 @@ export interface IReflectController {
7
8
  paths: string[];
8
9
  file: string;
9
10
  versions: Array<string | typeof VERSION_NEUTRAL> | undefined;
10
- operations: Array<IReflectHttpOperation | IReflectWebSocketOperation>;
11
+ operations: Array<IReflectHttpOperation | IReflectWebSocketOperation | IReflectMcpOperation>;
11
12
  security: Record<string, string[]>[];
12
13
  tags: string[];
13
14
  }
@@ -0,0 +1,37 @@
1
+ import ts from "typescript";
2
+ import { IReflectImport } from "./IReflectImport";
3
+ import { IReflectMcpOperationParameter } from "./IReflectMcpOperationParameter";
4
+ import { IReflectType } from "./IReflectType";
5
+ /**
6
+ * Reflected operation metadata for a method decorated with `@McpRoute`.
7
+ *
8
+ * Produced by {@link ReflectMcpOperationAnalyzer.analyze}; consumed by
9
+ * {@link TypedMcpRouteAnalyzer.analyze} to produce the final
10
+ * {@link ITypedMcpRoute}.
11
+ *
12
+ * @author wildduck - https://github.com/wildduck2
13
+ */
14
+ export interface IReflectMcpOperation {
15
+ protocol: "mcp";
16
+ name: string;
17
+ toolName: string;
18
+ title: string | null;
19
+ toolDescription: string | null;
20
+ inputSchema: object;
21
+ outputSchema: object | null;
22
+ annotations: IReflectMcpOperation.IAnnotations | null;
23
+ function: Function;
24
+ parameters: IReflectMcpOperationParameter[];
25
+ returnType: IReflectType | null;
26
+ imports: IReflectImport[];
27
+ description: string | null;
28
+ jsDocTags: ts.JSDocTagInfo[];
29
+ }
30
+ export declare namespace IReflectMcpOperation {
31
+ interface IAnnotations {
32
+ readOnlyHint?: boolean;
33
+ destructiveHint?: boolean;
34
+ idempotentHint?: boolean;
35
+ openWorldHint?: boolean;
36
+ }
37
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IReflectMcpOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IReflectMcpOperation.js","sourceRoot":"","sources":["../../src/structures/IReflectMcpOperation.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { IJsDocTagInfo } from "typia";
2
+ import { IReflectImport } from "./IReflectImport";
3
+ import { IReflectType } from "./IReflectType";
4
+ /**
5
+ * Parameter descriptor for an MCP tool method. Reflected from
6
+ * `"nestia/McpRoute/Parameters"` metadata plus compile-time type information
7
+ * collected by the nestia transformer.
8
+ *
9
+ * @author wildduck - https://github.com/wildduck2
10
+ */
11
+ export interface IReflectMcpOperationParameter {
12
+ category: "params";
13
+ name: string;
14
+ index: number;
15
+ type: IReflectType;
16
+ imports: IReflectImport[];
17
+ description: string | null;
18
+ jsDocTags: IJsDocTagInfo[];
19
+ }
20
+ export declare namespace IReflectMcpOperationParameter {
21
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IReflectMcpOperationParameter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IReflectMcpOperationParameter.js","sourceRoot":"","sources":["../../src/structures/IReflectMcpOperationParameter.ts"],"names":[],"mappings":""}
@@ -1,9 +1,10 @@
1
1
  import { IMetadataDictionary } from "@typia/core";
2
2
  import { INestiaProject } from "./INestiaProject";
3
3
  import { ITypedHttpRoute } from "./ITypedHttpRoute";
4
+ import { ITypedMcpRoute } from "./ITypedMcpRoute";
4
5
  import { ITypedWebSocketRoute } from "./ITypedWebSocketRoute";
5
6
  export interface ITypedApplication {
6
7
  project: INestiaProject;
7
8
  collection: IMetadataDictionary;
8
- routes: Array<ITypedHttpRoute | ITypedWebSocketRoute>;
9
+ routes: Array<ITypedHttpRoute | ITypedWebSocketRoute | ITypedMcpRoute>;
9
10
  }
@@ -0,0 +1,33 @@
1
+ import ts from "typescript";
2
+ import { IReflectController } from "./IReflectController";
3
+ import { IReflectImport } from "./IReflectImport";
4
+ import { IReflectMcpOperation } from "./IReflectMcpOperation";
5
+ import { IReflectMcpOperationParameter } from "./IReflectMcpOperationParameter";
6
+ import { IReflectType } from "./IReflectType";
7
+ /**
8
+ * Final typed representation of an MCP tool route.
9
+ *
10
+ * Carries everything the SDK generator needs to emit a typed client function:
11
+ * the controller reference, accessor path, typia-derived input schema, and
12
+ * input/output type info.
13
+ *
14
+ * @author wildduck - https://github.com/wildduck2
15
+ */
16
+ export interface ITypedMcpRoute {
17
+ protocol: "mcp";
18
+ controller: IReflectController;
19
+ name: string;
20
+ toolName: string;
21
+ title: string | null;
22
+ toolDescription: string | null;
23
+ accessor: string[];
24
+ function: Function;
25
+ input: IReflectMcpOperationParameter | null;
26
+ returnType: IReflectType | null;
27
+ inputSchema: object;
28
+ outputSchema: object | null;
29
+ annotations: IReflectMcpOperation.IAnnotations | null;
30
+ imports: IReflectImport[];
31
+ description: string | null;
32
+ jsDocTags: ts.JSDocTagInfo[];
33
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ITypedMcpRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITypedMcpRoute.js","sourceRoot":"","sources":["../../src/structures/ITypedMcpRoute.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/sdk",
3
- "version": "11.2.0",
3
+ "version": "11.3.0",
4
4
  "description": "Nestia SDK and Swagger generator",
5
5
  "main": "lib/index.js",
6
6
  "exports": {
@@ -58,13 +58,14 @@
58
58
  "tsconfig-paths": "^4.1.1",
59
59
  "tstl": "^3.0.0",
60
60
  "typia": "12.1.0",
61
- "@nestia/core": "^11.2.0",
62
- "@nestia/fetcher": "^11.2.0"
61
+ "@nestia/core": "^11.3.0",
62
+ "@nestia/fetcher": "^11.3.0"
63
63
  },
64
64
  "peerDependencies": {
65
- "@nestia/core": "^11.2.0"
65
+ "@nestia/core": "^11.3.0"
66
66
  },
67
67
  "devDependencies": {
68
+ "@modelcontextprotocol/sdk": "^1.18.0",
68
69
  "@nestjs/common": "^11.1.6",
69
70
  "@nestjs/core": "^11.1.6",
70
71
  "@types/cli": "^0.11.21",
@@ -9,6 +9,7 @@ import { ConfigAnalyzer } from "./analyses/ConfigAnalyzer";
9
9
  import { PathAnalyzer } from "./analyses/PathAnalyzer";
10
10
  import { ReflectControllerAnalyzer } from "./analyses/ReflectControllerAnalyzer";
11
11
  import { TypedHttpRouteAnalyzer } from "./analyses/TypedHttpRouteAnalyzer";
12
+ import { TypedMcpRouteAnalyzer } from "./analyses/TypedMcpRouteAnalyzer";
12
13
  import { TypedWebSocketRouteAnalyzer } from "./analyses/TypedWebSocketRouteAnalyzer";
13
14
  import { E2eGenerator } from "./generates/E2eGenerator";
14
15
  import { SdkGenerator } from "./generates/SdkGenerator";
@@ -18,6 +19,7 @@ import { IReflectController } from "./structures/IReflectController";
18
19
  import { IReflectOperationError } from "./structures/IReflectOperationError";
19
20
  import { ITypedApplication } from "./structures/ITypedApplication";
20
21
  import { ITypedHttpRoute } from "./structures/ITypedHttpRoute";
22
+ import { ITypedMcpRoute } from "./structures/ITypedMcpRoute";
21
23
  import { ITypedWebSocketRoute } from "./structures/ITypedWebSocketRoute";
22
24
  import { IOperationMetadata } from "./transformers/IOperationMetadata";
23
25
  import { StringUtil } from "./utils/StringUtil";
@@ -162,7 +164,11 @@ export class NestiaSdkApplication {
162
164
  const set: HashSet<Pair<string, string>> = new HashSet();
163
165
  for (const controller of controllers)
164
166
  for (const controllerPath of controller.paths)
165
- for (const operation of controller.operations)
167
+ for (const operation of controller.operations) {
168
+ if (operation.protocol === "mcp") {
169
+ set.insert(new Pair(`mcp:${operation.toolName}`, "mcp"));
170
+ continue;
171
+ }
166
172
  for (const operationPath of operation.paths)
167
173
  set.insert(
168
174
  new Pair(
@@ -170,6 +176,7 @@ export class NestiaSdkApplication {
170
176
  operation.protocol === "http" ? operation.method : "",
171
177
  ),
172
178
  );
179
+ }
173
180
  return set.size();
174
181
  })();
175
182
 
@@ -180,7 +187,9 @@ export class NestiaSdkApplication {
180
187
  .map(
181
188
  (c) =>
182
189
  c.paths.length *
183
- c.operations.map((f) => f.paths.length).reduce((a, b) => a + b, 0),
190
+ c.operations
191
+ .map((f) => (f.protocol === "mcp" ? 1 : f.paths.length))
192
+ .reduce((a, b) => a + b, 0),
184
193
  )
185
194
  .reduce((a, b) => a + b, 0)}`,
186
195
  );
@@ -196,9 +205,20 @@ export class NestiaSdkApplication {
196
205
 
197
206
  // CONVERT TO TYPED OPERATIONS
198
207
  const globalPrefix: string = project.input.globalPrefix?.prefix ?? "";
199
- const routes: Array<ITypedHttpRoute | ITypedWebSocketRoute> = [];
208
+ const routes: Array<
209
+ ITypedHttpRoute | ITypedWebSocketRoute | ITypedMcpRoute
210
+ > = [];
200
211
  for (const c of controllers)
201
212
  for (const o of c.operations) {
213
+ if (o.protocol === "mcp") {
214
+ routes.push(
215
+ ...TypedMcpRouteAnalyzer.analyze({
216
+ controller: c,
217
+ operation: o,
218
+ }),
219
+ );
220
+ continue;
221
+ }
202
222
  const pathList: Set<string> = new Set();
203
223
  const versions: string[] = VersioningStrategy.merge(project)([
204
224
  ...(c.versions ?? []),
@@ -68,6 +68,7 @@ export namespace NestiaSwaggerComposer {
68
68
  const routes: ITypedHttpRoute[] = [];
69
69
  for (const c of controllers)
70
70
  for (const o of c.operations) {
71
+ if (o.protocol === "mcp") continue;
71
72
  const pathList: Set<string> = new Set();
72
73
  const versions: string[] = VersioningStrategy.merge(project)([
73
74
  ...(c.versions ?? []),