callman-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +21 -0
  3. package/README.md +203 -0
  4. package/dist/client/api.d.ts +109 -0
  5. package/dist/client/api.d.ts.map +1 -0
  6. package/dist/client/api.js +180 -0
  7. package/dist/client/api.js.map +1 -0
  8. package/dist/client/errors.d.ts +27 -0
  9. package/dist/client/errors.d.ts.map +1 -0
  10. package/dist/client/errors.js +98 -0
  11. package/dist/client/errors.js.map +1 -0
  12. package/dist/client/http.d.ts +34 -0
  13. package/dist/client/http.d.ts.map +1 -0
  14. package/dist/client/http.js +121 -0
  15. package/dist/client/http.js.map +1 -0
  16. package/dist/client/types.d.ts +327 -0
  17. package/dist/client/types.d.ts.map +1 -0
  18. package/dist/client/types.js +5 -0
  19. package/dist/client/types.js.map +1 -0
  20. package/dist/config.d.ts +20 -0
  21. package/dist/config.d.ts.map +1 -0
  22. package/dist/config.js +69 -0
  23. package/dist/config.js.map +1 -0
  24. package/dist/context.d.ts +35 -0
  25. package/dist/context.d.ts.map +1 -0
  26. package/dist/context.js +91 -0
  27. package/dist/context.js.map +1 -0
  28. package/dist/domain/diagram/build.d.ts +260 -0
  29. package/dist/domain/diagram/build.d.ts.map +1 -0
  30. package/dist/domain/diagram/build.js +160 -0
  31. package/dist/domain/diagram/build.js.map +1 -0
  32. package/dist/domain/diagram/layout.d.ts +17 -0
  33. package/dist/domain/diagram/layout.d.ts.map +1 -0
  34. package/dist/domain/diagram/layout.js +61 -0
  35. package/dist/domain/diagram/layout.js.map +1 -0
  36. package/dist/domain/diagram/patch.d.ts +330 -0
  37. package/dist/domain/diagram/patch.d.ts.map +1 -0
  38. package/dist/domain/diagram/patch.js +176 -0
  39. package/dist/domain/diagram/patch.js.map +1 -0
  40. package/dist/domain/diagram/summarize.d.ts +41 -0
  41. package/dist/domain/diagram/summarize.d.ts.map +1 -0
  42. package/dist/domain/diagram/summarize.js +47 -0
  43. package/dist/domain/diagram/summarize.js.map +1 -0
  44. package/dist/domain/importDetect.d.ts +6 -0
  45. package/dist/domain/importDetect.d.ts.map +1 -0
  46. package/dist/domain/importDetect.js +32 -0
  47. package/dist/domain/importDetect.js.map +1 -0
  48. package/dist/domain/requestShape.d.ts +796 -0
  49. package/dist/domain/requestShape.d.ts.map +1 -0
  50. package/dist/domain/requestShape.js +250 -0
  51. package/dist/domain/requestShape.js.map +1 -0
  52. package/dist/domain/resolve.d.ts +30 -0
  53. package/dist/domain/resolve.d.ts.map +1 -0
  54. package/dist/domain/resolve.js +56 -0
  55. package/dist/domain/resolve.js.map +1 -0
  56. package/dist/domain/scenario/build.d.ts +270 -0
  57. package/dist/domain/scenario/build.d.ts.map +1 -0
  58. package/dist/domain/scenario/build.js +135 -0
  59. package/dist/domain/scenario/build.js.map +1 -0
  60. package/dist/domain/scenario/summarize.d.ts +206 -0
  61. package/dist/domain/scenario/summarize.d.ts.map +1 -0
  62. package/dist/domain/scenario/summarize.js +138 -0
  63. package/dist/domain/scenario/summarize.js.map +1 -0
  64. package/dist/index.d.ts +3 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +142 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/lib/cache.d.ts +12 -0
  69. package/dist/lib/cache.d.ts.map +1 -0
  70. package/dist/lib/cache.js +40 -0
  71. package/dist/lib/cache.js.map +1 -0
  72. package/dist/lib/ids.d.ts +5 -0
  73. package/dist/lib/ids.d.ts.map +1 -0
  74. package/dist/lib/ids.js +19 -0
  75. package/dist/lib/ids.js.map +1 -0
  76. package/dist/lib/log.d.ts +10 -0
  77. package/dist/lib/log.d.ts.map +1 -0
  78. package/dist/lib/log.js +25 -0
  79. package/dist/lib/log.js.map +1 -0
  80. package/dist/lib/mask.d.ts +24 -0
  81. package/dist/lib/mask.d.ts.map +1 -0
  82. package/dist/lib/mask.js +63 -0
  83. package/dist/lib/mask.js.map +1 -0
  84. package/dist/lib/pagination.d.ts +21 -0
  85. package/dist/lib/pagination.d.ts.map +1 -0
  86. package/dist/lib/pagination.js +40 -0
  87. package/dist/lib/pagination.js.map +1 -0
  88. package/dist/lib/truncate.d.ts +25 -0
  89. package/dist/lib/truncate.d.ts.map +1 -0
  90. package/dist/lib/truncate.js +45 -0
  91. package/dist/lib/truncate.js.map +1 -0
  92. package/dist/main.d.ts +9 -0
  93. package/dist/main.d.ts.map +1 -0
  94. package/dist/main.js +12 -0
  95. package/dist/main.js.map +1 -0
  96. package/dist/prompts/index.d.ts +4 -0
  97. package/dist/prompts/index.d.ts.map +1 -0
  98. package/dist/prompts/index.js +72 -0
  99. package/dist/prompts/index.js.map +1 -0
  100. package/dist/resources/docs/diagramSchema.d.ts +2 -0
  101. package/dist/resources/docs/diagramSchema.d.ts.map +1 -0
  102. package/dist/resources/docs/diagramSchema.js +65 -0
  103. package/dist/resources/docs/diagramSchema.js.map +1 -0
  104. package/dist/resources/docs/overview.d.ts +2 -0
  105. package/dist/resources/docs/overview.d.ts.map +1 -0
  106. package/dist/resources/docs/overview.js +46 -0
  107. package/dist/resources/docs/overview.js.map +1 -0
  108. package/dist/resources/docs/requestSchema.d.ts +2 -0
  109. package/dist/resources/docs/requestSchema.d.ts.map +1 -0
  110. package/dist/resources/docs/requestSchema.js +70 -0
  111. package/dist/resources/docs/requestSchema.js.map +1 -0
  112. package/dist/resources/generated/aiPacks.d.ts +3 -0
  113. package/dist/resources/generated/aiPacks.d.ts.map +1 -0
  114. package/dist/resources/generated/aiPacks.js +11 -0
  115. package/dist/resources/generated/aiPacks.js.map +1 -0
  116. package/dist/resources/index.d.ts +4 -0
  117. package/dist/resources/index.d.ts.map +1 -0
  118. package/dist/resources/index.js +114 -0
  119. package/dist/resources/index.js.map +1 -0
  120. package/dist/run/executeCollection.d.ts +19 -0
  121. package/dist/run/executeCollection.d.ts.map +1 -0
  122. package/dist/run/executeCollection.js +89 -0
  123. package/dist/run/executeCollection.js.map +1 -0
  124. package/dist/run/loadBundle.d.ts +9 -0
  125. package/dist/run/loadBundle.d.ts.map +1 -0
  126. package/dist/run/loadBundle.js +242 -0
  127. package/dist/run/loadBundle.js.map +1 -0
  128. package/dist/run/resolveTemplate.d.ts +2 -0
  129. package/dist/run/resolveTemplate.d.ts.map +1 -0
  130. package/dist/run/resolveTemplate.js +12 -0
  131. package/dist/run/resolveTemplate.js.map +1 -0
  132. package/dist/run/summarize.d.ts +73 -0
  133. package/dist/run/summarize.d.ts.map +1 -0
  134. package/dist/run/summarize.js +69 -0
  135. package/dist/run/summarize.js.map +1 -0
  136. package/dist/run/types.d.ts +46 -0
  137. package/dist/run/types.d.ts.map +1 -0
  138. package/dist/run/types.js +2 -0
  139. package/dist/run/types.js.map +1 -0
  140. package/dist/server.d.ts +23 -0
  141. package/dist/server.d.ts.map +1 -0
  142. package/dist/server.js +25 -0
  143. package/dist/server.js.map +1 -0
  144. package/dist/tools/catalog.d.ts +18 -0
  145. package/dist/tools/catalog.d.ts.map +1 -0
  146. package/dist/tools/catalog.js +66 -0
  147. package/dist/tools/catalog.js.map +1 -0
  148. package/dist/tools/collections.d.ts +4 -0
  149. package/dist/tools/collections.d.ts.map +1 -0
  150. package/dist/tools/collections.js +201 -0
  151. package/dist/tools/collections.js.map +1 -0
  152. package/dist/tools/diagrams.d.ts +4 -0
  153. package/dist/tools/diagrams.d.ts.map +1 -0
  154. package/dist/tools/diagrams.js +226 -0
  155. package/dist/tools/diagrams.js.map +1 -0
  156. package/dist/tools/environments.d.ts +4 -0
  157. package/dist/tools/environments.d.ts.map +1 -0
  158. package/dist/tools/environments.js +150 -0
  159. package/dist/tools/environments.js.map +1 -0
  160. package/dist/tools/import.d.ts +6 -0
  161. package/dist/tools/import.d.ts.map +1 -0
  162. package/dist/tools/import.js +144 -0
  163. package/dist/tools/import.js.map +1 -0
  164. package/dist/tools/index.d.ts +5 -0
  165. package/dist/tools/index.d.ts.map +1 -0
  166. package/dist/tools/index.js +26 -0
  167. package/dist/tools/index.js.map +1 -0
  168. package/dist/tools/lookups.d.ts +33 -0
  169. package/dist/tools/lookups.d.ts.map +1 -0
  170. package/dist/tools/lookups.js +132 -0
  171. package/dist/tools/lookups.js.map +1 -0
  172. package/dist/tools/meta.d.ts +4 -0
  173. package/dist/tools/meta.d.ts.map +1 -0
  174. package/dist/tools/meta.js +78 -0
  175. package/dist/tools/meta.js.map +1 -0
  176. package/dist/tools/requests.d.ts +4 -0
  177. package/dist/tools/requests.d.ts.map +1 -0
  178. package/dist/tools/requests.js +247 -0
  179. package/dist/tools/requests.js.map +1 -0
  180. package/dist/tools/run.d.ts +4 -0
  181. package/dist/tools/run.d.ts.map +1 -0
  182. package/dist/tools/run.js +167 -0
  183. package/dist/tools/run.js.map +1 -0
  184. package/dist/tools/scenarios.d.ts +4 -0
  185. package/dist/tools/scenarios.d.ts.map +1 -0
  186. package/dist/tools/scenarios.js +242 -0
  187. package/dist/tools/scenarios.js.map +1 -0
  188. package/dist/tools/shared.d.ts +20 -0
  189. package/dist/tools/shared.d.ts.map +1 -0
  190. package/dist/tools/shared.js +74 -0
  191. package/dist/tools/shared.js.map +1 -0
  192. package/dist/tools/workspaces.d.ts +4 -0
  193. package/dist/tools/workspaces.d.ts.map +1 -0
  194. package/dist/tools/workspaces.js +80 -0
  195. package/dist/tools/workspaces.js.map +1 -0
  196. package/dist-cjs/client/api.js +183 -0
  197. package/dist-cjs/client/errors.js +104 -0
  198. package/dist-cjs/client/http.js +124 -0
  199. package/dist-cjs/client/types.js +5 -0
  200. package/dist-cjs/config.js +73 -0
  201. package/dist-cjs/context.js +94 -0
  202. package/dist-cjs/domain/diagram/build.js +164 -0
  203. package/dist-cjs/domain/diagram/layout.js +98 -0
  204. package/dist-cjs/domain/diagram/patch.js +179 -0
  205. package/dist-cjs/domain/diagram/summarize.js +52 -0
  206. package/dist-cjs/domain/importDetect.js +40 -0
  207. package/dist-cjs/domain/requestShape.js +260 -0
  208. package/dist-cjs/domain/resolve.js +63 -0
  209. package/dist-cjs/domain/scenario/build.js +140 -0
  210. package/dist-cjs/domain/scenario/summarize.js +144 -0
  211. package/dist-cjs/lib/cache.js +43 -0
  212. package/dist-cjs/lib/ids.js +24 -0
  213. package/dist-cjs/lib/log.js +28 -0
  214. package/dist-cjs/lib/mask.js +72 -0
  215. package/dist-cjs/lib/pagination.js +48 -0
  216. package/dist-cjs/lib/truncate.js +52 -0
  217. package/dist-cjs/main.js +31 -0
  218. package/dist-cjs/package.json +3 -0
  219. package/dist-cjs/prompts/index.js +75 -0
  220. package/dist-cjs/resources/docs/diagramSchema.js +67 -0
  221. package/dist-cjs/resources/docs/overview.js +48 -0
  222. package/dist-cjs/resources/docs/requestSchema.js +72 -0
  223. package/dist-cjs/resources/generated/aiPacks.js +13 -0
  224. package/dist-cjs/resources/index.js +117 -0
  225. package/dist-cjs/run/executeCollection.js +93 -0
  226. package/dist-cjs/run/loadBundle.js +246 -0
  227. package/dist-cjs/run/resolveTemplate.js +15 -0
  228. package/dist-cjs/run/summarize.js +73 -0
  229. package/dist-cjs/run/types.js +2 -0
  230. package/dist-cjs/server.js +28 -0
  231. package/dist-cjs/tools/catalog.js +69 -0
  232. package/dist-cjs/tools/collections.js +204 -0
  233. package/dist-cjs/tools/diagrams.js +229 -0
  234. package/dist-cjs/tools/environments.js +153 -0
  235. package/dist-cjs/tools/import.js +147 -0
  236. package/dist-cjs/tools/index.js +31 -0
  237. package/dist-cjs/tools/lookups.js +149 -0
  238. package/dist-cjs/tools/meta.js +81 -0
  239. package/dist-cjs/tools/requests.js +250 -0
  240. package/dist-cjs/tools/run.js +203 -0
  241. package/dist-cjs/tools/scenarios.js +245 -0
  242. package/dist-cjs/tools/shared.js +81 -0
  243. package/dist-cjs/tools/workspaces.js +83 -0
  244. package/package.json +80 -0
@@ -0,0 +1,150 @@
1
+ import { z } from "zod";
2
+ import { ToolInputError } from "../client/errors.js";
3
+ import { kvSchema, toRows } from "../domain/requestShape.js";
4
+ import { resolvedSummary } from "../domain/resolve.js";
5
+ import { isMasked } from "../lib/mask.js";
6
+ import { LIMITS } from "../lib/truncate.js";
7
+ import { loadEnvironments, resolveEnvironment } from "./lookups.js";
8
+ import { confirmArg, DESTRUCTIVE, guarded, IDEMPOTENT_WRITE, ok, READ, refArg, requireConfirm, workspaceArg, WRITE } from "./shared.js";
9
+ // Environments hold the values requests reference as {{key}}. Values come
10
+ // back MASKED for a personal token (••••ab) unless the token holds
11
+ // environments:reveal AND the call asks for reveal — the server enforces
12
+ // both; this side only forwards the flag and refuses to write a masked
13
+ // value back.
14
+ export const registerEnvironmentTools = (server, ctx) => {
15
+ server.registerTool("list_environments", {
16
+ title: "List environments",
17
+ description: "List a workspace's environments with their variable KEYS (values are not included). Global variables (shared by every environment) are listed too.",
18
+ inputSchema: { workspace: workspaceArg },
19
+ annotations: READ,
20
+ }, guarded(async ({ workspace }) => {
21
+ const ws = await ctx.resolveWorkspace(workspace);
22
+ const [environments, globals] = await Promise.all([
23
+ loadEnvironments(ctx, ws.id),
24
+ ctx.api.listGlobalVariables(ws.id).catch(() => []),
25
+ ]);
26
+ return ok({
27
+ workspace: { id: ws.id, name: ws.name },
28
+ environments: environments.map((environment) => ({
29
+ id: environment.id,
30
+ name: environment.name,
31
+ variableCount: environment.variables.length,
32
+ variableKeys: environment.variables.map((variable) => variable.key).slice(0, 200),
33
+ })),
34
+ globalVariableKeys: globals.map((variable) => variable.key),
35
+ });
36
+ }));
37
+ server.registerTool("get_environment", {
38
+ title: "Get an environment",
39
+ description: "Read one environment's variables. Values are masked (••••ab) unless reveal: true AND the token holds environments:reveal. Global variables are returned alongside.",
40
+ inputSchema: { workspace: workspaceArg, environment: refArg("Environment"), reveal: z.boolean().optional() },
41
+ annotations: READ,
42
+ }, guarded(async ({ workspace, environment, reveal }) => {
43
+ const ws = await ctx.resolveWorkspace(workspace);
44
+ const resolved = await resolveEnvironment(ctx, ws.id, environment);
45
+ const [fresh, globals] = await Promise.all([
46
+ ctx.api.getEnvironment(ws.id, resolved.item.id, reveal ?? false),
47
+ ctx.api.listGlobalVariables(ws.id, reveal ?? false).catch(() => []),
48
+ ]);
49
+ const masked = fresh.variables.some((variable) => variable.valueMasked);
50
+ return ok({
51
+ environment: {
52
+ id: fresh.id,
53
+ name: fresh.name,
54
+ variables: fresh.variables.map((variable) => ({ key: variable.key, value: variable.value, ...(variable.enabled === false ? { enabled: false } : {}) })),
55
+ },
56
+ globalVariables: globals.map((variable) => ({ key: variable.key, value: variable.value })),
57
+ valuesMasked: masked,
58
+ ...(masked && reveal ? { note: "Values stayed masked: the token lacks environments:reveal." } : {}),
59
+ resolved: [resolvedSummary(environment, resolved)],
60
+ });
61
+ }));
62
+ server.registerTool("create_environment", {
63
+ title: "Create an environment",
64
+ description: "Create an environment with optional variables (key/value). Use it for hosts ({{baseUrl}}) and credentials so requests never hard-code them.",
65
+ inputSchema: {
66
+ workspace: workspaceArg,
67
+ name: z.string().min(1).max(LIMITS.NAME),
68
+ variables: z.array(kvSchema).max(500).optional(),
69
+ },
70
+ annotations: WRITE,
71
+ }, guarded(async ({ workspace, name, variables }) => {
72
+ const ws = await ctx.resolveWorkspace(workspace);
73
+ const rows = toRows(variables);
74
+ const maskedKeys = rows.filter((row) => isMasked(row.value)).map((row) => row.key);
75
+ if (maskedKeys.length > 0)
76
+ throw new ToolInputError("MASKED_VALUE", `Masked values cannot be stored (keys: ${maskedKeys.join(", ")}). Provide the real values.`);
77
+ const created = await ctx.api.createEnvironment(ws.id, { name: name.trim(), variables: rows });
78
+ ctx.invalidate(`environments:${ws.id}`);
79
+ return ok({ environment: { id: created.id, name: created.name, variableKeys: created.variables.map((variable) => variable.key) } });
80
+ }));
81
+ server.registerTool("set_environment_variables", {
82
+ title: "Set / unset environment variables",
83
+ description: "Upsert variables (`set`) and/or remove keys (`unset`) in an environment. Existing keys are updated in place, new keys appended, other keys untouched. A masked value (starting with ••••) is refused — read it with reveal or supply a real value.",
84
+ inputSchema: {
85
+ workspace: workspaceArg,
86
+ environment: refArg("Environment"),
87
+ set: z.array(kvSchema).max(500).optional(),
88
+ unset: z.array(z.string().min(1).max(100)).max(500).optional(),
89
+ },
90
+ annotations: IDEMPOTENT_WRITE,
91
+ }, guarded(async ({ workspace, environment, set, unset }) => {
92
+ const rows = toRows(set);
93
+ const removals = (unset ?? []).map((key) => key.trim()).filter(Boolean);
94
+ if (rows.length === 0 && removals.length === 0)
95
+ throw new ToolInputError("NOTHING_TO_UPDATE", "Pass set and/or unset.");
96
+ const maskedKeys = rows.filter((row) => isMasked(row.value)).map((row) => row.key);
97
+ if (maskedKeys.length > 0)
98
+ throw new ToolInputError("MASKED_VALUE", `Masked values cannot be written back (keys: ${maskedKeys.join(", ")}).`);
99
+ const ws = await ctx.resolveWorkspace(workspace);
100
+ const resolved = await resolveEnvironment(ctx, ws.id, environment);
101
+ const existingKeys = new Set(resolved.item.variables.map((variable) => variable.key));
102
+ const updated = [];
103
+ const added = [];
104
+ const removed = [];
105
+ const failed = [];
106
+ for (const row of rows) {
107
+ try {
108
+ if (existingKeys.has(row.key)) {
109
+ await ctx.api.updateEnvironmentVariable(ws.id, resolved.item.id, row.key, { value: row.value });
110
+ updated.push(row.key);
111
+ }
112
+ else {
113
+ await ctx.api.addEnvironmentVariable(ws.id, resolved.item.id, { key: row.key, value: row.value });
114
+ added.push(row.key);
115
+ existingKeys.add(row.key);
116
+ }
117
+ }
118
+ catch (error) {
119
+ failed.push({ key: row.key, error: error instanceof Error ? error.message : String(error) });
120
+ }
121
+ }
122
+ for (const key of removals) {
123
+ try {
124
+ if (!existingKeys.has(key))
125
+ continue;
126
+ await ctx.api.deleteEnvironmentVariable(ws.id, resolved.item.id, key);
127
+ removed.push(key);
128
+ }
129
+ catch (error) {
130
+ failed.push({ key, error: error instanceof Error ? error.message : String(error) });
131
+ }
132
+ }
133
+ ctx.invalidate(`environments:${ws.id}`);
134
+ return ok({ environment: { id: resolved.item.id, name: resolved.item.name }, updated, added, removed, failed, resolved: [resolvedSummary(environment, resolved)] });
135
+ }));
136
+ server.registerTool("delete_environment", {
137
+ title: "Delete an environment",
138
+ description: "Delete an environment and all its variables. Permanent — confirm with the user first.",
139
+ inputSchema: { workspace: workspaceArg, environment: refArg("Environment"), confirm: confirmArg },
140
+ annotations: DESTRUCTIVE,
141
+ }, guarded(async ({ workspace, environment, confirm }) => {
142
+ requireConfirm(confirm, "an environment");
143
+ const ws = await ctx.resolveWorkspace(workspace);
144
+ const resolved = await resolveEnvironment(ctx, ws.id, environment);
145
+ await ctx.api.deleteEnvironment(ws.id, resolved.item.id);
146
+ ctx.invalidate(`environments:${ws.id}`);
147
+ return ok({ deleted: { id: resolved.item.id, name: resolved.item.name }, resolved: [resolvedSummary(environment, resolved)] });
148
+ }));
149
+ };
150
+ //# sourceMappingURL=environments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environments.js","sourceRoot":"","sources":["../../src/tools/environments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import type { ToolContext } from "../context.js";
4
+ export declare const registerImportTools: (server: McpServer, ctx: ToolContext) => void;
5
+ export declare const requestRef: (what: string, extra?: string) => z.ZodString;
6
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/tools/import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAWjD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IAkJzE,CAAC;AAGF,eAAO,MAAM,UAAU,+CAAS,CAAC"}
@@ -0,0 +1,144 @@
1
+ import { parseCurlFile, parseHttpFile } from "callman-core";
2
+ import { z } from "zod";
3
+ import { CallmanApiError, ToolInputError } from "../client/errors.js";
4
+ import { detectImport, documentPayload, SERVER_DOCUMENT_FORMATS } from "../domain/importDetect.js";
5
+ import { resolvedSummary } from "../domain/resolve.js";
6
+ import { LIMITS } from "../lib/truncate.js";
7
+ import { loadCollections, resolveCollection, resolveFolder, resolveScenarioFolder, sameName } from "./lookups.js";
8
+ import { dryRunArg, guarded, ok, refArg, workspaceArg, WRITE } from "./shared.js";
9
+ const CONTENT_MAX = 8 * 1024 * 1024;
10
+ const IMPORT_FORMATS = ["auto", "postman", "openapi", "insomnia", "bruno", "internal", "curl", "http"];
11
+ export const registerImportTools = (server, ctx) => {
12
+ server.registerTool("import_content", {
13
+ title: "Import a file's content",
14
+ description: "Import API definitions from file CONTENT you read: Postman collection, OpenAPI/Swagger (JSON or YAML), Insomnia, Bruno, a Callman export, a cURL script, or a .http/.rest file. The format is detected (`format: auto`). Document formats always create a new collection; cURL/.http create a new collection (`collectionName`) or add to an existing one (`targetCollection` + optional `folder`). Use dryRun: true to see what was detected before writing. For endpoints found in source code, read the routes yourself and call create_requests_bulk instead.",
15
+ inputSchema: {
16
+ workspace: workspaceArg,
17
+ content: z.string().min(1).max(CONTENT_MAX).describe("The raw file content"),
18
+ fileName: z.string().max(300).optional().describe("Original file name — helps detection (.bru, .http, .yaml …)"),
19
+ format: z.enum(IMPORT_FORMATS).default("auto"),
20
+ collectionName: z.string().max(LIMITS.NAME).optional().describe("Name for the new collection (documents: fallback when the file carries no name)"),
21
+ targetCollection: z.string().max(200).optional().describe("cURL/.http only: add to this existing collection instead of creating one"),
22
+ folder: z.string().max(300).optional().describe("cURL/.http + targetCollection: folder to put the requests in"),
23
+ dryRun: dryRunArg,
24
+ },
25
+ annotations: WRITE,
26
+ }, guarded(async ({ workspace, content, fileName, format, collectionName, targetCollection, folder, dryRun }) => {
27
+ const ws = await ctx.resolveWorkspace(workspace);
28
+ const detection = detectImport(fileName, content);
29
+ const resolvedFormat = format === "auto" ? detection.format : format;
30
+ if (resolvedFormat === "unknown" || resolvedFormat === "scenario" || resolvedFormat === "environment") {
31
+ throw new ToolInputError("IMPORT_FORMAT_UNSUPPORTED", resolvedFormat === "scenario"
32
+ ? "This is a Callman scenario export — use import_scenario."
33
+ : resolvedFormat === "environment"
34
+ ? "This is an environment export — create it with create_environment / set_environment_variables."
35
+ : "Could not detect the format. Pass `format` explicitly (postman, openapi, insomnia, bruno, internal, curl, http).", { detected: detection });
36
+ }
37
+ if (resolvedFormat === "curl" || resolvedFormat === "http") {
38
+ const name = fileName ?? (resolvedFormat === "curl" ? "requests.sh" : "requests.http");
39
+ let payload;
40
+ try {
41
+ payload = resolvedFormat === "curl" ? parseCurlFile(name, content) : parseHttpFile(name, content);
42
+ }
43
+ catch (error) {
44
+ throw new ToolInputError("IMPORT_PARSE_FAILED", error instanceof Error ? error.message : String(error));
45
+ }
46
+ if (collectionName)
47
+ payload = { ...payload, collectionName: collectionName.trim() };
48
+ const sample = payload.requests.slice(0, 5).map((request) => `${request.method} ${request.name}`);
49
+ if (targetCollection) {
50
+ const resolved = await resolveCollection(ctx, ws.id, targetCollection);
51
+ const targetFolder = await resolveFolder(ctx, ws.id, resolved.item.id, folder);
52
+ if (dryRun) {
53
+ return ok({ dryRun: true, detected: detection, format: resolvedFormat, mode: "existing-collection", collection: { id: resolved.item.id, name: resolved.item.name }, requestCount: payload.requests.length, sample });
54
+ }
55
+ const created = [];
56
+ const failed = [];
57
+ for (const request of payload.requests) {
58
+ try {
59
+ const row = await ctx.api.createRequest(ws.id, { ...request, collectionId: resolved.item.id, folderId: targetFolder?.item.id ?? null });
60
+ created.push({ id: row.id, name: row.name, method: row.method });
61
+ }
62
+ catch (error) {
63
+ failed.push({ name: request.name, error: error instanceof CallmanApiError ? `${error.code}: ${error.message}` : String(error) });
64
+ }
65
+ }
66
+ ctx.invalidate(`tree:${ws.id}:${resolved.item.id}`);
67
+ ctx.invalidate(`collections:${ws.id}`);
68
+ return ok({ format: resolvedFormat, collection: { id: resolved.item.id, name: resolved.item.name }, created: created.length, failed, requests: created, resolved: [resolvedSummary(targetCollection, resolved)] });
69
+ }
70
+ const existing = (await loadCollections(ctx, ws.id)).find((entry) => sameName(entry.name, payload.collectionName));
71
+ if (existing) {
72
+ throw new ToolInputError("COLLECTION_NAME_EXISTS", `A collection named "${existing.name}" already exists. Pass collectionName for a new name, or targetCollection: "${existing.id}" to add to it.`, {
73
+ existing: { id: existing.id, name: existing.name },
74
+ });
75
+ }
76
+ if (dryRun) {
77
+ return ok({ dryRun: true, detected: detection, format: resolvedFormat, mode: "new-collection", collectionName: payload.collectionName, requestCount: payload.requests.length, sample });
78
+ }
79
+ const result = await ctx.api.importJson(ws.id, { format: "requests", payload });
80
+ ctx.invalidate(`collections:${ws.id}`);
81
+ return ok({ format: resolvedFormat, collection: { id: result.collection.id, name: result.collection.name }, created: result.importedCounts });
82
+ }
83
+ if (!SERVER_DOCUMENT_FORMATS.has(resolvedFormat)) {
84
+ throw new ToolInputError("IMPORT_FORMAT_UNSUPPORTED", `Format "${resolvedFormat}" is not importable here.`);
85
+ }
86
+ const payload = documentPayload(resolvedFormat, content);
87
+ if (dryRun) {
88
+ return ok({ dryRun: true, detected: detection, format: resolvedFormat, mode: "new-collection", note: "The server parses this document; request counts are known after the import." });
89
+ }
90
+ const result = await ctx.api.importJson(ws.id, { format: resolvedFormat, payload, ...(collectionName ? { fallbackCollectionName: collectionName.trim() } : {}) });
91
+ ctx.invalidate(`collections:${ws.id}`);
92
+ return ok({ format: resolvedFormat, collection: { id: result.collection.id, name: result.collection.name }, created: result.importedCounts });
93
+ }));
94
+ server.registerTool("import_scenario", {
95
+ title: "Import a scenario export",
96
+ description: "Import a Callman scenario export (a `callman.scenario` envelope — the JSON of a .callman.scenario file, as text or object). Connections referenced by the export that have no counterpart here are skipped (the nodes import without a connection; the result lists warnings).",
97
+ inputSchema: {
98
+ workspace: workspaceArg,
99
+ envelope: z.union([z.string().max(CONTENT_MAX), z.record(z.unknown())]).describe("The export envelope (JSON text or object)"),
100
+ name: z.string().max(200).optional().describe("Override the imported scenario's name"),
101
+ folder: z.string().max(200).optional().describe("Scenario folder id or name"),
102
+ dryRun: dryRunArg,
103
+ },
104
+ annotations: WRITE,
105
+ }, guarded(async ({ workspace, envelope, name, folder, dryRun }) => {
106
+ const ws = await ctx.resolveWorkspace(workspace);
107
+ let parsed = envelope;
108
+ if (typeof envelope === "string") {
109
+ try {
110
+ parsed = JSON.parse(envelope);
111
+ }
112
+ catch {
113
+ throw new ToolInputError("IMPORT_INVALID_JSON", "The envelope is not valid JSON.");
114
+ }
115
+ }
116
+ const record = parsed;
117
+ if (record?.kind !== "callman.scenario") {
118
+ throw new ToolInputError("IMPORT_NOT_SCENARIO", "This is not a Callman scenario export (expected kind: \"callman.scenario\").");
119
+ }
120
+ const targetFolder = folder ? await resolveScenarioFolder(ctx, ws.id, folder) : null;
121
+ const connections = record.connections ?? [];
122
+ const connectionMap = Object.fromEntries(connections.filter((connection) => connection.refId).map((connection) => [connection.refId, { action: "skip" }]));
123
+ if (dryRun) {
124
+ return ok({
125
+ dryRun: true,
126
+ scenario: { name: name ?? record.scenario?.name ?? null, nodeCount: Array.isArray(record.scenario?.nodes) ? record.scenario?.nodes.length : null },
127
+ connectionsSkipped: connections.map((connection) => `${connection.name ?? connection.refId} (${connection.type ?? "?"})`),
128
+ folder: targetFolder ? { id: targetFolder.item.id, name: targetFolder.item.name } : null,
129
+ });
130
+ }
131
+ const result = await ctx.api.importScenario(ws.id, { envelope: parsed, ...(name ? { name } : {}), folderId: targetFolder?.item.id ?? null, connectionMap });
132
+ ctx.invalidate("scenarios:");
133
+ const scenario = result.scenario;
134
+ return ok({
135
+ scenario: { id: scenario.id, name: scenario.name, nodeCount: scenario.nodes?.length ?? null, reviewStatus: scenario.reviewStatus ?? null },
136
+ warnings: result.warnings ?? [],
137
+ ...(connections.length > 0 ? { note: "Connections from the export were skipped — attach the right workspace connections to the DB/Kafka/Redis nodes in the desktop app." } : {}),
138
+ ...(targetFolder ? { resolved: [resolvedSummary(folder, targetFolder)] } : {}),
139
+ });
140
+ }));
141
+ };
142
+ // Re-exported for the run/collection tools' folder resolution symmetry.
143
+ export const requestRef = refArg;
144
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/tools/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "../context.js";
3
+ export { TOOL_CATALOG, toolAvailability, type ToolCatalogEntry } from "./catalog.js";
4
+ export declare const registerAllTools: (server: McpServer, ctx: ToolContext) => void;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAWjD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAKrF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IAUtE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { registerCollectionTools } from "./collections.js";
2
+ import { registerDiagramTools } from "./diagrams.js";
3
+ import { registerEnvironmentTools } from "./environments.js";
4
+ import { registerImportTools } from "./import.js";
5
+ import { registerMetaTools } from "./meta.js";
6
+ import { registerRequestTools } from "./requests.js";
7
+ import { registerRunTools } from "./run.js";
8
+ import { registerScenarioTools } from "./scenarios.js";
9
+ import { registerWorkspaceTools } from "./workspaces.js";
10
+ export { TOOL_CATALOG, toolAvailability } from "./catalog.js";
11
+ // Registration order = the order clients list tools in. Run tools are only
12
+ // registered when local execution is allowed (a backend-hosted server passes
13
+ // allowLocalRun: false and they disappear from tools/list).
14
+ export const registerAllTools = (server, ctx) => {
15
+ registerMetaTools(server, ctx);
16
+ registerWorkspaceTools(server, ctx);
17
+ registerCollectionTools(server, ctx);
18
+ registerRequestTools(server, ctx);
19
+ registerImportTools(server, ctx);
20
+ registerEnvironmentTools(server, ctx);
21
+ registerScenarioTools(server, ctx);
22
+ registerDiagramTools(server, ctx);
23
+ if (ctx.config.allowLocalRun)
24
+ registerRunTools(server, ctx);
25
+ };
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAyB,MAAM,cAAc,CAAC;AAErF,2EAA2E;AAC3E,6EAA6E;AAC7E,4DAA4D;AAC5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAiB,EAAE,GAAgB,EAAQ,EAAE;IAC5E,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,mBAAmB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa;QAAE,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { ApiRequest, Collection, Diagram, Environment, RequestTreeItem, Scenario, ScenarioFolder } from "../client/types.js";
2
+ import type { ToolContext } from "../context.js";
3
+ import { type FlatFolder, type Resolved } from "../domain/resolve.js";
4
+ export declare const loadCollections: (ctx: ToolContext, ws: string) => Promise<Collection[]>;
5
+ export declare const resolveCollection: (ctx: ToolContext, ws: string, ref: string) => Promise<Resolved<Collection>>;
6
+ export interface CollectionTree {
7
+ folders: FlatFolder[];
8
+ requests: RequestTreeItem[];
9
+ }
10
+ export declare const loadTree: (ctx: ToolContext, ws: string, collectionId: string) => Promise<CollectionTree>;
11
+ export declare const resolveFolder: (ctx: ToolContext, ws: string, collectionId: string, ref: string | null | undefined) => Promise<Resolved<FlatFolder> | null>;
12
+ export declare const requestIdsInFolder: (tree: CollectionTree, folderId: string) => string[];
13
+ export interface RequestMatch extends RequestTreeItem {
14
+ collectionName: string;
15
+ }
16
+ export declare const searchRequests: (ctx: ToolContext, ws: string, query: string, collectionId: string | null, limit?: number) => Promise<RequestMatch[]>;
17
+ export declare const resolveRequest: (ctx: ToolContext, ws: string, ref: string, collectionRef?: string | null) => Promise<{
18
+ request: ApiRequest;
19
+ annotation?: string;
20
+ }>;
21
+ export declare const loadEnvironments: (ctx: ToolContext, ws: string) => Promise<Environment[]>;
22
+ export declare const resolveEnvironment: (ctx: ToolContext, ws: string, ref: string) => Promise<Resolved<Environment>>;
23
+ export interface ScenarioCatalog {
24
+ scenarios: Scenario[];
25
+ folders: ScenarioFolder[];
26
+ }
27
+ export declare const loadScenarioCatalog: (ctx: ToolContext, ws: string | null) => Promise<ScenarioCatalog>;
28
+ export declare const resolveScenario: (ctx: ToolContext, ws: string | null, ref: string) => Promise<Resolved<Scenario>>;
29
+ export declare const resolveScenarioFolder: (ctx: ToolContext, ws: string | null, ref: string) => Promise<Resolved<ScenarioFolder>>;
30
+ export declare const loadDiagrams: (ctx: ToolContext) => Promise<Diagram[]>;
31
+ export declare const resolveDiagram: (ctx: ToolContext, ref: string) => Promise<Resolved<Diagram>>;
32
+ export declare const sameName: (a: string, b: string) => boolean;
33
+ //# sourceMappingURL=lookups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookups.d.ts","sourceRoot":"","sources":["../../src/tools/lookups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import { flattenFolderTree, resolveFolderRef, resolveRef } from "../domain/resolve.js";
2
+ import { isObjectId, normalizeName } from "../lib/ids.js";
3
+ import { LIMITS } from "../lib/truncate.js";
4
+ // Cached lookups + reference resolution shared by the tool modules. Reads go
5
+ // through the context cache (15 s TTL); every write tool invalidates the
6
+ // prefixes it touches so the next read is fresh.
7
+ export const loadCollections = (ctx, ws) => ctx.cache.getOrSet(`collections:${ws}`, () => ctx.api.listAllCollections(ws));
8
+ export const resolveCollection = async (ctx, ws, ref) => {
9
+ const collections = await loadCollections(ctx, ws);
10
+ if (isObjectId(ref) && !collections.some((collection) => collection.id === ref)) {
11
+ // Not in the cached list (just created?) — let the server decide.
12
+ try {
13
+ const fresh = await ctx.api.getCollection(ws, ref);
14
+ return { item: fresh, matched: "id" };
15
+ }
16
+ catch {
17
+ // fall through to the resolver's error with candidates
18
+ }
19
+ }
20
+ return resolveRef("collection", ref, collections, {
21
+ describe: (collection) => ({ requestCount: collection.requestCount ?? null }),
22
+ });
23
+ };
24
+ export const loadTree = (ctx, ws, collectionId) => ctx.cache.getOrSet(`tree:${ws}:${collectionId}`, async () => {
25
+ const [folderTree, requests] = await Promise.all([ctx.api.folderTree(ws, collectionId), ctx.api.requestTree(ws, collectionId)]);
26
+ return { folders: flattenFolderTree(folderTree.tree ?? []), requests };
27
+ });
28
+ export const resolveFolder = async (ctx, ws, collectionId, ref) => {
29
+ if (!ref || !ref.trim())
30
+ return null;
31
+ const tree = await loadTree(ctx, ws, collectionId);
32
+ return resolveFolderRef(ref, tree.folders);
33
+ };
34
+ // Request ids inside a folder, subfolders included.
35
+ export const requestIdsInFolder = (tree, folderId) => {
36
+ const childrenOf = new Map();
37
+ for (const folder of tree.folders) {
38
+ const list = childrenOf.get(folder.parentId) ?? [];
39
+ list.push(folder.id);
40
+ childrenOf.set(folder.parentId, list);
41
+ }
42
+ const folderIds = new Set([folderId]);
43
+ const queue = [folderId];
44
+ while (queue.length > 0) {
45
+ const current = queue.shift();
46
+ for (const child of childrenOf.get(current) ?? []) {
47
+ if (!folderIds.has(child)) {
48
+ folderIds.add(child);
49
+ queue.push(child);
50
+ }
51
+ }
52
+ }
53
+ return tree.requests.filter((request) => request.folderId && folderIds.has(request.folderId)).map((request) => request.id);
54
+ };
55
+ // Search requests across the workspace (or one collection): every query token
56
+ // must appear in "name method url" (case-insensitive) — the desktop
57
+ // assistant's rule.
58
+ export const searchRequests = async (ctx, ws, query, collectionId, limit = LIMITS.SEARCH_RESULTS) => {
59
+ const tokens = query.trim().toLowerCase().split(/\s+/).filter(Boolean);
60
+ const collections = await loadCollections(ctx, ws);
61
+ const targets = collectionId ? collections.filter((collection) => collection.id === collectionId) : collections;
62
+ const matches = [];
63
+ for (const collection of targets) {
64
+ if (matches.length >= limit)
65
+ break;
66
+ const tree = await loadTree(ctx, ws, collection.id);
67
+ for (const request of tree.requests) {
68
+ if (matches.length >= limit)
69
+ break;
70
+ const haystack = `${request.name} ${request.method} ${request.url}`.toLowerCase();
71
+ if (tokens.every((token) => haystack.includes(token)))
72
+ matches.push({ ...request, collectionName: collection.name });
73
+ }
74
+ }
75
+ return matches;
76
+ };
77
+ // A request reference: an id (fetched directly) or a name — unique across the
78
+ // given collection, or across the workspace when no collection is given.
79
+ export const resolveRequest = async (ctx, ws, ref, collectionRef) => {
80
+ if (isObjectId(ref)) {
81
+ return { request: await ctx.api.getRequest(ws, ref) };
82
+ }
83
+ const collectionId = collectionRef ? (await resolveCollection(ctx, ws, collectionRef)).item.id : null;
84
+ const collections = await loadCollections(ctx, ws);
85
+ const targets = collectionId ? collections.filter((collection) => collection.id === collectionId) : collections;
86
+ const candidates = [];
87
+ for (const collection of targets) {
88
+ const tree = await loadTree(ctx, ws, collection.id);
89
+ for (const request of tree.requests)
90
+ candidates.push({ ...request, collectionName: collection.name });
91
+ }
92
+ const resolved = resolveRef("request", ref, candidates, {
93
+ describe: (request) => ({ method: request.method, url: request.url, collection: request.collectionName }),
94
+ aliases: (request) => [`${request.method} ${request.url}`, request.url],
95
+ });
96
+ return { request: await ctx.api.getRequest(ws, resolved.item.id), annotation: resolved.annotation };
97
+ };
98
+ export const loadEnvironments = (ctx, ws) => ctx.cache.getOrSet(`environments:${ws}`, async () => (await ctx.api.listEnvironments(ws)).items);
99
+ export const resolveEnvironment = async (ctx, ws, ref) => resolveRef("environment", ref, await loadEnvironments(ctx, ws), {
100
+ describe: (environment) => ({ variables: environment.variables.length }),
101
+ });
102
+ export const loadScenarioCatalog = (ctx, ws) => ctx.cache.getOrSet(`scenarios:${ws ?? "-"}`, async () => {
103
+ const [scenarios, foldersRaw] = await Promise.all([
104
+ ctx.api.listScenarios(ws),
105
+ ctx.api.listScenarioFolders(ws).catch(() => []),
106
+ ]);
107
+ const folders = Array.isArray(foldersRaw) ? foldersRaw : (foldersRaw.items ?? []);
108
+ return { scenarios, folders };
109
+ });
110
+ export const resolveScenario = async (ctx, ws, ref) => {
111
+ if (isObjectId(ref)) {
112
+ return { item: await ctx.api.getScenario(ws, ref), matched: "id" };
113
+ }
114
+ const { scenarios, folders } = await loadScenarioCatalog(ctx, ws);
115
+ const folderName = new Map(folders.map((folder) => [folder.id, folder.name]));
116
+ return resolveRef("scenario", ref, scenarios, {
117
+ describe: (scenario) => ({ folder: scenario.folderId ? (folderName.get(scenario.folderId) ?? null) : null, reviewStatus: scenario.reviewStatus }),
118
+ });
119
+ };
120
+ export const resolveScenarioFolder = async (ctx, ws, ref) => resolveRef("scenario folder", ref, (await loadScenarioCatalog(ctx, ws)).folders);
121
+ export const loadDiagrams = (ctx) => ctx.cache.getOrSet("diagrams", () => ctx.api.listDiagrams());
122
+ export const resolveDiagram = async (ctx, ref) => {
123
+ if (isObjectId(ref))
124
+ return { item: await ctx.api.getDiagram(ref), matched: "id" };
125
+ const resolved = resolveRef("diagram", ref, await loadDiagrams(ctx), {
126
+ describe: (diagram) => ({ canEdit: diagram.canEdit }),
127
+ });
128
+ // The list carries the document too, but fetch by id for the freshest copy.
129
+ return { ...resolved, item: await ctx.api.getDiagram(resolved.item.id) };
130
+ };
131
+ export const sameName = (a, b) => normalizeName(a) === normalizeName(b);
132
+ //# sourceMappingURL=lookups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookups.js","sourceRoot":"","sources":["../../src/tools/lookups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ToolContext } from "../context.js";
3
+ export declare const registerMetaTools: (server: McpServer, ctx: ToolContext) => void;
4
+ //# sourceMappingURL=meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AASjD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IA+EvE,CAAC"}