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,78 @@
1
+ import { CallmanApiError, hintFor } from "../client/errors.js";
2
+ import { toolAvailability } from "./catalog.js";
3
+ import { guarded, ok, READ } from "./shared.js";
4
+ // whoami — the first call a model should make: proves the connection, tells
5
+ // it who it acts as, which workspaces exist, which features are on and which
6
+ // tools the token can actually use. Never throws for a missing/invalid token:
7
+ // the answer explains how to fix the setup.
8
+ export const registerMetaTools = (server, ctx) => {
9
+ server.registerTool("whoami", {
10
+ title: "Who am I (connection check)",
11
+ description: "Check the Callman connection: server URL, the user the token acts as, token permissions (scopes), the workspaces you can use (and which one is the default), enabled features and which tools are available with this token. Call this first in a session, or when a tool reports a permission problem.",
12
+ inputSchema: {},
13
+ annotations: READ,
14
+ }, guarded(async () => {
15
+ if (!ctx.config.token) {
16
+ return ok({
17
+ apiUrl: ctx.config.apiUrl,
18
+ connected: false,
19
+ error: {
20
+ code: "TOKEN_MISSING",
21
+ message: "No token is configured.",
22
+ hint: "Create a personal token in the Callman desktop app (Settings → AI tools → New token) and set CALLMAN_TOKEN (or CALLMAN_TOKEN_FILE) in this MCP server's config, then restart the AI tool.",
23
+ },
24
+ tools: toolAvailability([], ctx.config.allowLocalRun),
25
+ });
26
+ }
27
+ const [meResult, workspacesResult, featuresResult] = await Promise.allSettled([
28
+ ctx.api.me(),
29
+ ctx.listWorkspaces(),
30
+ ctx.api.features(),
31
+ ]);
32
+ if (meResult.status === "rejected") {
33
+ const error = meResult.reason;
34
+ return ok({
35
+ apiUrl: ctx.config.apiUrl,
36
+ connected: false,
37
+ error: error instanceof CallmanApiError
38
+ ? { code: error.code, status: error.status, message: error.message, hint: hintFor(error) }
39
+ : { code: "NETWORK_UNREACHABLE", message: error instanceof Error ? error.message : String(error) },
40
+ tools: toolAvailability([], ctx.config.allowLocalRun),
41
+ });
42
+ }
43
+ const me = meResult.value;
44
+ const workspaces = workspacesResult.status === "fulfilled" ? workspacesResult.value : [];
45
+ const features = featuresResult.status === "fulfilled" ? featuresResult.value.features : {};
46
+ const defaultWorkspace = ctx.config.defaultWorkspaceId
47
+ ? (workspaces.find((workspace) => workspace.id === ctx.config.defaultWorkspaceId) ?? null)
48
+ : workspaces.length === 1
49
+ ? workspaces[0]
50
+ : null;
51
+ return ok({
52
+ apiUrl: ctx.config.apiUrl,
53
+ connected: true,
54
+ serverVersion: ctx.version,
55
+ user: me.user,
56
+ token: {
57
+ name: me.token.name,
58
+ scopes: me.token.scopes,
59
+ expiresAt: me.token.expiresAt,
60
+ lastUsedAt: me.token.lastUsedAt,
61
+ },
62
+ workspaces: workspaces.map((workspace) => ({
63
+ id: workspace.id,
64
+ name: workspace.name,
65
+ role: workspace.role,
66
+ isDefault: workspace.id === defaultWorkspace?.id,
67
+ })),
68
+ defaultWorkspaceId: defaultWorkspace?.id ?? null,
69
+ ...(workspaces.length > 1 && !defaultWorkspace
70
+ ? { note: "Several workspaces and no default: pass `workspace` to tools or set CALLMAN_WORKSPACE_ID." }
71
+ : {}),
72
+ features,
73
+ localRun: ctx.config.allowLocalRun,
74
+ tools: toolAvailability(me.token.scopes, ctx.config.allowLocalRun),
75
+ });
76
+ }));
77
+ };
78
+ //# sourceMappingURL=meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEhD,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,4CAA4C;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAiB,EAAE,GAAgB,EAAQ,EAAE;IAC7E,MAAM,CAAC,YAAY,CACjB,QAAQ,EACR;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,ySAAyS;QAC3S,WAAW,EAAE,EAAE;QACf,WAAW,EAAE,IAAI;KAClB,EACD,OAAO,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;gBACzB,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE;oBACL,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,yBAAyB;oBAClC,IAAI,EAAE,2LAA2L;iBAClM;gBACD,KAAK,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;aACtD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YAC5E,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;YACZ,GAAG,CAAC,cAAc,EAAE;YACpB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC9B,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;gBACzB,SAAS,EAAE,KAAK;gBAChB,KAAK,EACH,KAAK,YAAY,eAAe;oBAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;oBAC1F,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBACtG,KAAK,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;aACtD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC1B,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC,kBAAkB;YACpD,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC;YAC1F,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBACvB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;gBACf,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,EAAE,CAAC;YACR,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;YACzB,SAAS,EAAE,IAAI;YACf,aAAa,EAAE,GAAG,CAAC,OAAO;YAC1B,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK,EAAE;gBACL,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;gBACnB,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM;gBACvB,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS;gBAC7B,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU;aAChC;YACD,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBACzC,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,SAAS,EAAE,SAAS,CAAC,EAAE,KAAK,gBAAgB,EAAE,EAAE;aACjD,CAAC,CAAC;YACH,kBAAkB,EAAE,gBAAgB,EAAE,EAAE,IAAI,IAAI;YAChD,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,gBAAgB;gBAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,2FAA2F,EAAE;gBACvG,CAAC,CAAC,EAAE,CAAC;YACP,QAAQ;YACR,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa;YAClC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;SACnE,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC"}
@@ -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 registerRequestTools: (server: McpServer, ctx: ToolContext) => void;
4
+ //# sourceMappingURL=requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/tools/requests.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAmBjD,eAAO,MAAM,oBAAoB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IA4Q1E,CAAC"}
@@ -0,0 +1,247 @@
1
+ import { z } from "zod";
2
+ import { CallmanApiError, ToolInputError } from "../client/errors.js";
3
+ import { compactRequestView, requestInputSchema, requestSummaryView, toCreateRequestPayload, toFlatImportRequest, toUpdateRequestPayload, updateRequestInputSchema, } from "../domain/requestShape.js";
4
+ import { resolvedSummary } from "../domain/resolve.js";
5
+ import { LIMITS } from "../lib/truncate.js";
6
+ import { loadCollections, loadTree, resolveCollection, resolveFolder, resolveRequest, sameName, searchRequests } from "./lookups.js";
7
+ import { confirmArg, DESTRUCTIVE, dryRunArg, guarded, IDEMPOTENT_WRITE, ok, READ, refArg, requireConfirm, workspaceArg, WRITE } from "./shared.js";
8
+ const BULK_MAX = 5000;
9
+ const MOVE_MAX = 200;
10
+ export const registerRequestTools = (server, ctx) => {
11
+ server.registerTool("search_requests", {
12
+ title: "Search requests",
13
+ description: "Find saved requests by words in their name, method or URL (all words must match), across the workspace or inside one collection. Returns up to 50 matches with ids you can pass to get_request / run_request.",
14
+ inputSchema: {
15
+ workspace: workspaceArg,
16
+ query: z.string().min(1).max(200).describe("e.g. \"POST login\", \"users\", \"GET /orders\""),
17
+ collection: z.string().max(200).optional(),
18
+ limit: z.number().int().min(1).max(LIMITS.SEARCH_RESULTS).optional(),
19
+ },
20
+ annotations: READ,
21
+ }, guarded(async ({ workspace, query, collection, limit }) => {
22
+ const ws = await ctx.resolveWorkspace(workspace);
23
+ const scope = collection ? await resolveCollection(ctx, ws.id, collection) : null;
24
+ const matches = await searchRequests(ctx, ws.id, query, scope?.item.id ?? null, limit ?? LIMITS.SEARCH_RESULTS);
25
+ return ok({
26
+ query,
27
+ ...(scope ? { collection: { id: scope.item.id, name: scope.item.name } } : {}),
28
+ matches: matches.map((request) => ({ ...requestSummaryView(request), collection: request.collectionName })),
29
+ ...(matches.length >= (limit ?? LIMITS.SEARCH_RESULTS) ? { truncated: true } : {}),
30
+ });
31
+ }));
32
+ server.registerTool("get_request", {
33
+ title: "Get a request",
34
+ description: "Read one saved request: url, headers, query, body, auth (secrets masked unless reveal:true and the token holds requests:read + the request's own permissions), scripts. `full: true` returns untruncated body and scripts.",
35
+ inputSchema: {
36
+ workspace: workspaceArg,
37
+ request: refArg("Request", "(name, \"METHOD url\" or id)"),
38
+ collection: z.string().max(200).optional().describe("Narrow a name lookup to one collection"),
39
+ full: z.boolean().optional(),
40
+ reveal: z.boolean().optional().describe("Return auth secrets and sensitive header values unmasked"),
41
+ },
42
+ annotations: READ,
43
+ }, guarded(async ({ workspace, request, collection, full, reveal }) => {
44
+ const ws = await ctx.resolveWorkspace(workspace);
45
+ const { request: found, annotation } = await resolveRequest(ctx, ws.id, request, collection);
46
+ return ok({ request: compactRequestView(found, { full, reveal }), ...(annotation ? { resolved: [{ input: request, matched: found.name, id: found.id, note: annotation }] } : {}) });
47
+ }));
48
+ server.registerTool("create_request", {
49
+ title: "Create a request",
50
+ description: "Create one saved request in a collection (optionally inside a folder by id, name or path). Body may be a JSON value, a raw string, or { mode: raw|formdata|urlencoded }. Use {{variable}} for hosts and secrets and put the values in an environment. For many requests use create_requests_bulk (one call, atomic).",
51
+ inputSchema: { workspace: workspaceArg, collection: refArg("Collection"), ...requestInputSchema.omit({ folderKey: true }).shape },
52
+ annotations: WRITE,
53
+ }, guarded(async ({ workspace, collection, ...item }) => {
54
+ const ws = await ctx.resolveWorkspace(workspace);
55
+ const resolved = await resolveCollection(ctx, ws.id, collection);
56
+ const folder = await resolveFolder(ctx, ws.id, resolved.item.id, item.folder);
57
+ const created = await ctx.api.createRequest(ws.id, toCreateRequestPayload(item, { collectionId: resolved.item.id, folderId: folder?.item.id ?? null }));
58
+ ctx.invalidate(`tree:${ws.id}:${resolved.item.id}`);
59
+ ctx.invalidate(`collections:${ws.id}`);
60
+ return ok({
61
+ request: requestSummaryView(created),
62
+ collection: { id: resolved.item.id, name: resolved.item.name },
63
+ ...(folder ? { folder: { id: folder.item.id, path: folder.item.path } } : {}),
64
+ resolved: [resolvedSummary(collection, resolved), ...(folder && item.folder ? [resolvedSummary(item.folder, folder)] : [])],
65
+ });
66
+ }));
67
+ server.registerTool("create_requests_bulk", {
68
+ title: "Create many requests",
69
+ description: "Create many requests at once. Either `collectionName` (creates a NEW collection with an optional folder skeleton — atomic: all or nothing) or `collection` (adds to an EXISTING one; each request may name a `folder`). Requests reference folders by `folderKey` (new collection) or `folder` (existing). Use dryRun: true first for large sets.",
70
+ inputSchema: {
71
+ workspace: workspaceArg,
72
+ collectionName: z.string().min(1).max(LIMITS.NAME).optional().describe("Create a new collection with this name"),
73
+ collection: z.string().max(200).optional().describe("Add to this existing collection (id or name)"),
74
+ folders: z
75
+ .array(z.object({ key: z.string().min(1).max(120), name: z.string().min(1).max(LIMITS.NAME), parentKey: z.string().max(120).optional() }))
76
+ .max(200)
77
+ .optional()
78
+ .describe("New-collection mode only: folder skeleton; requests use folderKey"),
79
+ requests: z.array(requestInputSchema).min(1).max(BULK_MAX),
80
+ dryRun: dryRunArg,
81
+ },
82
+ annotations: WRITE,
83
+ }, guarded(async ({ workspace, collectionName, collection, folders, requests, dryRun }) => {
84
+ if ((collectionName ? 1 : 0) + (collection ? 1 : 0) !== 1) {
85
+ throw new ToolInputError("TARGET_REQUIRED", "Pass exactly one of collectionName (new collection) or collection (existing).");
86
+ }
87
+ const ws = await ctx.resolveWorkspace(workspace);
88
+ const folderKeys = new Set((folders ?? []).map((folder) => folder.key));
89
+ for (const [index, request] of requests.entries()) {
90
+ if (request.folderKey && !folderKeys.has(request.folderKey)) {
91
+ throw new ToolInputError("FOLDER_KEY_UNKNOWN", `requests[${index}] references folderKey "${request.folderKey}" which is not declared in folders.`);
92
+ }
93
+ }
94
+ if (collectionName) {
95
+ const existing = (await loadCollections(ctx, ws.id)).find((entry) => sameName(entry.name, collectionName));
96
+ if (existing) {
97
+ throw new ToolInputError("COLLECTION_NAME_EXISTS", `A collection named "${existing.name}" already exists (id ${existing.id}). Use collection: "${existing.id}" to add to it, or pick another name.`, {
98
+ existing: { id: existing.id, name: existing.name },
99
+ });
100
+ }
101
+ const payload = {
102
+ collectionName: collectionName.trim(),
103
+ ...(folders && folders.length > 0 ? { folders } : {}),
104
+ requests: requests.map(toFlatImportRequest),
105
+ };
106
+ if (dryRun) {
107
+ return ok({ dryRun: true, mode: "new-collection", collectionName, folderCount: folders?.length ?? 0, requestCount: requests.length, sample: requests.slice(0, 5).map((request) => `${request.method} ${request.name}`) });
108
+ }
109
+ const result = await ctx.api.importJson(ws.id, { format: "requests", payload });
110
+ ctx.invalidate(`collections:${ws.id}`);
111
+ return ok({
112
+ collection: { id: result.collection.id, name: result.collection.name },
113
+ created: result.importedCounts,
114
+ note: "Created atomically. Open the collection in the desktop app (it refreshes when it regains focus).",
115
+ });
116
+ }
117
+ const resolved = await resolveCollection(ctx, ws.id, collection);
118
+ const tree = await loadTree(ctx, ws.id, resolved.item.id);
119
+ // Resolve every folder reference up front so a typo fails before any write.
120
+ const folderIdByRef = new Map();
121
+ for (const request of requests) {
122
+ const ref = request.folder ?? "";
123
+ if (!folderIdByRef.has(ref)) {
124
+ folderIdByRef.set(ref, ref ? (await resolveFolder(ctx, ws.id, resolved.item.id, ref))?.item.id ?? null : null);
125
+ }
126
+ }
127
+ const duplicates = requests.filter((request) => tree.requests.some((existing) => sameName(existing.name, request.name) && existing.folderId === folderIdByRef.get(request.folder ?? "")));
128
+ if (dryRun) {
129
+ return ok({
130
+ dryRun: true,
131
+ mode: "existing-collection",
132
+ collection: { id: resolved.item.id, name: resolved.item.name },
133
+ requestCount: requests.length,
134
+ duplicateNames: duplicates.map((request) => request.name),
135
+ sample: requests.slice(0, 5).map((request) => `${request.method} ${request.name}`),
136
+ });
137
+ }
138
+ const created = [];
139
+ const failed = [];
140
+ for (const request of requests) {
141
+ try {
142
+ const row = await ctx.api.createRequest(ws.id, toCreateRequestPayload(request, { collectionId: resolved.item.id, folderId: folderIdByRef.get(request.folder ?? "") ?? null }));
143
+ created.push({ id: row.id, name: row.name, method: row.method });
144
+ }
145
+ catch (error) {
146
+ failed.push({ name: request.name, error: error instanceof CallmanApiError ? `${error.code}: ${error.message}` : error instanceof Error ? error.message : String(error) });
147
+ }
148
+ }
149
+ ctx.invalidate(`tree:${ws.id}:${resolved.item.id}`);
150
+ ctx.invalidate(`collections:${ws.id}`);
151
+ return ok({
152
+ collection: { id: resolved.item.id, name: resolved.item.name },
153
+ created: created.length,
154
+ failed,
155
+ requests: created,
156
+ ...(duplicates.length > 0 ? { note: `${duplicates.length} request name(s) already existed in the same folder and were created again: ${duplicates.map((request) => request.name).join(", ")}` } : {}),
157
+ resolved: [resolvedSummary(collection, resolved)],
158
+ });
159
+ }));
160
+ server.registerTool("update_request", {
161
+ title: "Update a request",
162
+ description: "Change fields of a saved request (only the fields you pass change). To move it, use move_requests. Sending `headers`/`query` replaces the whole list.",
163
+ inputSchema: {
164
+ workspace: workspaceArg,
165
+ request: refArg("Request", "(name, \"METHOD url\" or id)"),
166
+ ...updateRequestInputSchema.shape,
167
+ },
168
+ annotations: IDEMPOTENT_WRITE,
169
+ }, guarded(async ({ workspace, request, collection, ...changes }) => {
170
+ const ws = await ctx.resolveWorkspace(workspace);
171
+ const { request: found, annotation } = await resolveRequest(ctx, ws.id, request, collection);
172
+ const folder = changes.folder !== undefined ? await resolveFolder(ctx, ws.id, found.collectionId, changes.folder) : undefined;
173
+ const payload = toUpdateRequestPayload(changes, { ...(folder !== undefined ? { folderId: folder?.item.id ?? null } : {}) });
174
+ if (Object.keys(payload).length === 0)
175
+ throw new ToolInputError("NOTHING_TO_UPDATE", "Pass at least one field to change.");
176
+ const updated = await ctx.api.updateRequest(ws.id, found.id, payload);
177
+ ctx.invalidate(`tree:${ws.id}:${found.collectionId}`);
178
+ return ok({ request: compactRequestView(updated), changed: Object.keys(payload), ...(annotation ? { resolved: [{ input: request, matched: found.name, id: found.id, note: annotation }] } : {}) });
179
+ }));
180
+ server.registerTool("move_requests", {
181
+ title: "Move requests",
182
+ description: "Move up to 200 requests (ids or unique names) into a collection and optional folder.",
183
+ inputSchema: {
184
+ workspace: workspaceArg,
185
+ requests: z.array(z.string().min(1).max(500)).min(1).max(MOVE_MAX),
186
+ targetCollection: refArg("Target collection"),
187
+ targetFolder: z.string().max(300).optional().describe("Folder id, name or path in the target collection; omit for top level"),
188
+ sourceCollection: z.string().max(200).optional().describe("Narrow name lookups to one collection"),
189
+ },
190
+ annotations: IDEMPOTENT_WRITE,
191
+ }, guarded(async ({ workspace, requests, targetCollection, targetFolder, sourceCollection }) => {
192
+ const ws = await ctx.resolveWorkspace(workspace);
193
+ const target = await resolveCollection(ctx, ws.id, targetCollection);
194
+ const folder = await resolveFolder(ctx, ws.id, target.item.id, targetFolder);
195
+ const moved = [];
196
+ const failed = [];
197
+ const touchedCollections = new Set([target.item.id]);
198
+ for (const ref of requests) {
199
+ try {
200
+ const { request } = await resolveRequest(ctx, ws.id, ref, sourceCollection);
201
+ touchedCollections.add(request.collectionId);
202
+ const updated = await ctx.api.updateRequest(ws.id, request.id, { collectionId: target.item.id, folderId: folder?.item.id ?? null });
203
+ moved.push({ id: updated.id, name: updated.name });
204
+ }
205
+ catch (error) {
206
+ failed.push({ request: ref, error: error instanceof Error ? error.message : String(error) });
207
+ }
208
+ }
209
+ for (const collectionId of touchedCollections)
210
+ ctx.invalidate(`tree:${ws.id}:${collectionId}`);
211
+ ctx.invalidate(`collections:${ws.id}`);
212
+ return ok({ target: { collection: { id: target.item.id, name: target.item.name }, folder: folder ? { id: folder.item.id, path: folder.item.path } : null }, moved, failed });
213
+ }));
214
+ server.registerTool("delete_requests", {
215
+ title: "Delete requests",
216
+ description: "Delete up to 200 requests (ids or unique names). Permanent — confirm with the user first.",
217
+ inputSchema: {
218
+ workspace: workspaceArg,
219
+ requests: z.array(z.string().min(1).max(500)).min(1).max(MOVE_MAX),
220
+ collection: z.string().max(200).optional().describe("Narrow name lookups to one collection"),
221
+ confirm: confirmArg,
222
+ },
223
+ annotations: DESTRUCTIVE,
224
+ }, guarded(async ({ workspace, requests, collection, confirm }) => {
225
+ requireConfirm(confirm, "requests");
226
+ const ws = await ctx.resolveWorkspace(workspace);
227
+ const deleted = [];
228
+ const failed = [];
229
+ const touched = new Set();
230
+ for (const ref of requests) {
231
+ try {
232
+ const { request } = await resolveRequest(ctx, ws.id, ref, collection);
233
+ await ctx.api.deleteRequest(ws.id, request.id);
234
+ touched.add(request.collectionId);
235
+ deleted.push({ id: request.id, name: request.name });
236
+ }
237
+ catch (error) {
238
+ failed.push({ request: ref, error: error instanceof Error ? error.message : String(error) });
239
+ }
240
+ }
241
+ for (const collectionId of touched)
242
+ ctx.invalidate(`tree:${ws.id}:${collectionId}`);
243
+ ctx.invalidate(`collections:${ws.id}`);
244
+ return ok({ deleted, failed });
245
+ }));
246
+ };
247
+ //# sourceMappingURL=requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/tools/requests.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 registerRunTools: (server: McpServer, ctx: ToolContext) => void;
4
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AA4DjD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IAwHtE,CAAC"}
@@ -0,0 +1,167 @@
1
+ import { z } from "zod";
2
+ import { ToolInputError } from "../client/errors.js";
3
+ import { resolvedSummary } from "../domain/resolve.js";
4
+ import { maskHeaderRecord } from "../lib/mask.js";
5
+ import { LIMITS } from "../lib/truncate.js";
6
+ import { executeCollection } from "../run/executeCollection.js";
7
+ import { buildConnectionRuntimeMap, validateCollection } from "../run/loadBundle.js";
8
+ import { summarizeRun } from "../run/summarize.js";
9
+ import { loadTree, requestIdsInFolder, resolveCollection, resolveEnvironment, resolveFolder, resolveRequest } from "./lookups.js";
10
+ import { guarded, ok, refArg, RUN, workspaceArg } from "./shared.js";
11
+ // Local execution — the same path as callme-cli: the pipeline bundle
12
+ // (collection + environment values + connection configs) is fetched with the
13
+ // token, requests run HERE through callman-core, and only the results go back
14
+ // to the model. Variable values are never in the output. One run at a time.
15
+ const maxBodyArg = z.number().int().min(256).max(LIMITS.RUN_BODY_MAX).optional().describe("Response body preview cap in bytes (default 16 KB)");
16
+ const prepareRun = async (ctx, ws, collectionId, environmentRef) => {
17
+ const environment = environmentRef ? (await resolveEnvironment(ctx, ws, environmentRef)).item : null;
18
+ const bundle = await ctx.api.pipelineBundle(ws, collectionId, environment?.id ?? null);
19
+ const warnings = [];
20
+ // Global variables apply underneath the environment. They come back masked
21
+ // unless the token can reveal them — a masked value would break requests,
22
+ // so they are only merged when the real values are available.
23
+ let globals = {};
24
+ const scopes = await ctx.getTokenScopes();
25
+ if (scopes.includes("environments:reveal")) {
26
+ try {
27
+ globals = Object.fromEntries((await ctx.api.listGlobalVariables(ws, true)).map((variable) => [variable.key, variable.value]));
28
+ }
29
+ catch (error) {
30
+ warnings.push(`Global variables not applied: ${error instanceof Error ? error.message : String(error)}`);
31
+ }
32
+ }
33
+ else {
34
+ warnings.push("Global variables were not applied (the token lacks environments:reveal). Environment variables are applied.");
35
+ }
36
+ const collection = validateCollection(bundle.collection);
37
+ const { map, skipped } = buildConnectionRuntimeMap(bundle.connections);
38
+ if (skipped.length > 0)
39
+ warnings.push(`Connections not usable in a local run: ${skipped.join(", ")}`);
40
+ if (collection.runnerSettings?.kafka)
41
+ warnings.push("Kafka steps never run from an AI tool.");
42
+ return {
43
+ collection,
44
+ env: { ...globals, ...(bundle.environment?.variables ?? {}) },
45
+ connections: map,
46
+ environment: bundle.environment ? { id: bundle.environment.id, name: bundle.environment.name } : null,
47
+ warnings,
48
+ };
49
+ };
50
+ export const registerRunTools = (server, ctx) => {
51
+ server.registerTool("run_request", {
52
+ title: "Run a request locally",
53
+ description: "Execute one saved request from this machine with an environment's variables (like the desktop's Send / callme run): returns status, timing, response headers and a bounded body preview, plus test and contract results and the NAMES of variables the scripts changed (never values). dryRun: true shows the resolved request without sending it. Needs requests:run.",
54
+ inputSchema: {
55
+ workspace: workspaceArg,
56
+ request: refArg("Request", "(name, \"METHOD url\" or id)"),
57
+ collection: z.string().max(200).optional().describe("Narrow a name lookup to one collection"),
58
+ environment: z.string().max(200).optional().describe("Environment name or id; omit to run without one"),
59
+ dryRun: z.boolean().optional(),
60
+ maxBodyBytes: maxBodyArg,
61
+ },
62
+ annotations: RUN,
63
+ }, guarded(async ({ workspace, request, collection, environment, dryRun, maxBodyBytes }) => {
64
+ const ws = await ctx.resolveWorkspace(workspace);
65
+ const { request: found, annotation } = await resolveRequest(ctx, ws.id, request, collection);
66
+ const prepared = await prepareRun(ctx, ws.id, found.collectionId, environment);
67
+ const runnable = prepared.collection.requests.find((entry) => entry.id === found.id);
68
+ if (!runnable)
69
+ throw new ToolInputError("REQUEST_NOT_IN_BUNDLE", "The request is not part of the collection bundle (was it just deleted?).");
70
+ if (dryRun) {
71
+ const { resolveTemplate } = await import("../run/resolveTemplate.js");
72
+ const env = prepared.env;
73
+ return ok({
74
+ dryRun: true,
75
+ request: {
76
+ id: runnable.id,
77
+ name: runnable.name,
78
+ method: runnable.method,
79
+ url: resolveTemplate(runnable.url, env),
80
+ headers: maskHeaderRecord(Object.fromEntries(Object.entries(runnable.headers ?? {}).map(([key, value]) => [key, resolveTemplate(value, env)]))),
81
+ query: Object.fromEntries(Object.entries(runnable.query ?? {}).map(([key, value]) => [key, resolveTemplate(value, env)])),
82
+ body: runnable.body ?? null,
83
+ hasPreRequestScript: Boolean(runnable.preRequestScript),
84
+ hasTests: Boolean(runnable.tests),
85
+ },
86
+ environment: prepared.environment,
87
+ availableVariableKeys: Object.keys(env),
88
+ unresolvedVariables: unresolved([runnable.url, ...Object.values(runnable.headers ?? {}), ...Object.values(runnable.query ?? {})], env),
89
+ warnings: prepared.warnings,
90
+ });
91
+ }
92
+ const outcome = await ctx.withRunLock(() => executeCollection({
93
+ collection: prepared.collection,
94
+ env: prepared.env,
95
+ connections: prepared.connections,
96
+ only: [found.id],
97
+ deadlineMs: ctx.config.runTimeoutMs,
98
+ }));
99
+ const summary = summarizeRun(outcome, maxBodyBytes ?? ctx.config.maxBodyBytes, {
100
+ collection: { id: found.collectionId },
101
+ environment: prepared.environment,
102
+ warnings: prepared.warnings,
103
+ ...(annotation ? { resolved: [{ input: request, matched: found.name, id: found.id, note: annotation }] } : {}),
104
+ });
105
+ return ok({ ...summary, result: summary.results[0] ?? null });
106
+ }));
107
+ server.registerTool("run_collection", {
108
+ title: "Run a collection locally",
109
+ description: "Run a collection (or one folder of it, or specific requests) sequentially from this machine with an environment, sharing variables between requests like the collection runner. Returns per-request results (bounded bodies), a pass/fail summary and the variable names scripts changed. `bail` stops at the first failure. Needs requests:run.",
110
+ inputSchema: {
111
+ workspace: workspaceArg,
112
+ collection: refArg("Collection"),
113
+ folder: z.string().max(300).optional().describe("Run only this folder (id, name or path), subfolders included"),
114
+ only: z.array(z.string().min(1).max(500)).max(200).optional().describe("Run only these requests (ids or names)"),
115
+ environment: z.string().max(200).optional(),
116
+ bail: z.boolean().optional(),
117
+ maxBodyBytes: maxBodyArg,
118
+ },
119
+ annotations: RUN,
120
+ }, guarded(async ({ workspace, collection, folder, only, environment, bail, maxBodyBytes }) => {
121
+ const ws = await ctx.resolveWorkspace(workspace);
122
+ const resolved = await resolveCollection(ctx, ws.id, collection);
123
+ const prepared = await prepareRun(ctx, ws.id, resolved.item.id, environment);
124
+ let selection = null;
125
+ if (folder) {
126
+ const target = await resolveFolder(ctx, ws.id, resolved.item.id, folder);
127
+ if (!target)
128
+ throw new ToolInputError("REF_REQUIRED", "folder is required.");
129
+ selection = requestIdsInFolder(await loadTree(ctx, ws.id, resolved.item.id), target.item.id);
130
+ }
131
+ if (only && only.length > 0) {
132
+ const ids = [];
133
+ for (const ref of only)
134
+ ids.push((await resolveRequest(ctx, ws.id, ref, resolved.item.id)).request.id);
135
+ selection = selection ? ids.filter((id) => selection?.includes(id)) : ids;
136
+ }
137
+ if (selection && selection.length === 0)
138
+ throw new ToolInputError("NOTHING_TO_RUN", "The selection contains no requests.");
139
+ const outcome = await ctx.withRunLock(() => executeCollection({
140
+ collection: prepared.collection,
141
+ env: prepared.env,
142
+ connections: prepared.connections,
143
+ only: selection,
144
+ bail: bail ?? false,
145
+ deadlineMs: ctx.config.runTimeoutMs,
146
+ }));
147
+ return ok(summarizeRun(outcome, maxBodyBytes ?? ctx.config.maxBodyBytes, {
148
+ collection: { id: resolved.item.id, name: resolved.item.name },
149
+ environment: prepared.environment,
150
+ warnings: prepared.warnings,
151
+ resolved: [resolvedSummary(collection, resolved)],
152
+ }));
153
+ }));
154
+ };
155
+ const TEMPLATE = /\{\{\s*([^}]+?)\s*\}\}/g;
156
+ const unresolved = (values, env) => {
157
+ const missing = new Set();
158
+ for (const value of values) {
159
+ for (const match of value.matchAll(TEMPLATE)) {
160
+ const key = match[1].trim();
161
+ if (!(key in env) && !key.startsWith("$") && !key.startsWith("data."))
162
+ missing.add(key);
163
+ }
164
+ }
165
+ return [...missing];
166
+ };
167
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.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 registerScenarioTools: (server: McpServer, ctx: ToolContext) => void;
4
+ //# sourceMappingURL=scenarios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenarios.d.ts","sourceRoot":"","sources":["../../src/tools/scenarios.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAYjD,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,EAAE,KAAK,WAAW,KAAG,IAqQ3E,CAAC"}