@wootsup/mcp 0.1.0-rc.9 → 0.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 (240) hide show
  1. package/CHANGELOG.md +148 -83
  2. package/README.md +36 -32
  3. package/SECURITY.md +15 -6
  4. package/dist/auth/keychain.d.ts +27 -1
  5. package/dist/auth/keychain.js +48 -2
  6. package/dist/auth/keychain.js.map +1 -1
  7. package/dist/cli-hint.d.ts +22 -0
  8. package/dist/cli-hint.js +55 -0
  9. package/dist/cli-hint.js.map +1 -0
  10. package/dist/index.d.ts +19 -0
  11. package/dist/index.js +163 -22
  12. package/dist/index.js.map +1 -1
  13. package/dist/install-skill.js +1 -1
  14. package/dist/modules/apimapper/cache.d.ts +2 -2
  15. package/dist/modules/apimapper/cache.js +119 -29
  16. package/dist/modules/apimapper/cache.js.map +1 -1
  17. package/dist/modules/apimapper/client.d.ts +102 -1
  18. package/dist/modules/apimapper/client.js +631 -297
  19. package/dist/modules/apimapper/client.js.map +1 -1
  20. package/dist/modules/apimapper/connections-format.d.ts +51 -0
  21. package/dist/modules/apimapper/connections-format.js +261 -0
  22. package/dist/modules/apimapper/connections-format.js.map +1 -0
  23. package/dist/modules/apimapper/connections-trim.d.ts +82 -0
  24. package/dist/modules/apimapper/connections-trim.js +224 -0
  25. package/dist/modules/apimapper/connections-trim.js.map +1 -0
  26. package/dist/modules/apimapper/connections.d.ts +14 -2
  27. package/dist/modules/apimapper/connections.js +612 -153
  28. package/dist/modules/apimapper/connections.js.map +1 -1
  29. package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
  30. package/dist/modules/apimapper/credential-sanitizer.js +60 -1
  31. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
  32. package/dist/modules/apimapper/credentials-format.d.ts +21 -0
  33. package/dist/modules/apimapper/credentials-format.js +145 -0
  34. package/dist/modules/apimapper/credentials-format.js.map +1 -0
  35. package/dist/modules/apimapper/credentials.d.ts +12 -2
  36. package/dist/modules/apimapper/credentials.js +226 -73
  37. package/dist/modules/apimapper/credentials.js.map +1 -1
  38. package/dist/modules/apimapper/diagnose.d.ts +54 -2
  39. package/dist/modules/apimapper/diagnose.js +213 -12
  40. package/dist/modules/apimapper/diagnose.js.map +1 -1
  41. package/dist/modules/apimapper/elicitation.d.ts +54 -0
  42. package/dist/modules/apimapper/elicitation.js +90 -0
  43. package/dist/modules/apimapper/elicitation.js.map +1 -0
  44. package/dist/modules/apimapper/flows-format.d.ts +50 -0
  45. package/dist/modules/apimapper/flows-format.js +318 -0
  46. package/dist/modules/apimapper/flows-format.js.map +1 -0
  47. package/dist/modules/apimapper/flows.d.ts +13 -2
  48. package/dist/modules/apimapper/flows.js +312 -122
  49. package/dist/modules/apimapper/flows.js.map +1 -1
  50. package/dist/modules/apimapper/gateway/advanced-tool.d.ts +9 -0
  51. package/dist/modules/apimapper/gateway/advanced-tool.js +265 -0
  52. package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -0
  53. package/dist/modules/apimapper/gateway/capturing-server.d.ts +81 -0
  54. package/dist/modules/apimapper/gateway/capturing-server.js +87 -0
  55. package/dist/modules/apimapper/gateway/capturing-server.js.map +1 -0
  56. package/dist/modules/apimapper/gateway/essentials.d.ts +4 -0
  57. package/dist/modules/apimapper/gateway/essentials.js +35 -0
  58. package/dist/modules/apimapper/gateway/essentials.js.map +1 -0
  59. package/dist/modules/apimapper/gateway/test-support.d.ts +17 -0
  60. package/dist/modules/apimapper/gateway/test-support.js +43 -0
  61. package/dist/modules/apimapper/gateway/test-support.js.map +1 -0
  62. package/dist/modules/apimapper/get-skill.d.ts +3 -3
  63. package/dist/modules/apimapper/get-skill.js +47 -7
  64. package/dist/modules/apimapper/get-skill.js.map +1 -1
  65. package/dist/modules/apimapper/graph-builder.js +1 -1
  66. package/dist/modules/apimapper/graph-builder.js.map +1 -1
  67. package/dist/modules/apimapper/graph.d.ts +2 -2
  68. package/dist/modules/apimapper/graph.js +170 -35
  69. package/dist/modules/apimapper/graph.js.map +1 -1
  70. package/dist/modules/apimapper/index.d.ts +17 -1
  71. package/dist/modules/apimapper/index.js +68 -17
  72. package/dist/modules/apimapper/index.js.map +1 -1
  73. package/dist/modules/apimapper/inspect.d.ts +3 -2
  74. package/dist/modules/apimapper/inspect.js +97 -13
  75. package/dist/modules/apimapper/inspect.js.map +1 -1
  76. package/dist/modules/apimapper/library.d.ts +2 -2
  77. package/dist/modules/apimapper/library.js +665 -80
  78. package/dist/modules/apimapper/library.js.map +1 -1
  79. package/dist/modules/apimapper/license-format.d.ts +22 -0
  80. package/dist/modules/apimapper/license-format.js +149 -0
  81. package/dist/modules/apimapper/license-format.js.map +1 -0
  82. package/dist/modules/apimapper/license.d.ts +16 -2
  83. package/dist/modules/apimapper/license.js +62 -38
  84. package/dist/modules/apimapper/license.js.map +1 -1
  85. package/dist/modules/apimapper/local-sources.d.ts +2 -2
  86. package/dist/modules/apimapper/local-sources.js +44 -30
  87. package/dist/modules/apimapper/local-sources.js.map +1 -1
  88. package/dist/modules/apimapper/misc.d.ts +30 -2
  89. package/dist/modules/apimapper/misc.js +114 -49
  90. package/dist/modules/apimapper/misc.js.map +1 -1
  91. package/dist/modules/apimapper/node-schema.d.ts +52 -0
  92. package/dist/modules/apimapper/node-schema.js +70 -2
  93. package/dist/modules/apimapper/node-schema.js.map +1 -1
  94. package/dist/modules/apimapper/normalizers.d.ts +1 -0
  95. package/dist/modules/apimapper/normalizers.js +51 -0
  96. package/dist/modules/apimapper/normalizers.js.map +1 -1
  97. package/dist/modules/apimapper/onboarding.d.ts +78 -3
  98. package/dist/modules/apimapper/onboarding.js +428 -26
  99. package/dist/modules/apimapper/onboarding.js.map +1 -1
  100. package/dist/modules/apimapper/read-cache.d.ts +31 -2
  101. package/dist/modules/apimapper/read-cache.js +20 -6
  102. package/dist/modules/apimapper/read-cache.js.map +1 -1
  103. package/dist/modules/apimapper/render/_shared.d.ts +24 -0
  104. package/dist/modules/apimapper/render/_shared.js +84 -0
  105. package/dist/modules/apimapper/render/_shared.js.map +1 -0
  106. package/dist/modules/apimapper/render/dag.d.ts +18 -0
  107. package/dist/modules/apimapper/render/dag.js +70 -0
  108. package/dist/modules/apimapper/render/dag.js.map +1 -0
  109. package/dist/modules/apimapper/render/index.d.ts +2 -0
  110. package/dist/modules/apimapper/render/index.js +112 -0
  111. package/dist/modules/apimapper/render/index.js.map +1 -0
  112. package/dist/modules/apimapper/render/renderers/chart-bar.d.ts +2 -0
  113. package/dist/modules/apimapper/render/renderers/chart-bar.js +70 -0
  114. package/dist/modules/apimapper/render/renderers/chart-bar.js.map +1 -0
  115. package/dist/modules/apimapper/render/renderers/chart-line.d.ts +2 -0
  116. package/dist/modules/apimapper/render/renderers/chart-line.js +71 -0
  117. package/dist/modules/apimapper/render/renderers/chart-line.js.map +1 -0
  118. package/dist/modules/apimapper/render/renderers/diff.d.ts +2 -0
  119. package/dist/modules/apimapper/render/renderers/diff.js +154 -0
  120. package/dist/modules/apimapper/render/renderers/diff.js.map +1 -0
  121. package/dist/modules/apimapper/render/renderers/flow-diagram.d.ts +1 -0
  122. package/dist/modules/apimapper/render/renderers/flow-diagram.js +180 -0
  123. package/dist/modules/apimapper/render/renderers/flow-diagram.js.map +1 -0
  124. package/dist/modules/apimapper/render/renderers/json-tree.d.ts +2 -0
  125. package/dist/modules/apimapper/render/renderers/json-tree.js +87 -0
  126. package/dist/modules/apimapper/render/renderers/json-tree.js.map +1 -0
  127. package/dist/modules/apimapper/render/renderers/schema-diagram.d.ts +2 -0
  128. package/dist/modules/apimapper/render/renderers/schema-diagram.js +83 -0
  129. package/dist/modules/apimapper/render/renderers/schema-diagram.js.map +1 -0
  130. package/dist/modules/apimapper/render/renderers/table.d.ts +2 -0
  131. package/dist/modules/apimapper/render/renderers/table.js +75 -0
  132. package/dist/modules/apimapper/render/renderers/table.js.map +1 -0
  133. package/dist/modules/apimapper/render/schemas.d.ts +23 -0
  134. package/dist/modules/apimapper/render/schemas.js +56 -0
  135. package/dist/modules/apimapper/render/schemas.js.map +1 -0
  136. package/dist/modules/apimapper/render/secret-masking.d.ts +5 -0
  137. package/dist/modules/apimapper/render/secret-masking.js +51 -0
  138. package/dist/modules/apimapper/render/secret-masking.js.map +1 -0
  139. package/dist/modules/apimapper/render/sidecar.d.ts +21 -0
  140. package/dist/modules/apimapper/render/sidecar.js +66 -0
  141. package/dist/modules/apimapper/render/sidecar.js.map +1 -0
  142. package/dist/modules/apimapper/render/token-cap.d.ts +21 -0
  143. package/dist/modules/apimapper/render/token-cap.js +57 -0
  144. package/dist/modules/apimapper/render/token-cap.js.map +1 -0
  145. package/dist/modules/apimapper/schema.d.ts +2 -2
  146. package/dist/modules/apimapper/schema.js +92 -33
  147. package/dist/modules/apimapper/schema.js.map +1 -1
  148. package/dist/modules/apimapper/settings-format.d.ts +23 -0
  149. package/dist/modules/apimapper/settings-format.js +135 -0
  150. package/dist/modules/apimapper/settings-format.js.map +1 -0
  151. package/dist/modules/apimapper/settings.d.ts +2 -2
  152. package/dist/modules/apimapper/settings.js +100 -42
  153. package/dist/modules/apimapper/settings.js.map +1 -1
  154. package/dist/modules/apimapper/sites-tools.d.ts +29 -0
  155. package/dist/modules/apimapper/sites-tools.js +165 -0
  156. package/dist/modules/apimapper/sites-tools.js.map +1 -0
  157. package/dist/modules/apimapper/skill-resources.d.ts +2 -2
  158. package/dist/modules/apimapper/skill-resources.js.map +1 -1
  159. package/dist/modules/apimapper/token-baseline.harness.d.ts +91 -0
  160. package/dist/modules/apimapper/token-baseline.harness.js +291 -0
  161. package/dist/modules/apimapper/token-baseline.harness.js.map +1 -0
  162. package/dist/modules/apimapper/tool-result.d.ts +46 -0
  163. package/dist/modules/apimapper/tool-result.js +63 -0
  164. package/dist/modules/apimapper/tool-result.js.map +1 -0
  165. package/dist/modules/apimapper/toolslist-size.d.ts +56 -0
  166. package/dist/modules/apimapper/toolslist-size.js +192 -0
  167. package/dist/modules/apimapper/toolslist-size.js.map +1 -0
  168. package/dist/modules/apimapper/types.d.ts +44 -8
  169. package/dist/modules/apimapper/types.js +26 -1
  170. package/dist/modules/apimapper/types.js.map +1 -1
  171. package/dist/modules/apimapper/use-profile.d.ts +21 -0
  172. package/dist/modules/apimapper/use-profile.js +56 -2
  173. package/dist/modules/apimapper/use-profile.js.map +1 -1
  174. package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
  175. package/dist/modules/apimapper/whitelist-drift.js +360 -0
  176. package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
  177. package/dist/modules/apimapper/workflows.d.ts +2 -2
  178. package/dist/modules/apimapper/workflows.js +202 -20
  179. package/dist/modules/apimapper/workflows.js.map +1 -1
  180. package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
  181. package/dist/modules/apimapper/yootheme-binding.js +186 -0
  182. package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
  183. package/dist/platform/index.d.ts +56 -0
  184. package/dist/platform/index.js +195 -7
  185. package/dist/platform/index.js.map +1 -1
  186. package/dist/setup/detect-clients.d.ts +40 -1
  187. package/dist/setup/detect-clients.js +148 -1
  188. package/dist/setup/detect-clients.js.map +1 -1
  189. package/dist/setup/probe-handshake.js +40 -7
  190. package/dist/setup/probe-handshake.js.map +1 -1
  191. package/dist/setup/remove-config.d.ts +8 -0
  192. package/dist/setup/remove-config.js +145 -0
  193. package/dist/setup/remove-config.js.map +1 -0
  194. package/dist/setup/uninstall.d.ts +34 -0
  195. package/dist/setup/uninstall.js +147 -0
  196. package/dist/setup/uninstall.js.map +1 -0
  197. package/dist/setup-cli.d.ts +60 -0
  198. package/dist/setup-cli.js +155 -5
  199. package/dist/setup-cli.js.map +1 -1
  200. package/dist/sites/loader.d.ts +41 -0
  201. package/dist/sites/loader.js +119 -0
  202. package/dist/sites/loader.js.map +1 -0
  203. package/dist/sites/schema.d.ts +69 -0
  204. package/dist/sites/schema.js +71 -0
  205. package/dist/sites/schema.js.map +1 -0
  206. package/dist/sites/secret-resolver.d.ts +47 -0
  207. package/dist/sites/secret-resolver.js +150 -0
  208. package/dist/sites/secret-resolver.js.map +1 -0
  209. package/dist/skill-instructions.d.ts +1 -1
  210. package/dist/skill-instructions.js +5 -0
  211. package/dist/skill-instructions.js.map +1 -1
  212. package/dist/transports/stdio.js +4 -4
  213. package/dist/transports/stdio.js.map +1 -1
  214. package/dist/uninstall-skill.d.ts +27 -0
  215. package/dist/uninstall-skill.js +89 -0
  216. package/dist/uninstall-skill.js.map +1 -0
  217. package/docs/architecture.md +22 -22
  218. package/docs/customgraph-internal-migration.md +4 -4
  219. package/docs/security.md +2 -21
  220. package/docs/tools.md +40 -12
  221. package/manifest.json +77 -70
  222. package/package.json +68 -60
  223. package/skills/apimapper/SKILL.md +53 -7
  224. package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
  225. package/skills/apimapper/reference/jmespath-pitfalls.md +108 -0
  226. package/skills/apimapper/reference/joomla.md +1 -1
  227. package/skills/apimapper/reference/library-template-discovery.md +65 -0
  228. package/skills/apimapper/reference/merge-two-sources-on-key.md +99 -0
  229. package/skills/apimapper/reference/render.md +132 -0
  230. package/skills/apimapper/reference/troubleshooting.md +21 -1
  231. package/skills/apimapper/reference/yootheme.md +1 -1
  232. package/dist/auth/oauth-provider.d.ts +0 -68
  233. package/dist/auth/oauth-provider.js +0 -232
  234. package/dist/auth/oauth-provider.js.map +0 -1
  235. package/dist/server-http.d.ts +0 -22
  236. package/dist/server-http.js +0 -159
  237. package/dist/server-http.js.map +0 -1
  238. package/dist/transports/http.d.ts +0 -29
  239. package/dist/transports/http.js +0 -267
  240. package/dist/transports/http.js.map +0 -1
@@ -5,6 +5,7 @@ import { registerGraphTools } from "./graph.js";
5
5
  import { registerLocalSourceTools } from "./local-sources.js";
6
6
  import { registerSchemaTools } from "./schema.js";
7
7
  import { registerLibraryTools } from "./library.js";
8
+ import { registerYoothemeBindingTools } from "./yootheme-binding.js";
8
9
  import { registerCacheTools } from "./cache.js";
9
10
  import { registerSettingsTools } from "./settings.js";
10
11
  import { registerLicenseTools } from "./license.js";
@@ -15,24 +16,68 @@ import { registerGetSkillTool } from "./get-skill.js";
15
16
  import { registerOnboardingTool } from "./onboarding.js";
16
17
  import { registerInspectTokenTool } from "./inspect.js";
17
18
  import { registerDiagnoseTool } from "./diagnose.js";
19
+ import { registerRenderTool } from "./render/index.js";
20
+ import { CapturingServer } from "./gateway/capturing-server.js";
21
+ import { registerAdvancedTool } from "./gateway/advanced-tool.js";
22
+ import { toElicitationCapability } from "./elicitation.js";
23
+ /**
24
+ * Module-level cache of the advanced-tool registry captured during the most
25
+ * recent `register()` call. Accessed via `apimapperRestModule.getAdvancedRegistry()`.
26
+ *
27
+ * INVARIANT — single-server-per-process. The MCP adapter is designed to run
28
+ * as one `McpServer` instance per process (stdio transport bound to a single
29
+ * client). `register()` is invoked exactly once during process bootstrap; the
30
+ * captured registry then stays stable for the lifetime of the server. The
31
+ * gateway surface tests rely on this single-server invariant.
32
+ *
33
+ * INVARIANT — last-write-wins. If a future caller ever invokes `register()`
34
+ * a second time on a fresh `McpServer` (e.g. test wiring that re-binds the
35
+ * module to a new server), `lastAdvancedRegistry` is overwritten by the most
36
+ * recent capture. This is intentional for the W3.4 gateway design — only the
37
+ * latest server's tool set is reachable through the module-level accessor.
38
+ *
39
+ * NOT SUPPORTED — concurrent registrations on different `McpServer` instances
40
+ * would race on this cell. The adapter is not designed for that topology;
41
+ * running multiple servers in one process would also break stdio multiplexing
42
+ * higher up the stack. F-1.4 (Pass-1 consolidation) makes that invariant
43
+ * explicit so reviewers do not mistake the module-level mutable state for a
44
+ * latent thread-safety bug.
45
+ */
46
+ let lastAdvancedRegistry;
18
47
  export const apimapperRestModule = {
19
48
  name: "apimapper-rest",
20
49
  description: "API Mapper REST coverage — Full coverage of /wp-json/api-mapper/v1/* (connections, credentials, " +
21
50
  "flows, graph, local-sources, schema, library, cache, settings, license, releases, " +
22
51
  "brandfetch, feedback) plus composite workflows.",
23
52
  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);
53
+ // Route every tool registration through the CapturingServer: essentials
54
+ // forward to the real server, the rest are captured for the gateway.
55
+ const capturing = new CapturingServer(server);
56
+ // W3.6 — targeted elicitation. The 3 modules below have a disambiguation
57
+ // site that can prompt the user via the MCP elicitation channel. The
58
+ // toolkit's `elicitChoice` needs a `{ server: { elicitInput } }` whose
59
+ // `elicitInput` is typed with the toolkit's loose `ElicitInputParams`;
60
+ // the SDK's `McpServer.server.elicitInput` is the stricter discriminated
61
+ // form/url union, so `toElicitationCapability` is the typed adapter that
62
+ // bridges the two (single documented cast — see elicitation.ts). The
63
+ // capability is passed as the optional 2nd argument to ONLY these 3
64
+ // modules — the other 15 are untouched. When the argument is absent
65
+ // (host wiring without elicitation), each tool falls back to a structured
66
+ // `errorResult` on genuine ambiguity instead of prompting.
67
+ const elicitation = toElicitationCapability(server);
68
+ registerConnectionTools(capturing, elicitation);
69
+ registerCredentialTools(capturing, elicitation);
70
+ registerFlowTools(capturing, elicitation);
71
+ registerGraphTools(capturing);
72
+ registerLocalSourceTools(capturing);
73
+ registerSchemaTools(capturing);
74
+ registerLibraryTools(capturing);
75
+ registerYoothemeBindingTools(capturing);
76
+ registerCacheTools(capturing);
77
+ registerSettingsTools(capturing);
78
+ registerLicenseTools(capturing);
79
+ registerMiscTools(capturing);
80
+ registerWorkflowTools(capturing);
36
81
  // Skill resources are an MCP-spec protocol concept but Claude Desktop
37
82
  // (2026-05-19 rc-period) does not yet honour the `audience: ["assistant"]`
38
83
  // annotation that would hide them from the user-facing resource picker.
@@ -44,12 +89,18 @@ export const apimapperRestModule = {
44
89
  //
45
90
  // When Claude Desktop ships audience-filtering, flip the default to ON.
46
91
  if (process.env.APIMAPPER_EXPOSE_SKILL_RESOURCES === "1") {
47
- registerSkillResources(server);
92
+ registerSkillResources(capturing);
48
93
  }
49
- registerGetSkillTool(server);
50
- registerOnboardingTool(server);
51
- registerInspectTokenTool(server);
52
- registerDiagnoseTool(server);
94
+ registerGetSkillTool(capturing);
95
+ registerOnboardingTool(capturing);
96
+ registerInspectTokenTool(capturing);
97
+ registerDiagnoseTool(capturing);
98
+ registerRenderTool(capturing);
99
+ // Register the single gateway to every captured advanced tool.
100
+ const advancedRegistry = capturing.getAdvancedRegistry();
101
+ registerAdvancedTool(server, advancedRegistry);
102
+ lastAdvancedRegistry = advancedRegistry;
53
103
  },
104
+ getAdvancedRegistry: () => lastAdvancedRegistry,
54
105
  };
55
106
  //# 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":"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"}
@@ -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;
@@ -8,11 +8,22 @@
8
8
  // - `expires_in_seconds` — only if the token carries `exp`.
9
9
  // - `expired` — boolean. Tokens WITHOUT `exp` are treated as non-expiring
10
10
  // (never expired), matching the server-side KeyService behaviour.
11
+ // - `is_current` — boolean. True when the inspected token equals
12
+ // `APIMAPPER_WP_APP_PASS` in this MCP process. Helps clients detect
13
+ // "user pasted the token that's already configured".
11
14
  //
12
- // No HTTP is performed. No redaction is applied — the caller pasted the
13
- // token themselves, so surfacing every field back to them is fine.
15
+ // No HTTP is performed.
16
+ //
17
+ // rc.13 Welle 3 (2026-05-20) — the `apimapper_inspect_token` MCP tool
18
+ // migrated to the toolkit's detailResult builder. The decoded TokenPayload
19
+ // (iss/kid/sub/scope/iat/exp/name) carries NO secret material; the RAW token
20
+ // STRING the user pasted is the secret. detailResult serializes its payload
21
+ // into `_meta.ui.payload`, so the raw token must never reach the builder —
22
+ // the detail surfaces only a MASKED token prefix (`maskToken()`). The pure
23
+ // `inspectToken()` function is unchanged (it never held the raw token in its
24
+ // result — the raw string only ever lives in the input arg).
14
25
  import { z } from "zod";
15
- import { formatResult, readOnly } from "@getimo/mcp-toolkit";
26
+ import { detailResult, errorResult, readOnly } from "@getimo/mcp-toolkit";
16
27
  import { decodeToken } from "../../auth/token.js";
17
28
  // Token prefix re-extracted here (independent of token.ts internals) — we
18
29
  // only need env classification, which is the second segment of `amk_<env>_*`.
@@ -42,10 +53,18 @@ export function inspectToken(token) {
42
53
  }
43
54
  const nowSec = Math.floor(Date.now() / 1000);
44
55
  const age_seconds = nowSec - payload.iat;
56
+ // is_current: does the inspected token equal the token configured in this
57
+ // MCP process? Helps the AI client detect "user pasted the same token
58
+ // that's already wired up". Plain `===` is acceptable here — both tokens
59
+ // live in the same process memory, so a timing-attack model does not
60
+ // apply (no remote attacker observes the comparison).
61
+ const currentToken = process.env.APIMAPPER_WP_APP_PASS ?? "";
62
+ const isCurrent = currentToken.length > 0 && currentToken === token;
45
63
  const derived = {
46
64
  env,
47
65
  age_seconds,
48
66
  expired: false,
67
+ is_current: isCurrent,
49
68
  };
50
69
  if (typeof payload.exp === "number") {
51
70
  const expires_in_seconds = payload.exp - nowSec;
@@ -55,13 +74,31 @@ export function inspectToken(token) {
55
74
  return { valid: true, payload, derived };
56
75
  }
57
76
  // ── MCP tool registration ──────────────────────────────────────────────
77
+ /**
78
+ * Mask a token string for display. The raw token is the secret; this keeps
79
+ * ONLY the non-secret `amk_<env>_` prefix and replaces the payload+signature
80
+ * body with a fixed redaction marker + length bracket. The full token is
81
+ * NEVER returned. A non-token / short input yields a plain redaction marker.
82
+ *
83
+ * Example: "amk_live_eyJ2…BIGBODY….sig" → "amk_live_•••• (84 chars)"
84
+ */
85
+ function maskToken(token) {
86
+ if (typeof token !== "string" || token.length === 0)
87
+ return "—";
88
+ const m = /^amk_(live|test)_/.exec(token);
89
+ if (!m)
90
+ return "•••• (redacted)";
91
+ return `amk_${m[1]}_•••• (${token.length} chars)`;
92
+ }
58
93
  export function registerInspectTokenTool(server) {
59
94
  server.registerTool("apimapper_inspect_token", {
60
95
  title: "Inspect Token (Network-Free)",
61
96
  description: "Decode an API Mapper token (amk_live_… or amk_test_…) WITHOUT calling the network. " +
62
97
  "Returns the full payload (iss, kid, sub, scope, iat, exp, name) plus derived diagnostics " +
63
- "(age_seconds, expires_in_seconds, expired, env). Use before profile creation to verify the " +
64
- "user pasted a valid, unexpired token. Signature is NOT verified server-side check on each request." +
98
+ "(age_seconds, expires_in_seconds, expired, env, is_current). `is_current` is true when the " +
99
+ "inspected token matches APIMAPPER_WP_APP_PASS in this MCP process useful to detect if the " +
100
+ "user pasted the same token already configured. Signature is NOT verified — server validates " +
101
+ "on each request." +
65
102
  "\n\nExample:\n apimapper_inspect_token({ token: 'amk_live_eyJ2IjoxLC...XYZ.abc123' })",
66
103
  inputSchema: {
67
104
  token: z
@@ -69,18 +106,65 @@ export function registerInspectTokenTool(server) {
69
106
  .min(1)
70
107
  .describe('Token string (e.g., "amk_live_eyJ2IjoxLC...XYZ.abc123"). Pasted by user.'),
71
108
  },
72
- annotations: readOnly(),
109
+ annotations: readOnly({ title: "Inspect Token", openWorld: false }),
73
110
  }, async ({ token }) => {
74
111
  const result = inspectToken(token);
75
112
  if (!result.valid) {
76
- return formatResult({
77
- valid: false,
78
- error: result.error,
79
- context: { token_length: token.length },
80
- hint: "Verify the token starts with 'amk_live_' or 'amk_test_' and was copied complete (no truncation).",
81
- }, true);
113
+ // SECURITY: the error branch echoes ONLY the token length + a masked
114
+ // prefix — never the raw token string.
115
+ return errorResult({
116
+ message: result.error ?? "token decode failed",
117
+ code: "malformed-token",
118
+ suggestion: "Verify the token starts with 'amk_live_' or 'amk_test_' and was copied complete (no truncation).",
119
+ details: { token_length: token.length, token_masked: maskToken(token) },
120
+ });
121
+ }
122
+ // W3.1 — detailResult: the decoded payload + derived diagnostics render
123
+ // as a grouped key-value detail. SECURITY: the raw token string is the
124
+ // secret — only `maskToken()` output reaches a DetailEntry. The
125
+ // TokenPayload itself (iss/kid/sub/scope/iat/exp/name) carries no secret.
126
+ const p = result.payload;
127
+ const d = result.derived;
128
+ const payloadEntries = [
129
+ // SECURITY: masked — the raw token never reaches this entry.
130
+ { key: "token", label: "Token", value: maskToken(token), format: "code" },
131
+ { key: "iss", label: "Issuer", value: p.iss, format: "text" },
132
+ { key: "kid", label: "Key ID", value: p.kid, format: "code", copyable: true },
133
+ { key: "sub", label: "Subject", value: p.sub, format: "code" },
134
+ // scope is an array — detailResult groups are scalar-only, so flatten.
135
+ { key: "scope", label: "Scope", value: p.scope.join(", ") },
136
+ { key: "iat", label: "Issued at (unix)", value: p.iat },
137
+ ];
138
+ if (typeof p.exp === "number") {
139
+ payloadEntries.push({ key: "exp", label: "Expires (unix)", value: p.exp });
140
+ }
141
+ if (typeof p.name === "string") {
142
+ payloadEntries.push({ key: "name", label: "Label", value: p.name, format: "text" });
143
+ }
144
+ const derivedEntries = [
145
+ { key: "env", label: "Environment", value: d.env, format: "badge" },
146
+ { key: "age_seconds", label: "Age (s)", value: d.age_seconds },
147
+ { key: "expired", label: "Expired", value: d.expired, format: "boolean" },
148
+ { key: "is_current", label: "Is current process token", value: d.is_current, format: "boolean" },
149
+ ];
150
+ if (typeof d.expires_in_seconds === "number") {
151
+ derivedEntries.push({
152
+ key: "expires_in_seconds",
153
+ label: "Expires in (s)",
154
+ value: d.expires_in_seconds,
155
+ });
82
156
  }
83
- return formatResult(result, false, { maxChars: 3000 });
157
+ return detailResult({
158
+ title: p.name ? `Token: ${p.name}` : "Token inspection",
159
+ subtitle: `${d.env} · ${d.expired ? "expired" : "valid"}`,
160
+ badge: d.expired
161
+ ? { text: "expired", variant: "destructive" }
162
+ : { text: d.env, variant: "info" },
163
+ groups: [
164
+ { label: "Payload", entries: payloadEntries },
165
+ { label: "Diagnostics", entries: derivedEntries },
166
+ ],
167
+ });
84
168
  });
85
169
  }
86
170
  //# sourceMappingURL=inspect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/modules/apimapper/inspect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/modules/apimapper/inspect.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 registerLibraryTools(server: McpServer): void;
1
+ import type { ToolRegistrar } from "./gateway/capturing-server.js";
2
+ export declare function registerLibraryTools(server: ToolRegistrar): void;