@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
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface UninstallSkillOptions {
|
|
2
|
+
/** Skills dir holding the `apimapper/` folder. Default: ~/.claude/skills/ */
|
|
3
|
+
targetSkillsDir?: string;
|
|
4
|
+
/** AGENTS.md file the marker was appended to. Default: ~/AGENTS.md */
|
|
5
|
+
targetAgentsFile?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface UninstallSkillResult {
|
|
8
|
+
skillRemoved: boolean;
|
|
9
|
+
markerRemoved: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Strip the install-skill marker block from AGENTS.md content.
|
|
13
|
+
*
|
|
14
|
+
* install-skill appends a block of the shape:
|
|
15
|
+
*
|
|
16
|
+
* \n\n## API Mapper MCP\n\n<MARKER_LINE>\n<one descriptive line>\n
|
|
17
|
+
*
|
|
18
|
+
* We remove the `## API Mapper MCP` heading (and any leading blank lines
|
|
19
|
+
* before it) through the descriptive line that follows the marker. The match
|
|
20
|
+
* is anchored on MARKER_LINE so an edited heading still gets cleaned as long
|
|
21
|
+
* as the marker is intact. Returns the cleaned text, or `null` if no marker
|
|
22
|
+
* was present (caller treats that as "nothing removed").
|
|
23
|
+
*/
|
|
24
|
+
export declare function stripMarkerBlock(content: string): string | null;
|
|
25
|
+
export declare function uninstallSkill(options?: UninstallSkillOptions): Promise<UninstallSkillResult>;
|
|
26
|
+
/** True iff the skill dir is present (drives the default skill-removal prompt). */
|
|
27
|
+
export declare function isSkillInstalled(targetSkillsDir?: string): boolean;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// src/uninstall-skill.ts — reverse of install-skill.ts.
|
|
2
|
+
//
|
|
3
|
+
// uninstallSkill() removes the copied skills/apimapper/ directory and strips
|
|
4
|
+
// the marker block that install-skill appended to AGENTS.md. Idempotent: a
|
|
5
|
+
// missing skill dir or absent marker is a clean no-op. Preserves every other
|
|
6
|
+
// skill + all other AGENTS.md content.
|
|
7
|
+
import { existsSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { homedir } from "node:os";
|
|
10
|
+
import { MARKER_LINE } from "./install-skill.js";
|
|
11
|
+
/**
|
|
12
|
+
* Strip the install-skill marker block from AGENTS.md content.
|
|
13
|
+
*
|
|
14
|
+
* install-skill appends a block of the shape:
|
|
15
|
+
*
|
|
16
|
+
* \n\n## API Mapper MCP\n\n<MARKER_LINE>\n<one descriptive line>\n
|
|
17
|
+
*
|
|
18
|
+
* We remove the `## API Mapper MCP` heading (and any leading blank lines
|
|
19
|
+
* before it) through the descriptive line that follows the marker. The match
|
|
20
|
+
* is anchored on MARKER_LINE so an edited heading still gets cleaned as long
|
|
21
|
+
* as the marker is intact. Returns the cleaned text, or `null` if no marker
|
|
22
|
+
* was present (caller treats that as "nothing removed").
|
|
23
|
+
*/
|
|
24
|
+
export function stripMarkerBlock(content) {
|
|
25
|
+
if (!content.includes(MARKER_LINE))
|
|
26
|
+
return null;
|
|
27
|
+
const lines = content.split("\n");
|
|
28
|
+
const markerIdx = lines.findIndex((l) => l.trim() === MARKER_LINE.trim());
|
|
29
|
+
if (markerIdx === -1) {
|
|
30
|
+
// Marker present inline but not on its own line — fall back to a plain
|
|
31
|
+
// substring strip of the marker line itself.
|
|
32
|
+
return content.split(MARKER_LINE).join("");
|
|
33
|
+
}
|
|
34
|
+
// Walk backwards to include the `## API Mapper MCP` heading and the blank
|
|
35
|
+
// lines that separated it from the previous content.
|
|
36
|
+
let start = markerIdx;
|
|
37
|
+
// Skip a blank line directly above the marker (between heading and marker).
|
|
38
|
+
if (start > 0 && lines[start - 1].trim() === "")
|
|
39
|
+
start -= 1;
|
|
40
|
+
// Include the heading line if it is the install-skill heading.
|
|
41
|
+
if (start > 0 && lines[start - 1].trim() === "## API Mapper MCP")
|
|
42
|
+
start -= 1;
|
|
43
|
+
// Swallow leading blank separator lines above the heading.
|
|
44
|
+
while (start > 0 && lines[start - 1].trim() === "")
|
|
45
|
+
start -= 1;
|
|
46
|
+
// Walk forward to include the descriptive line(s) after the marker, up to
|
|
47
|
+
// the next blank line or EOF.
|
|
48
|
+
let end = markerIdx + 1;
|
|
49
|
+
while (end < lines.length && lines[end].trim() !== "")
|
|
50
|
+
end += 1;
|
|
51
|
+
const head = lines.slice(0, start);
|
|
52
|
+
const tail = lines.slice(end);
|
|
53
|
+
let next = [...head, ...tail].join("\n");
|
|
54
|
+
// Normalise: collapse a triple+ newline seam left by the excision and keep
|
|
55
|
+
// a single trailing newline if the original had one.
|
|
56
|
+
next = next.replace(/\n{3,}/g, "\n\n");
|
|
57
|
+
if (content.endsWith("\n") && next.length > 0 && !next.endsWith("\n")) {
|
|
58
|
+
next += "\n";
|
|
59
|
+
}
|
|
60
|
+
return next;
|
|
61
|
+
}
|
|
62
|
+
export async function uninstallSkill(options = {}) {
|
|
63
|
+
const targetSkillsDir = options.targetSkillsDir ?? join(homedir(), ".claude", "skills");
|
|
64
|
+
const targetAgentsFile = options.targetAgentsFile ?? join(homedir(), "AGENTS.md");
|
|
65
|
+
// 1. Remove the skill dir.
|
|
66
|
+
let skillRemoved = false;
|
|
67
|
+
const skillDir = join(targetSkillsDir, "apimapper");
|
|
68
|
+
if (existsSync(skillDir)) {
|
|
69
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
70
|
+
skillRemoved = true;
|
|
71
|
+
}
|
|
72
|
+
// 2. Strip the marker block from AGENTS.md (do NOT create it if absent).
|
|
73
|
+
let markerRemoved = false;
|
|
74
|
+
if (existsSync(targetAgentsFile)) {
|
|
75
|
+
const existing = readFileSync(targetAgentsFile, "utf8");
|
|
76
|
+
const stripped = stripMarkerBlock(existing);
|
|
77
|
+
if (stripped !== null) {
|
|
78
|
+
writeFileSync(targetAgentsFile, stripped, "utf8");
|
|
79
|
+
markerRemoved = true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return { skillRemoved, markerRemoved };
|
|
83
|
+
}
|
|
84
|
+
/** True iff the skill dir is present (drives the default skill-removal prompt). */
|
|
85
|
+
export function isSkillInstalled(targetSkillsDir) {
|
|
86
|
+
const dir = targetSkillsDir ?? join(homedir(), ".claude", "skills");
|
|
87
|
+
return existsSync(join(dir, "apimapper"));
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=uninstall-skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uninstall-skill.js","sourceRoot":"","sources":["../src/uninstall-skill.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,6EAA6E;AAC7E,2EAA2E;AAC3E,6EAA6E;AAC7E,uCAAuC;AAEvC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAcjD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,uEAAuE;QACvE,6CAA6C;QAC7C,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,0EAA0E;IAC1E,qDAAqD;IACrD,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,4EAA4E;IAC5E,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,KAAK,IAAI,CAAC,CAAC;IAC5D,+DAA+D;IAC/D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,mBAAmB;QAAE,KAAK,IAAI,CAAC,CAAC;IAC7E,2DAA2D;IAC3D,OAAO,KAAK,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,KAAK,IAAI,CAAC,CAAC;IAE/D,0EAA0E;IAC1E,8BAA8B;IAC9B,IAAI,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC;IACxB,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,GAAG,IAAI,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,2EAA2E;IAC3E,qDAAqD;IACrD,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtE,IAAI,IAAI,IAAI,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EAAE;IAEnC,MAAM,eAAe,GACnB,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClE,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;IAE3D,2BAA2B;IAC3B,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,yEAAyE;IACzE,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,aAAa,CAAC,gBAAgB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAClD,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACzC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,eAAwB;IACvD,MAAM,GAAG,GAAG,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
package/docs/architecture.md
CHANGED
|
@@ -11,17 +11,17 @@ internal plan-doc `~/Projekte/getimo/40-Plans/active/
|
|
|
11
11
|
┌──────────────────────────────────────────────────────────────┐
|
|
12
12
|
│ AI client │
|
|
13
13
|
│ (Claude Desktop · Claude Code · Cursor · VS Code · Cline · Codex CLI) │
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
└─────────────────────────────┬────────────────────────────────┘
|
|
15
|
+
│ stdio
|
|
16
|
+
│ (npx / DXT)
|
|
17
|
+
▼
|
|
18
18
|
┌──────────────────────────────────────────────────────────────┐
|
|
19
19
|
│ @wootsup/mcp (this package) │
|
|
20
20
|
│ │
|
|
21
21
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
|
|
22
22
|
│ │ Transport │→ │ Tool │→ │ Platform router │ │
|
|
23
|
-
│ │ stdio
|
|
24
|
-
│ │
|
|
23
|
+
│ │ stdio │ │ registry │ │ (WP / Joomla) │ │
|
|
24
|
+
│ │ │ │ (79 tools) │ │ │ │
|
|
25
25
|
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
|
|
26
26
|
│ │ ▲ │ │
|
|
27
27
|
│ │ │ │ │
|
|
@@ -54,11 +54,9 @@ internal plan-doc `~/Projekte/getimo/40-Plans/active/
|
|
|
54
54
|
## Five components
|
|
55
55
|
|
|
56
56
|
1. **Transport layer** (`src/transports/`)
|
|
57
|
-
- `stdio.ts` —
|
|
58
|
-
by the AI client.
|
|
59
|
-
|
|
60
|
-
OAuth 2.0 PKCE-required authorization server. Bearer tokens are
|
|
61
|
-
site-bound; cross-origin requests are rejected.
|
|
57
|
+
- `stdio.ts` — the only transport. Pipes JSON-RPC over stdin/stdout.
|
|
58
|
+
Spawned by the AI client (npx / DXT). The server opens no network
|
|
59
|
+
listener.
|
|
62
60
|
|
|
63
61
|
2. **Tool registry** (`src/modules/apimapper/`)
|
|
64
62
|
- 15 register-files (connections, credentials, flows, graph,
|
|
@@ -86,7 +84,7 @@ internal plan-doc `~/Projekte/getimo/40-Plans/active/
|
|
|
86
84
|
5. **Setup + skills** (`src/setup-cli.ts`, `skills/apimapper/`)
|
|
87
85
|
- `@clack/prompts` interactive wizard.
|
|
88
86
|
- Auto-detects AI clients, patches their MCP config idempotently.
|
|
89
|
-
- Ships the skill files (`SKILL.md` +
|
|
87
|
+
- Ships the skill files (`SKILL.md` + 9 reference docs) into
|
|
90
88
|
`~/.claude/skills/apimapper/`.
|
|
91
89
|
|
|
92
90
|
## Auth flow (token issuance)
|
|
@@ -105,17 +103,19 @@ internal plan-doc `~/Projekte/getimo/40-Plans/active/
|
|
|
105
103
|
At runtime, the server reads the token from the keychain on every
|
|
106
104
|
launch — tokens never live in the client config file.
|
|
107
105
|
|
|
108
|
-
##
|
|
106
|
+
## Transport rationale
|
|
109
107
|
|
|
110
|
-
|
|
111
|
-
|---|---|---|
|
|
112
|
-
| Where it runs | User's machine | User's machine or remote |
|
|
113
|
-
| Auth | Bearer from keychain | OAuth 2.0 PKCE bound to site |
|
|
114
|
-
| Use case | Local dev, single user | Remote AI agents (future) |
|
|
115
|
-
| Discovery | Static (one-tool-set) | Dynamic per session |
|
|
108
|
+
The MCP server ships **stdio-only**:
|
|
116
109
|
|
|
117
|
-
|
|
118
|
-
|
|
110
|
+
| | stdio |
|
|
111
|
+
|---|---|
|
|
112
|
+
| Where it runs | User's machine |
|
|
113
|
+
| Auth | Bearer (`amk_*`) from keychain / profile |
|
|
114
|
+
| Use case | Local dev, single user |
|
|
115
|
+
| Discovery | Static (one tool-set) |
|
|
116
|
+
|
|
117
|
+
The AI client spawns the server as a child process and speaks JSON-RPC
|
|
118
|
+
over stdin/stdout; there is no HTTP, SSE, or remote transport.
|
|
119
119
|
|
|
120
120
|
## Multi-platform rationale
|
|
121
121
|
|
|
@@ -99,10 +99,10 @@ then delete.
|
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
101
|
npm view @wootsup/mcp version
|
|
102
|
-
# Expect: 0.
|
|
102
|
+
# Expect: 0.2.0 (rc.X-wN.M tail retired — plain semver now)
|
|
103
103
|
|
|
104
104
|
npm view @wootsup/mcp dist-tags
|
|
105
|
-
# Expect:
|
|
105
|
+
# Expect: latest now carries 0.2.0 (rc dist-tag track retired)
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
3. **Run the setup wizard with the published package**
|
|
@@ -154,8 +154,8 @@ then delete.
|
|
|
154
154
|
status: ok
|
|
155
155
|
platform: wordpress (or joomla)
|
|
156
156
|
site_url: https://dev.wootsup.com/wordpress
|
|
157
|
-
plugin_version: 2.0.
|
|
158
|
-
tool_count:
|
|
157
|
+
plugin_version: 2.0.13
|
|
158
|
+
tool_count: 79
|
|
159
159
|
```
|
|
160
160
|
|
|
161
161
|
8. **Run the full smoke suite**
|
package/docs/security.md
CHANGED
|
@@ -16,12 +16,12 @@ reporting process and supported-version policy, see
|
|
|
16
16
|
| T6 | Confused-deputy LLM (read-only token gets `*_delete` tools listed) | High | Med | Scope filter excludes destructive tools from tool-list when the token lacks the scope. |
|
|
17
17
|
| T7 | Local-fs token theft (no keychain) | Med | Med | `0600` file mode; keychain default on macOS/Windows; SECURITY.md warns about multi-user environments. |
|
|
18
18
|
| T8 | DXT supply-chain (malicious .dxt) | Low | Critical | DXT bundle uploaded as a signed GitHub Release asset; `apimapper-mcp-publish.yml` workflow publishes with `--provenance`. |
|
|
19
|
-
| T9 |
|
|
19
|
+
| T9 | Network exposure of the MCP server | n/a | n/a | Not applicable — the server is stdio-only and opens no network listener. |
|
|
20
20
|
| T10 | TOCTOU on rotate (old token works after rotate UI shows success) | Low | Med | Rotation is atomic on the server; the response shows the new token only after the old one is invalidated. |
|
|
21
21
|
|
|
22
22
|
## Token rotation
|
|
23
23
|
|
|
24
|
-
- **From admin UI:** API Mapper →
|
|
24
|
+
- **From admin UI:** API Mapper → **⋮** menu → Settings → MCP Access → **Rotate**.
|
|
25
25
|
- **From CLI:** `apimapper_credential_*` tools do **not** rotate MCP keys
|
|
26
26
|
themselves — by design, key rotation is an admin-UI gesture (not a
|
|
27
27
|
tool the LLM can call) to prevent confused-deputy rotation. Rotation
|
|
@@ -68,25 +68,6 @@ signing key. The user-visible site title (rendered by the wizard from
|
|
|
68
68
|
the server's response, not the URL bar) gives one more verification
|
|
69
69
|
surface for the user.
|
|
70
70
|
|
|
71
|
-
## OAuth 2.0 PKCE (HTTP transport)
|
|
72
|
-
|
|
73
|
-
When `@wootsup/mcp` runs in HTTP mode:
|
|
74
|
-
|
|
75
|
-
- **Grants supported:** `authorization_code` with PKCE-S256 only.
|
|
76
|
-
- **Implicit grant:** disabled.
|
|
77
|
-
- **`code` grant without PKCE:** rejected with `invalid_request`.
|
|
78
|
-
- **Loopback callbacks only:** `redirect_uri` must be
|
|
79
|
-
`http://127.0.0.1:<port>/callback` or `http://localhost:<port>/callback`.
|
|
80
|
-
- **State param:** required and verified.
|
|
81
|
-
- **Origin header:** Bearer tokens are bound to the issuing site URL.
|
|
82
|
-
A request from a different `Origin` is rejected (`401`).
|
|
83
|
-
- **Token TTL:** 1 hour. Refresh tokens are not issued — the client
|
|
84
|
-
re-runs the auth flow.
|
|
85
|
-
|
|
86
|
-
See `src/server-http.ts` for the implementation and
|
|
87
|
-
`src/server-http.test.ts` (2 tests) + `src/transports/http.test.ts`
|
|
88
|
-
(10 tests) for the pinning.
|
|
89
|
-
|
|
90
71
|
## Keychain fallback security
|
|
91
72
|
|
|
92
73
|
When `@napi-rs/keyring` cannot reach an OS keychain:
|
package/docs/tools.md
CHANGED
|
@@ -1,24 +1,29 @@
|
|
|
1
1
|
# Tools reference
|
|
2
2
|
|
|
3
|
-
Auto-extracted from `src/modules/apimapper/*.ts` on **2026-
|
|
3
|
+
Auto-extracted from `src/modules/apimapper/*.ts` on **2026-06-03**.
|
|
4
4
|
|
|
5
5
|
To regenerate after adding tools, run:
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
8
|
cd packages/apimapper-mcp
|
|
9
|
-
|
|
9
|
+
npm run build # ensure dist/ is fresh
|
|
10
|
+
node scripts/extract-tool-descriptions.mjs # writes .grounding/tools-truth.json + a markdown table on stdout
|
|
10
11
|
```
|
|
11
12
|
|
|
12
|
-
…and
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
…and reconcile the sections below against the table. (The extractor
|
|
14
|
+
boots a real `McpServer` and reads each tool's evaluated description —
|
|
15
|
+
no source-text scraping. A fully auto-generated build-step is tracked
|
|
16
|
+
as a future improvement.)
|
|
15
17
|
|
|
16
18
|
## Summary
|
|
17
19
|
|
|
18
|
-
- **Total tools:**
|
|
20
|
+
- **Total tools:** 79 registered (+ a few system surfaces brought in
|
|
19
21
|
via `@getimo/mcp-toolkit`).
|
|
20
|
-
- **
|
|
21
|
-
|
|
22
|
+
- **Surface split:** 19 first-class in `tools/list` (15 module
|
|
23
|
+
essentials + the `apimapper_advanced` gateway + 3 top-level tools
|
|
24
|
+
registered in `index.ts`); the other 60 route through
|
|
25
|
+
`apimapper_advanced` so the listed surface stays under each client's
|
|
26
|
+
tool cap.
|
|
22
27
|
|
|
23
28
|
The annotation tells the AI client what kind of side-effect each tool
|
|
24
29
|
has. Destructive tools additionally require a `confirm: true`
|
|
@@ -30,7 +35,7 @@ vault) for the full convention.
|
|
|
30
35
|
|
|
31
36
|
| Module | Tools | Notes |
|
|
32
37
|
|---|---:|---|
|
|
33
|
-
| `connections.ts` |
|
|
38
|
+
| `connections.ts` | 12 | CRUD + probe + sample-data + resources + recover |
|
|
34
39
|
| `flows.ts` | 11 | CRUD + compile + import/export + trace |
|
|
35
40
|
| `library.ts` | 9 | Catalog + activate / deactivate templates |
|
|
36
41
|
| `credentials.ts` | 7 | CRUD + link + OAuth begin |
|
|
@@ -42,11 +47,14 @@ vault) for the full convention.
|
|
|
42
47
|
| `graph.ts` | 2 | Preview + validate |
|
|
43
48
|
| `cache.ts` | 2 | Stats + invalidate |
|
|
44
49
|
| `schema.ts` | 2 | Profile + snapshot list |
|
|
50
|
+
| `gateway/advanced-tool.ts` | 1 | `apimapper_advanced` gateway to the 60 advanced tools |
|
|
51
|
+
| `render/` | 1 | `apimapper_render` deterministic table/diagram/chart renderer |
|
|
52
|
+
| `yootheme-binding.ts` | 1 | `apimapper_yootheme_binding_for_flow` source-name bridge |
|
|
45
53
|
| `onboarding.ts` | 1 | Composite startup report |
|
|
46
54
|
| `diagnose.ts` | 1 | Composite token + identity probe |
|
|
47
55
|
| `inspect.ts` | 1 | Token decode (network-free) |
|
|
48
56
|
| `get-skill.ts` | 1 | Read bundled skill doc |
|
|
49
|
-
| `use-profile.ts` |
|
|
57
|
+
| `use-profile.ts` | 2 | Switch active profile + list profiles |
|
|
50
58
|
| `index.ts` | 1 | `apimapper_rest_modules_status` |
|
|
51
59
|
|
|
52
60
|
### Adapter Status (`index.ts`)
|
|
@@ -55,6 +63,24 @@ vault) for the full convention.
|
|
|
55
63
|
|------|------------|-------------|
|
|
56
64
|
| `apimapper_rest_modules_status` | `readOnly` | Module-loading status for this MCP adapter (which sub-modules registered cleanly). |
|
|
57
65
|
|
|
66
|
+
### Advanced Tool Gateway (`gateway/advanced-tool.ts`)
|
|
67
|
+
|
|
68
|
+
| Tool | Annotation | Description |
|
|
69
|
+
|------|------------|-------------|
|
|
70
|
+
| `apimapper_advanced` | `creating` | Gateway to the 60 advanced tools. Call `{ tool }` for a target's schema + annotations (discovery), or `{ tool, arguments }` to run it. The target tool's own confirmation guards stay in effect. |
|
|
71
|
+
|
|
72
|
+
### Render (`render/`)
|
|
73
|
+
|
|
74
|
+
| Tool | Annotation | Description |
|
|
75
|
+
|------|------------|-------------|
|
|
76
|
+
| `apimapper_render` | `readOnly` | Render structured data as deterministic, pre-formatted text (tables, charts, flow-diagrams). Use when the user asks to visualize / show as a diagram / draw / display as a table or chart. |
|
|
77
|
+
|
|
78
|
+
### YOOtheme Binding Bridge (`yootheme-binding.ts`)
|
|
79
|
+
|
|
80
|
+
| Tool | Annotation | Description |
|
|
81
|
+
|------|------------|-------------|
|
|
82
|
+
| `apimapper_yootheme_binding_for_flow` | `readOnly` | Given a published flow ID, return the exact YOOtheme GraphQL source names (singular + List) and the schema fields available for binding. Replaces a multi-call chain. |
|
|
83
|
+
|
|
58
84
|
### Health, Releases, Brandfetch & Feedback (`misc.ts`)
|
|
59
85
|
|
|
60
86
|
| Tool | Annotation | Description |
|
|
@@ -92,7 +118,8 @@ vault) for the full convention.
|
|
|
92
118
|
| `apimapper_connection_get` | `readOnly` | Fetch full configuration of a single connection by ID. |
|
|
93
119
|
| `apimapper_connection_health_check` | `readOnly` | Probe a set of connections in one batch and report status. May take 10-30s. |
|
|
94
120
|
| `apimapper_connection_list` | `readOnly` | List all API Mapper connections. Use `apimapper_connection_get` for full details. |
|
|
95
|
-
| `apimapper_connection_pipeline_update` | `mutating` | Update the connection's pipeline (endpoints, default_params, headers, items_path, items_shape). |
|
|
121
|
+
| `apimapper_connection_pipeline_update` | `mutating` | Update the connection's pipeline (endpoints, default_params, default_headers, headers, items_path, items_shape, body, body_type, graphql_variables, response_type). |
|
|
122
|
+
| `apimapper_connection_recover` | `mutating` | Recover a connection that is un-editable because its `params` field is corrupt (stored as a JSON-string with embedded UI metadata instead of an object). Resets `params` to a clean object. Has a `confirm` guard. |
|
|
96
123
|
| `apimapper_connection_resources` | `readOnly` | List browseable resources on a connection (drive files, sheets, IG media). |
|
|
97
124
|
| `apimapper_connection_test` | `readOnly` | Probe a connection's upstream endpoint to verify reachability + auth. |
|
|
98
125
|
| `apimapper_connection_update` | `mutating` | Update fields on an existing connection. Only provided fields are changed; wire-format is snake_case. |
|
|
@@ -211,7 +238,8 @@ vault) for the full convention.
|
|
|
211
238
|
|
|
212
239
|
| Tool | Annotation | Description |
|
|
213
240
|
|------|------------|-------------|
|
|
214
|
-
| `
|
|
241
|
+
| `apimapper_list_profiles` | `readOnly` | List all configured site profiles (name, siteUrl, platform) with an `is_active` flag. Use to discover profile names before calling `apimapper_use_profile`. |
|
|
242
|
+
| `apimapper_use_profile` | `mutating` | Activate a configured site profile and probe its identity endpoint to confirm the site is reachable and the plugin signature matches. |
|
|
215
243
|
|
|
216
244
|
## Convention reminders
|
|
217
245
|
|
package/manifest.json
CHANGED
|
@@ -1,85 +1,83 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"homepage": "https://wootsup.com",
|
|
12
|
-
"repository": {
|
|
13
|
-
"type": "git",
|
|
14
|
-
"url": "https://github.com/wootsup/api-mapper"
|
|
15
|
-
},
|
|
16
|
-
"license": "MIT",
|
|
17
|
-
"keywords": [
|
|
18
|
-
"api-mapper",
|
|
19
|
-
"wordpress",
|
|
20
|
-
"joomla",
|
|
21
|
-
"yootheme",
|
|
22
|
-
"mcp",
|
|
23
|
-
"claude"
|
|
24
|
-
],
|
|
25
|
-
"server": {
|
|
26
|
-
"type": "node",
|
|
27
|
-
"entry_point": "dist/index.js",
|
|
28
|
-
"mcp_config": {
|
|
29
|
-
"command": "node",
|
|
30
|
-
"args": [
|
|
31
|
-
"${__dirname}/dist/index.js"
|
|
32
|
-
],
|
|
33
|
-
"env": {
|
|
34
|
-
"APIMAPPER_TOKEN": "${user_config.APIMAPPER_TOKEN}",
|
|
35
|
-
"APIMAPPER_SITE_URL": "${user_config.APIMAPPER_SITE_URL}",
|
|
36
|
-
"APIMAPPER_PLATFORM": "${user_config.APIMAPPER_PLATFORM}",
|
|
37
|
-
"APIMAPPER_PROFILE": "${user_config.APIMAPPER_PROFILE}"
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
"user_config": [
|
|
42
|
-
{
|
|
43
|
-
"key": "APIMAPPER_TOKEN",
|
|
44
|
-
"type": "string",
|
|
45
|
-
"title": "API Mapper MCP key",
|
|
46
|
-
"description": "Your amk_live_... key from API Mapper → Settings → MCP Keys",
|
|
47
|
-
"required": true,
|
|
48
|
-
"secret": true
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"key": "APIMAPPER_SITE_URL",
|
|
52
|
-
"type": "string",
|
|
53
|
-
"title": "Site URL",
|
|
54
|
-
"description": "The base URL of your WordPress or Joomla site (e.g. https://example.com)",
|
|
55
|
-
"required": true
|
|
2
|
+
"dxt_version": "0.1",
|
|
3
|
+
"name": "@wootsup/mcp",
|
|
4
|
+
"display_name": "API Mapper for WordPress & Joomla",
|
|
5
|
+
"version": "0.4.0",
|
|
6
|
+
"description": "Build API integrations, OAuth credentials, and YOOtheme sources via natural conversation. Connects your AI assistant to API Mapper running on WordPress or Joomla.",
|
|
7
|
+
"icon": "icon.png",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "WootsUp",
|
|
10
|
+
"url": "https://wootsup.com"
|
|
56
11
|
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"default": "wordpress"
|
|
12
|
+
"homepage": "https://wootsup.com",
|
|
13
|
+
"documentation": "https://wootsup.com/docs/mcp",
|
|
14
|
+
"support": "https://wootsup.com/contact/",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/wootsup/api-mapper"
|
|
64
18
|
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
],
|
|
74
|
-
"compatibility": {
|
|
75
|
-
"claude_desktop": ">=0.10.0",
|
|
76
|
-
"platforms": [
|
|
77
|
-
"darwin",
|
|
78
|
-
"win32",
|
|
79
|
-
"linux"
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"keywords": [
|
|
21
|
+
"api-mapper",
|
|
22
|
+
"wordpress",
|
|
23
|
+
"joomla",
|
|
24
|
+
"yootheme",
|
|
25
|
+
"mcp",
|
|
26
|
+
"claude"
|
|
80
27
|
],
|
|
81
|
-
"
|
|
82
|
-
|
|
28
|
+
"server": {
|
|
29
|
+
"type": "node",
|
|
30
|
+
"entry_point": "dist/index.js",
|
|
31
|
+
"mcp_config": {
|
|
32
|
+
"command": "node",
|
|
33
|
+
"args": [
|
|
34
|
+
"${__dirname}/dist/index.js"
|
|
35
|
+
],
|
|
36
|
+
"env": {
|
|
37
|
+
"APIMAPPER_SITE_URL": "${user_config.APIMAPPER_SITE_URL}",
|
|
38
|
+
"APIMAPPER_TOKEN": "${user_config.APIMAPPER_TOKEN}",
|
|
39
|
+
"APIMAPPER_PROFILE": "${user_config.APIMAPPER_PROFILE}",
|
|
40
|
+
"APIMAPPER_SITES_FILE": "${user_config.APIMAPPER_SITES_FILE}"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"user_config": {
|
|
45
|
+
"APIMAPPER_SITE_URL": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"title": "Site URL",
|
|
48
|
+
"description": "Single-site setup: the base URL of your WordPress or Joomla site (e.g. https://example.com). Leave empty if you use the Sites file below.",
|
|
49
|
+
"required": false
|
|
50
|
+
},
|
|
51
|
+
"APIMAPPER_TOKEN": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"title": "API Mapper MCP key",
|
|
54
|
+
"description": "Single-site setup: your amk_live_... key from API Mapper → ⋮ menu → Settings → MCP Access. Leave empty if you use the Sites file below.",
|
|
55
|
+
"required": false,
|
|
56
|
+
"sensitive": true
|
|
57
|
+
},
|
|
58
|
+
"APIMAPPER_PROFILE": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"title": "Profile name (Optional for Single Site Configuration)",
|
|
61
|
+
"description": "Optional label for this site profile. Defaults to 'default'. With a Sites file, it selects which configured site is active; switch any time via apimapper_use_profile.",
|
|
62
|
+
"required": false,
|
|
63
|
+
"default": "default"
|
|
64
|
+
},
|
|
65
|
+
"APIMAPPER_SITES_FILE": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"title": "Sites file (for Multi-Site Configurations)",
|
|
68
|
+
"description": "Advanced / agency setups only: path to a sites.json that manages several sites from one install. Leave empty for a single site (use Site URL + key above). Normally populated by the setup wizard.",
|
|
69
|
+
"required": false
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"compatibility": {
|
|
73
|
+
"claude_desktop": ">=0.10.0",
|
|
74
|
+
"platforms": [
|
|
75
|
+
"darwin",
|
|
76
|
+
"win32",
|
|
77
|
+
"linux"
|
|
78
|
+
],
|
|
79
|
+
"runtimes": {
|
|
80
|
+
"node": ">=22.0.0"
|
|
81
|
+
}
|
|
83
82
|
}
|
|
84
|
-
}
|
|
85
83
|
}
|