@wootsup/mcp 0.1.0 → 0.4.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/CHANGELOG.md +157 -83
- package/README.md +31 -27
- package/SECURITY.md +15 -6
- package/dist/auth/keychain.d.ts +27 -1
- package/dist/auth/keychain.js +48 -2
- package/dist/auth/keychain.js.map +1 -1
- package/dist/catalog/build-catalog.d.ts +31 -0
- package/dist/catalog/build-catalog.js +68 -0
- package/dist/catalog/build-catalog.js.map +1 -0
- package/dist/cli-hint.d.ts +22 -0
- package/dist/cli-hint.js +55 -0
- package/dist/cli-hint.js.map +1 -0
- package/dist/index.js +129 -22
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/modules/apimapper/auto-layout.d.ts +21 -0
- package/dist/modules/apimapper/auto-layout.js +54 -0
- package/dist/modules/apimapper/auto-layout.js.map +1 -0
- package/dist/modules/apimapper/cache.js +25 -17
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +115 -4
- package/dist/modules/apimapper/client.js +699 -304
- package/dist/modules/apimapper/client.js.map +1 -1
- package/dist/modules/apimapper/connections-format.d.ts +31 -1
- package/dist/modules/apimapper/connections-format.js +97 -5
- package/dist/modules/apimapper/connections-format.js.map +1 -1
- package/dist/modules/apimapper/connections.d.ts +9 -7
- package/dist/modules/apimapper/connections.js +449 -127
- package/dist/modules/apimapper/connections.js.map +1 -1
- package/dist/modules/apimapper/credential-sanitizer.d.ts +5 -0
- package/dist/modules/apimapper/credential-sanitizer.js +60 -1
- package/dist/modules/apimapper/credential-sanitizer.js.map +1 -1
- package/dist/modules/apimapper/credentials.js +105 -61
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.js +21 -2
- package/dist/modules/apimapper/diagnose.js.map +1 -1
- package/dist/modules/apimapper/elicitation.d.ts +29 -0
- package/dist/modules/apimapper/elicitation.js +62 -0
- package/dist/modules/apimapper/elicitation.js.map +1 -1
- package/dist/modules/apimapper/example-extract.d.ts +13 -0
- package/dist/modules/apimapper/example-extract.js +111 -0
- package/dist/modules/apimapper/example-extract.js.map +1 -0
- package/dist/modules/apimapper/filter-operators.d.ts +24 -0
- package/dist/modules/apimapper/filter-operators.js +103 -0
- package/dist/modules/apimapper/filter-operators.js.map +1 -0
- package/dist/modules/apimapper/flows-format.js +92 -22
- package/dist/modules/apimapper/flows-format.js.map +1 -1
- package/dist/modules/apimapper/flows.d.ts +8 -7
- package/dist/modules/apimapper/flows.js +275 -120
- package/dist/modules/apimapper/flows.js.map +1 -1
- package/dist/modules/apimapper/gateway/advanced-read-tool.d.ts +9 -0
- package/dist/modules/apimapper/gateway/advanced-read-tool.js +172 -0
- package/dist/modules/apimapper/gateway/advanced-read-tool.js.map +1 -0
- package/dist/modules/apimapper/gateway/advanced-tool.js +66 -106
- package/dist/modules/apimapper/gateway/advanced-tool.js.map +1 -1
- package/dist/modules/apimapper/gateway/collect-module-tools.d.ts +17 -0
- package/dist/modules/apimapper/gateway/collect-module-tools.js +44 -0
- package/dist/modules/apimapper/gateway/collect-module-tools.js.map +1 -0
- package/dist/modules/apimapper/gateway/essentials.d.ts +1 -1
- package/dist/modules/apimapper/gateway/essentials.js +21 -2
- package/dist/modules/apimapper/gateway/essentials.js.map +1 -1
- package/dist/modules/apimapper/gateway/gateway-shared.d.ts +21 -0
- package/dist/modules/apimapper/gateway/gateway-shared.js +124 -0
- package/dist/modules/apimapper/gateway/gateway-shared.js.map +1 -0
- package/dist/modules/apimapper/gateway/test-support.d.ts +1 -17
- package/dist/modules/apimapper/gateway/test-support.js +4 -33
- package/dist/modules/apimapper/gateway/test-support.js.map +1 -1
- package/dist/modules/apimapper/get-skill-cores.d.ts +4 -0
- package/dist/modules/apimapper/get-skill-cores.js +220 -0
- package/dist/modules/apimapper/get-skill-cores.js.map +1 -0
- package/dist/modules/apimapper/get-skill.d.ts +1 -1
- package/dist/modules/apimapper/get-skill.js +74 -9
- package/dist/modules/apimapper/get-skill.js.map +1 -1
- package/dist/modules/apimapper/graph-builder.d.ts +85 -2
- package/dist/modules/apimapper/graph-builder.js +151 -15
- package/dist/modules/apimapper/graph-builder.js.map +1 -1
- package/dist/modules/apimapper/graph.js +152 -48
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.js +27 -13
- package/dist/modules/apimapper/index.js.map +1 -1
- package/dist/modules/apimapper/jmespath-test.d.ts +4 -0
- package/dist/modules/apimapper/jmespath-test.js +152 -0
- package/dist/modules/apimapper/jmespath-test.js.map +1 -0
- package/dist/modules/apimapper/library.js +553 -88
- package/dist/modules/apimapper/library.js.map +1 -1
- package/dist/modules/apimapper/license.js +12 -36
- package/dist/modules/apimapper/license.js.map +1 -1
- package/dist/modules/apimapper/list-footer.d.ts +27 -0
- package/dist/modules/apimapper/list-footer.js +57 -0
- package/dist/modules/apimapper/list-footer.js.map +1 -0
- package/dist/modules/apimapper/local-sources.js +100 -57
- package/dist/modules/apimapper/local-sources.js.map +1 -1
- package/dist/modules/apimapper/mcp-client-identity.d.ts +32 -0
- package/dist/modules/apimapper/mcp-client-identity.js +70 -0
- package/dist/modules/apimapper/mcp-client-identity.js.map +1 -0
- package/dist/modules/apimapper/merge-constants.d.ts +6 -0
- package/dist/modules/apimapper/merge-constants.js +26 -0
- package/dist/modules/apimapper/merge-constants.js.map +1 -0
- package/dist/modules/apimapper/misc.js +13 -27
- package/dist/modules/apimapper/misc.js.map +1 -1
- package/dist/modules/apimapper/node-schema.d.ts +52 -2
- package/dist/modules/apimapper/node-schema.js +95 -4
- package/dist/modules/apimapper/node-schema.js.map +1 -1
- package/dist/modules/apimapper/onboarding.d.ts +59 -1
- package/dist/modules/apimapper/onboarding.js +231 -28
- package/dist/modules/apimapper/onboarding.js.map +1 -1
- package/dist/modules/apimapper/read-cache.d.ts +16 -3
- package/dist/modules/apimapper/read-cache.js +59 -4
- package/dist/modules/apimapper/read-cache.js.map +1 -1
- package/dist/modules/apimapper/render/index.js +26 -5
- package/dist/modules/apimapper/render/index.js.map +1 -1
- package/dist/modules/apimapper/resource-id.d.ts +13 -0
- package/dist/modules/apimapper/resource-id.js +69 -0
- package/dist/modules/apimapper/resource-id.js.map +1 -0
- package/dist/modules/apimapper/schema.js +9 -18
- package/dist/modules/apimapper/schema.js.map +1 -1
- package/dist/modules/apimapper/settings.js +49 -52
- package/dist/modules/apimapper/settings.js.map +1 -1
- package/dist/modules/apimapper/sites-tools.d.ts +29 -0
- package/dist/modules/apimapper/sites-tools.js +165 -0
- package/dist/modules/apimapper/sites-tools.js.map +1 -0
- package/dist/modules/apimapper/tool-result.d.ts +66 -0
- package/dist/modules/apimapper/tool-result.js +125 -0
- package/dist/modules/apimapper/tool-result.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +12 -11
- package/dist/modules/apimapper/toolslist-size.js +34 -21
- package/dist/modules/apimapper/toolslist-size.js.map +1 -1
- package/dist/modules/apimapper/types.d.ts +34 -0
- package/dist/modules/apimapper/types.js +1 -1
- package/dist/modules/apimapper/types.js.map +1 -1
- package/dist/modules/apimapper/whitelist-drift.d.ts +85 -0
- package/dist/modules/apimapper/whitelist-drift.js +375 -0
- package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
- package/dist/modules/apimapper/workflows.js +302 -58
- package/dist/modules/apimapper/workflows.js.map +1 -1
- package/dist/modules/apimapper/yootheme-binding.d.ts +35 -0
- package/dist/modules/apimapper/yootheme-binding.js +267 -0
- package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
- package/dist/platform/index.d.ts +56 -0
- package/dist/platform/index.js +158 -2
- package/dist/platform/index.js.map +1 -1
- package/dist/proxy/bridge.d.ts +35 -0
- package/dist/proxy/bridge.js +129 -0
- package/dist/proxy/bridge.js.map +1 -0
- package/dist/proxy/mode.d.ts +9 -0
- package/dist/proxy/mode.js +20 -0
- package/dist/proxy/mode.js.map +1 -0
- package/dist/setup/detect-clients.d.ts +40 -1
- package/dist/setup/detect-clients.js +148 -1
- package/dist/setup/detect-clients.js.map +1 -1
- package/dist/setup/probe-auth.d.ts +51 -0
- package/dist/setup/probe-auth.js +141 -0
- package/dist/setup/probe-auth.js.map +1 -0
- package/dist/setup/probe-handshake.js +40 -7
- package/dist/setup/probe-handshake.js.map +1 -1
- package/dist/setup/remove-config.d.ts +8 -0
- package/dist/setup/remove-config.js +145 -0
- package/dist/setup/remove-config.js.map +1 -0
- package/dist/setup/uninstall.d.ts +34 -0
- package/dist/setup/uninstall.js +147 -0
- package/dist/setup/uninstall.js.map +1 -0
- package/dist/setup-cli.d.ts +16 -0
- package/dist/setup-cli.js +63 -1
- package/dist/setup-cli.js.map +1 -1
- package/dist/sites/loader.d.ts +48 -0
- package/dist/sites/loader.js +134 -0
- package/dist/sites/loader.js.map +1 -0
- package/dist/sites/schema.d.ts +69 -0
- package/dist/sites/schema.js +71 -0
- package/dist/sites/schema.js.map +1 -0
- package/dist/sites/secret-resolver.d.ts +47 -0
- package/dist/sites/secret-resolver.js +150 -0
- package/dist/sites/secret-resolver.js.map +1 -0
- package/dist/skill-instructions.d.ts +14 -1
- package/dist/skill-instructions.js +35 -6
- package/dist/skill-instructions.js.map +1 -1
- package/dist/transports/stdio.js +4 -4
- package/dist/transports/stdio.js.map +1 -1
- package/dist/uninstall-skill.d.ts +27 -0
- package/dist/uninstall-skill.js +89 -0
- package/dist/uninstall-skill.js.map +1 -0
- package/docs/architecture.md +21 -21
- package/docs/customgraph-internal-migration.md +4 -4
- package/docs/security.md +2 -21
- package/docs/tools.md +40 -12
- package/manifest.json +77 -79
- package/package.json +69 -65
- package/skills/apimapper/SKILL.md +128 -7
- package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
- package/skills/apimapper/reference/dynamize-existing-layout.md +158 -0
- package/skills/apimapper/reference/jmespath-cookbook.md +241 -0
- package/skills/apimapper/reference/jmespath-pitfalls.md +189 -0
- package/skills/apimapper/reference/joomla.md +1 -1
- package/skills/apimapper/reference/library-template-discovery.md +65 -0
- package/skills/apimapper/reference/merge-two-sources-on-key.md +204 -0
- package/skills/apimapper/reference/oauth.md +143 -52
- package/skills/apimapper/reference/troubleshooting.md +22 -2
- package/skills/apimapper/reference/yootheme-source-to-builder-handoff.md +348 -0
- package/skills/apimapper/reference/yootheme.md +75 -44
- package/dist/auth/oauth-provider.d.ts +0 -68
- package/dist/auth/oauth-provider.js +0 -232
- package/dist/auth/oauth-provider.js.map +0 -1
- package/dist/server-http.d.ts +0 -22
- package/dist/server-http.js +0 -159
- package/dist/server-http.js.map +0 -1
- package/dist/transports/http.d.ts +0 -29
- package/dist/transports/http.js +0 -267
- package/dist/transports/http.js.map +0 -1
|
@@ -143,19 +143,74 @@ export function setCached(method, url, data, opts) {
|
|
|
143
143
|
storedAt: now,
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Cross-family invalidation map (A19, mcp-cold-readiness-audit 2026-06-10).
|
|
148
|
+
*
|
|
149
|
+
* Some mutations affect a DIFFERENT resource family than the path they POST
|
|
150
|
+
* to. The path-overlap matcher below only handles same-family + ancestor/
|
|
151
|
+
* descendant invalidation; it cannot know that completing an OAuth flow
|
|
152
|
+
* mutates credential STATUS. Each entry maps a mutation-path prefix to the
|
|
153
|
+
* extra read-family path(s) that must also be flushed.
|
|
154
|
+
*
|
|
155
|
+
* `/oauth` → `/credentials`: oauth_authorize_begin (and the consent callback)
|
|
156
|
+
* refresh a credential's token; without this, a cached GET /credentials keeps
|
|
157
|
+
* serving the pre-authorize "expired" status for the full TTL and the agent
|
|
158
|
+
* re-suggests a reconnect it already completed.
|
|
159
|
+
*/
|
|
160
|
+
const CROSS_FAMILY_INVALIDATION = [
|
|
161
|
+
{ when: "/oauth", also: ["/credentials"] },
|
|
162
|
+
];
|
|
146
163
|
/**
|
|
147
164
|
* Invalidate cache entries whose request path overlaps with the mutated
|
|
148
|
-
* resource. Conservative — clears every entry whose
|
|
149
|
-
*
|
|
150
|
-
* `/flows`, `/flows?status
|
|
165
|
+
* resource — in BOTH directions. Conservative — clears every entry whose
|
|
166
|
+
* cached path contains the mutation path (descendants + query variants,
|
|
167
|
+
* e.g. invalidateByPath('/flows') clears `/flows`, `/flows?status=…`,
|
|
168
|
+
* `/flows/abc123`) AND every entry whose cached path is an ancestor of
|
|
169
|
+
* the mutation path (e.g. POST `/flows/abc/detect-schema` flushes the
|
|
170
|
+
* cached GET `/flows/abc` and `/flows`).
|
|
171
|
+
*
|
|
172
|
+
* The ancestor direction is load-bearing: 2026-06-09 Round-2 live repro —
|
|
173
|
+
* a sub-resource mutation (`/flows/{id}/detect-schema`) persisted the
|
|
174
|
+
* output schema, but the cached parent GET `/flows/{id}` kept serving the
|
|
175
|
+
* pre-schema flow for the full TTL, so binding_for_flow reported
|
|
176
|
+
* fields:[] while the data was already saved.
|
|
177
|
+
*
|
|
178
|
+
* A19: in addition, a mutation may invalidate a DIFFERENT resource family
|
|
179
|
+
* (see CROSS_FAMILY_INVALIDATION) — e.g. an /oauth mutation flushes the
|
|
180
|
+
* cached /credentials list.
|
|
151
181
|
*
|
|
152
182
|
* Called automatically from client.ts on POST/PUT/PATCH/DELETE.
|
|
153
183
|
*/
|
|
154
184
|
export function invalidateByPath(path) {
|
|
155
185
|
const needle = path.split("?")[0]; // strip query, match path only
|
|
156
186
|
for (const key of store.keys()) {
|
|
157
|
-
if (key.includes(needle))
|
|
187
|
+
if (key.includes(needle)) {
|
|
158
188
|
store.delete(key);
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
// Ancestor match: the cached entry's path-part (key format
|
|
192
|
+
// `METHOD::S|R::url`) is a path-segment prefix of the mutation path.
|
|
193
|
+
const keyPath = (key.split("::")[2] ?? "").split("?")[0];
|
|
194
|
+
if (keyPath !== "" && needle.startsWith(keyPath + "/")) {
|
|
195
|
+
store.delete(key);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// A19 — cross-family: a mutation under a mapped prefix also flushes the
|
|
199
|
+
// related read-family path(s). Each `also` entry is delegated back through
|
|
200
|
+
// the same descendant/query-variant matcher so `/credentials?…` variants go
|
|
201
|
+
// too. Guarded against self-recursion (an `also` path never re-matches its
|
|
202
|
+
// own `when`).
|
|
203
|
+
for (const rule of CROSS_FAMILY_INVALIDATION) {
|
|
204
|
+
if (needle.includes(rule.when)) {
|
|
205
|
+
for (const alsoPath of rule.also) {
|
|
206
|
+
const alsoNeedle = alsoPath.split("?")[0];
|
|
207
|
+
for (const key of store.keys()) {
|
|
208
|
+
if (key.includes(alsoNeedle)) {
|
|
209
|
+
store.delete(key);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
159
214
|
}
|
|
160
215
|
}
|
|
161
216
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-cache.js","sourceRoot":"","sources":["../../../src/modules/apimapper/read-cache.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"read-cache.js","sourceRoot":"","sources":["../../../src/modules/apimapper/read-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,16 +8,16 @@ import { capRendered, hintFor, HARD_CAP, RESERVE } from "./token-cap.js";
|
|
|
8
8
|
// the same affordance when a renderer's Zod schema rejects the payload.
|
|
9
9
|
const RENDER_ERROR_HINTS = {
|
|
10
10
|
table: "type:'table' expects an array of objects — fetch with " +
|
|
11
|
-
|
|
11
|
+
'apimapper_connection_data or apimapper_advanced({ tool: "apimapper_graph_preview" }).',
|
|
12
12
|
"chart-bar": "type:'chart-bar' expects { labels: string[], values: number[] } of equal length.",
|
|
13
13
|
"chart-line": "type:'chart-line' expects { labels: string[], values: number[] } of equal length.",
|
|
14
14
|
"schema-diagram": "type:'schema-diagram' expects a schema profile with fields[] — " +
|
|
15
|
-
|
|
15
|
+
'fetch with apimapper_advanced({ tool: "apimapper_schema_profile" }).',
|
|
16
16
|
"flow-diagram": "type:'flow-diagram' expects a flow object with nodes[]+edges[] — " +
|
|
17
|
-
|
|
17
|
+
'fetch with apimapper_advanced({ tool: "apimapper_flow_get" }).',
|
|
18
18
|
"json-tree": "type:'json-tree' accepts any JSON value — pass the fetched payload directly.",
|
|
19
19
|
diff: "type:'diff' expects { old, new } — fetch both datasets first " +
|
|
20
|
-
|
|
20
|
+
'(e.g. two apimapper_advanced({ tool: "apimapper_schema_profile" }) calls).',
|
|
21
21
|
};
|
|
22
22
|
// MCP CallToolResult outer guard. DERIVED from token-cap.ts's HARD_CAP +
|
|
23
23
|
// RESERVE so the relationship is compiler-enforced — bumping HARD_CAP in
|
|
@@ -62,7 +62,28 @@ export function registerRenderTool(server) {
|
|
|
62
62
|
"Example:\n apimapper_render({ type: 'flow-diagram', data: flowObject })",
|
|
63
63
|
inputSchema: {
|
|
64
64
|
type: z.enum(RENDER_TYPES).describe("Visualization type"),
|
|
65
|
-
|
|
65
|
+
// MCP clients (and forwarding LLMs) frequently deliver `data` as a
|
|
66
|
+
// JSON *string* — the fetched payload gets serialised on the way in.
|
|
67
|
+
// Pre-parse a JSON string back into its value before the renderer's
|
|
68
|
+
// inner Zod schema runs, otherwise every renderer rejects the string
|
|
69
|
+
// ("table requires an array", etc.). A non-JSON string (e.g. a plain
|
|
70
|
+
// sentence) keeps its original value so it can still render as a
|
|
71
|
+
// primitive leaf. The inner schema stays z.unknown() — per-type
|
|
72
|
+
// validation lives in each renderer.
|
|
73
|
+
data: z
|
|
74
|
+
.preprocess((v) => {
|
|
75
|
+
if (typeof v !== "string")
|
|
76
|
+
return v;
|
|
77
|
+
const trimmed = v.trim();
|
|
78
|
+
try {
|
|
79
|
+
return JSON.parse(trimmed);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return v;
|
|
83
|
+
}
|
|
84
|
+
}, z.unknown())
|
|
85
|
+
.describe("Data to render. Shape depends on type — see description. " +
|
|
86
|
+
"A JSON-encoded string is auto-parsed; a plain string renders as-is."),
|
|
66
87
|
options: z.object({
|
|
67
88
|
title: z.string().max(200).optional()
|
|
68
89
|
.describe("Optional title shown above the visualization"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/apimapper/render/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzE,qEAAqE;AACrE,wEAAwE;AACxE,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,kBAAkB,GAA+B;IACrD,KAAK,EACH,wDAAwD;QACxD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/apimapper/render/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAmB,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzE,qEAAqE;AACrE,wEAAwE;AACxE,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,kBAAkB,GAA+B;IACrD,KAAK,EACH,wDAAwD;QACxD,uFAAuF;IACzF,WAAW,EACT,kFAAkF;IACpF,YAAY,EACV,mFAAmF;IACrF,gBAAgB,EACd,iEAAiE;QACjE,sEAAsE;IACxE,cAAc,EACZ,mEAAmE;QACnE,gEAAgE;IAClE,WAAW,EACT,8EAA8E;IAChF,IAAI,EACF,+DAA+D;QAC/D,4EAA4E;CAC/E,CAAC;AAEF,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,0EAA0E;AAC1E,0EAA0E;AAC1E,uEAAuE;AACvE,4DAA4D;AAC5D,MAAM,qBAAqB,GAAG,QAAQ,GAAG,OAAO,GAAG,GAAG,CAAC;AAEvD,MAAM,UAAU,kBAAkB,CAAC,MAAqB;IACtD,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,aAAa;QACpB,WAAW;QACT,iEAAiE;QACjE,kEAAkE;QAClE,mEAAmE;QACnE,gEAAgE;QAChE,mEAAmE;QACnE,gEAAgE;QAChE,mDAAmD;QACnD,iEAAiE;YACjE,kEAAkE;YAClE,mEAAmE;YACnE,2CAA2C;YAC3C,kEAAkE;YAClE,6DAA6D;YAC7D,gEAAgE;YAChE,kEAAkE;YAClE,iCAAiC;YACjC,uEAAuE;YACvE,mCAAmC;YACnC,+DAA+D;YAC/D,qEAAqE;YACrE,sCAAsC;YACtC,gFAAgF;YAChF,kEAAkE;YAClE,2EAA2E;YAC3E,iEAAiE;YACjE,oEAAoE;YACpE,4DAA4D;YAC5D,oEAAoE;YACpE,0EAA0E;QAC5E,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YACzD,mEAAmE;YACnE,qEAAqE;YACrE,oEAAoE;YACpE,qEAAqE;YACrE,qEAAqE;YACrE,iEAAiE;YACjE,gEAAgE;YAChE,qCAAqC;YACrC,IAAI,EAAE,CAAC;iBACJ,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE;gBAChB,IAAI,OAAO,CAAC,KAAK,QAAQ;oBAAE,OAAO,CAAC,CAAC;gBACpC,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;iBACd,QAAQ,CACP,2DAA2D;gBACzD,qEAAqE,CACxE;YACH,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;gBAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;qBAClC,QAAQ,CAAC,8CAA8C,CAAC;gBAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;qBAC9D,QAAQ,CAAC,gDAAgD,CAAC;gBAC7D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;qBAC5C,QAAQ,CAAC,kDAAkD,CAAC;gBAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;qBACxD,QAAQ,CAAC,qCAAqC,CAAC;gBAClD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;qBAC/C,QAAQ,CAAC,8DAA8D,CAAC;aAC5E,CAAC,CAAC,QAAQ,EAAE;SACd;QACD,WAAW,EAAE,QAAQ,CAAC;YACpB,KAAK,EAAE,aAAa;YACpB,SAAS,EAAE,KAAK;SACjB,CAAC;KACH,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QAChC,mEAAmE;QACnE,wEAAwE;QACxE,uEAAuE;QACvE,+DAA+D;QAC/D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,oEAAoE;YACpE,2DAA2D;YAC3D,iFAAiF;YACjF,MAAM,GAAG,GACP,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACvD,kEAAkE;YAClE,mEAAmE;YACnE,mEAAmE;YACnE,gCAAgC;YAChC,MAAM,OAAO,GACX,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACnD,mEAAmE;YACnE,gEAAgE;YAChE,kEAAkE;YAClE,YAAY;YACZ,OAAO,YAAY,CACjB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,EACxD,IAAI,CACL,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract a Google Spreadsheet ID from a pasted URL, or return the input
|
|
3
|
+
* unchanged when it is already a bare ID (or an unrecognised value the
|
|
4
|
+
* backend should validate).
|
|
5
|
+
*
|
|
6
|
+
* Handles:
|
|
7
|
+
* - bare ID: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms
|
|
8
|
+
* - standard URL: https://docs.google.com/spreadsheets/d/{ID}/edit
|
|
9
|
+
* - URL with #gid hash: .../spreadsheets/d/{ID}/edit#gid=0
|
|
10
|
+
* - /copy, /view, etc.: .../spreadsheets/d/{ID}/copy
|
|
11
|
+
*/
|
|
12
|
+
export declare function extractSpreadsheetId(input: string): string;
|
|
13
|
+
export declare function normalizeResourceIdFields<T extends Record<string, unknown> | undefined>(fields: T): T;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// src/modules/apimapper/resource-id.ts — server-bound resource-ID normalizers.
|
|
2
|
+
//
|
|
3
|
+
// A5 (2026-06-10): a cold-agent customer supplies ONLY a Google Drive / Sheets
|
|
4
|
+
// URL (the only thing they have), but the worker template placeholder
|
|
5
|
+
// {{spreadsheet_id}} needs the BARE id. The single URL→ID extractor used to
|
|
6
|
+
// live in the React admin-UI (extractResourceId.ts) and never reached the
|
|
7
|
+
// wire — so an MCP/REST caller pasting a URL produced a broken connection that
|
|
8
|
+
// returned 0 rows with no debuggable signal. We normalize on the MCP→REST
|
|
9
|
+
// boundary so the exact-as-given input works.
|
|
10
|
+
//
|
|
11
|
+
// Port of admin-ui/src/utils/extractResourceId.ts kept deliberately in
|
|
12
|
+
// lockstep — same patterns, same "return input unchanged when nothing
|
|
13
|
+
// matches" contract (the backend still validates).
|
|
14
|
+
/**
|
|
15
|
+
* Extract a Google Spreadsheet ID from a pasted URL, or return the input
|
|
16
|
+
* unchanged when it is already a bare ID (or an unrecognised value the
|
|
17
|
+
* backend should validate).
|
|
18
|
+
*
|
|
19
|
+
* Handles:
|
|
20
|
+
* - bare ID: 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms
|
|
21
|
+
* - standard URL: https://docs.google.com/spreadsheets/d/{ID}/edit
|
|
22
|
+
* - URL with #gid hash: .../spreadsheets/d/{ID}/edit#gid=0
|
|
23
|
+
* - /copy, /view, etc.: .../spreadsheets/d/{ID}/copy
|
|
24
|
+
*/
|
|
25
|
+
export function extractSpreadsheetId(input) {
|
|
26
|
+
const trimmed = input.trim();
|
|
27
|
+
// Already a bare ID (alphanumeric + dash + underscore, 20+ chars).
|
|
28
|
+
if (/^[a-zA-Z0-9_-]{20,}$/.test(trimmed)) {
|
|
29
|
+
return trimmed;
|
|
30
|
+
}
|
|
31
|
+
const urlMatch = trimmed.match(/\/spreadsheets\/d\/([a-zA-Z0-9_-]+)/);
|
|
32
|
+
if (urlMatch?.[1]) {
|
|
33
|
+
return urlMatch[1];
|
|
34
|
+
}
|
|
35
|
+
// Unrecognised — return as-is, let the backend validate.
|
|
36
|
+
return trimmed;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Normalize the well-known resource-ID fields inside a template-field /
|
|
40
|
+
* extra-field map IN PLACE-safe fashion (returns a new object). Currently
|
|
41
|
+
* handles `spreadsheet_id` (Google Sheets); the table is the single place to
|
|
42
|
+
* extend for future URL-shaped resource IDs (drive_file_id, doc_id, ...).
|
|
43
|
+
*
|
|
44
|
+
* Only string values are touched; non-string values pass through verbatim so
|
|
45
|
+
* the wider string|number|boolean schema on connection_data.template_fields
|
|
46
|
+
* is preserved. Returns the input reference unchanged when there is nothing
|
|
47
|
+
* to normalize, so a default call stays byte-identical on the wire.
|
|
48
|
+
*/
|
|
49
|
+
const RESOURCE_ID_NORMALIZERS = {
|
|
50
|
+
spreadsheet_id: extractSpreadsheetId,
|
|
51
|
+
};
|
|
52
|
+
export function normalizeResourceIdFields(fields) {
|
|
53
|
+
if (!fields || typeof fields !== "object")
|
|
54
|
+
return fields;
|
|
55
|
+
let changed = false;
|
|
56
|
+
const out = { ...fields };
|
|
57
|
+
for (const [key, normalize] of Object.entries(RESOURCE_ID_NORMALIZERS)) {
|
|
58
|
+
const value = out[key];
|
|
59
|
+
if (typeof value === "string") {
|
|
60
|
+
const next = normalize(value);
|
|
61
|
+
if (next !== value) {
|
|
62
|
+
out[key] = next;
|
|
63
|
+
changed = true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return (changed ? out : fields);
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=resource-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-id.js","sourceRoot":"","sources":["../../../src/modules/apimapper/resource-id.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,+EAA+E;AAC/E,sEAAsE;AACtE,4EAA4E;AAC5E,0EAA0E;AAC1E,+EAA+E;AAC/E,0EAA0E;AAC1E,8CAA8C;AAC9C,EAAE;AACF,uEAAuE;AACvE,sEAAsE;AACtE,mDAAmD;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,mEAAmE;IACnE,IAAI,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACtE,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,yDAAyD;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,uBAAuB,GAA0C;IACrE,cAAc,EAAE,oBAAoB;CACrC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAEvC,MAAS;IACT,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IACzD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,GAAG,GAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAChB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAM,CAAC;AACvC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { formatResult, tableResult,
|
|
3
|
-
import { request
|
|
2
|
+
import { formatResult, tableResult, readOnly, } from "@getimo/mcp-toolkit";
|
|
3
|
+
import { request } from "./client.js";
|
|
4
|
+
import { restErrorResult } from "./tool-result.js";
|
|
4
5
|
// ── node_snapshot_list table shape ────────────────────────────────────
|
|
5
6
|
const NODE_SNAPSHOT_COLUMNS = [
|
|
6
7
|
{ key: "flow_id", label: "FLOW", width: 24 },
|
|
@@ -82,16 +83,11 @@ export function registerSchemaTools(server) {
|
|
|
82
83
|
body: JSON.stringify(body),
|
|
83
84
|
});
|
|
84
85
|
if (!r.success) {
|
|
85
|
-
return
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
target_node_id,
|
|
91
|
-
flow_id,
|
|
92
|
-
node_count: Array.isArray(nodes) ? nodes.length : 0,
|
|
93
|
-
},
|
|
94
|
-
});
|
|
86
|
+
return restErrorResult(r, {
|
|
87
|
+
target_node_id,
|
|
88
|
+
flow_id,
|
|
89
|
+
node_count: Array.isArray(nodes) ? nodes.length : 0,
|
|
90
|
+
}, { message: "schema profile failed" });
|
|
95
91
|
}
|
|
96
92
|
const merged = r.data?.merged ?? {};
|
|
97
93
|
const fields = Array.isArray(merged.fields) ? merged.fields : [];
|
|
@@ -134,12 +130,7 @@ export function registerSchemaTools(server) {
|
|
|
134
130
|
params.set("limit", String(limit));
|
|
135
131
|
const r = await request(`/node-snapshots?${params.toString()}`);
|
|
136
132
|
if (!r.success) {
|
|
137
|
-
return
|
|
138
|
-
message: r.error ?? "node snapshot list failed",
|
|
139
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
140
|
-
suggestion: hintFor(r.errorCode),
|
|
141
|
-
details: { flow_id, limit },
|
|
142
|
-
});
|
|
133
|
+
return restErrorResult(r, { flow_id, limit }, { message: "node snapshot list failed" });
|
|
143
134
|
}
|
|
144
135
|
const items = Array.isArray(r.data?.snapshots) ? r.data.snapshots : [];
|
|
145
136
|
const serverTruncated = Boolean(r.data?.truncated);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/modules/apimapper/schema.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/modules/apimapper/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { formatResult, tableResult,
|
|
3
|
-
import { request
|
|
2
|
+
import { formatResult, tableResult, readOnly, mutating, destructive, } from "@getimo/mcp-toolkit";
|
|
3
|
+
import { request } from "./client.js";
|
|
4
|
+
import { restErrorResult } from "./tool-result.js";
|
|
4
5
|
import { toRows } from "./types.js";
|
|
5
6
|
import { HEALTH_WARNINGS_COLUMNS, HEALTH_WARNINGS_NEXT_STEPS, mapHealthWarningRow, buildSettingsDetail, buildFeaturesDetail, } from "./settings-format.js";
|
|
6
7
|
// SettingsHandler::sanitizeSettingsData (core/src/Admin/Handler/SettingsHandler.php)
|
|
@@ -23,13 +24,38 @@ const SETTABLE_KEYS = [
|
|
|
23
24
|
// existing wire fixtures use values like "warning"/"warn" interchangeably.
|
|
24
25
|
const settingsPatchSchema = z
|
|
25
26
|
.object({
|
|
26
|
-
cache_ttl: z
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
cache_ttl: z
|
|
28
|
+
.number()
|
|
29
|
+
.int()
|
|
30
|
+
.min(0)
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Default cache lifetime for connection responses, in seconds (e.g. 3600). 0 disables caching."),
|
|
33
|
+
debug_mode: z
|
|
34
|
+
.boolean()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("Admin-UI debug mode: surfaces verbose diagnostics in the API Mapper admin screens."),
|
|
37
|
+
log_level: z
|
|
38
|
+
.string()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe('Server log verbosity (e.g. "warning", "info", "debug"). Free-form string — PHP accepts any value.'),
|
|
41
|
+
api_timeout: z
|
|
42
|
+
.number()
|
|
43
|
+
.int()
|
|
44
|
+
.min(1)
|
|
45
|
+
.optional()
|
|
46
|
+
.describe("Upstream HTTP request timeout in seconds (e.g. 30). Server clamps to 1..120."),
|
|
47
|
+
server_debug_mode: z
|
|
48
|
+
.boolean()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Server-side debug logging: writes detailed request/response traces to the PHP error log."),
|
|
51
|
+
delete_data_on_uninstall: z
|
|
52
|
+
.boolean()
|
|
53
|
+
.optional()
|
|
54
|
+
.describe("When true, removing the plugin also deletes all API Mapper data (connections, flows, credentials)."),
|
|
55
|
+
error_reporting: z
|
|
56
|
+
.boolean()
|
|
57
|
+
.optional()
|
|
58
|
+
.describe("Opt-in anonymized error reporting (Sentry) for the plugin."),
|
|
33
59
|
})
|
|
34
60
|
.strict()
|
|
35
61
|
.describe("Settings patch (strict allow-list). Unknown keys rejected at schema level. " +
|
|
@@ -51,12 +77,7 @@ export function registerSettingsTools(server) {
|
|
|
51
77
|
}, async () => {
|
|
52
78
|
const r = await request("/settings");
|
|
53
79
|
if (!r.success) {
|
|
54
|
-
return
|
|
55
|
-
message: r.error ?? "settings get failed",
|
|
56
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
57
|
-
suggestion: hintFor(r.errorCode),
|
|
58
|
-
details: {},
|
|
59
|
-
});
|
|
80
|
+
return restErrorResult(r, {}, { message: "settings get failed" });
|
|
60
81
|
}
|
|
61
82
|
const settings = (r.data?.settings && typeof r.data.settings === "object")
|
|
62
83
|
? r.data.settings
|
|
@@ -87,12 +108,7 @@ export function registerSettingsTools(server) {
|
|
|
87
108
|
body: JSON.stringify(patch),
|
|
88
109
|
});
|
|
89
110
|
if (!r.success) {
|
|
90
|
-
return
|
|
91
|
-
message: r.error ?? "settings update failed",
|
|
92
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
93
|
-
suggestion: hintFor(r.errorCode),
|
|
94
|
-
details: { keys: requestedKeys },
|
|
95
|
-
});
|
|
111
|
+
return restErrorResult(r, { keys: requestedKeys }, { message: "settings update failed" });
|
|
96
112
|
}
|
|
97
113
|
// PHP returns the post-update sanitised settings dict; surface what was
|
|
98
114
|
// actually applied (not what was requested), so the caller can spot
|
|
@@ -139,12 +155,7 @@ export function registerSettingsTools(server) {
|
|
|
139
155
|
}
|
|
140
156
|
const r = await request("/settings/reset-demo", { method: "POST" });
|
|
141
157
|
if (!r.success) {
|
|
142
|
-
return
|
|
143
|
-
message: r.error ?? "demo reset failed",
|
|
144
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
145
|
-
suggestion: hintFor(r.errorCode),
|
|
146
|
-
details: {},
|
|
147
|
-
});
|
|
158
|
+
return restErrorResult(r, {}, { message: "demo reset failed" });
|
|
148
159
|
}
|
|
149
160
|
return formatResult({ reset: true, result: r.data?.result }, false, { maxChars: 2000 });
|
|
150
161
|
});
|
|
@@ -160,12 +171,7 @@ export function registerSettingsTools(server) {
|
|
|
160
171
|
}, async () => {
|
|
161
172
|
const r = await request("/features");
|
|
162
173
|
if (!r.success) {
|
|
163
|
-
return
|
|
164
|
-
message: r.error ?? "features get failed",
|
|
165
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
166
|
-
suggestion: hintFor(r.errorCode),
|
|
167
|
-
details: {},
|
|
168
|
-
});
|
|
174
|
+
return restErrorResult(r, {}, { message: "features get failed" });
|
|
169
175
|
}
|
|
170
176
|
const features = (r.data?.features && typeof r.data.features === "object")
|
|
171
177
|
? r.data.features
|
|
@@ -180,19 +186,20 @@ export function registerSettingsTools(server) {
|
|
|
180
186
|
// `wordpress`/`joomla` are nested inside `matrix`, not top-level.
|
|
181
187
|
server.registerTool("apimapper_platform_parity", {
|
|
182
188
|
title: "Get Platform Parity Status",
|
|
183
|
-
description: "Compare feature parity between WordPress and Joomla
|
|
189
|
+
description: "Compare feature parity between the WordPress and Joomla builds of API " +
|
|
190
|
+
"Mapper and report any gaps. Use before promising a feature works on the " +
|
|
191
|
+
"user's platform, or when a flow behaves differently on WP vs Joomla. " +
|
|
192
|
+
"Returns a matrix (per-feature WP/Joomla support), a summary, and a gaps list. " +
|
|
193
|
+
"Keywords: parity, WordPress vs Joomla, platform differences, feature gaps, cross-platform. " +
|
|
194
|
+
"When NOT to use: for connectivity/auth checks use apimapper_health; for the " +
|
|
195
|
+
"feature-flag matrix of the current license tier use apimapper_features_get." +
|
|
184
196
|
"\n\nExample:\n apimapper_platform_parity({})",
|
|
185
197
|
inputSchema: {},
|
|
186
198
|
annotations: readOnly({ title: "Check Platform Parity", openWorld: true }),
|
|
187
199
|
}, async () => {
|
|
188
200
|
const r = await request("/platform-parity");
|
|
189
201
|
if (!r.success) {
|
|
190
|
-
return
|
|
191
|
-
message: r.error ?? "platform parity failed",
|
|
192
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
193
|
-
suggestion: hintFor(r.errorCode),
|
|
194
|
-
details: {},
|
|
195
|
-
});
|
|
202
|
+
return restErrorResult(r, {}, { message: "platform parity failed" });
|
|
196
203
|
}
|
|
197
204
|
const gaps = Array.isArray(r.data?.gaps) ? r.data.gaps : [];
|
|
198
205
|
return formatResult({
|
|
@@ -214,12 +221,7 @@ export function registerSettingsTools(server) {
|
|
|
214
221
|
}, async () => {
|
|
215
222
|
const r = await request("/admin/health-warnings");
|
|
216
223
|
if (!r.success) {
|
|
217
|
-
return
|
|
218
|
-
message: r.error ?? "health warnings list failed",
|
|
219
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
220
|
-
suggestion: hintFor(r.errorCode),
|
|
221
|
-
details: {},
|
|
222
|
-
});
|
|
224
|
+
return restErrorResult(r, {}, { message: "health warnings list failed" });
|
|
223
225
|
}
|
|
224
226
|
const items = Array.isArray(r.data?.items) ? r.data.items : [];
|
|
225
227
|
const visible = Boolean(r.data?.visible);
|
|
@@ -247,12 +249,7 @@ export function registerSettingsTools(server) {
|
|
|
247
249
|
body: JSON.stringify({ id }),
|
|
248
250
|
});
|
|
249
251
|
if (!r.success) {
|
|
250
|
-
return
|
|
251
|
-
message: r.error ?? "warning dismiss failed",
|
|
252
|
-
code: r.errorCode ?? (r.status ? String(r.status) : undefined),
|
|
253
|
-
suggestion: hintFor(r.errorCode),
|
|
254
|
-
details: { id },
|
|
255
|
-
});
|
|
252
|
+
return restErrorResult(r, { id }, { message: "warning dismiss failed" });
|
|
256
253
|
}
|
|
257
254
|
return formatResult({ dismissed: true, id }, false, { maxChars: 1500 });
|
|
258
255
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/modules/apimapper/settings.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../src/modules/apimapper/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { SitesRegistry } from "../../sites/loader.js";
|
|
3
|
+
import type { SiteEntryT } from "../../sites/schema.js";
|
|
4
|
+
interface ToolRegistrar {
|
|
5
|
+
registerTool(name: string, config: unknown, handler: unknown): void;
|
|
6
|
+
}
|
|
7
|
+
export interface SitesIdentityProbeResult {
|
|
8
|
+
plugin_version: string;
|
|
9
|
+
plugin_hash: string;
|
|
10
|
+
capabilities: string[];
|
|
11
|
+
site_url: string;
|
|
12
|
+
}
|
|
13
|
+
/** Identity probe for the active site. Injected so tests can stub the network. */
|
|
14
|
+
export type SitesProbeIdentityFn = (entry: SiteEntryT) => Promise<SitesIdentityProbeResult>;
|
|
15
|
+
export interface SitesListProfilesDeps {
|
|
16
|
+
getRegistry: () => SitesRegistry;
|
|
17
|
+
/** The active site_id pointer, or null when none set (default entry active). */
|
|
18
|
+
getActiveSiteId: () => string | null;
|
|
19
|
+
}
|
|
20
|
+
export declare function registerSitesListProfilesTool(server: ToolRegistrar | McpServer, deps: SitesListProfilesDeps): void;
|
|
21
|
+
export interface SitesUseProfileDeps {
|
|
22
|
+
getRegistry: () => SitesRegistry;
|
|
23
|
+
/** Flip the client's active-site pointer (resets resolution → retargets). */
|
|
24
|
+
setActiveSite: (id: string) => void;
|
|
25
|
+
/** Identity probe. Defaults to a real /identity call on the active site. */
|
|
26
|
+
probeIdentity?: SitesProbeIdentityFn;
|
|
27
|
+
}
|
|
28
|
+
export declare function registerSitesUseProfileTool(server: ToolRegistrar | McpServer, deps: SitesUseProfileDeps): void;
|
|
29
|
+
export {};
|