@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.
- package/README.md +7 -7
- package/dist/index.d.ts +19 -0
- package/dist/index.js +72 -6
- package/dist/index.js.map +1 -1
- package/dist/modules/apimapper/cache.d.ts +2 -2
- package/dist/modules/apimapper/cache.js +107 -25
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +40 -0
- package/dist/modules/apimapper/client.js +82 -12
- package/dist/modules/apimapper/client.js.map +1 -1
- package/dist/modules/apimapper/connections-format.d.ts +51 -0
- package/dist/modules/apimapper/connections-format.js +261 -0
- package/dist/modules/apimapper/connections-format.js.map +1 -0
- package/dist/modules/apimapper/connections-trim.d.ts +82 -0
- package/dist/modules/apimapper/connections-trim.js +224 -0
- package/dist/modules/apimapper/connections-trim.js.map +1 -0
- package/dist/modules/apimapper/connections.d.ts +14 -2
- package/dist/modules/apimapper/connections.js +447 -143
- package/dist/modules/apimapper/connections.js.map +1 -1
- package/dist/modules/apimapper/credentials-format.d.ts +21 -0
- package/dist/modules/apimapper/credentials-format.js +145 -0
- package/dist/modules/apimapper/credentials-format.js.map +1 -0
- package/dist/modules/apimapper/credentials.d.ts +12 -2
- package/dist/modules/apimapper/credentials.js +253 -72
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.d.ts +54 -2
- package/dist/modules/apimapper/diagnose.js +193 -11
- package/dist/modules/apimapper/diagnose.js.map +1 -1
- package/dist/modules/apimapper/elicitation.d.ts +54 -0
- package/dist/modules/apimapper/elicitation.js +90 -0
- package/dist/modules/apimapper/elicitation.js.map +1 -0
- package/dist/modules/apimapper/flows-format.d.ts +50 -0
- package/dist/modules/apimapper/flows-format.js +318 -0
- package/dist/modules/apimapper/flows-format.js.map +1 -0
- package/dist/modules/apimapper/flows.d.ts +13 -2
- package/dist/modules/apimapper/flows.js +325 -118
- package/dist/modules/apimapper/flows.js.map +1 -1
- package/dist/modules/apimapper/gateway/advanced-tool.d.ts +9 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js +214 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -0
- package/dist/modules/apimapper/gateway/capturing-server.d.ts +81 -0
- package/dist/modules/apimapper/gateway/capturing-server.js +87 -0
- package/dist/modules/apimapper/gateway/capturing-server.js.map +1 -0
- package/dist/modules/apimapper/gateway/essentials.d.ts +4 -0
- package/dist/modules/apimapper/gateway/essentials.js +28 -0
- package/dist/modules/apimapper/gateway/essentials.js.map +1 -0
- package/dist/modules/apimapper/gateway/test-support.d.ts +17 -0
- package/dist/modules/apimapper/gateway/test-support.js +43 -0
- package/dist/modules/apimapper/gateway/test-support.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +3 -3
- package/dist/modules/apimapper/get-skill.js +4 -2
- package/dist/modules/apimapper/get-skill.js.map +1 -1
- package/dist/modules/apimapper/graph-builder.js +1 -1
- package/dist/modules/apimapper/graph-builder.js.map +1 -1
- package/dist/modules/apimapper/graph.d.ts +2 -2
- package/dist/modules/apimapper/graph.js +165 -34
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.d.ts +17 -1
- package/dist/modules/apimapper/index.js +66 -17
- package/dist/modules/apimapper/index.js.map +1 -1
- package/dist/modules/apimapper/inspect.d.ts +3 -2
- package/dist/modules/apimapper/inspect.js +97 -13
- package/dist/modules/apimapper/inspect.js.map +1 -1
- package/dist/modules/apimapper/library.d.ts +2 -2
- package/dist/modules/apimapper/library.js +303 -60
- package/dist/modules/apimapper/library.js.map +1 -1
- package/dist/modules/apimapper/license-format.d.ts +22 -0
- package/dist/modules/apimapper/license-format.js +149 -0
- package/dist/modules/apimapper/license-format.js.map +1 -0
- package/dist/modules/apimapper/license.d.ts +16 -2
- package/dist/modules/apimapper/license.js +85 -37
- package/dist/modules/apimapper/license.js.map +1 -1
- package/dist/modules/apimapper/local-sources.d.ts +2 -2
- package/dist/modules/apimapper/local-sources.js +58 -30
- package/dist/modules/apimapper/local-sources.js.map +1 -1
- package/dist/modules/apimapper/misc.d.ts +30 -2
- package/dist/modules/apimapper/misc.js +129 -50
- package/dist/modules/apimapper/misc.js.map +1 -1
- package/dist/modules/apimapper/node-schema.d.ts +52 -0
- package/dist/modules/apimapper/node-schema.js +70 -2
- package/dist/modules/apimapper/node-schema.js.map +1 -1
- package/dist/modules/apimapper/normalizers.d.ts +1 -0
- package/dist/modules/apimapper/normalizers.js +51 -0
- package/dist/modules/apimapper/normalizers.js.map +1 -1
- package/dist/modules/apimapper/onboarding.d.ts +48 -2
- package/dist/modules/apimapper/onboarding.js +324 -17
- package/dist/modules/apimapper/onboarding.js.map +1 -1
- package/dist/modules/apimapper/read-cache.d.ts +31 -2
- package/dist/modules/apimapper/read-cache.js +20 -6
- package/dist/modules/apimapper/read-cache.js.map +1 -1
- package/dist/modules/apimapper/render/_shared.d.ts +24 -0
- package/dist/modules/apimapper/render/_shared.js +84 -0
- package/dist/modules/apimapper/render/_shared.js.map +1 -0
- package/dist/modules/apimapper/render/dag.d.ts +18 -0
- package/dist/modules/apimapper/render/dag.js +70 -0
- package/dist/modules/apimapper/render/dag.js.map +1 -0
- package/dist/modules/apimapper/render/index.d.ts +2 -0
- package/dist/modules/apimapper/render/index.js +112 -0
- package/dist/modules/apimapper/render/index.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.js +70 -0
- package/dist/modules/apimapper/render/renderers/chart-bar.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/chart-line.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/chart-line.js +71 -0
- package/dist/modules/apimapper/render/renderers/chart-line.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/diff.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/diff.js +154 -0
- package/dist/modules/apimapper/render/renderers/diff.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.d.ts +1 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.js +180 -0
- package/dist/modules/apimapper/render/renderers/flow-diagram.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/json-tree.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/json-tree.js +87 -0
- package/dist/modules/apimapper/render/renderers/json-tree.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.js +83 -0
- package/dist/modules/apimapper/render/renderers/schema-diagram.js.map +1 -0
- package/dist/modules/apimapper/render/renderers/table.d.ts +2 -0
- package/dist/modules/apimapper/render/renderers/table.js +75 -0
- package/dist/modules/apimapper/render/renderers/table.js.map +1 -0
- package/dist/modules/apimapper/render/schemas.d.ts +23 -0
- package/dist/modules/apimapper/render/schemas.js +56 -0
- package/dist/modules/apimapper/render/schemas.js.map +1 -0
- package/dist/modules/apimapper/render/secret-masking.d.ts +5 -0
- package/dist/modules/apimapper/render/secret-masking.js +51 -0
- package/dist/modules/apimapper/render/secret-masking.js.map +1 -0
- package/dist/modules/apimapper/render/sidecar.d.ts +21 -0
- package/dist/modules/apimapper/render/sidecar.js +66 -0
- package/dist/modules/apimapper/render/sidecar.js.map +1 -0
- package/dist/modules/apimapper/render/token-cap.d.ts +21 -0
- package/dist/modules/apimapper/render/token-cap.js +57 -0
- package/dist/modules/apimapper/render/token-cap.js.map +1 -0
- package/dist/modules/apimapper/schema.d.ts +2 -2
- package/dist/modules/apimapper/schema.js +100 -32
- package/dist/modules/apimapper/schema.js.map +1 -1
- package/dist/modules/apimapper/settings-format.d.ts +23 -0
- package/dist/modules/apimapper/settings-format.js +135 -0
- package/dist/modules/apimapper/settings-format.js.map +1 -0
- package/dist/modules/apimapper/settings.d.ts +2 -2
- package/dist/modules/apimapper/settings.js +101 -40
- package/dist/modules/apimapper/settings.js.map +1 -1
- package/dist/modules/apimapper/skill-resources.d.ts +2 -2
- package/dist/modules/apimapper/skill-resources.js.map +1 -1
- package/dist/modules/apimapper/token-baseline.harness.d.ts +91 -0
- package/dist/modules/apimapper/token-baseline.harness.js +291 -0
- package/dist/modules/apimapper/token-baseline.harness.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +55 -0
- package/dist/modules/apimapper/toolslist-size.js +190 -0
- package/dist/modules/apimapper/toolslist-size.js.map +1 -0
- package/dist/modules/apimapper/types.d.ts +23 -8
- package/dist/modules/apimapper/types.js +26 -1
- package/dist/modules/apimapper/types.js.map +1 -1
- package/dist/modules/apimapper/use-profile.d.ts +21 -0
- package/dist/modules/apimapper/use-profile.js +56 -2
- package/dist/modules/apimapper/use-profile.js.map +1 -1
- package/dist/modules/apimapper/workflows.d.ts +2 -2
- package/dist/modules/apimapper/workflows.js +143 -16
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/platform/index.js +44 -5
- package/dist/platform/index.js.map +1 -1
- package/dist/setup-cli.d.ts +53 -0
- package/dist/setup-cli.js +135 -6
- package/dist/setup-cli.js.map +1 -1
- package/docs/architecture.md +1 -1
- package/docs/tools.md +1 -1
- package/manifest.json +12 -3
- package/package.json +9 -4
- package/skills/apimapper/SKILL.md +1 -1
- package/skills/apimapper/reference/render.md +132 -0
- package/skills/apimapper/reference/troubleshooting.md +1 -1
- package/skills/apimapper/reference/yootheme.md +1 -1
|
@@ -9,7 +9,10 @@
|
|
|
9
9
|
// Step 3 — verify token.iss matches the probed site_url (anti-phishing).
|
|
10
10
|
// Step 4 — verify identity.capabilities includes the minimum we need
|
|
11
11
|
// (currently: 'flows' + 'library').
|
|
12
|
-
// Step 5 — verify token.scope
|
|
12
|
+
// Step 5 — verify token.scope COVERS at least 'read'. The check uses
|
|
13
|
+
// the read ⊂ write ⊂ admin hierarchy: an admin-only token
|
|
14
|
+
// (or a write-only token) passes because both subsume read.
|
|
15
|
+
// See `hasScope()` for the canonical hierarchy mirror.
|
|
13
16
|
//
|
|
14
17
|
// Output structure: { ready, checks[], recommendation, blockers[] }.
|
|
15
18
|
//
|
|
@@ -20,10 +23,128 @@
|
|
|
20
23
|
// Network-tolerant: any unexpected fetch error is captured into a check
|
|
21
24
|
// but the function never throws.
|
|
22
25
|
import { z } from "zod";
|
|
23
|
-
import {
|
|
26
|
+
import { detailResult, readOnly } from "@getimo/mcp-toolkit";
|
|
24
27
|
import { inspectToken } from "./inspect.js";
|
|
25
28
|
const REQUIRED_CAPABILITIES = ["flows", "library"];
|
|
26
29
|
const MIN_SCOPE = "read";
|
|
30
|
+
/**
|
|
31
|
+
* Scope hierarchy enforced by the PHP MCP authentication layer.
|
|
32
|
+
*
|
|
33
|
+
* Mirrors {@see \ApiMapper\WordPress\Admin\Controller\RestControllerTrait::checkBearerOrPermissions}
|
|
34
|
+
* (src/modules/admin-wordpress/src/Admin/Controller/RestControllerTrait.php
|
|
35
|
+
* lines 133-134 and 248-249), which grants access if the token carries
|
|
36
|
+
* either the explicitly requested scope OR the all-covering `admin`
|
|
37
|
+
* scope.
|
|
38
|
+
*
|
|
39
|
+
* The scope strings the server emits today are exactly three:
|
|
40
|
+
* - "read" : GET / HEAD / OPTIONS
|
|
41
|
+
* - "write" : POST / PUT / PATCH (implies read for diagnosis purposes;
|
|
42
|
+
* a writer can also read)
|
|
43
|
+
* - "admin" : DELETE (implies write + read; admin can do anything)
|
|
44
|
+
*
|
|
45
|
+
* `hasScope()` is the authoritative scope-check helper used by the
|
|
46
|
+
* pre-flight diagnose tool. Plain `scopes.includes(required)` (the
|
|
47
|
+
* pre-W2-4 implementation) is INCORRECT because an admin-only token
|
|
48
|
+
* would fail the `read` check even though admin strictly subsumes read
|
|
49
|
+
* at the server. That false-positive flagged production admin-scope
|
|
50
|
+
* tokens with `scope-too-narrow` (audit finding H-4, 2026-05-27).
|
|
51
|
+
*
|
|
52
|
+
* The set of recognised scopes is closed: any string not in
|
|
53
|
+
* {read, write, admin} is treated literally (no implication), so a
|
|
54
|
+
* future custom scope cannot accidentally inherit privileges it was not
|
|
55
|
+
* granted. If a fourth scope is ever introduced, extend `SCOPE_IMPLIES`
|
|
56
|
+
* below; do NOT loosen the literal-match fallback.
|
|
57
|
+
*/
|
|
58
|
+
const SCOPE_IMPLIES = {
|
|
59
|
+
read: new Set(["read"]),
|
|
60
|
+
write: new Set(["read", "write"]),
|
|
61
|
+
admin: new Set(["read", "write", "admin"]),
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Check whether a token's scope set covers a required scope, respecting
|
|
65
|
+
* the read ⊂ write ⊂ admin hierarchy. Returns true iff the token holds
|
|
66
|
+
* a scope that implies (or equals) the required one.
|
|
67
|
+
*
|
|
68
|
+
* @param tokenScopes - The `scope` array decoded from the token payload.
|
|
69
|
+
* @param required - The scope this caller needs (e.g. "read").
|
|
70
|
+
*/
|
|
71
|
+
export function hasScope(tokenScopes, required) {
|
|
72
|
+
for (const held of tokenScopes) {
|
|
73
|
+
const implications = SCOPE_IMPLIES[held];
|
|
74
|
+
if (implications !== undefined && implications.has(required)) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
// Literal-match fallback for scopes outside the known hierarchy.
|
|
78
|
+
if (held === required) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* F-05: Hard wall-clock cap on every identity probe.
|
|
86
|
+
*
|
|
87
|
+
* Without this, a non-responsive target server can stall the diagnosis
|
|
88
|
+
* indefinitely — the setup wizard appears to hang and the user has no
|
|
89
|
+
* cancel affordance. 5 seconds is a generous-but-bounded budget: real
|
|
90
|
+
* WP/Joomla identity endpoints respond in <500ms typically; a 5s ceiling
|
|
91
|
+
* surfaces "this server isn't responding" within a UX-acceptable window.
|
|
92
|
+
*
|
|
93
|
+
* Exported for tests that may want to override or assert on the value.
|
|
94
|
+
*/
|
|
95
|
+
export const PROBE_TIMEOUT_MS = 5_000;
|
|
96
|
+
/**
|
|
97
|
+
* Wrapper around `fetch()` that hard-binds an `AbortSignal.timeout()` to
|
|
98
|
+
* each request. Used by both WordPress and Joomla identity probes so the
|
|
99
|
+
* timeout policy is enforced in exactly one place (no DRY drift).
|
|
100
|
+
*
|
|
101
|
+
* Exported (W1.9 / F-15) so the `apimapper_health` downstream probe of
|
|
102
|
+
* api.wootsup.com can reuse the same primitive — the timeout contract is
|
|
103
|
+
* generic (URL/init/timeoutMs), not diagnose-specific, so a re-export
|
|
104
|
+
* avoids duplicating the AbortSignal.timeout wiring across files. If a
|
|
105
|
+
* future third consumer materialises, the function moves to a shared
|
|
106
|
+
* `http-utils.ts` module; today, two callers in the same module folder
|
|
107
|
+
* does not warrant a new file.
|
|
108
|
+
*
|
|
109
|
+
* If the caller passes a `signal` in `init`, it is silently overridden —
|
|
110
|
+
* the probe contract is "you get a timeout, full stop". A future caller
|
|
111
|
+
* that wants both timeout AND user-cancellation should compose signals
|
|
112
|
+
* via `AbortSignal.any([userSignal, AbortSignal.timeout(ms)])`, but that
|
|
113
|
+
* is intentionally out of scope here.
|
|
114
|
+
*
|
|
115
|
+
* On timeout the underlying fetch rejects with `DOMException("...",
|
|
116
|
+
* "TimeoutError")` (or `"AbortError"` on older runtimes). The caller is
|
|
117
|
+
* expected to narrow on `error.name` to surface a "timeout after Nms"
|
|
118
|
+
* message rather than a generic transport failure.
|
|
119
|
+
*
|
|
120
|
+
* @param url - URL to fetch.
|
|
121
|
+
* @param init - Optional RequestInit. Any `signal` field is overridden.
|
|
122
|
+
* @param timeoutMs - Timeout in milliseconds. Must be a finite, positive
|
|
123
|
+
* integer; falls back to {@link PROBE_TIMEOUT_MS} otherwise.
|
|
124
|
+
* @returns The Response on success.
|
|
125
|
+
*/
|
|
126
|
+
export async function fetchWithTimeout(url, init = {}, timeoutMs = PROBE_TIMEOUT_MS) {
|
|
127
|
+
const effectiveMs = Number.isFinite(timeoutMs) && timeoutMs > 0 ? timeoutMs : PROBE_TIMEOUT_MS;
|
|
128
|
+
return fetch(url, { ...init, signal: AbortSignal.timeout(effectiveMs) });
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Map an unknown thrown value from a probe `fetch()` call to a
|
|
132
|
+
* user-facing error string. Distinguishes `AbortError` / `TimeoutError`
|
|
133
|
+
* (from `AbortSignal.timeout`) from generic transport failures so the
|
|
134
|
+
* surfaced message answers "did we time out or did the network refuse?".
|
|
135
|
+
*
|
|
136
|
+
* @param e - Unknown error caught from a fetch invocation.
|
|
137
|
+
* @returns Stable error string suitable for `ProbeResult.error`.
|
|
138
|
+
*/
|
|
139
|
+
function describeProbeError(e) {
|
|
140
|
+
if (e instanceof Error) {
|
|
141
|
+
if (e.name === "AbortError" || e.name === "TimeoutError") {
|
|
142
|
+
return `timeout after ${PROBE_TIMEOUT_MS}ms`;
|
|
143
|
+
}
|
|
144
|
+
return e.message;
|
|
145
|
+
}
|
|
146
|
+
return String(e);
|
|
147
|
+
}
|
|
27
148
|
/** Read site URL from an identity payload, tolerating both `site_url` and `siteurl`. */
|
|
28
149
|
function readSiteUrl(data) {
|
|
29
150
|
return data?.site_url ?? data?.siteurl ?? "";
|
|
@@ -36,7 +157,7 @@ function stripSlash(s) {
|
|
|
36
157
|
async function probeWordPress(siteUrl) {
|
|
37
158
|
const url = `${stripSlash(siteUrl)}/wp-json/api-mapper/v1/identity`;
|
|
38
159
|
try {
|
|
39
|
-
const res = await
|
|
160
|
+
const res = await fetchWithTimeout(url, {
|
|
40
161
|
method: "GET",
|
|
41
162
|
headers: { Accept: "application/json" },
|
|
42
163
|
});
|
|
@@ -58,7 +179,7 @@ async function probeWordPress(siteUrl) {
|
|
|
58
179
|
return {
|
|
59
180
|
ok: false,
|
|
60
181
|
probedUrl: url,
|
|
61
|
-
error:
|
|
182
|
+
error: describeProbeError(e),
|
|
62
183
|
};
|
|
63
184
|
}
|
|
64
185
|
}
|
|
@@ -66,7 +187,7 @@ async function probeWordPress(siteUrl) {
|
|
|
66
187
|
async function probeJoomla(siteUrl) {
|
|
67
188
|
const url = `${stripSlash(siteUrl)}/index.php?option=com_ajax&plugin=apimapper&task=getIdentity&format=json`;
|
|
68
189
|
try {
|
|
69
|
-
const res = await
|
|
190
|
+
const res = await fetchWithTimeout(url, {
|
|
70
191
|
method: "GET",
|
|
71
192
|
headers: { Accept: "application/json" },
|
|
72
193
|
});
|
|
@@ -93,7 +214,7 @@ async function probeJoomla(siteUrl) {
|
|
|
93
214
|
return {
|
|
94
215
|
ok: false,
|
|
95
216
|
probedUrl: url,
|
|
96
|
-
error:
|
|
217
|
+
error: describeProbeError(e),
|
|
97
218
|
};
|
|
98
219
|
}
|
|
99
220
|
}
|
|
@@ -242,12 +363,20 @@ export async function diagnoseSite(token, siteUrl) {
|
|
|
242
363
|
});
|
|
243
364
|
}
|
|
244
365
|
// ── Step 5: scope check ─────────────────────────────────────────────
|
|
366
|
+
//
|
|
367
|
+
// W2-4 (H-4, 2026-05-27): use the hierarchy-aware `hasScope` helper
|
|
368
|
+
// instead of plain `scopes.includes('read')`. The previous narrow
|
|
369
|
+
// check produced a false-positive `scope-too-narrow` blocker for
|
|
370
|
+
// admin-only tokens. Admin strictly subsumes write+read at the server,
|
|
371
|
+
// so an admin token is more than sufficient for any read operation.
|
|
372
|
+
// See `hasScope()` and `SCOPE_IMPLIES` above for the canonical
|
|
373
|
+
// hierarchy mirror.
|
|
245
374
|
const scopes = tokenInfo.payload.scope ?? [];
|
|
246
|
-
if (!scopes
|
|
375
|
+
if (!hasScope(scopes, MIN_SCOPE)) {
|
|
247
376
|
checks.push({
|
|
248
377
|
name: "scope-sufficient",
|
|
249
378
|
passed: false,
|
|
250
|
-
detail: `token.scope=[${scopes.join(",")}]
|
|
379
|
+
detail: `token.scope=[${scopes.join(",")}] does not cover '${MIN_SCOPE}'`,
|
|
251
380
|
});
|
|
252
381
|
blockers.push("scope-too-narrow");
|
|
253
382
|
}
|
|
@@ -255,7 +384,7 @@ export async function diagnoseSite(token, siteUrl) {
|
|
|
255
384
|
checks.push({
|
|
256
385
|
name: "scope-sufficient",
|
|
257
386
|
passed: true,
|
|
258
|
-
detail: `
|
|
387
|
+
detail: `covers '${MIN_SCOPE}' (full scope: ${scopes.join(",")})`,
|
|
259
388
|
});
|
|
260
389
|
}
|
|
261
390
|
// ── Aggregate ───────────────────────────────────────────────────────
|
|
@@ -301,10 +430,63 @@ export function registerDiagnoseTool(server) {
|
|
|
301
430
|
.url()
|
|
302
431
|
.describe('Site URL the token is meant for (e.g., "https://example.com/wp")'),
|
|
303
432
|
},
|
|
304
|
-
annotations: readOnly(),
|
|
433
|
+
annotations: readOnly({ title: "Diagnose Site", openWorld: true }),
|
|
305
434
|
}, async ({ token, siteUrl }) => {
|
|
306
435
|
const result = await diagnoseSite(token, siteUrl);
|
|
307
|
-
|
|
436
|
+
// W3.1 (rc.13 Welle 3) — detailResult: the {ready, checks[],
|
|
437
|
+
// recommendation, blockers[]} composite renders as a grouped detail.
|
|
438
|
+
// diagnose NEVER throws and NEVER routes to errorResult — a "not ready"
|
|
439
|
+
// outcome is a valid diagnosis, surfaced inside the detail card via the
|
|
440
|
+
// badge + a blockers group. detailResult groups are scalar-only, so the
|
|
441
|
+
// checks[] array is flattened to one entry per check and blockers[] to a
|
|
442
|
+
// count + a joined list.
|
|
443
|
+
const checkEntries = result.checks.map((c) => ({
|
|
444
|
+
key: c.name,
|
|
445
|
+
label: c.name,
|
|
446
|
+
value: `${c.passed ? "✓" : "✗"} ${c.detail}`,
|
|
447
|
+
format: "status",
|
|
448
|
+
}));
|
|
449
|
+
const blockerEntries = result.blockers.length > 0
|
|
450
|
+
? [
|
|
451
|
+
{
|
|
452
|
+
key: "blocker_count",
|
|
453
|
+
label: "Blocker count",
|
|
454
|
+
value: result.blockers.length,
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
key: "blockers",
|
|
458
|
+
label: "Blockers",
|
|
459
|
+
value: result.blockers.join(", "),
|
|
460
|
+
},
|
|
461
|
+
]
|
|
462
|
+
: [
|
|
463
|
+
{
|
|
464
|
+
key: "blockers",
|
|
465
|
+
label: "Blockers",
|
|
466
|
+
value: "none",
|
|
467
|
+
},
|
|
468
|
+
];
|
|
469
|
+
return detailResult({
|
|
470
|
+
title: result.ready ? "Pre-flight: ready" : "Pre-flight: not ready",
|
|
471
|
+
subtitle: result.recommendation,
|
|
472
|
+
badge: result.ready
|
|
473
|
+
? { text: "ready", variant: "success" }
|
|
474
|
+
: { text: "not ready", variant: "destructive" },
|
|
475
|
+
groups: [
|
|
476
|
+
{ label: "Checks", entries: checkEntries },
|
|
477
|
+
{ label: "Blockers", entries: blockerEntries },
|
|
478
|
+
{
|
|
479
|
+
label: "Recommendation",
|
|
480
|
+
entries: [
|
|
481
|
+
{
|
|
482
|
+
key: "recommendation",
|
|
483
|
+
label: "Recommendation",
|
|
484
|
+
value: result.recommendation,
|
|
485
|
+
},
|
|
486
|
+
],
|
|
487
|
+
},
|
|
488
|
+
],
|
|
489
|
+
});
|
|
308
490
|
});
|
|
309
491
|
}
|
|
310
492
|
//# sourceMappingURL=diagnose.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../../src/modules/apimapper/diagnose.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../../src/modules/apimapper/diagnose.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type McpServerWithElicitation } from "@getimo/mcp-toolkit";
|
|
2
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
3
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
|
+
export type { McpServerWithElicitation };
|
|
5
|
+
/**
|
|
6
|
+
* Build the `McpServerWithElicitation` capability object the toolkit's
|
|
7
|
+
* `elicitChoice` / `elicitConfirmation` consume, from the real `McpServer`.
|
|
8
|
+
*
|
|
9
|
+
* Why an adapter and not the bare `McpServer`:
|
|
10
|
+
* The toolkit's `McpServerWithElicitation.server.elicitInput` is typed with
|
|
11
|
+
* the loose `ElicitInputParams` (`mode: "form" | "url"`, `requestedSchema?:
|
|
12
|
+
* Record<string, unknown>`). The SDK's `Server.elicitInput` is the stricter
|
|
13
|
+
* discriminated `ElicitRequestFormParams | ElicitRequestURLParams` with a
|
|
14
|
+
* fully-typed `requestedSchema`. A real `McpServer` is therefore NOT
|
|
15
|
+
* structurally assignable to `McpServerWithElicitation` — the parameter
|
|
16
|
+
* types are contravariantly incompatible.
|
|
17
|
+
*
|
|
18
|
+
* The toolkit's `elicitChoice` / `elicitConfirmation` ALWAYS call with
|
|
19
|
+
* `mode: "form"` and a `requestedSchema` whose properties are plain
|
|
20
|
+
* `{ type: "string", enum: [...] }` / `{ type: "boolean" }` shapes — i.e.
|
|
21
|
+
* always a valid `ElicitRequestFormParams` at runtime. This adapter is the
|
|
22
|
+
* single, documented interop boundary that re-narrows the loose toolkit
|
|
23
|
+
* params to the SDK's form-params type. ONE cast, justified inline — the
|
|
24
|
+
* same pattern the W3.4 `CapturingServer` uses for its SDK-overload
|
|
25
|
+
* boundaries.
|
|
26
|
+
*/
|
|
27
|
+
export declare function toElicitationCapability(realServer: McpServer): McpServerWithElicitation;
|
|
28
|
+
/**
|
|
29
|
+
* A disambiguation candidate. `id` is the value a tool needs (credential ID,
|
|
30
|
+
* flow ID); `label` is a human-readable name shown in the elicitation prompt
|
|
31
|
+
* and the fallback error list.
|
|
32
|
+
*/
|
|
33
|
+
export interface ElicitationCandidate {
|
|
34
|
+
id: string;
|
|
35
|
+
label: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Render a candidate list as a readable bullet block for the structured
|
|
39
|
+
* fallback error — so a client without elicitation support still gets a
|
|
40
|
+
* fully actionable recovery path.
|
|
41
|
+
*/
|
|
42
|
+
export declare function renderCandidateList(candidates: ElicitationCandidate[]): string;
|
|
43
|
+
/**
|
|
44
|
+
* Build the structured `errorResult` returned when elicitation is unavailable
|
|
45
|
+
* (unsupported client) or the user declined/cancelled. The error names every
|
|
46
|
+
* candidate and tells the caller exactly which parameter to supply on retry.
|
|
47
|
+
*/
|
|
48
|
+
export declare function ambiguityFallbackError(opts: {
|
|
49
|
+
code: string;
|
|
50
|
+
paramName: string;
|
|
51
|
+
what: string;
|
|
52
|
+
candidates: ElicitationCandidate[];
|
|
53
|
+
extraDetails?: Record<string, unknown>;
|
|
54
|
+
}): CallToolResult;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// src/modules/apimapper/elicitation.ts — W3.6 targeted-elicitation support
|
|
2
|
+
//
|
|
3
|
+
// rc.13 Welle 3, Stage 4 (2026-05-20). Three tools gain targeted
|
|
4
|
+
// disambiguation: when the input that selects one of several candidates is
|
|
5
|
+
// missing AND there is genuine ambiguity (>1 candidate), the tool asks the
|
|
6
|
+
// user to pick — through the MCP elicitation channel — instead of guessing.
|
|
7
|
+
//
|
|
8
|
+
// Architecture (design-doc §W3.6, adapted for the W3.4 Gateway refactor):
|
|
9
|
+
// The 18 `registerXTools` functions receive a `ToolRegistrar` (the
|
|
10
|
+
// `registerTool` + `registerResource` subsurface), NOT the full McpServer.
|
|
11
|
+
// The toolkit's `elicitChoice(server, …)` needs `{ server: { elicitInput } }`
|
|
12
|
+
// — the real McpServer's `.server.elicitInput`. The real McpServer IS in
|
|
13
|
+
// scope in `apimapperRestModule.register(server)`; it is passed as an extra
|
|
14
|
+
// parameter to ONLY the 3 elicitation-aware modules (Option A). A real
|
|
15
|
+
// `McpServer` already satisfies `McpServerWithElicitation` structurally
|
|
16
|
+
// (it has `readonly server: Server` and `Server.elicitInput`), so the
|
|
17
|
+
// parameter is passed cast-free. The parameter is OPTIONAL: when the host
|
|
18
|
+
// wiring omits it (or a test drives the handler in isolation), the tool
|
|
19
|
+
// behaves exactly as for a client without elicitation support — it returns
|
|
20
|
+
// the structured `errorResult` fallback.
|
|
21
|
+
//
|
|
22
|
+
// MANDATORY non-elicitation fallback: `elicitChoice` returns `null` on a
|
|
23
|
+
// client without elicitation support, on decline, and on cancel. Every call
|
|
24
|
+
// site MUST then return a structured `errorResult` listing the candidates
|
|
25
|
+
// with a recovery hint — never hang, never guess, never silently pick.
|
|
26
|
+
import { errorResult, } from "@getimo/mcp-toolkit";
|
|
27
|
+
/**
|
|
28
|
+
* Build the `McpServerWithElicitation` capability object the toolkit's
|
|
29
|
+
* `elicitChoice` / `elicitConfirmation` consume, from the real `McpServer`.
|
|
30
|
+
*
|
|
31
|
+
* Why an adapter and not the bare `McpServer`:
|
|
32
|
+
* The toolkit's `McpServerWithElicitation.server.elicitInput` is typed with
|
|
33
|
+
* the loose `ElicitInputParams` (`mode: "form" | "url"`, `requestedSchema?:
|
|
34
|
+
* Record<string, unknown>`). The SDK's `Server.elicitInput` is the stricter
|
|
35
|
+
* discriminated `ElicitRequestFormParams | ElicitRequestURLParams` with a
|
|
36
|
+
* fully-typed `requestedSchema`. A real `McpServer` is therefore NOT
|
|
37
|
+
* structurally assignable to `McpServerWithElicitation` — the parameter
|
|
38
|
+
* types are contravariantly incompatible.
|
|
39
|
+
*
|
|
40
|
+
* The toolkit's `elicitChoice` / `elicitConfirmation` ALWAYS call with
|
|
41
|
+
* `mode: "form"` and a `requestedSchema` whose properties are plain
|
|
42
|
+
* `{ type: "string", enum: [...] }` / `{ type: "boolean" }` shapes — i.e.
|
|
43
|
+
* always a valid `ElicitRequestFormParams` at runtime. This adapter is the
|
|
44
|
+
* single, documented interop boundary that re-narrows the loose toolkit
|
|
45
|
+
* params to the SDK's form-params type. ONE cast, justified inline — the
|
|
46
|
+
* same pattern the W3.4 `CapturingServer` uses for its SDK-overload
|
|
47
|
+
* boundaries.
|
|
48
|
+
*/
|
|
49
|
+
export function toElicitationCapability(realServer) {
|
|
50
|
+
return {
|
|
51
|
+
server: {
|
|
52
|
+
elicitInput: (params) =>
|
|
53
|
+
// Cast: the toolkit only ever produces form-mode elicitation
|
|
54
|
+
// requests (verified: elicitChoice + elicitConfirmation both pass
|
|
55
|
+
// `mode: "form"` with a string/boolean `requestedSchema`). The loose
|
|
56
|
+
// `ElicitInputParams` is asserted to the SDK's `ElicitRequestFormParams`
|
|
57
|
+
// so the SDK's overloaded `elicitInput` accepts it. The runtime
|
|
58
|
+
// payload is exactly a valid form request — only the static type is
|
|
59
|
+
// widened on the toolkit side.
|
|
60
|
+
realServer.server.elicitInput(params),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Render a candidate list as a readable bullet block for the structured
|
|
66
|
+
* fallback error — so a client without elicitation support still gets a
|
|
67
|
+
* fully actionable recovery path.
|
|
68
|
+
*/
|
|
69
|
+
export function renderCandidateList(candidates) {
|
|
70
|
+
return candidates.map((c) => ` • ${c.id} — ${c.label}`).join("\n");
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Build the structured `errorResult` returned when elicitation is unavailable
|
|
74
|
+
* (unsupported client) or the user declined/cancelled. The error names every
|
|
75
|
+
* candidate and tells the caller exactly which parameter to supply on retry.
|
|
76
|
+
*/
|
|
77
|
+
export function ambiguityFallbackError(opts) {
|
|
78
|
+
const list = renderCandidateList(opts.candidates);
|
|
79
|
+
return errorResult({
|
|
80
|
+
message: `Multiple ${opts.what} match — cannot pick automatically.`,
|
|
81
|
+
code: opts.code,
|
|
82
|
+
suggestion: `Retry with an explicit \`${opts.paramName}\` set to one of:\n${list}`,
|
|
83
|
+
details: {
|
|
84
|
+
[`candidate_${opts.paramName}s`]: opts.candidates.map((c) => c.id),
|
|
85
|
+
candidates: opts.candidates,
|
|
86
|
+
...opts.extraDetails,
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=elicitation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elicitation.js","sourceRoot":"","sources":["../../../src/modules/apimapper/elicitation.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,iEAAiE;AACjE,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,qEAAqE;AACrE,6EAA6E;AAC7E,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,0EAA0E;AAC1E,wEAAwE;AACxE,4EAA4E;AAC5E,0EAA0E;AAC1E,6EAA6E;AAC7E,2CAA2C;AAC3C,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,uEAAuE;AAEvE,OAAO,EACL,WAAW,GAGZ,MAAM,qBAAqB,CAAC;AAS7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAqB;IAErB,OAAO;QACL,MAAM,EAAE;YACN,WAAW,EAAE,CAAC,MAAyB,EAAE,EAAE;YACzC,6DAA6D;YAC7D,kEAAkE;YAClE,qEAAqE;YACrE,yEAAyE;YACzE,gEAAgE;YAChE,oEAAoE;YACpE,+BAA+B;YAC/B,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,MAAiC,CAAC;SACnE;KACF,CAAC;AACJ,CAAC;AAYD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkC;IACpE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAMtC;IACC,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,OAAO,WAAW,CAAC;QACjB,OAAO,EAAE,YAAY,IAAI,CAAC,IAAI,qCAAqC;QACnE,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EACR,4BAA4B,IAAI,CAAC,SAAS,sBAAsB,IAAI,EAAE;QACxE,OAAO,EAAE;YACP,CAAC,aAAa,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,IAAI,CAAC,YAAY;SACrB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type TableColumn } from "@getimo/mcp-toolkit";
|
|
2
|
+
import type { Flow } from "./types.js";
|
|
3
|
+
export declare const FLOW_TABLE_COLUMNS: TableColumn[];
|
|
4
|
+
export declare const FLOW_COMPACT_COLUMNS: TableColumn[];
|
|
5
|
+
/**
|
|
6
|
+
* Derive `is_compiled` from REST shape: the backend returns `compiledAt`
|
|
7
|
+
* (ISO timestamp string or null) and a `compiled` array of artifacts.
|
|
8
|
+
* Either indicates the flow has been compiled. Shared between the row map
|
|
9
|
+
* and the in-memory `compiled` filter so display + filtering stay uniform.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isFlowCompiled(f: Flow): boolean;
|
|
12
|
+
/** Standard row map: full Flow → table row. */
|
|
13
|
+
export declare function mapFlowRow(f: Record<string, unknown>): Record<string, unknown>;
|
|
14
|
+
/** T1 compact row map: only the columns FLOW_COMPACT_COLUMNS renders. */
|
|
15
|
+
export declare function compactFlowRow(f: Record<string, unknown>): Record<string, unknown>;
|
|
16
|
+
export declare const FLOW_LIST_NEXT_STEPS: string;
|
|
17
|
+
/**
|
|
18
|
+
* Build a structured detail view for one flow (flow_get).
|
|
19
|
+
*
|
|
20
|
+
* IA-7: technical IDs are copyable code entries. IA-10: a dedicated "Next
|
|
21
|
+
* steps" group carries the actionable follow-up calls. The W2 flow
|
|
22
|
+
* visualization (an ASCII diagram) is routed via `appendText` — it reaches
|
|
23
|
+
* the LLM-readable output but is intentionally kept OUT of the Rich Card
|
|
24
|
+
* groups payload, exactly as the toolkit documents `appendText` for
|
|
25
|
+
* technical detail that would clutter the visual display.
|
|
26
|
+
*/
|
|
27
|
+
export declare function buildFlowDetail(id: string, flow: Flow): import("@getimo/mcp-toolkit").StructuredCallToolResult;
|
|
28
|
+
/**
|
|
29
|
+
* Build a structured timeline view for a flow execution trace (flow_trace).
|
|
30
|
+
*
|
|
31
|
+
* The trace's per-step timing map naturally onto timeline events: each step
|
|
32
|
+
* becomes one event with its node id as the title, the item count + duration
|
|
33
|
+
* as the detail, and a relative `[step N]` time label (the trace carries no
|
|
34
|
+
* wall-clock per step, only durations). Shapes vary across backend versions,
|
|
35
|
+
* so every field read is defensive.
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildFlowTraceTimeline(id: string, steps: unknown[], totalMs?: number): import("@getimo/mcp-toolkit").StructuredCallToolResult;
|
|
38
|
+
/**
|
|
39
|
+
* Build a structured detail view for a flow-import-bundle validation result
|
|
40
|
+
* (flow_import_validate). The REST result is a flat validation envelope
|
|
41
|
+
* ({valid, flowName, exportedFrom, connectionReferences}) — detailResult is
|
|
42
|
+
* the clean fit. Array fields flatten to a count + per-item entries (note 4).
|
|
43
|
+
* IA-10: a dedicated "Next steps" group carries the import/abort guidance.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildImportValidateDetail(opts: {
|
|
46
|
+
valid: boolean;
|
|
47
|
+
flowName?: string;
|
|
48
|
+
exportedFrom?: string | null;
|
|
49
|
+
connectionReferences: unknown[];
|
|
50
|
+
}): import("@getimo/mcp-toolkit").StructuredCallToolResult;
|