@wootsup/mcp 0.1.0-rc.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +7 -7
  2. package/dist/index.d.ts +19 -0
  3. package/dist/index.js +72 -6
  4. package/dist/index.js.map +1 -1
  5. package/dist/modules/apimapper/cache.d.ts +2 -2
  6. package/dist/modules/apimapper/cache.js +107 -25
  7. package/dist/modules/apimapper/cache.js.map +1 -1
  8. package/dist/modules/apimapper/client.d.ts +40 -0
  9. package/dist/modules/apimapper/client.js +82 -12
  10. package/dist/modules/apimapper/client.js.map +1 -1
  11. package/dist/modules/apimapper/connections-format.d.ts +51 -0
  12. package/dist/modules/apimapper/connections-format.js +261 -0
  13. package/dist/modules/apimapper/connections-format.js.map +1 -0
  14. package/dist/modules/apimapper/connections-trim.d.ts +82 -0
  15. package/dist/modules/apimapper/connections-trim.js +224 -0
  16. package/dist/modules/apimapper/connections-trim.js.map +1 -0
  17. package/dist/modules/apimapper/connections.d.ts +14 -2
  18. package/dist/modules/apimapper/connections.js +447 -143
  19. package/dist/modules/apimapper/connections.js.map +1 -1
  20. package/dist/modules/apimapper/credentials-format.d.ts +21 -0
  21. package/dist/modules/apimapper/credentials-format.js +145 -0
  22. package/dist/modules/apimapper/credentials-format.js.map +1 -0
  23. package/dist/modules/apimapper/credentials.d.ts +12 -2
  24. package/dist/modules/apimapper/credentials.js +253 -72
  25. package/dist/modules/apimapper/credentials.js.map +1 -1
  26. package/dist/modules/apimapper/diagnose.d.ts +54 -2
  27. package/dist/modules/apimapper/diagnose.js +193 -11
  28. package/dist/modules/apimapper/diagnose.js.map +1 -1
  29. package/dist/modules/apimapper/elicitation.d.ts +54 -0
  30. package/dist/modules/apimapper/elicitation.js +90 -0
  31. package/dist/modules/apimapper/elicitation.js.map +1 -0
  32. package/dist/modules/apimapper/flows-format.d.ts +50 -0
  33. package/dist/modules/apimapper/flows-format.js +318 -0
  34. package/dist/modules/apimapper/flows-format.js.map +1 -0
  35. package/dist/modules/apimapper/flows.d.ts +13 -2
  36. package/dist/modules/apimapper/flows.js +325 -118
  37. package/dist/modules/apimapper/flows.js.map +1 -1
  38. package/dist/modules/apimapper/gateway/advanced-tool.d.ts +9 -0
  39. package/dist/modules/apimapper/gateway/advanced-tool.js +214 -0
  40. package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -0
  41. package/dist/modules/apimapper/gateway/capturing-server.d.ts +81 -0
  42. package/dist/modules/apimapper/gateway/capturing-server.js +87 -0
  43. package/dist/modules/apimapper/gateway/capturing-server.js.map +1 -0
  44. package/dist/modules/apimapper/gateway/essentials.d.ts +4 -0
  45. package/dist/modules/apimapper/gateway/essentials.js +28 -0
  46. package/dist/modules/apimapper/gateway/essentials.js.map +1 -0
  47. package/dist/modules/apimapper/gateway/test-support.d.ts +17 -0
  48. package/dist/modules/apimapper/gateway/test-support.js +43 -0
  49. package/dist/modules/apimapper/gateway/test-support.js.map +1 -0
  50. package/dist/modules/apimapper/get-skill.d.ts +3 -3
  51. package/dist/modules/apimapper/get-skill.js +4 -2
  52. package/dist/modules/apimapper/get-skill.js.map +1 -1
  53. package/dist/modules/apimapper/graph-builder.js +1 -1
  54. package/dist/modules/apimapper/graph-builder.js.map +1 -1
  55. package/dist/modules/apimapper/graph.d.ts +2 -2
  56. package/dist/modules/apimapper/graph.js +165 -34
  57. package/dist/modules/apimapper/graph.js.map +1 -1
  58. package/dist/modules/apimapper/index.d.ts +17 -1
  59. package/dist/modules/apimapper/index.js +66 -17
  60. package/dist/modules/apimapper/index.js.map +1 -1
  61. package/dist/modules/apimapper/inspect.d.ts +3 -2
  62. package/dist/modules/apimapper/inspect.js +97 -13
  63. package/dist/modules/apimapper/inspect.js.map +1 -1
  64. package/dist/modules/apimapper/library.d.ts +2 -2
  65. package/dist/modules/apimapper/library.js +303 -60
  66. package/dist/modules/apimapper/library.js.map +1 -1
  67. package/dist/modules/apimapper/license-format.d.ts +22 -0
  68. package/dist/modules/apimapper/license-format.js +149 -0
  69. package/dist/modules/apimapper/license-format.js.map +1 -0
  70. package/dist/modules/apimapper/license.d.ts +16 -2
  71. package/dist/modules/apimapper/license.js +85 -37
  72. package/dist/modules/apimapper/license.js.map +1 -1
  73. package/dist/modules/apimapper/local-sources.d.ts +2 -2
  74. package/dist/modules/apimapper/local-sources.js +58 -30
  75. package/dist/modules/apimapper/local-sources.js.map +1 -1
  76. package/dist/modules/apimapper/misc.d.ts +30 -2
  77. package/dist/modules/apimapper/misc.js +129 -50
  78. package/dist/modules/apimapper/misc.js.map +1 -1
  79. package/dist/modules/apimapper/node-schema.d.ts +52 -0
  80. package/dist/modules/apimapper/node-schema.js +70 -2
  81. package/dist/modules/apimapper/node-schema.js.map +1 -1
  82. package/dist/modules/apimapper/normalizers.d.ts +1 -0
  83. package/dist/modules/apimapper/normalizers.js +51 -0
  84. package/dist/modules/apimapper/normalizers.js.map +1 -1
  85. package/dist/modules/apimapper/onboarding.d.ts +48 -2
  86. package/dist/modules/apimapper/onboarding.js +324 -17
  87. package/dist/modules/apimapper/onboarding.js.map +1 -1
  88. package/dist/modules/apimapper/read-cache.d.ts +31 -2
  89. package/dist/modules/apimapper/read-cache.js +20 -6
  90. package/dist/modules/apimapper/read-cache.js.map +1 -1
  91. package/dist/modules/apimapper/render/_shared.d.ts +24 -0
  92. package/dist/modules/apimapper/render/_shared.js +84 -0
  93. package/dist/modules/apimapper/render/_shared.js.map +1 -0
  94. package/dist/modules/apimapper/render/dag.d.ts +18 -0
  95. package/dist/modules/apimapper/render/dag.js +70 -0
  96. package/dist/modules/apimapper/render/dag.js.map +1 -0
  97. package/dist/modules/apimapper/render/index.d.ts +2 -0
  98. package/dist/modules/apimapper/render/index.js +112 -0
  99. package/dist/modules/apimapper/render/index.js.map +1 -0
  100. package/dist/modules/apimapper/render/renderers/chart-bar.d.ts +2 -0
  101. package/dist/modules/apimapper/render/renderers/chart-bar.js +70 -0
  102. package/dist/modules/apimapper/render/renderers/chart-bar.js.map +1 -0
  103. package/dist/modules/apimapper/render/renderers/chart-line.d.ts +2 -0
  104. package/dist/modules/apimapper/render/renderers/chart-line.js +71 -0
  105. package/dist/modules/apimapper/render/renderers/chart-line.js.map +1 -0
  106. package/dist/modules/apimapper/render/renderers/diff.d.ts +2 -0
  107. package/dist/modules/apimapper/render/renderers/diff.js +154 -0
  108. package/dist/modules/apimapper/render/renderers/diff.js.map +1 -0
  109. package/dist/modules/apimapper/render/renderers/flow-diagram.d.ts +1 -0
  110. package/dist/modules/apimapper/render/renderers/flow-diagram.js +180 -0
  111. package/dist/modules/apimapper/render/renderers/flow-diagram.js.map +1 -0
  112. package/dist/modules/apimapper/render/renderers/json-tree.d.ts +2 -0
  113. package/dist/modules/apimapper/render/renderers/json-tree.js +87 -0
  114. package/dist/modules/apimapper/render/renderers/json-tree.js.map +1 -0
  115. package/dist/modules/apimapper/render/renderers/schema-diagram.d.ts +2 -0
  116. package/dist/modules/apimapper/render/renderers/schema-diagram.js +83 -0
  117. package/dist/modules/apimapper/render/renderers/schema-diagram.js.map +1 -0
  118. package/dist/modules/apimapper/render/renderers/table.d.ts +2 -0
  119. package/dist/modules/apimapper/render/renderers/table.js +75 -0
  120. package/dist/modules/apimapper/render/renderers/table.js.map +1 -0
  121. package/dist/modules/apimapper/render/schemas.d.ts +23 -0
  122. package/dist/modules/apimapper/render/schemas.js +56 -0
  123. package/dist/modules/apimapper/render/schemas.js.map +1 -0
  124. package/dist/modules/apimapper/render/secret-masking.d.ts +5 -0
  125. package/dist/modules/apimapper/render/secret-masking.js +51 -0
  126. package/dist/modules/apimapper/render/secret-masking.js.map +1 -0
  127. package/dist/modules/apimapper/render/sidecar.d.ts +21 -0
  128. package/dist/modules/apimapper/render/sidecar.js +66 -0
  129. package/dist/modules/apimapper/render/sidecar.js.map +1 -0
  130. package/dist/modules/apimapper/render/token-cap.d.ts +21 -0
  131. package/dist/modules/apimapper/render/token-cap.js +57 -0
  132. package/dist/modules/apimapper/render/token-cap.js.map +1 -0
  133. package/dist/modules/apimapper/schema.d.ts +2 -2
  134. package/dist/modules/apimapper/schema.js +100 -32
  135. package/dist/modules/apimapper/schema.js.map +1 -1
  136. package/dist/modules/apimapper/settings-format.d.ts +23 -0
  137. package/dist/modules/apimapper/settings-format.js +135 -0
  138. package/dist/modules/apimapper/settings-format.js.map +1 -0
  139. package/dist/modules/apimapper/settings.d.ts +2 -2
  140. package/dist/modules/apimapper/settings.js +101 -40
  141. package/dist/modules/apimapper/settings.js.map +1 -1
  142. package/dist/modules/apimapper/skill-resources.d.ts +2 -2
  143. package/dist/modules/apimapper/skill-resources.js.map +1 -1
  144. package/dist/modules/apimapper/token-baseline.harness.d.ts +91 -0
  145. package/dist/modules/apimapper/token-baseline.harness.js +291 -0
  146. package/dist/modules/apimapper/token-baseline.harness.js.map +1 -0
  147. package/dist/modules/apimapper/toolslist-size.d.ts +55 -0
  148. package/dist/modules/apimapper/toolslist-size.js +190 -0
  149. package/dist/modules/apimapper/toolslist-size.js.map +1 -0
  150. package/dist/modules/apimapper/types.d.ts +23 -8
  151. package/dist/modules/apimapper/types.js +26 -1
  152. package/dist/modules/apimapper/types.js.map +1 -1
  153. package/dist/modules/apimapper/use-profile.d.ts +21 -0
  154. package/dist/modules/apimapper/use-profile.js +56 -2
  155. package/dist/modules/apimapper/use-profile.js.map +1 -1
  156. package/dist/modules/apimapper/workflows.d.ts +2 -2
  157. package/dist/modules/apimapper/workflows.js +143 -16
  158. package/dist/modules/apimapper/workflows.js.map +1 -1
  159. package/dist/platform/index.js +44 -5
  160. package/dist/platform/index.js.map +1 -1
  161. package/dist/setup-cli.d.ts +53 -0
  162. package/dist/setup-cli.js +135 -6
  163. package/dist/setup-cli.js.map +1 -1
  164. package/docs/architecture.md +1 -1
  165. package/docs/tools.md +1 -1
  166. package/manifest.json +12 -3
  167. package/package.json +9 -4
  168. package/skills/apimapper/SKILL.md +1 -1
  169. package/skills/apimapper/reference/render.md +132 -0
  170. package/skills/apimapper/reference/troubleshooting.md +1 -1
  171. package/skills/apimapper/reference/yootheme.md +1 -1
@@ -1,6 +1,6 @@
1
1
  // src/modules/apimapper/get-skill.ts — Phase 7.4.
2
2
  //
3
- // apimapper_get_skill: returns the markdown content of one of the 5 bundled
3
+ // apimapper_get_skill: returns the markdown content of one of the 6 bundled
4
4
  // skill docs. Sibling to skill://apimapper/<topic> resources (Phase 7.3) for
5
5
  // clients that prefer tool-call discovery over resource discovery.
6
6
  import { z } from "zod";
@@ -14,6 +14,7 @@ export const SKILL_TOPICS = [
14
14
  "yootheme",
15
15
  "joomla",
16
16
  "troubleshooting",
17
+ "render",
17
18
  ];
18
19
  const TOPIC_TO_FILE = {
19
20
  "getting-started": "SKILL.md",
@@ -21,6 +22,7 @@ const TOPIC_TO_FILE = {
21
22
  yootheme: "reference/yootheme.md",
22
23
  joomla: "reference/joomla.md",
23
24
  troubleshooting: "reference/troubleshooting.md",
25
+ render: "reference/render.md",
24
26
  };
25
27
  function defaultSkillsRoot() {
26
28
  // <pkg-root>/src/modules/apimapper/get-skill.ts → up three.
@@ -39,7 +41,7 @@ export function registerGetSkillTool(server, rootDir) {
39
41
  .enum(SKILL_TOPICS)
40
42
  .describe(`Which doc to fetch — one of: ${SKILL_TOPICS.join(", ")}`),
41
43
  },
42
- annotations: readOnly(),
44
+ annotations: readOnly({ title: "Get Skill Resource", openWorld: false }),
43
45
  }, async ({ topic }) => {
44
46
  // Defensive runtime check — zod already validates at the MCP layer, but
45
47
  // a direct unit-test invocation can bypass validation, and we want to
@@ -1 +1 @@
1
- {"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/modules/apimapper/get-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/modules/apimapper/get-skill.ts"],"names":[],"mappings":"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"}
@@ -70,7 +70,7 @@ export function buildFlowGraph(input) {
70
70
  id: `e-source${i + 1}-merge`,
71
71
  source: `source-${i + 1}`,
72
72
  target: mergeId,
73
- targetHandle: i === 0 ? "input-A" : "input-B",
73
+ targetHandle: `input-${i}`,
74
74
  });
75
75
  });
76
76
  lastNodeId = mergeId;
@@ -1 +1 @@
1
- {"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph-builder.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,0CAA0C;AAG1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAwC1D;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,SAAS,GAAG,GAAG,CAAC;IAEtB,iBAAiB;IACjB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE;YAC9C,IAAI,EAAE;gBACJ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;gBACnC,YAAY,EAAE,CAAC,CAAC,UAAU;gBAC1B,UAAU,EAAE,CAAC,CAAC,QAAQ;gBACtB,cAAc,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;gBACvC,SAAS,EAAE,CAAC,CAAC,UAAU;aACxB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,+BAA+B;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,SAAS,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE;gBACR,CAAC,EAAE,KAAK,GAAG,QAAQ;gBACnB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE;aAC1D;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,UAAU,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE;gBAC5D,QAAQ;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;gBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ;gBAC5B,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;gBACzB,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;aAC9C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC;IAED,mBAAmB;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,aAAa,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE;YAC7C,IAAI,EAAE;gBACJ,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,KAAK;aAC1C;SACF,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,KAAK,UAAU,YAAY;YAC/B,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QACH,UAAU,GAAG,WAAW,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,UAAU,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC;QACT,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE;QAC7C,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB;KACF,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC;QACT,EAAE,EAAE,KAAK,UAAU,SAAS;QAC5B,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph-builder.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- export declare function registerGraphTools(server: McpServer): void;
1
+ import type { ToolRegistrar } from "./gateway/capturing-server.js";
2
+ export declare function registerGraphTools(server: ToolRegistrar): void;
@@ -1,24 +1,69 @@
1
1
  import { z } from "zod";
2
- import { formatResult, readOnly } from "@getimo/mcp-toolkit";
2
+ import { formatResult, errorResult, readOnly } from "@getimo/mcp-toolkit";
3
3
  import { request, hintFor } from "./client.js";
4
- import { nodeSchema } from "./node-schema.js";
4
+ import { nodeSchema, edgeSchema } from "./node-schema.js";
5
+ import { buildFlowVisualization, SIDECAR_RESPONSE_MAX_CHARS, } from "./render/sidecar.js";
6
+ /**
7
+ * L-7 (W3F-5): hydrate `{nodes, edges}` from a saved flow when the
8
+ * caller passed `flow_id` instead of inline arrays. Returns the
9
+ * hydrated tuple on success, or a `{error, status, errorCode}` shape
10
+ * to surface upstream. Conservative: any failure aborts hydration so
11
+ * the caller can decide whether to surface the error or fall back to
12
+ * the inline-required path.
13
+ */
14
+ async function hydrateGraphFromFlowId(flowId) {
15
+ const r = await request(`/flows/${encodeURIComponent(flowId)}`);
16
+ if (!r.success) {
17
+ return {
18
+ error: r.error ?? `flow ${flowId} not found`,
19
+ status: r.status,
20
+ errorCode: r.errorCode,
21
+ };
22
+ }
23
+ const flow = r.data?.flow;
24
+ const nodes = Array.isArray(flow?.nodes) ? flow.nodes : [];
25
+ const edges = Array.isArray(flow?.edges) ? flow.edges : [];
26
+ if (nodes.length === 0) {
27
+ return {
28
+ error: `flow ${flowId} has no nodes`,
29
+ errorCode: "empty_flow",
30
+ };
31
+ }
32
+ return { nodes, edges };
33
+ }
5
34
  export function registerGraphTools(server) {
6
35
  // ── apimapper_graph_preview ────────────────────────────────────────
7
36
  server.registerTool("apimapper_graph_preview", {
8
37
  title: "Graph Preview (Execute Pipeline)",
9
38
  description: "Execute an ad-hoc graph (nodes + edges) and return rendered items at the target node. " +
10
- "Used by the Admin-UI preview panel — does NOT require a saved Flow." +
39
+ "Used by the Admin-UI preview panel — does NOT require a saved Flow.\n\n" +
40
+ "**Idempotent + cached (60s):** identical {nodes, edges, targetNodeId} returns the cached " +
41
+ "result without re-executing the pipeline. Use `forceRefresh: true` only after a " +
42
+ "Connection/Credential mutation or when upstream API data is known to have changed. " +
43
+ "Do NOT call repeatedly to 're-render' or 'double-check' the same graph — the second " +
44
+ "call returns the same payload as the first." +
11
45
  "\n\nExample:\n apimapper_graph_preview({ nodes: [{ id: 'src1', type: 'source' }], edges: [], target_node_id: 'src1' })",
12
46
  inputSchema: {
47
+ // L-7 (W3F-5): `flow_id` shortcut hydrates {nodes, edges} from
48
+ // the saved flow server-side so the caller does not have to
49
+ // round-trip via apimapper_flow_get. When both `flow_id` and
50
+ // inline {nodes, edges} are passed, the inline arrays win.
51
+ flow_id: z
52
+ .string()
53
+ .optional()
54
+ .describe("Saved flow ID. When set, {nodes, edges} are loaded from the flow before preview. " +
55
+ "Inline {nodes, edges} (if also provided) override the loaded values."),
13
56
  nodes: z
14
57
  .array(nodeSchema)
15
- .min(1)
58
+ .optional()
16
59
  .describe('Node array. Each: {id, type, position:{x,y}, data:{...}}. ' +
17
60
  'Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. ' +
18
- 'See apimapper_flow_create for full shape.'),
61
+ 'Required when `flow_id` is not provided. See apimapper_flow_create for full shape.'),
19
62
  edges: z
20
- .array(z.record(z.string(), z.unknown()))
21
- .describe('Edge array. Each: {id, source, target, targetHandle?, sourceHandle?}. See apimapper_flow_create.'),
63
+ .array(edgeSchema)
64
+ .optional()
65
+ .describe('Edge array. Each: {id?, source, target, sourceHandle?, targetHandle?}. ' +
66
+ 'Required when `flow_id` is not provided. See apimapper_flow_create.'),
22
67
  targetNodeId: z
23
68
  .string()
24
69
  .optional()
@@ -28,22 +73,52 @@ export function registerGraphTools(server) {
28
73
  .default(false)
29
74
  .describe("Skip snapshot/cache; always live-fetch from upstream"),
30
75
  },
31
- annotations: readOnly(),
32
- }, async ({ nodes, edges, targetNodeId, forceRefresh }) => {
76
+ annotations: readOnly({ title: "Preview Graph", openWorld: true }),
77
+ }, async ({ flow_id, nodes, edges, targetNodeId, forceRefresh }) => {
78
+ // L-7 (W3F-5): hydrate from flow_id when inline arrays are absent.
79
+ let resolvedNodes = nodes;
80
+ let resolvedEdges = edges;
81
+ if (typeof flow_id === "string" &&
82
+ flow_id !== "" &&
83
+ (!Array.isArray(resolvedNodes) || resolvedNodes.length === 0)) {
84
+ const h = await hydrateGraphFromFlowId(flow_id);
85
+ if ("error" in h) {
86
+ return errorResult({
87
+ message: h.error,
88
+ code: h.errorCode ?? (h.status ? String(h.status) : undefined),
89
+ suggestion: hintFor("not_found"),
90
+ details: { flow_id },
91
+ });
92
+ }
93
+ resolvedNodes = h.nodes;
94
+ resolvedEdges = h.edges;
95
+ }
96
+ if (!Array.isArray(resolvedNodes) || resolvedNodes.length === 0) {
97
+ return errorResult({
98
+ message: "Pass either `flow_id` or a non-empty `nodes` array.",
99
+ code: "bad_request",
100
+ suggestion: "Use apimapper_flow_list to find a flow_id, or build the graph inline.",
101
+ details: {},
102
+ });
103
+ }
104
+ if (!Array.isArray(resolvedEdges)) {
105
+ resolvedEdges = [];
106
+ }
107
+ const localNodes = resolvedNodes;
108
+ const localEdges = resolvedEdges;
33
109
  // PHP success body: {preview, outputCount, executedNodes, nodeOutputCounts,
34
110
  // nodeOutputs}. There's no `trace` key. Audit: F-A2-11.
35
111
  const r = await request("/graph/preview", {
36
112
  method: "POST",
37
- body: JSON.stringify({ nodes, edges, targetNodeId, forceRefresh }),
113
+ body: JSON.stringify({ nodes: localNodes, edges: localEdges, targetNodeId, forceRefresh }),
38
114
  });
39
115
  if (!r.success) {
40
- return formatResult({
41
- error: r.error,
42
- status: r.status,
43
- errorCode: r.errorCode,
44
- context: { node_count: nodes.length, edge_count: edges.length, targetNodeId, forceRefresh },
45
- hint: hintFor(r.errorCode),
46
- }, true);
116
+ return errorResult({
117
+ message: r.error ?? "graph preview failed",
118
+ code: r.errorCode ?? (r.status ? String(r.status) : undefined),
119
+ suggestion: hintFor(r.errorCode),
120
+ details: { node_count: localNodes.length, edge_count: localEdges.length, targetNodeId, forceRefresh },
121
+ });
47
122
  }
48
123
  const items = Array.isArray(r.data?.preview) ? r.data.preview : [];
49
124
  const itemCount = items.length;
@@ -55,6 +130,7 @@ export function registerGraphTools(server) {
55
130
  node_output_counts: r.data?.nodeOutputCounts,
56
131
  target_node: targetNodeId || "(terminal)",
57
132
  force_refresh: forceRefresh,
133
+ ...(typeof flow_id === "string" && flow_id !== "" ? { flow_id } : {}),
58
134
  items: items.slice(0, 50),
59
135
  note: itemCount > 50 ? `Showing first 50 of ${itemCount} items.` : undefined,
60
136
  }, false, { maxChars: 6000 });
@@ -66,47 +142,102 @@ export function registerGraphTools(server) {
66
142
  "WITHOUT executing the pipeline. Fast — no upstream fetches." +
67
143
  "\n\nExample:\n apimapper_graph_validate({ nodes: [{ id: 'src1', type: 'source' }, { id: 'out1', type: 'output' }], edges: [{ source: 'src1', target: 'out1' }] })",
68
144
  inputSchema: {
145
+ // L-7 (W3F-5): symmetric with apimapper_graph_preview — pass
146
+ // `flow_id` to validate a saved flow without re-sending the
147
+ // inline graph.
148
+ flow_id: z
149
+ .string()
150
+ .optional()
151
+ .describe("Saved flow ID. When set, {nodes, edges} are loaded from the flow before validation."),
69
152
  nodes: z
70
153
  .array(nodeSchema)
71
- .describe("Node array. Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. See apimapper_flow_create."),
154
+ .optional()
155
+ .describe("Node array. Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. Required when `flow_id` is not provided. See apimapper_flow_create."),
72
156
  edges: z
73
- .array(z.record(z.string(), z.unknown()))
74
- .describe("Edge array — see apimapper_flow_create for shape"),
157
+ .array(edgeSchema)
158
+ .optional()
159
+ .describe("Edge array — see apimapper_flow_create for shape. Required when `flow_id` is not provided."),
75
160
  },
76
- annotations: readOnly(),
77
- }, async ({ nodes, edges }) => {
161
+ annotations: readOnly({ title: "Validate Graph", openWorld: true }),
162
+ }, async ({ flow_id, nodes, edges }) => {
163
+ // L-7 (W3F-5): hydrate from flow_id when inline arrays absent.
164
+ let resolvedNodes = nodes;
165
+ let resolvedEdges = edges;
166
+ if (typeof flow_id === "string" &&
167
+ flow_id !== "" &&
168
+ (!Array.isArray(resolvedNodes) || resolvedNodes.length === 0)) {
169
+ const h = await hydrateGraphFromFlowId(flow_id);
170
+ if ("error" in h) {
171
+ return errorResult({
172
+ message: h.error,
173
+ code: h.errorCode ?? (h.status ? String(h.status) : undefined),
174
+ suggestion: hintFor("not_found"),
175
+ details: { flow_id },
176
+ });
177
+ }
178
+ resolvedNodes = h.nodes;
179
+ resolvedEdges = h.edges;
180
+ }
181
+ if (!Array.isArray(resolvedNodes)) {
182
+ return errorResult({
183
+ message: "Pass either `flow_id` or `nodes` (with `edges`).",
184
+ code: "bad_request",
185
+ suggestion: "Use apimapper_flow_list to find a flow_id, or build the graph inline.",
186
+ details: {},
187
+ });
188
+ }
189
+ if (!Array.isArray(resolvedEdges)) {
190
+ resolvedEdges = [];
191
+ }
192
+ const localNodes = resolvedNodes;
193
+ const localEdges = resolvedEdges;
78
194
  // PHP success body: {valid:true, warnings:[], nodeCount, edgeCount}. On
79
195
  // invalid the errors are squashed to a single string via
80
196
  // HandlerResult::error() and surface as `r.error` here. Wave 1C may emit
81
197
  // structured `errors[]`; surface them defensively. Audit: F-A2-12.
82
198
  const r = await request("/graph/validate", {
83
199
  method: "POST",
84
- body: JSON.stringify({ nodes, edges }),
200
+ body: JSON.stringify({ nodes: localNodes, edges: localEdges }),
85
201
  });
86
202
  if (!r.success) {
87
- return formatResult({
88
- error: r.error,
89
- status: r.status,
90
- errorCode: r.errorCode,
91
- errors: Array.isArray(r.errors)
92
- ? r.errors
93
- : undefined,
94
- context: { node_count: nodes.length, edge_count: edges.length },
95
- hint: hintFor(r.errorCode),
96
- }, true);
203
+ const structuredErrors = Array.isArray(r.errors)
204
+ ? r.errors
205
+ : undefined;
206
+ return errorResult({
207
+ message: r.error ?? "graph validate failed",
208
+ code: r.errorCode ?? (r.status ? String(r.status) : undefined),
209
+ suggestion: hintFor(r.errorCode),
210
+ details: {
211
+ node_count: localNodes.length,
212
+ edge_count: localEdges.length,
213
+ ...(structuredErrors ? { errors: structuredErrors } : {}),
214
+ },
215
+ });
97
216
  }
98
217
  const valid = r.data?.valid ?? true;
99
218
  const warns = r.data?.warnings || [];
219
+ // Sidecar: graph_validate always has input.nodes + input.edges
220
+ // (Zod-validated), so the visualization always renders unless
221
+ // APIMAPPER_AUTO_VISUALIZE_FLOWS="false". Additive + defensive.
222
+ const viz = buildFlowVisualization({
223
+ nodes: localNodes,
224
+ edges: localEdges,
225
+ id: flow_id ?? "validated",
226
+ name: typeof flow_id === "string" && flow_id !== "" ? `Flow ${flow_id}` : "Validated Graph",
227
+ });
100
228
  return formatResult({
101
229
  valid,
102
230
  node_count: r.data?.nodeCount,
103
231
  edge_count: r.data?.edgeCount,
104
232
  warning_count: Array.isArray(warns) ? warns.length : 0,
105
233
  warnings: warns,
234
+ ...(viz && { _visualization: viz }),
106
235
  },
107
236
  // Surface validation failure as isError=true so the agent halts
108
237
  // instead of proceeding past a broken graph.
109
- !valid, { maxChars: 4000 });
238
+ !valid,
239
+ // Headroom for the sidecar — see SIDECAR_RESPONSE_MAX_CHARS.
240
+ { maxChars: SIDECAR_RESPONSE_MAX_CHARS });
110
241
  });
111
242
  }
112
243
  //# sourceMappingURL=graph.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,18 @@
1
1
  import type { ModuleDefinition } from "@getimo/mcp-toolkit";
2
- export declare const apimapperRestModule: ModuleDefinition;
2
+ import { type AdvancedToolEntry } from "./gateway/capturing-server.js";
3
+ /**
4
+ * The API Mapper REST module, extended with the W3.4 Gateway-Hub.
5
+ *
6
+ * Cursor caps MCP servers at ~40 tools. The 12 `registerXTools` calls below
7
+ * are routed through a `CapturingServer`: essential tools (see
8
+ * gateway/essentials.ts) stay first-class on the real McpServer, every other
9
+ * tool is captured into an advanced registry and reached through the single
10
+ * `apimapper_advanced` gateway tool — keeping `tools/list` well under the cap.
11
+ *
12
+ * `getAdvancedRegistry()` exposes the registry captured by the most recent
13
+ * `register()` call (used by the gateway surface tests).
14
+ */
15
+ export interface ApimapperRestModule extends ModuleDefinition {
16
+ getAdvancedRegistry(): Map<string, AdvancedToolEntry> | undefined;
17
+ }
18
+ export declare const apimapperRestModule: ApimapperRestModule;
@@ -15,24 +15,67 @@ import { registerGetSkillTool } from "./get-skill.js";
15
15
  import { registerOnboardingTool } from "./onboarding.js";
16
16
  import { registerInspectTokenTool } from "./inspect.js";
17
17
  import { registerDiagnoseTool } from "./diagnose.js";
18
+ import { registerRenderTool } from "./render/index.js";
19
+ import { CapturingServer } from "./gateway/capturing-server.js";
20
+ import { registerAdvancedTool } from "./gateway/advanced-tool.js";
21
+ import { toElicitationCapability } from "./elicitation.js";
22
+ /**
23
+ * Module-level cache of the advanced-tool registry captured during the most
24
+ * recent `register()` call. Accessed via `apimapperRestModule.getAdvancedRegistry()`.
25
+ *
26
+ * INVARIANT — single-server-per-process. The MCP adapter is designed to run
27
+ * as one `McpServer` instance per process (stdio transport bound to a single
28
+ * client). `register()` is invoked exactly once during process bootstrap; the
29
+ * captured registry then stays stable for the lifetime of the server. The
30
+ * gateway surface tests rely on this single-server invariant.
31
+ *
32
+ * INVARIANT — last-write-wins. If a future caller ever invokes `register()`
33
+ * a second time on a fresh `McpServer` (e.g. test wiring that re-binds the
34
+ * module to a new server), `lastAdvancedRegistry` is overwritten by the most
35
+ * recent capture. This is intentional for the W3.4 gateway design — only the
36
+ * latest server's tool set is reachable through the module-level accessor.
37
+ *
38
+ * NOT SUPPORTED — concurrent registrations on different `McpServer` instances
39
+ * would race on this cell. The adapter is not designed for that topology;
40
+ * running multiple servers in one process would also break stdio multiplexing
41
+ * higher up the stack. F-1.4 (Pass-1 consolidation) makes that invariant
42
+ * explicit so reviewers do not mistake the module-level mutable state for a
43
+ * latent thread-safety bug.
44
+ */
45
+ let lastAdvancedRegistry;
18
46
  export const apimapperRestModule = {
19
47
  name: "apimapper-rest",
20
48
  description: "API Mapper REST coverage — Full coverage of /wp-json/api-mapper/v1/* (connections, credentials, " +
21
49
  "flows, graph, local-sources, schema, library, cache, settings, license, releases, " +
22
50
  "brandfetch, feedback) plus composite workflows.",
23
51
  register: (server) => {
24
- registerConnectionTools(server);
25
- registerCredentialTools(server);
26
- registerFlowTools(server);
27
- registerGraphTools(server);
28
- registerLocalSourceTools(server);
29
- registerSchemaTools(server);
30
- registerLibraryTools(server);
31
- registerCacheTools(server);
32
- registerSettingsTools(server);
33
- registerLicenseTools(server);
34
- registerMiscTools(server);
35
- registerWorkflowTools(server);
52
+ // Route every tool registration through the CapturingServer: essentials
53
+ // forward to the real server, the rest are captured for the gateway.
54
+ const capturing = new CapturingServer(server);
55
+ // W3.6 — targeted elicitation. The 3 modules below have a disambiguation
56
+ // site that can prompt the user via the MCP elicitation channel. The
57
+ // toolkit's `elicitChoice` needs a `{ server: { elicitInput } }` whose
58
+ // `elicitInput` is typed with the toolkit's loose `ElicitInputParams`;
59
+ // the SDK's `McpServer.server.elicitInput` is the stricter discriminated
60
+ // form/url union, so `toElicitationCapability` is the typed adapter that
61
+ // bridges the two (single documented cast — see elicitation.ts). The
62
+ // capability is passed as the optional 2nd argument to ONLY these 3
63
+ // modules — the other 15 are untouched. When the argument is absent
64
+ // (host wiring without elicitation), each tool falls back to a structured
65
+ // `errorResult` on genuine ambiguity instead of prompting.
66
+ const elicitation = toElicitationCapability(server);
67
+ registerConnectionTools(capturing, elicitation);
68
+ registerCredentialTools(capturing, elicitation);
69
+ registerFlowTools(capturing, elicitation);
70
+ registerGraphTools(capturing);
71
+ registerLocalSourceTools(capturing);
72
+ registerSchemaTools(capturing);
73
+ registerLibraryTools(capturing);
74
+ registerCacheTools(capturing);
75
+ registerSettingsTools(capturing);
76
+ registerLicenseTools(capturing);
77
+ registerMiscTools(capturing);
78
+ registerWorkflowTools(capturing);
36
79
  // Skill resources are an MCP-spec protocol concept but Claude Desktop
37
80
  // (2026-05-19 rc-period) does not yet honour the `audience: ["assistant"]`
38
81
  // annotation that would hide them from the user-facing resource picker.
@@ -44,12 +87,18 @@ export const apimapperRestModule = {
44
87
  //
45
88
  // When Claude Desktop ships audience-filtering, flip the default to ON.
46
89
  if (process.env.APIMAPPER_EXPOSE_SKILL_RESOURCES === "1") {
47
- registerSkillResources(server);
90
+ registerSkillResources(capturing);
48
91
  }
49
- registerGetSkillTool(server);
50
- registerOnboardingTool(server);
51
- registerInspectTokenTool(server);
52
- registerDiagnoseTool(server);
92
+ registerGetSkillTool(capturing);
93
+ registerOnboardingTool(capturing);
94
+ registerInspectTokenTool(capturing);
95
+ registerDiagnoseTool(capturing);
96
+ registerRenderTool(capturing);
97
+ // Register the single gateway to every captured advanced tool.
98
+ const advancedRegistry = capturing.getAdvancedRegistry();
99
+ registerAdvancedTool(server, advancedRegistry);
100
+ lastAdvancedRegistry = advancedRegistry;
53
101
  },
102
+ getAdvancedRegistry: () => lastAdvancedRegistry,
54
103
  };
55
104
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/apimapper/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,kGAAkG;QAClG,oFAAoF;QACpF,iDAAiD;IACnD,QAAQ,EAAE,CAAC,MAAiB,EAAE,EAAE;QAC9B,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAChC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAChC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,sEAAsE;QACtE,2EAA2E;QAC3E,wEAAwE;QACxE,qEAAqE;QACrE,wEAAwE;QACxE,yEAAyE;QACzE,uDAAuD;QACvD,qFAAqF;QACrF,EAAE;QACF,wEAAwE;QACxE,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,KAAK,GAAG,EAAE,CAAC;YACzD,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/apimapper/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAA0B,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAkB3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,IAAI,oBAAgE,CAAC;AAErE,MAAM,CAAC,MAAM,mBAAmB,GAAwB;IACtD,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,kGAAkG;QAClG,oFAAoF;QACpF,iDAAiD;IACnD,QAAQ,EAAE,CAAC,MAAiB,EAAE,EAAE;QAC9B,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QAE9C,yEAAyE;QACzE,qEAAqE;QACrE,uEAAuE;QACvE,uEAAuE;QACvE,yEAAyE;QACzE,yEAAyE;QACzE,qEAAqE;QACrE,oEAAoE;QACpE,oEAAoE;QACpE,0EAA0E;QAC1E,2DAA2D;QAC3D,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACpD,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAChD,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAChD,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1C,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9B,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACpC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC/B,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC9B,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACjC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACjC,sEAAsE;QACtE,2EAA2E;QAC3E,wEAAwE;QACxE,qEAAqE;QACrE,wEAAwE;QACxE,yEAAyE;QACzE,uDAAuD;QACvD,qFAAqF;QACrF,EAAE;QACF,wEAAwE;QACxE,IAAI,OAAO,CAAC,GAAG,CAAC,gCAAgC,KAAK,GAAG,EAAE,CAAC;YACzD,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QACD,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAClC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACpC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAChC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE9B,+DAA+D;QAC/D,MAAM,gBAAgB,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAC;QACzD,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC/C,oBAAoB,GAAG,gBAAgB,CAAC;IAC1C,CAAC;IACD,mBAAmB,EAAE,GAAG,EAAE,CAAC,oBAAoB;CAChD,CAAC"}
@@ -1,10 +1,11 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import type { ToolRegistrar } from "./gateway/capturing-server.js";
2
2
  import { type TokenPayload } from "../../auth/token.js";
3
3
  export interface InspectTokenDerived {
4
4
  age_seconds: number;
5
5
  expires_in_seconds?: number;
6
6
  expired: boolean;
7
7
  env: "live" | "test";
8
+ is_current: boolean;
8
9
  }
9
10
  export interface InspectTokenResult {
10
11
  valid: boolean;
@@ -17,4 +18,4 @@ export interface InspectTokenResult {
17
18
  * never throws.
18
19
  */
19
20
  export declare function inspectToken(token: string): InspectTokenResult;
20
- export declare function registerInspectTokenTool(server: McpServer): void;
21
+ export declare function registerInspectTokenTool(server: ToolRegistrar): void;