@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.
- package/CHANGELOG.md +148 -83
- package/README.md +36 -32
- 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/cli-hint.d.ts +22 -0
- package/dist/cli-hint.js +55 -0
- package/dist/cli-hint.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +163 -22
- package/dist/index.js.map +1 -1
- package/dist/install-skill.js +1 -1
- package/dist/modules/apimapper/cache.d.ts +2 -2
- package/dist/modules/apimapper/cache.js +119 -29
- package/dist/modules/apimapper/cache.js.map +1 -1
- package/dist/modules/apimapper/client.d.ts +102 -1
- package/dist/modules/apimapper/client.js +631 -297
- 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 +612 -153
- 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-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 +226 -73
- package/dist/modules/apimapper/credentials.js.map +1 -1
- package/dist/modules/apimapper/diagnose.d.ts +54 -2
- package/dist/modules/apimapper/diagnose.js +213 -12
- 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 +312 -122
- 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 +265 -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 +35 -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 +47 -7
- 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 +170 -35
- package/dist/modules/apimapper/graph.js.map +1 -1
- package/dist/modules/apimapper/index.d.ts +17 -1
- package/dist/modules/apimapper/index.js +68 -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 +665 -80
- 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 +62 -38
- 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 +44 -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 +114 -49
- 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 +78 -3
- package/dist/modules/apimapper/onboarding.js +428 -26
- 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 +92 -33
- 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 +100 -42
- 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/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/tool-result.d.ts +46 -0
- package/dist/modules/apimapper/tool-result.js +63 -0
- package/dist/modules/apimapper/tool-result.js.map +1 -0
- package/dist/modules/apimapper/toolslist-size.d.ts +56 -0
- package/dist/modules/apimapper/toolslist-size.js +192 -0
- package/dist/modules/apimapper/toolslist-size.js.map +1 -0
- package/dist/modules/apimapper/types.d.ts +44 -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/whitelist-drift.d.ts +85 -0
- package/dist/modules/apimapper/whitelist-drift.js +360 -0
- package/dist/modules/apimapper/whitelist-drift.js.map +1 -0
- package/dist/modules/apimapper/workflows.d.ts +2 -2
- package/dist/modules/apimapper/workflows.js +202 -20
- 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 +186 -0
- package/dist/modules/apimapper/yootheme-binding.js.map +1 -0
- package/dist/platform/index.d.ts +56 -0
- package/dist/platform/index.js +195 -7
- package/dist/platform/index.js.map +1 -1
- 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-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 +60 -0
- package/dist/setup-cli.js +155 -5
- package/dist/setup-cli.js.map +1 -1
- package/dist/sites/loader.d.ts +41 -0
- package/dist/sites/loader.js +119 -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 +1 -1
- package/dist/skill-instructions.js +5 -0
- 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 +22 -22
- package/docs/customgraph-internal-migration.md +4 -4
- package/docs/security.md +2 -21
- package/docs/tools.md +40 -12
- package/manifest.json +77 -70
- package/package.json +68 -60
- package/skills/apimapper/SKILL.md +53 -7
- package/skills/apimapper/reference/conditional-style-multi-items.md +114 -0
- package/skills/apimapper/reference/jmespath-pitfalls.md +108 -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 +99 -0
- package/skills/apimapper/reference/render.md +132 -0
- package/skills/apimapper/reference/troubleshooting.md +21 -1
- package/skills/apimapper/reference/yootheme.md +1 -1
- 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
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// src/modules/apimapper/gateway/test-support.ts — W3.4 Gateway-Hub test helper
|
|
2
|
+
//
|
|
3
|
+
// After the W3.4 Gateway-Hub, advanced (non-essential) tools no longer live
|
|
4
|
+
// in McpServer._registeredTools — they are captured into the advanced
|
|
5
|
+
// registry behind `apimapper_advanced`. Tests that previously looked tools up
|
|
6
|
+
// from `_registeredTools` use `collectModuleTools` to get a unified view of
|
|
7
|
+
// every tool (essentials on the real server + advanced from the registry),
|
|
8
|
+
// keeping their lookup semantics identical to the pre-gateway behaviour.
|
|
9
|
+
//
|
|
10
|
+
// Test-only: not imported by any runtime path.
|
|
11
|
+
/**
|
|
12
|
+
* Returns every API Mapper tool — the essentials registered on the real
|
|
13
|
+
* McpServer plus the advanced tools captured in the gateway registry —
|
|
14
|
+
* keyed by tool name. `module.register(server)` must have run first.
|
|
15
|
+
*/
|
|
16
|
+
export function collectModuleTools(server, module) {
|
|
17
|
+
const result = {};
|
|
18
|
+
const realTools = server._registeredTools;
|
|
19
|
+
for (const [name, tool] of Object.entries(realTools)) {
|
|
20
|
+
result[name] = {
|
|
21
|
+
handler: tool.handler,
|
|
22
|
+
title: tool.title,
|
|
23
|
+
description: tool.description,
|
|
24
|
+
inputSchema: tool.inputSchema,
|
|
25
|
+
annotations: tool.annotations,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const advanced = module.getAdvancedRegistry();
|
|
29
|
+
if (advanced) {
|
|
30
|
+
for (const [name, entry] of advanced) {
|
|
31
|
+
const cfg = entry.config;
|
|
32
|
+
result[name] = {
|
|
33
|
+
handler: entry.handler,
|
|
34
|
+
title: cfg.title,
|
|
35
|
+
description: cfg.description,
|
|
36
|
+
inputSchema: cfg.inputSchema,
|
|
37
|
+
annotations: cfg.annotations,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return result;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=test-support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-support.js","sourceRoot":"","sources":["../../../../src/modules/apimapper/gateway/test-support.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,8EAA8E;AAC9E,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,EAAE;AACF,+CAA+C;AA0B/C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,MAA2B;IAE3B,MAAM,MAAM,GAAkC,EAAE,CAAC;IAEjD,MAAM,SAAS,GACb,MACD,CAAC,gBAAgB,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,KAAK,CAAC,MAKjB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG;gBACb,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,WAAW,EAAE,GAAG,CAAC,WAAW;aAC7B,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare const SKILL_TOPICS: readonly ["getting-started", "oauth", "yootheme", "joomla", "troubleshooting"];
|
|
1
|
+
import type { ToolRegistrar } from "./gateway/capturing-server.js";
|
|
2
|
+
export declare const SKILL_TOPICS: readonly ["getting-started", "oauth", "yootheme", "joomla", "troubleshooting", "render", "jmespath-pitfalls", "merge-two-sources-on-key", "conditional-style-multi-items", "library-template-discovery"];
|
|
3
3
|
export type SkillTopic = (typeof SKILL_TOPICS)[number];
|
|
4
|
-
export declare function registerGetSkillTool(server:
|
|
4
|
+
export declare function registerGetSkillTool(server: ToolRegistrar, rootDir?: string): void;
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
// src/modules/apimapper/get-skill.ts — Phase 7.4.
|
|
2
2
|
//
|
|
3
|
-
// apimapper_get_skill: returns the markdown content of one of the
|
|
4
|
-
// skill docs
|
|
5
|
-
//
|
|
3
|
+
// apimapper_get_skill: returns the markdown content of one of the bundled
|
|
4
|
+
// skill docs (the canonical set lives in SKILL_TOPICS below). Sibling to
|
|
5
|
+
// skill://apimapper/<topic> resources (Phase 7.3) for clients that prefer
|
|
6
|
+
// tool-call discovery over resource discovery.
|
|
7
|
+
//
|
|
8
|
+
// SINGLE SOURCE OF TRUTH: SKILL_TOPICS is the canonical topic list. The two
|
|
9
|
+
// other surfaces that advertise topics — SKILL_TOPIC_POINTER in
|
|
10
|
+
// ../../skill-instructions.ts (the server `instructions` field) and the
|
|
11
|
+
// apimapper_get_skill cross-reference in gateway/advanced-tool.ts — MUST stay
|
|
12
|
+
// identical to this list. topic-sync.test.ts pins all three against each other
|
|
13
|
+
// so they can never drift again (Wave-B audit C2, 2026-06-03).
|
|
6
14
|
import { z } from "zod";
|
|
7
|
-
import { readFileSync } from "node:fs";
|
|
15
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
8
16
|
import { fileURLToPath } from "node:url";
|
|
9
17
|
import { dirname, join, resolve } from "node:path";
|
|
10
18
|
import { readOnly } from "@getimo/mcp-toolkit";
|
|
@@ -14,6 +22,11 @@ export const SKILL_TOPICS = [
|
|
|
14
22
|
"yootheme",
|
|
15
23
|
"joomla",
|
|
16
24
|
"troubleshooting",
|
|
25
|
+
"render",
|
|
26
|
+
"jmespath-pitfalls",
|
|
27
|
+
"merge-two-sources-on-key",
|
|
28
|
+
"conditional-style-multi-items",
|
|
29
|
+
"library-template-discovery",
|
|
17
30
|
];
|
|
18
31
|
const TOPIC_TO_FILE = {
|
|
19
32
|
"getting-started": "SKILL.md",
|
|
@@ -21,11 +34,38 @@ const TOPIC_TO_FILE = {
|
|
|
21
34
|
yootheme: "reference/yootheme.md",
|
|
22
35
|
joomla: "reference/joomla.md",
|
|
23
36
|
troubleshooting: "reference/troubleshooting.md",
|
|
37
|
+
render: "reference/render.md",
|
|
38
|
+
"jmespath-pitfalls": "reference/jmespath-pitfalls.md",
|
|
39
|
+
"merge-two-sources-on-key": "reference/merge-two-sources-on-key.md",
|
|
40
|
+
"conditional-style-multi-items": "reference/conditional-style-multi-items.md",
|
|
41
|
+
"library-template-discovery": "reference/library-template-discovery.md",
|
|
24
42
|
};
|
|
25
43
|
function defaultSkillsRoot() {
|
|
26
|
-
//
|
|
44
|
+
// Resolve the dir that CONTAINS `skills/apimapper/`. The module layout differs
|
|
45
|
+
// between build targets:
|
|
46
|
+
// - source/npm: this file is at <root>/src|dist/modules/apimapper/get-skill →
|
|
47
|
+
// the root is THREE levels up.
|
|
48
|
+
// - Claude Desktop .dxt: esbuild bundles everything into dist/index.js, so at
|
|
49
|
+
// runtime `here` = <extracted>/dist and the root holding skills/ is just ONE
|
|
50
|
+
// level up. The old hard-coded 3-up overshot past the extracted dir (it
|
|
51
|
+
// landed in ~/Library/Application Support/Claude/) → every apimapper_get_skill
|
|
52
|
+
// call returned ENOENT even though skills/ WAS bundled. (Bug found in the
|
|
53
|
+
// 2026-06-04 Claude Desktop session.)
|
|
54
|
+
// Probe candidate roots and return the first that actually holds the bundled
|
|
55
|
+
// skills; fall back to the npm 3-up layout to preserve prior behaviour.
|
|
27
56
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
28
|
-
|
|
57
|
+
const candidates = [
|
|
58
|
+
resolve(here, "..", "..", ".."), // source / npm: …/dist/modules/apimapper → root
|
|
59
|
+
resolve(here, ".."), // .dxt bundle: …/dist → extracted root
|
|
60
|
+
resolve(here, "..", ".."), // safety net
|
|
61
|
+
here,
|
|
62
|
+
];
|
|
63
|
+
for (const candidate of candidates) {
|
|
64
|
+
if (existsSync(join(candidate, "skills", "apimapper", "SKILL.md"))) {
|
|
65
|
+
return candidate;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return candidates[0];
|
|
29
69
|
}
|
|
30
70
|
export function registerGetSkillTool(server, rootDir) {
|
|
31
71
|
const baseDir = rootDir ?? defaultSkillsRoot();
|
|
@@ -39,7 +79,7 @@ export function registerGetSkillTool(server, rootDir) {
|
|
|
39
79
|
.enum(SKILL_TOPICS)
|
|
40
80
|
.describe(`Which doc to fetch — one of: ${SKILL_TOPICS.join(", ")}`),
|
|
41
81
|
},
|
|
42
|
-
annotations: readOnly(),
|
|
82
|
+
annotations: readOnly({ title: "Get Skill Resource", openWorld: false }),
|
|
43
83
|
}, async ({ topic }) => {
|
|
44
84
|
// Defensive runtime check — zod already validates at the MCP layer, but
|
|
45
85
|
// a direct unit-test invocation can bypass validation, and we want to
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/modules/apimapper/get-skill.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,EAAE;AACF,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/modules/apimapper/get-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph-builder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph-builder.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,0CAA0C;AAG1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAwC1D;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAEpD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,SAAS,GAAG,GAAG,CAAC;IAEtB,iBAAiB;IACjB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACvB,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;YACrB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,SAAS,EAAE;YAC9C,IAAI,EAAE;gBACJ,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;gBACnC,YAAY,EAAE,CAAC,CAAC,UAAU;gBAC1B,UAAU,EAAE,CAAC,CAAC,QAAQ;gBACtB,cAAc,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;gBACvC,SAAS,EAAE,CAAC,CAAC,UAAU;aACxB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,+BAA+B;IAC/B,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,SAAS,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE;gBACR,CAAC,EAAE,KAAK,GAAG,QAAQ;gBACnB,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,EAAE;aAC1D;YACD,IAAI,EAAE;gBACJ,KAAK,EAAE,UAAU,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE;gBAC5D,QAAQ;gBACR,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;gBAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;SACF,CAAC,CAAC;QACH,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC;gBACT,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ;gBAC5B,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;gBACzB,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,SAAS,CAAC,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,UAAU,GAAG,OAAO,CAAC;IACvB,CAAC;IAED,mBAAmB;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,aAAa,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE;YAC7C,IAAI,EAAE;gBACJ,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,KAAK;aAC1C;SACF,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC;YACT,EAAE,EAAE,KAAK,UAAU,YAAY;YAC/B,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QACH,UAAU,GAAG,WAAW,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,UAAU,CAAC;IAC5B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;IACxF,KAAK,CAAC,IAAI,CAAC;QACT,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE;QAC7C,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB;KACF,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC;QACT,EAAE,EAAE,KAAK,UAAU,SAAS;QAC5B,MAAM,EAAE,UAAU;QAClB,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function registerGraphTools(server:
|
|
1
|
+
import type { ToolRegistrar } from "./gateway/capturing-server.js";
|
|
2
|
+
export declare function registerGraphTools(server: ToolRegistrar): void;
|
|
@@ -1,24 +1,81 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { formatResult, readOnly } from "@getimo/mcp-toolkit";
|
|
2
|
+
import { formatResult, errorResult, readOnly } from "@getimo/mcp-toolkit";
|
|
3
3
|
import { request, hintFor } from "./client.js";
|
|
4
|
-
import {
|
|
4
|
+
import { restErrorResult } from "./tool-result.js";
|
|
5
|
+
import { nodeSchema, edgeSchema } from "./node-schema.js";
|
|
6
|
+
import { buildFlowVisualization, SIDECAR_RESPONSE_MAX_CHARS, } from "./render/sidecar.js";
|
|
7
|
+
/**
|
|
8
|
+
* L-7 (W3F-5): hydrate `{nodes, edges}` from a saved flow when the
|
|
9
|
+
* caller passed `flow_id` instead of inline arrays. Returns the
|
|
10
|
+
* hydrated tuple on success, or a `{error, status, errorCode}` shape
|
|
11
|
+
* to surface upstream. Conservative: any failure aborts hydration so
|
|
12
|
+
* the caller can decide whether to surface the error or fall back to
|
|
13
|
+
* the inline-required path.
|
|
14
|
+
*/
|
|
15
|
+
async function hydrateGraphFromFlowId(flowId) {
|
|
16
|
+
const r = await request(`/flows/${encodeURIComponent(flowId)}`);
|
|
17
|
+
if (!r.success) {
|
|
18
|
+
return {
|
|
19
|
+
error: r.error ?? `flow ${flowId} not found`,
|
|
20
|
+
status: r.status,
|
|
21
|
+
errorCode: r.errorCode,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const flow = r.data?.flow;
|
|
25
|
+
const nodes = Array.isArray(flow?.nodes) ? flow.nodes : [];
|
|
26
|
+
const edges = Array.isArray(flow?.edges) ? flow.edges : [];
|
|
27
|
+
if (nodes.length === 0) {
|
|
28
|
+
return {
|
|
29
|
+
error: `flow ${flowId} has no nodes`,
|
|
30
|
+
errorCode: "empty_flow",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return { nodes, edges };
|
|
34
|
+
}
|
|
5
35
|
export function registerGraphTools(server) {
|
|
6
36
|
// ── apimapper_graph_preview ────────────────────────────────────────
|
|
7
37
|
server.registerTool("apimapper_graph_preview", {
|
|
8
38
|
title: "Graph Preview (Execute Pipeline)",
|
|
9
39
|
description: "Execute an ad-hoc graph (nodes + edges) and return rendered items at the target node. " +
|
|
10
|
-
"Used by the Admin-UI preview panel — does NOT require a saved Flow
|
|
11
|
-
"
|
|
40
|
+
"Used by the Admin-UI preview panel — does NOT require a saved Flow.\n\n" +
|
|
41
|
+
"**Idempotent + cached (60s):** identical {nodes, edges, targetNodeId} returns the cached " +
|
|
42
|
+
"result without re-executing the pipeline. Use `forceRefresh: true` only after a " +
|
|
43
|
+
"Connection/Credential mutation or when upstream API data is known to have changed. " +
|
|
44
|
+
"Do NOT call repeatedly to 're-render' or 'double-check' the same graph — the second " +
|
|
45
|
+
"call returns the same payload as the first." +
|
|
46
|
+
"\n\nExample:\n apimapper_graph_preview({ nodes: [{ id: 'src1', type: 'source' }], edges: [], target_node_id: 'src1' })" +
|
|
47
|
+
"\n apimapper_graph_preview({ id: 'flow_Z2fLg70M84' }) // `id` is an alias for `flow_id`",
|
|
12
48
|
inputSchema: {
|
|
49
|
+
// L-7 (W3F-5): `flow_id` shortcut hydrates {nodes, edges} from
|
|
50
|
+
// the saved flow server-side so the caller does not have to
|
|
51
|
+
// round-trip via apimapper_flow_get. When both `flow_id` and
|
|
52
|
+
// inline {nodes, edges} are passed, the inline arrays win.
|
|
53
|
+
flow_id: z
|
|
54
|
+
.string()
|
|
55
|
+
.optional()
|
|
56
|
+
.describe("Saved flow ID. When set, {nodes, edges} are loaded from the flow before preview. " +
|
|
57
|
+
"Inline {nodes, edges} (if also provided) override the loaded values. " +
|
|
58
|
+
"`id` is accepted as an alias (see below); `flow_id` wins when both are passed."),
|
|
59
|
+
// D (2026-06-04): `id` is an alias for `flow_id`. The AI repeatedly
|
|
60
|
+
// passed {id: "flow_…"} → "Invalid arguments". Mirror the dual-name
|
|
61
|
+
// ergonomics of apimapper_flow_full_recompile_publish. When both are
|
|
62
|
+
// present, explicit `flow_id` wins.
|
|
63
|
+
id: z
|
|
64
|
+
.string()
|
|
65
|
+
.optional()
|
|
66
|
+
.describe("Alias for `flow_id`. When `flow_id` is absent and `id` is present, `id` is used to " +
|
|
67
|
+
"hydrate {nodes, edges} from the saved flow. `flow_id` takes precedence when both are set."),
|
|
13
68
|
nodes: z
|
|
14
69
|
.array(nodeSchema)
|
|
15
|
-
.
|
|
70
|
+
.optional()
|
|
16
71
|
.describe('Node array. Each: {id, type, position:{x,y}, data:{...}}. ' +
|
|
17
72
|
'Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. ' +
|
|
18
|
-
'See apimapper_flow_create for full shape.'),
|
|
73
|
+
'Required when `flow_id` is not provided. See apimapper_flow_create for full shape.'),
|
|
19
74
|
edges: z
|
|
20
|
-
.array(
|
|
21
|
-
.
|
|
75
|
+
.array(edgeSchema)
|
|
76
|
+
.optional()
|
|
77
|
+
.describe('Edge array. Each: {id?, source, target, sourceHandle?, targetHandle?}. ' +
|
|
78
|
+
'Required when `flow_id` is not provided. See apimapper_flow_create.'),
|
|
22
79
|
targetNodeId: z
|
|
23
80
|
.string()
|
|
24
81
|
.optional()
|
|
@@ -28,22 +85,49 @@ export function registerGraphTools(server) {
|
|
|
28
85
|
.default(false)
|
|
29
86
|
.describe("Skip snapshot/cache; always live-fetch from upstream"),
|
|
30
87
|
},
|
|
31
|
-
annotations: readOnly(),
|
|
32
|
-
}, async ({ nodes, edges, targetNodeId, forceRefresh }) => {
|
|
88
|
+
annotations: readOnly({ title: "Preview Graph", openWorld: true }),
|
|
89
|
+
}, async ({ flow_id, id, nodes, edges, targetNodeId, forceRefresh }) => {
|
|
90
|
+
// D (2026-06-04): resolve the `id` alias — explicit `flow_id` (canonical)
|
|
91
|
+
// wins over `id` when both are present, mirroring
|
|
92
|
+
// apimapper_flow_full_recompile_publish.
|
|
93
|
+
const resolvedFlowId = flow_id ?? id;
|
|
94
|
+
// L-7 (W3F-5): hydrate from the flow id when inline arrays are absent.
|
|
95
|
+
let resolvedNodes = nodes;
|
|
96
|
+
let resolvedEdges = edges;
|
|
97
|
+
if (typeof resolvedFlowId === "string" &&
|
|
98
|
+
resolvedFlowId !== "" &&
|
|
99
|
+
(!Array.isArray(resolvedNodes) || resolvedNodes.length === 0)) {
|
|
100
|
+
const h = await hydrateGraphFromFlowId(resolvedFlowId);
|
|
101
|
+
if ("error" in h) {
|
|
102
|
+
// Per-site nuance: the hydration failure (h.error always present)
|
|
103
|
+
// pins a fixed `not_found` suggestion regardless of the underlying
|
|
104
|
+
// error code, since a missing/empty flow is the only failure mode here.
|
|
105
|
+
return restErrorResult(h, { flow_id: resolvedFlowId }, { suggestion: hintFor("not_found") });
|
|
106
|
+
}
|
|
107
|
+
resolvedNodes = h.nodes;
|
|
108
|
+
resolvedEdges = h.edges;
|
|
109
|
+
}
|
|
110
|
+
if (!Array.isArray(resolvedNodes) || resolvedNodes.length === 0) {
|
|
111
|
+
return errorResult({
|
|
112
|
+
message: "Pass either `flow_id` or a non-empty `nodes` array.",
|
|
113
|
+
code: "bad_request",
|
|
114
|
+
suggestion: "Use apimapper_flow_list to find a flow_id, or build the graph inline.",
|
|
115
|
+
details: {},
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (!Array.isArray(resolvedEdges)) {
|
|
119
|
+
resolvedEdges = [];
|
|
120
|
+
}
|
|
121
|
+
const localNodes = resolvedNodes;
|
|
122
|
+
const localEdges = resolvedEdges;
|
|
33
123
|
// PHP success body: {preview, outputCount, executedNodes, nodeOutputCounts,
|
|
34
124
|
// nodeOutputs}. There's no `trace` key. Audit: F-A2-11.
|
|
35
125
|
const r = await request("/graph/preview", {
|
|
36
126
|
method: "POST",
|
|
37
|
-
body: JSON.stringify({ nodes, edges, targetNodeId, forceRefresh }),
|
|
127
|
+
body: JSON.stringify({ nodes: localNodes, edges: localEdges, targetNodeId, forceRefresh }),
|
|
38
128
|
});
|
|
39
129
|
if (!r.success) {
|
|
40
|
-
return
|
|
41
|
-
error: r.error,
|
|
42
|
-
status: r.status,
|
|
43
|
-
errorCode: r.errorCode,
|
|
44
|
-
context: { node_count: nodes.length, edge_count: edges.length, targetNodeId, forceRefresh },
|
|
45
|
-
hint: hintFor(r.errorCode),
|
|
46
|
-
}, true);
|
|
130
|
+
return restErrorResult(r, { node_count: localNodes.length, edge_count: localEdges.length, targetNodeId, forceRefresh }, { message: "graph preview failed" });
|
|
47
131
|
}
|
|
48
132
|
const items = Array.isArray(r.data?.preview) ? r.data.preview : [];
|
|
49
133
|
const itemCount = items.length;
|
|
@@ -55,6 +139,9 @@ export function registerGraphTools(server) {
|
|
|
55
139
|
node_output_counts: r.data?.nodeOutputCounts,
|
|
56
140
|
target_node: targetNodeId || "(terminal)",
|
|
57
141
|
force_refresh: forceRefresh,
|
|
142
|
+
...(typeof resolvedFlowId === "string" && resolvedFlowId !== ""
|
|
143
|
+
? { flow_id: resolvedFlowId }
|
|
144
|
+
: {}),
|
|
58
145
|
items: items.slice(0, 50),
|
|
59
146
|
note: itemCount > 50 ? `Showing first 50 of ${itemCount} items.` : undefined,
|
|
60
147
|
}, false, { maxChars: 6000 });
|
|
@@ -66,47 +153,95 @@ export function registerGraphTools(server) {
|
|
|
66
153
|
"WITHOUT executing the pipeline. Fast — no upstream fetches." +
|
|
67
154
|
"\n\nExample:\n apimapper_graph_validate({ nodes: [{ id: 'src1', type: 'source' }, { id: 'out1', type: 'output' }], edges: [{ source: 'src1', target: 'out1' }] })",
|
|
68
155
|
inputSchema: {
|
|
156
|
+
// L-7 (W3F-5): symmetric with apimapper_graph_preview — pass
|
|
157
|
+
// `flow_id` to validate a saved flow without re-sending the
|
|
158
|
+
// inline graph.
|
|
159
|
+
flow_id: z
|
|
160
|
+
.string()
|
|
161
|
+
.optional()
|
|
162
|
+
.describe("Saved flow ID. When set, {nodes, edges} are loaded from the flow before validation."),
|
|
69
163
|
nodes: z
|
|
70
164
|
.array(nodeSchema)
|
|
71
|
-
.
|
|
165
|
+
.optional()
|
|
166
|
+
.describe("Node array. Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. Required when `flow_id` is not provided. See apimapper_flow_create."),
|
|
72
167
|
edges: z
|
|
73
|
-
.array(
|
|
74
|
-
.
|
|
168
|
+
.array(edgeSchema)
|
|
169
|
+
.optional()
|
|
170
|
+
.describe("Edge array — see apimapper_flow_create for shape. Required when `flow_id` is not provided."),
|
|
75
171
|
},
|
|
76
|
-
annotations: readOnly(),
|
|
77
|
-
}, async ({ nodes, edges }) => {
|
|
172
|
+
annotations: readOnly({ title: "Validate Graph", openWorld: true }),
|
|
173
|
+
}, async ({ flow_id, nodes, edges }) => {
|
|
174
|
+
// L-7 (W3F-5): hydrate from flow_id when inline arrays absent.
|
|
175
|
+
let resolvedNodes = nodes;
|
|
176
|
+
let resolvedEdges = edges;
|
|
177
|
+
if (typeof flow_id === "string" &&
|
|
178
|
+
flow_id !== "" &&
|
|
179
|
+
(!Array.isArray(resolvedNodes) || resolvedNodes.length === 0)) {
|
|
180
|
+
const h = await hydrateGraphFromFlowId(flow_id);
|
|
181
|
+
if ("error" in h) {
|
|
182
|
+
// Per-site nuance: the hydration failure (h.error always present)
|
|
183
|
+
// pins a fixed `not_found` suggestion regardless of the underlying
|
|
184
|
+
// error code, since a missing/empty flow is the only failure mode here.
|
|
185
|
+
return restErrorResult(h, { flow_id }, { suggestion: hintFor("not_found") });
|
|
186
|
+
}
|
|
187
|
+
resolvedNodes = h.nodes;
|
|
188
|
+
resolvedEdges = h.edges;
|
|
189
|
+
}
|
|
190
|
+
if (!Array.isArray(resolvedNodes)) {
|
|
191
|
+
return errorResult({
|
|
192
|
+
message: "Pass either `flow_id` or `nodes` (with `edges`).",
|
|
193
|
+
code: "bad_request",
|
|
194
|
+
suggestion: "Use apimapper_flow_list to find a flow_id, or build the graph inline.",
|
|
195
|
+
details: {},
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
if (!Array.isArray(resolvedEdges)) {
|
|
199
|
+
resolvedEdges = [];
|
|
200
|
+
}
|
|
201
|
+
const localNodes = resolvedNodes;
|
|
202
|
+
const localEdges = resolvedEdges;
|
|
78
203
|
// PHP success body: {valid:true, warnings:[], nodeCount, edgeCount}. On
|
|
79
204
|
// invalid the errors are squashed to a single string via
|
|
80
205
|
// HandlerResult::error() and surface as `r.error` here. Wave 1C may emit
|
|
81
206
|
// structured `errors[]`; surface them defensively. Audit: F-A2-12.
|
|
82
207
|
const r = await request("/graph/validate", {
|
|
83
208
|
method: "POST",
|
|
84
|
-
body: JSON.stringify({ nodes, edges }),
|
|
209
|
+
body: JSON.stringify({ nodes: localNodes, edges: localEdges }),
|
|
85
210
|
});
|
|
86
211
|
if (!r.success) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
hint: hintFor(r.errorCode),
|
|
96
|
-
}, true);
|
|
212
|
+
const structuredErrors = Array.isArray(r.errors)
|
|
213
|
+
? r.errors
|
|
214
|
+
: undefined;
|
|
215
|
+
return restErrorResult(r, {
|
|
216
|
+
node_count: localNodes.length,
|
|
217
|
+
edge_count: localEdges.length,
|
|
218
|
+
...(structuredErrors ? { errors: structuredErrors } : {}),
|
|
219
|
+
}, { message: "graph validate failed" });
|
|
97
220
|
}
|
|
98
221
|
const valid = r.data?.valid ?? true;
|
|
99
222
|
const warns = r.data?.warnings || [];
|
|
223
|
+
// Sidecar: graph_validate always has input.nodes + input.edges
|
|
224
|
+
// (Zod-validated), so the visualization always renders unless
|
|
225
|
+
// APIMAPPER_AUTO_VISUALIZE_FLOWS="false". Additive + defensive.
|
|
226
|
+
const viz = buildFlowVisualization({
|
|
227
|
+
nodes: localNodes,
|
|
228
|
+
edges: localEdges,
|
|
229
|
+
id: flow_id ?? "validated",
|
|
230
|
+
name: typeof flow_id === "string" && flow_id !== "" ? `Flow ${flow_id}` : "Validated Graph",
|
|
231
|
+
});
|
|
100
232
|
return formatResult({
|
|
101
233
|
valid,
|
|
102
234
|
node_count: r.data?.nodeCount,
|
|
103
235
|
edge_count: r.data?.edgeCount,
|
|
104
236
|
warning_count: Array.isArray(warns) ? warns.length : 0,
|
|
105
237
|
warnings: warns,
|
|
238
|
+
...(viz && { _visualization: viz }),
|
|
106
239
|
},
|
|
107
240
|
// Surface validation failure as isError=true so the agent halts
|
|
108
241
|
// instead of proceeding past a broken graph.
|
|
109
|
-
!valid,
|
|
242
|
+
!valid,
|
|
243
|
+
// Headroom for the sidecar — see SIDECAR_RESPONSE_MAX_CHARS.
|
|
244
|
+
{ maxChars: SIDECAR_RESPONSE_MAX_CHARS });
|
|
110
245
|
});
|
|
111
246
|
}
|
|
112
247
|
//# sourceMappingURL=graph.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,18 @@
|
|
|
1
1
|
import type { ModuleDefinition } from "@getimo/mcp-toolkit";
|
|
2
|
-
|
|
2
|
+
import { type AdvancedToolEntry } from "./gateway/capturing-server.js";
|
|
3
|
+
/**
|
|
4
|
+
* The API Mapper REST module, extended with the W3.4 Gateway-Hub.
|
|
5
|
+
*
|
|
6
|
+
* Cursor caps MCP servers at ~40 tools. The 12 `registerXTools` calls below
|
|
7
|
+
* are routed through a `CapturingServer`: essential tools (see
|
|
8
|
+
* gateway/essentials.ts) stay first-class on the real McpServer, every other
|
|
9
|
+
* tool is captured into an advanced registry and reached through the single
|
|
10
|
+
* `apimapper_advanced` gateway tool — keeping `tools/list` well under the cap.
|
|
11
|
+
*
|
|
12
|
+
* `getAdvancedRegistry()` exposes the registry captured by the most recent
|
|
13
|
+
* `register()` call (used by the gateway surface tests).
|
|
14
|
+
*/
|
|
15
|
+
export interface ApimapperRestModule extends ModuleDefinition {
|
|
16
|
+
getAdvancedRegistry(): Map<string, AdvancedToolEntry> | undefined;
|
|
17
|
+
}
|
|
18
|
+
export declare const apimapperRestModule: ApimapperRestModule;
|