@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
@@ -8,47 +8,91 @@
8
8
  // SECURITY: All credential responses are routed through `sanitizeSecrets()`
9
9
  // in client.ts → request({sanitize:true}). Even if the PHP backend
10
10
  // regresses and returns auth_data, the MCP layer never leaks it. See
11
- // credential-sanitizer.ts.
11
+ // credential-sanitizer.ts. The sanitize happens INSIDE `request()` before
12
+ // the result is returned — so `r.data` is already redacted by the time any
13
+ // structuredContent builder serializes it into `_meta.ui.payload`.
14
+ //
15
+ // rc.13 Welle 3 (2026-05-20) — heavy read tools migrated to the toolkit's
16
+ // structuredContent builders. Migration is purely additive: every builder
17
+ // preserves the text `content` block and adds `_meta.ui` for Rich Card
18
+ // rendering.
19
+ // - credential_list → tableResult (display="data-table"); T1 (W3.2)
20
+ // carries explicit compactColumns + compactMap; IA-7 keeps the opaque
21
+ // `id` column llmOnly; IA-10 puts the next-step guidance in the footer.
22
+ // - credential_get → detailResult (display="detail") with an IA-10
23
+ // "Next steps" group — sanitised, secret-free metadata only.
24
+ // - mutating tools (create/update/delete/link/oauth_authorize_begin) keep
25
+ // their formatResult success payloads (small confirmations, and
26
+ // credential_delete's preview is consumed via raw JSON.parse by the
27
+ // Wave-2A pin tests); only their ERROR branch upgrades to errorResult.
28
+ // - all error returns → errorResult (display="error", isError:true).
29
+ // The column constants, row maps, detail builder and next-step strings live
30
+ // in the sibling credentials-format.ts so this module stays a lean
31
+ // tool-registration surface.
12
32
  import { z } from "zod";
13
- import { formatResult, autoFormatTable, readOnly, creating, mutating, destructive, } from "@getimo/mcp-toolkit";
33
+ import { formatResult, tableResult, errorResult, readOnly, creating, mutating, destructive, elicitChoice, } from "@getimo/mcp-toolkit";
14
34
  import { request, hintFor } from "./client.js";
15
- export function registerCredentialTools(server) {
35
+ import { restErrorResult } from "./tool-result.js";
36
+ import { toRows } from "./types.js";
37
+ import { CREDENTIAL_TABLE_COLUMNS, CREDENTIAL_COMPACT_COLUMNS, CREDENTIAL_LIST_NEXT_STEPS, mapCredentialRow, compactCredentialRow, buildCredentialDetail, } from "./credentials-format.js";
38
+ import { ambiguityFallbackError, } from "./elicitation.js";
39
+ /** The provider slug of an OAuth credential — `oauth_provider` then `provider`. */
40
+ function credentialProvider(c) {
41
+ return c.oauth_provider ?? c.provider ?? undefined;
42
+ }
43
+ /**
44
+ * Register the credential CRUD + OAuth tools.
45
+ *
46
+ * @param server the tool registrar (essentials forward, rest captured).
47
+ * @param elicitation optional elicitation capability (the real McpServer, or
48
+ * any `{ server: { elicitInput } }`). Supplied only by the host wiring in
49
+ * index.ts. When omitted, `oauth_authorize_begin` falls back to a
50
+ * structured error on genuine ambiguity instead of prompting.
51
+ */
52
+ export function registerCredentialTools(server, elicitation) {
16
53
  // ── apimapper_credential_list ──────────────────────────────────────
17
54
  server.registerTool("apimapper_credential_list", {
18
55
  title: "List Credentials",
56
+ // rc.10 A6 (2026-05-19) — explicit hint that auth_type is a
57
+ // CLIENT-SIDE filter applied after the server returns the full
58
+ // set. Previously the AI made repeat calls with different
59
+ // auth_type values expecting different data — they were always
60
+ // the same set, just filtered locally.
19
61
  description: "List all stored credentials (sanitised — secrets omitted). " +
20
- "Use apimapper_credential_get for one credential's metadata." +
21
- "\n\nExample:\n apimapper_credential_list({})",
62
+ "The `auth_type` parameter is a CLIENT-SIDE filter — the server returns the same set " +
63
+ "regardless of `auth_type`. Calling repeatedly with different `auth_type` values returns " +
64
+ "identical underlying data; a single call returns everything. " +
65
+ "Use apimapper_credential_get for one credential's full metadata." +
66
+ "\n\nExample:\n apimapper_credential_list({}) // returns all credentials\n" +
67
+ " apimapper_credential_list({ auth_type: 'oauth2_code' }) // local filter only",
22
68
  inputSchema: {
23
69
  auth_type: z
24
70
  .enum(["api_key", "bearer", "basic_auth", "oauth2_code", "oauth2_cc", "all"])
25
71
  .default("all")
26
- .describe("Filter by auth_type (server wire-format field)"),
72
+ .describe("Filter by auth_type (server wire-format field). Applied CLIENT-SIDE after the server returns all credentials — calling with different values does NOT change what the server returns."),
27
73
  },
28
- annotations: readOnly(),
74
+ annotations: readOnly({ title: "List Credentials", openWorld: true }),
29
75
  }, async ({ auth_type }) => {
30
76
  const r = await request("/credentials", {}, { sanitize: true });
31
77
  if (!r.success) {
32
- return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { auth_type }, hint: hintFor(r.errorCode) }, true);
78
+ return restErrorResult(r, { auth_type }, { message: "credential list failed" });
33
79
  }
34
80
  const raw = Array.isArray(r.data?.credentials) ? r.data.credentials : [];
35
81
  const items = auth_type === "all" ? raw : raw.filter((c) => c.auth_type === auth_type);
36
- return autoFormatTable(items.map((c) => ({
37
- id: c.id,
38
- name: c.name,
39
- auth_type: c.auth_type,
40
- provider: c.oauth_provider || c.provider || "",
41
- updated_at: c.updated_at || "—",
42
- })), {
43
- columns: [
44
- { key: "id", label: "ID", width: 28 },
45
- { key: "name", label: "NAME", width: 28 },
46
- { key: "auth_type", label: "AUTH_TYPE", width: 14 },
47
- { key: "provider", label: "PROVIDER", width: 16 },
48
- { key: "updated_at", label: "UPDATED", width: 22 },
49
- ],
82
+ // W3.1 tableResult: ASCII table for the LLM + typed DataTable payload
83
+ // for the Rich Card. T1 (W3.2): explicit compactColumns/compactMap drop
84
+ // PROVIDER/UPDATED at 21+ rows. IA-7: id stays llmOnly. IA-10: the
85
+ // footer carries the next-step guidance.
86
+ // SECURITY: `items` is the sanitised set `request` was called with
87
+ // `{ sanitize: true }`, so any leaked auth_data was already stripped
88
+ // before it could reach the tableResult UI payload.
89
+ return tableResult(toRows(items), {
90
+ columns: CREDENTIAL_TABLE_COLUMNS,
91
+ compactColumns: CREDENTIAL_COMPACT_COLUMNS,
92
+ map: mapCredentialRow,
93
+ compactMap: compactCredentialRow,
50
94
  header: (n) => `${n} credentials`,
51
- footer: "Use apimapper_credential_get <id> for metadata. Secrets are NEVER returned.",
95
+ footer: CREDENTIAL_LIST_NEXT_STEPS,
52
96
  });
53
97
  });
54
98
  // ── apimapper_credential_get ───────────────────────────────────────
@@ -61,31 +105,30 @@ export function registerCredentialTools(server) {
61
105
  inputSchema: {
62
106
  id: z.string().describe('Credential ID (e.g., "cred_abc123"). Use apimapper_credential_list to find.'),
63
107
  },
64
- annotations: readOnly(),
108
+ annotations: readOnly({ title: "Get Credential", openWorld: true }),
65
109
  }, async ({ id }) => {
66
110
  const r = await request(`/credentials/${encodeURIComponent(id)}`, {}, { sanitize: true });
67
111
  if (!r.success) {
68
- return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { id }, hint: hintFor(r.errorCode) }, true);
112
+ return restErrorResult(r, { id }, { message: "credential get failed" });
69
113
  }
70
114
  // Server may return either `credential: {...}` envelope or bare object.
71
115
  const cred = r.data && typeof r.data === "object" && "credential" in r.data
72
116
  ? r.data.credential
73
117
  : r.data;
74
118
  if (!cred || Object.keys(cred).length === 0) {
75
- return formatResult({ error: "credential not found", status: r.status, context: { id }, hint: hintFor("not_found") }, true);
119
+ return errorResult({
120
+ message: "credential not found",
121
+ code: r.status ? String(r.status) : "not_found",
122
+ suggestion: hintFor("not_found"),
123
+ details: { id },
124
+ });
76
125
  }
77
- const mapped = {
78
- id: cred.id,
79
- name: cred.name,
80
- auth_type: cred.auth_type,
81
- oauth_provider: cred.oauth_provider || null,
82
- oauth_token_expires_at: cred.oauth_token_expires_at || null,
83
- provider: cred.provider || null,
84
- created_at: cred.created_at,
85
- updated_at: cred.updated_at,
86
- note: "Secret fields stripped at MCP boundary. To inspect a secret, open API Mapper → Credentials in your admin UI.",
87
- };
88
- return formatResult(mapped, false, { maxChars: 3000 });
126
+ // W3.1 detailResult: grouped key-value detail for the Rich Card.
127
+ // SECURITY: `cred` is already sanitised (request `{ sanitize: true }`)
128
+ // and the `Credential` type omits `auth_data` — buildCredentialDetail
129
+ // surfaces only non-secret metadata. IA-7: opaque IDs are copyable code
130
+ // entries. IA-10: a dedicated "Next steps" group carries follow-ups.
131
+ return buildCredentialDetail(id, cred);
89
132
  });
90
133
  // ── apimapper_credential_create ────────────────────────────────────
91
134
  server.registerTool("apimapper_credential_create", {
@@ -109,17 +152,11 @@ export function registerCredentialTools(server) {
109
152
  provider: z.string().optional().describe('Generic provider slug for credential-by-provider filtering'),
110
153
  oauth_token_expires_at: z.string().optional().describe('ISO timestamp when access token expires (oauth2_* only)'),
111
154
  },
112
- annotations: creating(),
155
+ annotations: creating({ title: "Create Credential", openWorld: true }),
113
156
  }, async (input) => {
114
157
  const r = await request("/credentials", { method: "POST", body: JSON.stringify(input) }, { sanitize: true });
115
158
  if (!r.success) {
116
- return formatResult({
117
- error: r.error,
118
- status: r.status,
119
- errorCode: r.errorCode,
120
- context: { name: input.name, auth_type: input.auth_type },
121
- hint: hintFor(r.errorCode),
122
- }, true);
159
+ return restErrorResult(r, { name: input.name, auth_type: input.auth_type }, { message: "credential create failed" });
123
160
  }
124
161
  const cred = r.data?.credential;
125
162
  return formatResult({
@@ -142,13 +179,19 @@ export function registerCredentialTools(server) {
142
179
  .record(z.string(), z.unknown())
143
180
  .describe('Fields to update — snake_case keys. ' +
144
181
  'Examples: {"name":"Renamed"}, {"auth_data":{"api_key":"newkey"}}, ' +
145
- '{"oauth_token_expires_at":"2026-12-31T00:00:00Z"}'),
182
+ '{"oauth_token_expires_at":"2026-12-31T00:00:00Z"}. ' +
183
+ // DATA-LOW (Wave-B 2026-06-03): open record by design. `auth_data`
184
+ // is itself a free-form nested object (provider-specific keys), so a
185
+ // .strict() allow-list cannot safely enumerate it. The PHP backend
186
+ // column-whitelists on write (Wave A), dropping unknown top-level
187
+ // keys server-side.
188
+ 'Unknown top-level keys are dropped by the server (column-whitelisted on write).'),
146
189
  },
147
- annotations: mutating(),
190
+ annotations: mutating({ title: "Update Credential", openWorld: true }),
148
191
  }, async ({ id, patch }) => {
149
192
  const r = await request(`/credentials/${encodeURIComponent(id)}`, { method: "PUT", body: JSON.stringify(patch) }, { sanitize: true });
150
193
  if (!r.success) {
151
- return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { id }, hint: hintFor(r.errorCode) }, true);
194
+ return restErrorResult(r, { id }, { message: "credential update failed" });
152
195
  }
153
196
  const cred = r.data?.credential;
154
197
  return formatResult({
@@ -172,10 +215,13 @@ export function registerCredentialTools(server) {
172
215
  .default(false)
173
216
  .describe("Must be true to execute. On confirm:false, returns a preview."),
174
217
  },
175
- annotations: destructive(),
218
+ annotations: destructive({ title: "Delete Credential", openWorld: true }),
176
219
  }, async ({ id, confirm }) => {
177
220
  if (!confirm) {
178
- // Preview: fetch metadata for informed confirmation.
221
+ // Preview: fetch metadata for informed confirmation. Stays on
222
+ // formatResult — the Wave-2A pin tests consume this preview via a
223
+ // raw JSON.parse of content[0].text; a structured builder would
224
+ // append the structured-meta marker and break that contract.
179
225
  const preview = await request(`/credentials/${encodeURIComponent(id)}`, {}, { sanitize: true });
180
226
  // Guard explicitly on preview.success — the previous type-narrowing
181
227
  // was unsound (cast to Credential | undefined relied on `cred` being
@@ -202,7 +248,7 @@ export function registerCredentialTools(server) {
202
248
  }
203
249
  const r = await request(`/credentials/${encodeURIComponent(id)}`, { method: "DELETE" });
204
250
  if (!r.success) {
205
- return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { id }, hint: hintFor(r.errorCode) }, true);
251
+ return restErrorResult(r, { id }, { message: "credential delete failed" });
206
252
  }
207
253
  return formatResult({ deleted: true, id }, false, { maxChars: 1500 });
208
254
  });
@@ -216,7 +262,7 @@ export function registerCredentialTools(server) {
216
262
  connection_id: z.string().describe("Connection ID. Use apimapper_connection_list."),
217
263
  credential_id: z.string().describe("Credential ID. Use apimapper_credential_list."),
218
264
  },
219
- annotations: mutating(),
265
+ annotations: mutating({ title: "Link Credential", openWorld: true }),
220
266
  }, async ({ connection_id, credential_id }) => {
221
267
  // Connection wire = snake_case (verified vs ConnectionProbeCore.php:89).
222
268
  // PHP fromControllerResponse(_, 'connection') → {success, connection:{…}}.
@@ -228,16 +274,14 @@ export function registerCredentialTools(server) {
228
274
  body: JSON.stringify({ credential_id }),
229
275
  }, { unwrapInnerSuccess: true });
230
276
  if (!r.success) {
231
- return formatResult({
232
- error: r.error,
233
- status: r.status,
234
- errorCode: r.errorCode,
235
- payloadFailed: r.payloadFailed,
236
- context: { connection_id, credential_id },
237
- hint: r.payloadFailed
277
+ return restErrorResult(r, { connection_id, credential_id, payloadFailed: r.payloadFailed }, {
278
+ message: "credential link failed",
279
+ // Per-site nuance: a 200 + success:false (payloadFailed) gets a
280
+ // link-specific hint; everything else falls back to hintFor().
281
+ suggestion: r.payloadFailed
238
282
  ? "Connection update returned success:false — verify the connection_id exists and credential_id is valid."
239
283
  : hintFor(r.errorCode),
240
- }, true);
284
+ });
241
285
  }
242
286
  const conn = r.data && typeof r.data === "object" && "connection" in r.data
243
287
  ? r.data.connection
@@ -261,19 +305,83 @@ export function registerCredentialTools(server) {
261
305
  title: "Begin OAuth2 Authorize Flow",
262
306
  description: "Initiate the OAuth2 authorization-code flow for a credential. Returns the upstream " +
263
307
  "authorize URL the user must visit in a browser to grant consent. " +
264
- "After consent: call apimapper_credential_get to verify the credential was populated." +
265
- "\n\nExample:\n apimapper_oauth_authorize_begin({ credential_id: 'cred_google_drive' })",
308
+ "After consent: call apimapper_credential_get to verify the credential was populated. " +
309
+ "If `credential_id` is omitted, supply `provider` to scope the lookup — when exactly " +
310
+ "one OAuth credential matches it is used automatically; when several match the user " +
311
+ "is asked to pick." +
312
+ "\n\nExample:\n apimapper_oauth_authorize_begin({ credential_id: 'cred_google_drive' })\n" +
313
+ " apimapper_oauth_authorize_begin({ provider: 'google' }) // resolves by provider",
266
314
  inputSchema: {
267
315
  credential_id: z
268
316
  .string()
269
- .describe("Credential ID (must be type oauth2_code). Use apimapper_credential_list."),
317
+ .optional()
318
+ .describe("Credential ID (must be type oauth2_code). Use apimapper_credential_list. " +
319
+ "Omit to resolve by `provider` instead."),
320
+ provider: z
321
+ .string()
322
+ .optional()
323
+ .describe('OAuth provider slug to resolve the credential when `credential_id` is omitted ' +
324
+ '(e.g., "google", "meta"). Match is case-insensitive against the credential\'s ' +
325
+ "oauth_provider / provider field."),
270
326
  scopes: z
271
327
  .array(z.string())
272
328
  .optional()
273
329
  .describe('Override scopes (e.g., ["https://www.googleapis.com/auth/spreadsheets.readonly"])'),
274
330
  },
275
- annotations: creating(),
276
- }, async ({ credential_id, scopes }) => {
331
+ annotations: creating({ title: "Begin OAuth Authorization", openWorld: true }),
332
+ }, async ({ credential_id, provider, scopes }) => {
333
+ // W3.6 — resolve the credential when `credential_id` is omitted.
334
+ // Exactly 1 OAuth credential matching `provider` → auto-pick;
335
+ // >1 → elicitChoice; 0 → structured error; elicitChoice null
336
+ // (unsupported client / declined) → structured candidate-list error.
337
+ let resolvedCredentialId = credential_id;
338
+ if (!resolvedCredentialId) {
339
+ const lr = await request("/credentials", {}, { sanitize: true });
340
+ if (!lr.success) {
341
+ return restErrorResult(lr, { provider }, { message: "credential lookup failed" });
342
+ }
343
+ const all = Array.isArray(lr.data?.credentials) ? lr.data.credentials : [];
344
+ // OAuth authorize-code flow only applies to oauth2_code credentials.
345
+ const oauthCreds = all.filter((c) => c.auth_type === "oauth2_code");
346
+ const matches = provider
347
+ ? oauthCreds.filter((c) => credentialProvider(c)?.toLowerCase() === provider.toLowerCase())
348
+ : oauthCreds;
349
+ if (matches.length === 0) {
350
+ return errorResult({
351
+ message: provider
352
+ ? `No oauth2_code credential matches provider "${provider}".`
353
+ : "No oauth2_code credential found.",
354
+ code: "credential_not_found",
355
+ suggestion: "Create one with apimapper_credential_create (auth_type: 'oauth2_code'), " +
356
+ "or pass an explicit `credential_id`.",
357
+ details: { provider },
358
+ });
359
+ }
360
+ if (matches.length === 1) {
361
+ resolvedCredentialId = matches[0].id;
362
+ }
363
+ else {
364
+ const candidates = matches.map((c) => ({
365
+ id: c.id,
366
+ label: c.name,
367
+ }));
368
+ const picked = elicitation
369
+ ? await elicitChoice(elicitation, provider
370
+ ? `Several "${provider}" OAuth credentials exist. Pick the one to authorize.`
371
+ : "Several OAuth credentials exist. Pick the one to authorize.", candidates.map((c) => c.id))
372
+ : null;
373
+ if (picked === null) {
374
+ return ambiguityFallbackError({
375
+ code: "credential_ambiguous",
376
+ paramName: "credential_id",
377
+ what: "OAuth credentials",
378
+ candidates,
379
+ extraDetails: { provider },
380
+ });
381
+ }
382
+ resolvedCredentialId = picked;
383
+ }
384
+ }
277
385
  // Wire-key alignment with PHP OAuthController (audit F-A3-01 + F-A3-02):
278
386
  // - Request: PHP reads `existing_credential_id` (not `credential_id`).
279
387
  // Wave 1B accepted both, but sending the canonical key directly is
@@ -284,17 +392,62 @@ export function registerCredentialTools(server) {
284
392
  // before or after the alias ships.
285
393
  const r = await request("/oauth/authorize", {
286
394
  method: "POST",
287
- body: JSON.stringify({ existing_credential_id: credential_id, scopes }),
395
+ body: JSON.stringify({ existing_credential_id: resolvedCredentialId, scopes }),
288
396
  });
289
397
  if (!r.success) {
290
- return formatResult({ error: r.error, status: r.status, errorCode: r.errorCode, context: { credential_id }, hint: hintFor(r.errorCode) }, true);
398
+ return restErrorResult(r, { credential_id: resolvedCredentialId }, { message: "oauth authorize failed" });
291
399
  }
292
400
  const authorizeUrl = r.data?.authorize_url ?? r.data?.authorization_url;
293
- return formatResult({
294
- authorize_url: authorizeUrl,
295
- state: r.data?.state,
296
- instruction: "Open authorize_url in a browser, complete consent. Then call apimapper_credential_get to verify population.",
297
- }, false, { maxChars: 2000 });
401
+ // F-7.1 (Pass-1 consolidation) — terminal URL UX.
402
+ //
403
+ // Thomas live-smoked the bug: Claude Code rendered the authorize URL
404
+ // inside a JSON.stringify(_, null, 2) payload, so triple-click
405
+ // copied the indented text and the URL pasted into the browser with
406
+ // line-breaks + leading whitespace.
407
+ //
408
+ // Best-practice consensus (see citations below) is to surface the
409
+ // URL as BARE text on its own line:
410
+ // - URL alone on its own line, no leading whitespace, no trailing
411
+ // punctuation.
412
+ // - Blank lines above + below so triple-click selects only the URL.
413
+ // - NO markdown link wrap `[label](url)` — claude-code#30162
414
+ // anti-pattern (masks URL, breaks copy).
415
+ // - NO fenced code block around the URL — terminal URL-detectors
416
+ // are inconsistent inside ```.
417
+ // - NO JSON-pretty-print around the URL — that's the bug.
418
+ // - NO server-emitted OSC-8 escape — Claude Code auto-wraps bare
419
+ // URLs (claude-code#13008); double-wrap is broken, and Warp /
420
+ // macOS Terminal / tmux+Claude Code paths have no OSC-8 fallback
421
+ // (claude-code#27047, Warp#6393).
422
+ // - structuredContent still carries the URL + state + credential_id
423
+ // for programmatic consumers (MCP spec 2025-06-18 — structured
424
+ // JSON mirror alongside text content).
425
+ //
426
+ // Citations: MCP spec 2025-06-18 server/tools section; claude-code
427
+ // issues #13008, #30162, #27047; Warp#6393; Notion MCP plain-URL
428
+ // pattern (github.com/makenotion/notion-mcp-server).
429
+ const lines = [
430
+ "Open this URL in your browser to authorize the credential:",
431
+ "",
432
+ authorizeUrl ?? "(no authorize URL returned)",
433
+ "",
434
+ `After approval, call apimapper_credential_get({ id: "${resolvedCredentialId}" }) to verify the credential was populated.`,
435
+ ];
436
+ if (r.data?.state) {
437
+ lines.push("", `State: ${r.data.state}`);
438
+ }
439
+ if (scopes && scopes.length > 0) {
440
+ lines.push(`Scopes: ${scopes.join(", ")}`);
441
+ }
442
+ return {
443
+ content: [{ type: "text", text: lines.join("\n") }],
444
+ structuredContent: {
445
+ authorize_url: authorizeUrl,
446
+ credential_id: resolvedCredentialId,
447
+ state: r.data?.state,
448
+ ...(scopes && scopes.length > 0 ? { scopes } : {}),
449
+ },
450
+ };
298
451
  });
299
452
  }
300
453
  //# sourceMappingURL=credentials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/modules/apimapper/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/modules/apimapper/credentials.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import type { ToolRegistrar } from "./gateway/capturing-server.js";
2
2
  export type DiagnoseBlocker = "malformed-token" | "expired" | "phishing-risk" | "plugin-missing" | "identity-error" | "scope-too-narrow" | "capability-missing";
3
3
  export interface DiagnoseCheck {
4
4
  name: string;
@@ -11,8 +11,60 @@ export interface DiagnoseResult {
11
11
  recommendation: string;
12
12
  blockers: DiagnoseBlocker[];
13
13
  }
14
+ /**
15
+ * Check whether a token's scope set covers a required scope, respecting
16
+ * the read ⊂ write ⊂ admin hierarchy. Returns true iff the token holds
17
+ * a scope that implies (or equals) the required one.
18
+ *
19
+ * @param tokenScopes - The `scope` array decoded from the token payload.
20
+ * @param required - The scope this caller needs (e.g. "read").
21
+ */
22
+ export declare function hasScope(tokenScopes: readonly string[], required: string): boolean;
23
+ /**
24
+ * F-05: Hard wall-clock cap on every identity probe.
25
+ *
26
+ * Without this, a non-responsive target server can stall the diagnosis
27
+ * indefinitely — the setup wizard appears to hang and the user has no
28
+ * cancel affordance. 5 seconds is a generous-but-bounded budget: real
29
+ * WP/Joomla identity endpoints respond in <500ms typically; a 5s ceiling
30
+ * surfaces "this server isn't responding" within a UX-acceptable window.
31
+ *
32
+ * Exported for tests that may want to override or assert on the value.
33
+ */
34
+ export declare const PROBE_TIMEOUT_MS = 5000;
35
+ /**
36
+ * Wrapper around `fetch()` that hard-binds an `AbortSignal.timeout()` to
37
+ * each request. Used by both WordPress and Joomla identity probes so the
38
+ * timeout policy is enforced in exactly one place (no DRY drift).
39
+ *
40
+ * Exported (W1.9 / F-15) so the `apimapper_health` downstream probe of
41
+ * api.wootsup.com can reuse the same primitive — the timeout contract is
42
+ * generic (URL/init/timeoutMs), not diagnose-specific, so a re-export
43
+ * avoids duplicating the AbortSignal.timeout wiring across files. If a
44
+ * future third consumer materialises, the function moves to a shared
45
+ * `http-utils.ts` module; today, two callers in the same module folder
46
+ * does not warrant a new file.
47
+ *
48
+ * If the caller passes a `signal` in `init`, it is silently overridden —
49
+ * the probe contract is "you get a timeout, full stop". A future caller
50
+ * that wants both timeout AND user-cancellation should compose signals
51
+ * via `AbortSignal.any([userSignal, AbortSignal.timeout(ms)])`, but that
52
+ * is intentionally out of scope here.
53
+ *
54
+ * On timeout the underlying fetch rejects with `DOMException("...",
55
+ * "TimeoutError")` (or `"AbortError"` on older runtimes). The caller is
56
+ * expected to narrow on `error.name` to surface a "timeout after Nms"
57
+ * message rather than a generic transport failure.
58
+ *
59
+ * @param url - URL to fetch.
60
+ * @param init - Optional RequestInit. Any `signal` field is overridden.
61
+ * @param timeoutMs - Timeout in milliseconds. Must be a finite, positive
62
+ * integer; falls back to {@link PROBE_TIMEOUT_MS} otherwise.
63
+ * @returns The Response on success.
64
+ */
65
+ export declare function fetchWithTimeout(url: string, init?: RequestInit, timeoutMs?: number): Promise<Response>;
14
66
  /**
15
67
  * Run the full diagnosis chain. Never throws; always returns DiagnoseResult.
16
68
  */
17
69
  export declare function diagnoseSite(token: string, siteUrl: string): Promise<DiagnoseResult>;
18
- export declare function registerDiagnoseTool(server: McpServer): void;
70
+ export declare function registerDiagnoseTool(server: ToolRegistrar): void;