@wootsup/mcp 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/LICENSE +21 -0
  3. package/README.md +179 -0
  4. package/SECURITY.md +163 -0
  5. package/dist/auth/keychain.d.ts +47 -0
  6. package/dist/auth/keychain.js +262 -0
  7. package/dist/auth/keychain.js.map +1 -0
  8. package/dist/auth/oauth-provider.d.ts +68 -0
  9. package/dist/auth/oauth-provider.js +232 -0
  10. package/dist/auth/oauth-provider.js.map +1 -0
  11. package/dist/auth/profiles.d.ts +52 -0
  12. package/dist/auth/profiles.js +200 -0
  13. package/dist/auth/profiles.js.map +1 -0
  14. package/dist/auth/token.d.ts +27 -0
  15. package/dist/auth/token.js +88 -0
  16. package/dist/auth/token.js.map +1 -0
  17. package/dist/index.d.ts +13 -0
  18. package/dist/index.js +137 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/install-skill.d.ts +23 -0
  21. package/dist/install-skill.js +73 -0
  22. package/dist/install-skill.js.map +1 -0
  23. package/dist/modules/apimapper/cache.d.ts +2 -0
  24. package/dist/modules/apimapper/cache.js +71 -0
  25. package/dist/modules/apimapper/cache.js.map +1 -0
  26. package/dist/modules/apimapper/client.d.ts +85 -0
  27. package/dist/modules/apimapper/client.js +523 -0
  28. package/dist/modules/apimapper/client.js.map +1 -0
  29. package/dist/modules/apimapper/connections.d.ts +2 -0
  30. package/dist/modules/apimapper/connections.js +406 -0
  31. package/dist/modules/apimapper/connections.js.map +1 -0
  32. package/dist/modules/apimapper/credential-sanitizer.d.ts +7 -0
  33. package/dist/modules/apimapper/credential-sanitizer.js +70 -0
  34. package/dist/modules/apimapper/credential-sanitizer.js.map +1 -0
  35. package/dist/modules/apimapper/credentials.d.ts +2 -0
  36. package/dist/modules/apimapper/credentials.js +258 -0
  37. package/dist/modules/apimapper/credentials.js.map +1 -0
  38. package/dist/modules/apimapper/diagnose.d.ts +18 -0
  39. package/dist/modules/apimapper/diagnose.js +305 -0
  40. package/dist/modules/apimapper/diagnose.js.map +1 -0
  41. package/dist/modules/apimapper/flows.d.ts +2 -0
  42. package/dist/modules/apimapper/flows.js +372 -0
  43. package/dist/modules/apimapper/flows.js.map +1 -0
  44. package/dist/modules/apimapper/get-skill.d.ts +4 -0
  45. package/dist/modules/apimapper/get-skill.js +88 -0
  46. package/dist/modules/apimapper/get-skill.js.map +1 -0
  47. package/dist/modules/apimapper/graph-builder.d.ts +47 -0
  48. package/dist/modules/apimapper/graph-builder.js +117 -0
  49. package/dist/modules/apimapper/graph-builder.js.map +1 -0
  50. package/dist/modules/apimapper/graph.d.ts +2 -0
  51. package/dist/modules/apimapper/graph.js +117 -0
  52. package/dist/modules/apimapper/graph.js.map +1 -0
  53. package/dist/modules/apimapper/index.d.ts +2 -0
  54. package/dist/modules/apimapper/index.js +43 -0
  55. package/dist/modules/apimapper/index.js.map +1 -0
  56. package/dist/modules/apimapper/inspect.d.ts +20 -0
  57. package/dist/modules/apimapper/inspect.js +86 -0
  58. package/dist/modules/apimapper/inspect.js.map +1 -0
  59. package/dist/modules/apimapper/library.d.ts +2 -0
  60. package/dist/modules/apimapper/library.js +237 -0
  61. package/dist/modules/apimapper/library.js.map +1 -0
  62. package/dist/modules/apimapper/license.d.ts +2 -0
  63. package/dist/modules/apimapper/license.js +142 -0
  64. package/dist/modules/apimapper/license.js.map +1 -0
  65. package/dist/modules/apimapper/local-sources.d.ts +2 -0
  66. package/dist/modules/apimapper/local-sources.js +123 -0
  67. package/dist/modules/apimapper/local-sources.js.map +1 -0
  68. package/dist/modules/apimapper/misc.d.ts +2 -0
  69. package/dist/modules/apimapper/misc.js +149 -0
  70. package/dist/modules/apimapper/misc.js.map +1 -0
  71. package/dist/modules/apimapper/node-schema.d.ts +217 -0
  72. package/dist/modules/apimapper/node-schema.js +218 -0
  73. package/dist/modules/apimapper/node-schema.js.map +1 -0
  74. package/dist/modules/apimapper/normalizers.d.ts +13 -0
  75. package/dist/modules/apimapper/normalizers.js +37 -0
  76. package/dist/modules/apimapper/normalizers.js.map +1 -0
  77. package/dist/modules/apimapper/onboarding.d.ts +51 -0
  78. package/dist/modules/apimapper/onboarding.js +201 -0
  79. package/dist/modules/apimapper/onboarding.js.map +1 -0
  80. package/dist/modules/apimapper/schema.d.ts +2 -0
  81. package/dist/modules/apimapper/schema.js +84 -0
  82. package/dist/modules/apimapper/schema.js.map +1 -0
  83. package/dist/modules/apimapper/settings.d.ts +2 -0
  84. package/dist/modules/apimapper/settings.js +157 -0
  85. package/dist/modules/apimapper/settings.js.map +1 -0
  86. package/dist/modules/apimapper/skill-resources.d.ts +4 -0
  87. package/dist/modules/apimapper/skill-resources.js +85 -0
  88. package/dist/modules/apimapper/skill-resources.js.map +1 -0
  89. package/dist/modules/apimapper/types.d.ts +111 -0
  90. package/dist/modules/apimapper/types.js +14 -0
  91. package/dist/modules/apimapper/types.js.map +1 -0
  92. package/dist/modules/apimapper/use-profile.d.ts +34 -0
  93. package/dist/modules/apimapper/use-profile.js +176 -0
  94. package/dist/modules/apimapper/use-profile.js.map +1 -0
  95. package/dist/modules/apimapper/workflows.d.ts +2 -0
  96. package/dist/modules/apimapper/workflows.js +301 -0
  97. package/dist/modules/apimapper/workflows.js.map +1 -0
  98. package/dist/platform/index.d.ts +71 -0
  99. package/dist/platform/index.js +377 -0
  100. package/dist/platform/index.js.map +1 -0
  101. package/dist/server-http.d.ts +22 -0
  102. package/dist/server-http.js +159 -0
  103. package/dist/server-http.js.map +1 -0
  104. package/dist/setup/detect-clients.d.ts +39 -0
  105. package/dist/setup/detect-clients.js +152 -0
  106. package/dist/setup/detect-clients.js.map +1 -0
  107. package/dist/setup/probe-handshake.d.ts +26 -0
  108. package/dist/setup/probe-handshake.js +159 -0
  109. package/dist/setup/probe-handshake.js.map +1 -0
  110. package/dist/setup/write-config.d.ts +25 -0
  111. package/dist/setup/write-config.js +247 -0
  112. package/dist/setup/write-config.js.map +1 -0
  113. package/dist/setup-cli.d.ts +49 -0
  114. package/dist/setup-cli.js +292 -0
  115. package/dist/setup-cli.js.map +1 -0
  116. package/dist/skill-instructions.d.ts +10 -0
  117. package/dist/skill-instructions.js +68 -0
  118. package/dist/skill-instructions.js.map +1 -0
  119. package/dist/transports/http.d.ts +29 -0
  120. package/dist/transports/http.js +267 -0
  121. package/dist/transports/http.js.map +1 -0
  122. package/dist/transports/stdio.d.ts +9 -0
  123. package/dist/transports/stdio.js +19 -0
  124. package/dist/transports/stdio.js.map +1 -0
  125. package/docs/architecture.md +140 -0
  126. package/docs/customgraph-internal-migration.md +210 -0
  127. package/docs/security.md +126 -0
  128. package/docs/tools.md +230 -0
  129. package/manifest.json +76 -0
  130. package/package.json +61 -0
  131. package/skills/apimapper/SKILL.md +57 -0
  132. package/skills/apimapper/reference/joomla.md +85 -0
  133. package/skills/apimapper/reference/oauth.md +94 -0
  134. package/skills/apimapper/reference/troubleshooting.md +123 -0
  135. package/skills/apimapper/reference/yootheme.md +96 -0
@@ -0,0 +1,117 @@
1
+ // src/modules/apimapper/graph-builder.ts — pure function: source-spec list +
2
+ // merge spec → React-Flow {nodes, edges, viewport} that FlowCompiler accepts.
3
+ //
4
+ // Extracted from workflows.ts so the composition logic is unit-testable in
5
+ // isolation and reusable from future tooling (Joomla parity, MCP composite
6
+ // tools beyond setup_with_sources, etc.).
7
+ import { normalizeMergeStrategy } from "./normalizers.js";
8
+ /**
9
+ * Build a complete React-Flow graph from declarative source/merge/transform
10
+ * /output specs. Layout is deterministic (left-to-right columns).
11
+ *
12
+ * Throws `Error` for invalid combinations the FlowCompiler would reject:
13
+ * - sources.length === 0
14
+ * - sources.length >= 2 without `merge`
15
+ * - merge.strategy === "join" without `joinKey`
16
+ */
17
+ export function buildFlowGraph(input) {
18
+ const { sources, merge, transform, output } = input;
19
+ if (sources.length === 0) {
20
+ throw new Error("buildFlowGraph: at least one source is required");
21
+ }
22
+ if (sources.length >= 2 && !merge) {
23
+ throw new Error("buildFlowGraph: merge spec is required when sources.length >= 2");
24
+ }
25
+ if (merge && (merge.strategy === "join") && !merge.joinKey) {
26
+ throw new Error("buildFlowGraph: merge.joinKey is required for strategy=join");
27
+ }
28
+ const nodes = [];
29
+ const edges = [];
30
+ const baseX = 100;
31
+ const colWidth = 280;
32
+ const rowHeight = 200;
33
+ // Sources column
34
+ sources.forEach((s, i) => {
35
+ nodes.push({
36
+ id: `source-${i + 1}`,
37
+ type: "source",
38
+ position: { x: baseX, y: 100 + i * rowHeight },
39
+ data: {
40
+ label: s.label || `Source ${i + 1}`,
41
+ connectionId: s.connection,
42
+ endpointId: s.endpoint,
43
+ templateFields: s.template_fields || {},
44
+ itemsPath: s.items_path,
45
+ },
46
+ });
47
+ });
48
+ let lastNodeId = sources.length === 1 ? "source-1" : "";
49
+ // Merge column (if applicable)
50
+ if (merge) {
51
+ const strategy = normalizeMergeStrategy(merge.strategy);
52
+ const mergeId = "merge-1";
53
+ nodes.push({
54
+ id: mergeId,
55
+ type: "merge",
56
+ position: {
57
+ x: baseX + colWidth,
58
+ y: 100 + Math.max(0, sources.length / 2) * rowHeight - 60,
59
+ },
60
+ data: {
61
+ label: `Merge: ${strategy === "concat" ? "Concat" : "Join"}`,
62
+ strategy,
63
+ joinKey: merge.joinKey || "",
64
+ joinKeyRight: merge.joinKeyRight,
65
+ joinType: merge.joinType,
66
+ },
67
+ });
68
+ sources.forEach((_s, i) => {
69
+ edges.push({
70
+ id: `e-source${i + 1}-merge`,
71
+ source: `source-${i + 1}`,
72
+ target: mergeId,
73
+ targetHandle: i === 0 ? "input-A" : "input-B",
74
+ });
75
+ });
76
+ lastNodeId = mergeId;
77
+ }
78
+ // Transform column
79
+ if (transform) {
80
+ const transformId = "transform-1";
81
+ nodes.push({
82
+ id: transformId,
83
+ type: "transform",
84
+ position: { x: baseX + 2 * colWidth, y: 200 },
85
+ data: {
86
+ label: "Transform",
87
+ expression: transform.expression ?? "[*]",
88
+ },
89
+ });
90
+ edges.push({
91
+ id: `e-${lastNodeId}-transform`,
92
+ source: lastNodeId,
93
+ target: transformId,
94
+ });
95
+ lastNodeId = transformId;
96
+ }
97
+ // Output column
98
+ const outputId = "output-1";
99
+ const outputType = output.type === "shortcode" ? "output-shortcode" : "output-yootheme";
100
+ nodes.push({
101
+ id: outputId,
102
+ type: outputType,
103
+ position: { x: baseX + 3 * colWidth, y: 200 },
104
+ data: {
105
+ label: output.name,
106
+ name: output.name,
107
+ slug: output.slug,
108
+ },
109
+ });
110
+ edges.push({
111
+ id: `e-${lastNodeId}-output`,
112
+ source: lastNodeId,
113
+ target: outputId,
114
+ });
115
+ return { nodes, edges, viewport: { x: 0, y: 0, zoom: 1 } };
116
+ }
117
+ //# sourceMappingURL=graph-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-builder.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGraphTools(server: McpServer): void;
@@ -0,0 +1,117 @@
1
+ import { z } from "zod";
2
+ import { formatResult, readOnly } from "@getimo/mcp-toolkit";
3
+ import { request, hintFor } from "./client.js";
4
+ import { nodeSchema } from "./node-schema.js";
5
+ export function registerGraphTools(server) {
6
+ // ── apimapper_graph_preview ────────────────────────────────────────
7
+ server.registerTool("apimapper_graph_preview", {
8
+ title: "Graph Preview (Execute Pipeline)",
9
+ 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
+ "\n\nExample:\n apimapper_graph_preview({ nodes: [{ id: 'src1', type: 'source' }], edges: [], target_node_id: 'src1' })",
12
+ inputSchema: {
13
+ nodes: z
14
+ .array(nodeSchema)
15
+ .min(1)
16
+ .describe('Node array. Each: {id, type, position:{x,y}, data:{...}}. ' +
17
+ 'Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. ' +
18
+ 'See apimapper_flow_create for full shape.'),
19
+ edges: z
20
+ .array(z.record(z.string(), z.unknown()))
21
+ .describe('Edge array. Each: {id, source, target, targetHandle?, sourceHandle?}. See apimapper_flow_create.'),
22
+ targetNodeId: z
23
+ .string()
24
+ .optional()
25
+ .describe("Compute preview up to this node and return its output (default: terminal output)"),
26
+ forceRefresh: z
27
+ .boolean()
28
+ .default(false)
29
+ .describe("Skip snapshot/cache; always live-fetch from upstream"),
30
+ },
31
+ annotations: readOnly(),
32
+ }, async ({ nodes, edges, targetNodeId, forceRefresh }) => {
33
+ const r = await request("/graph/preview", {
34
+ method: "POST",
35
+ body: JSON.stringify({ nodes, edges, targetNodeId, forceRefresh }),
36
+ });
37
+ if (!r.success) {
38
+ return formatResult({
39
+ error: r.error,
40
+ status: r.status,
41
+ errorCode: r.errorCode,
42
+ context: { node_count: nodes.length, edge_count: edges.length, targetNodeId, forceRefresh },
43
+ hint: hintFor(r.errorCode),
44
+ }, true);
45
+ }
46
+ const items = r.data?.items ?? r.data?.data ?? [];
47
+ const itemCount = Array.isArray(items) ? items.length : 0;
48
+ // Surface trace observability — total_ms + per-node cache hit/miss + fetch cost.
49
+ const trace = r.data?.trace;
50
+ const traceSummary = trace
51
+ ? {
52
+ total_ms: trace.total_ms,
53
+ step_count: Array.isArray(trace.steps) ? trace.steps.length : 0,
54
+ cache_hits: Array.isArray(trace.steps)
55
+ ? trace.steps.filter((s) => s.cache_hit === true).length
56
+ : 0,
57
+ cache_misses: Array.isArray(trace.steps)
58
+ ? trace.steps.filter((s) => s.cache_hit === false).length
59
+ : 0,
60
+ steps: Array.isArray(trace.steps) ? trace.steps : undefined,
61
+ }
62
+ : undefined;
63
+ return formatResult({
64
+ ok: true,
65
+ item_count: itemCount,
66
+ target_node: targetNodeId || "(terminal)",
67
+ force_refresh: forceRefresh,
68
+ items: Array.isArray(items) ? items.slice(0, 50) : items,
69
+ note: itemCount > 50 ? `Showing first 50 of ${itemCount} items.` : undefined,
70
+ trace_summary: traceSummary,
71
+ }, false, { maxChars: 6000 });
72
+ });
73
+ // ── apimapper_graph_validate ───────────────────────────────────────
74
+ server.registerTool("apimapper_graph_validate", {
75
+ title: "Graph Validate (Shape Check)",
76
+ description: "Validate a graph's structure (cycles, disconnected nodes, missing outputs, type mismatches) " +
77
+ "WITHOUT executing the pipeline. Fast — no upstream fetches." +
78
+ "\n\nExample:\n apimapper_graph_validate({ nodes: [{ id: 'src1', type: 'source' }, { id: 'out1', type: 'output' }], edges: [{ source: 'src1', target: 'out1' }] })",
79
+ inputSchema: {
80
+ nodes: z
81
+ .array(nodeSchema)
82
+ .describe("Node array. Discriminator `type` ∈ source | local-source | filter | transform | merge | output | output-yootheme | output-shortcode. See apimapper_flow_create."),
83
+ edges: z
84
+ .array(z.record(z.string(), z.unknown()))
85
+ .describe("Edge array — see apimapper_flow_create for shape"),
86
+ },
87
+ annotations: readOnly(),
88
+ }, async ({ nodes, edges }) => {
89
+ const r = await request("/graph/validate", {
90
+ method: "POST",
91
+ body: JSON.stringify({ nodes, edges }),
92
+ });
93
+ if (!r.success) {
94
+ return formatResult({
95
+ error: r.error,
96
+ status: r.status,
97
+ errorCode: r.errorCode,
98
+ context: { node_count: nodes.length, edge_count: edges.length },
99
+ hint: hintFor(r.errorCode),
100
+ }, true);
101
+ }
102
+ const valid = r.data?.valid ?? true;
103
+ const errs = r.data?.errors || [];
104
+ const warns = r.data?.warnings || [];
105
+ return formatResult({
106
+ valid,
107
+ error_count: Array.isArray(errs) ? errs.length : 0,
108
+ warning_count: Array.isArray(warns) ? warns.length : 0,
109
+ errors: errs,
110
+ warnings: warns,
111
+ },
112
+ // Surface validation failure as isError=true so the agent halts
113
+ // instead of proceeding past a broken graph.
114
+ !valid, { maxChars: 4000 });
115
+ });
116
+ }
117
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/modules/apimapper/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { ModuleDefinition } from "@getimo/mcp-toolkit";
2
+ export declare const apimapperRestModule: ModuleDefinition;
@@ -0,0 +1,43 @@
1
+ import { registerConnectionTools } from "./connections.js";
2
+ import { registerCredentialTools } from "./credentials.js";
3
+ import { registerFlowTools } from "./flows.js";
4
+ import { registerGraphTools } from "./graph.js";
5
+ import { registerLocalSourceTools } from "./local-sources.js";
6
+ import { registerSchemaTools } from "./schema.js";
7
+ import { registerLibraryTools } from "./library.js";
8
+ import { registerCacheTools } from "./cache.js";
9
+ import { registerSettingsTools } from "./settings.js";
10
+ import { registerLicenseTools } from "./license.js";
11
+ import { registerMiscTools } from "./misc.js";
12
+ import { registerWorkflowTools } from "./workflows.js";
13
+ import { registerSkillResources } from "./skill-resources.js";
14
+ import { registerGetSkillTool } from "./get-skill.js";
15
+ import { registerOnboardingTool } from "./onboarding.js";
16
+ import { registerInspectTokenTool } from "./inspect.js";
17
+ import { registerDiagnoseTool } from "./diagnose.js";
18
+ export const apimapperRestModule = {
19
+ name: "apimapper-rest",
20
+ description: "API Mapper REST coverage — Full coverage of /wp-json/api-mapper/v1/* (connections, credentials, " +
21
+ "flows, graph, local-sources, schema, library, cache, settings, license, releases, " +
22
+ "brandfetch, feedback) plus composite workflows.",
23
+ register: (server) => {
24
+ registerConnectionTools(server);
25
+ registerCredentialTools(server);
26
+ registerFlowTools(server);
27
+ registerGraphTools(server);
28
+ registerLocalSourceTools(server);
29
+ registerSchemaTools(server);
30
+ registerLibraryTools(server);
31
+ registerCacheTools(server);
32
+ registerSettingsTools(server);
33
+ registerLicenseTools(server);
34
+ registerMiscTools(server);
35
+ registerWorkflowTools(server);
36
+ registerSkillResources(server);
37
+ registerGetSkillTool(server);
38
+ registerOnboardingTool(server);
39
+ registerInspectTokenTool(server);
40
+ registerDiagnoseTool(server);
41
+ },
42
+ };
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/modules/apimapper/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,MAAM,mBAAmB,GAAqB;IACnD,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,kGAAkG;QAClG,oFAAoF;QACpF,iDAAiD;IACnD,QAAQ,EAAE,CAAC,MAAiB,EAAE,EAAE;QAC9B,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAChC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QAChC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1B,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC9B,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC7B,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAC/B,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type TokenPayload } from "../../auth/token.js";
3
+ export interface InspectTokenDerived {
4
+ age_seconds: number;
5
+ expires_in_seconds?: number;
6
+ expired: boolean;
7
+ env: "live" | "test";
8
+ }
9
+ export interface InspectTokenResult {
10
+ valid: boolean;
11
+ payload?: TokenPayload;
12
+ error?: string;
13
+ derived?: InspectTokenDerived;
14
+ }
15
+ /**
16
+ * Decode + analyse a token, network-free. Always returns a result object;
17
+ * never throws.
18
+ */
19
+ export declare function inspectToken(token: string): InspectTokenResult;
20
+ export declare function registerInspectTokenTool(server: McpServer): void;
@@ -0,0 +1,86 @@
1
+ // src/modules/apimapper/inspect.ts — Phase 8.2 network-free token inspector.
2
+ //
3
+ // `apimapper_inspect_token(token)` decodes a pasted API Mapper token via the
4
+ // existing `decodeToken()` helper, then layers derived diagnostics on top:
5
+ //
6
+ // - `env` — "live" or "test", read from the token prefix.
7
+ // - `age_seconds` — seconds since `iat`.
8
+ // - `expires_in_seconds` — only if the token carries `exp`.
9
+ // - `expired` — boolean. Tokens WITHOUT `exp` are treated as non-expiring
10
+ // (never expired), matching the server-side KeyService behaviour.
11
+ //
12
+ // No HTTP is performed. No redaction is applied — the caller pasted the
13
+ // token themselves, so surfacing every field back to them is fine.
14
+ import { z } from "zod";
15
+ import { formatResult, readOnly } from "@getimo/mcp-toolkit";
16
+ import { decodeToken } from "../../auth/token.js";
17
+ // Token prefix re-extracted here (independent of token.ts internals) — we
18
+ // only need env classification, which is the second segment of `amk_<env>_*`.
19
+ const TOKEN_ENV_RE = /^amk_(live|test)_/;
20
+ /**
21
+ * Decode + analyse a token, network-free. Always returns a result object;
22
+ * never throws.
23
+ */
24
+ export function inspectToken(token) {
25
+ if (typeof token !== "string" || token.length === 0) {
26
+ return { valid: false, error: "token is empty" };
27
+ }
28
+ const envMatch = TOKEN_ENV_RE.exec(token);
29
+ if (!envMatch) {
30
+ return {
31
+ valid: false,
32
+ error: "malformed: token must start with 'amk_live_' or 'amk_test_'",
33
+ };
34
+ }
35
+ const env = envMatch[1];
36
+ const payload = decodeToken(token);
37
+ if (!payload) {
38
+ return {
39
+ valid: false,
40
+ error: "malformed: token failed structural decode (invalid base64, unsupported version, or missing required fields)",
41
+ };
42
+ }
43
+ const nowSec = Math.floor(Date.now() / 1000);
44
+ const age_seconds = nowSec - payload.iat;
45
+ const derived = {
46
+ env,
47
+ age_seconds,
48
+ expired: false,
49
+ };
50
+ if (typeof payload.exp === "number") {
51
+ const expires_in_seconds = payload.exp - nowSec;
52
+ derived.expires_in_seconds = expires_in_seconds;
53
+ derived.expired = expires_in_seconds < 0;
54
+ }
55
+ return { valid: true, payload, derived };
56
+ }
57
+ // ── MCP tool registration ──────────────────────────────────────────────
58
+ export function registerInspectTokenTool(server) {
59
+ server.registerTool("apimapper_inspect_token", {
60
+ title: "Inspect Token (Network-Free)",
61
+ description: "Decode an API Mapper token (amk_live_… or amk_test_…) WITHOUT calling the network. " +
62
+ "Returns the full payload (iss, kid, sub, scope, iat, exp, name) plus derived diagnostics " +
63
+ "(age_seconds, expires_in_seconds, expired, env). Use before profile creation to verify the " +
64
+ "user pasted a valid, unexpired token. Signature is NOT verified — server-side check on each request." +
65
+ "\n\nExample:\n apimapper_inspect_token({ token: 'amk_live_eyJ2IjoxLC...XYZ.abc123' })",
66
+ inputSchema: {
67
+ token: z
68
+ .string()
69
+ .min(1)
70
+ .describe('Token string (e.g., "amk_live_eyJ2IjoxLC...XYZ.abc123"). Pasted by user.'),
71
+ },
72
+ annotations: readOnly(),
73
+ }, async ({ token }) => {
74
+ const result = inspectToken(token);
75
+ if (!result.valid) {
76
+ return formatResult({
77
+ valid: false,
78
+ error: result.error,
79
+ context: { token_length: token.length },
80
+ hint: "Verify the token starts with 'amk_live_' or 'amk_test_' and was copied complete (no truncation).",
81
+ }, true);
82
+ }
83
+ return formatResult(result, false, { maxChars: 3000 });
84
+ });
85
+ }
86
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/modules/apimapper/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerLibraryTools(server: McpServer): void;