@cesteral/snapchat-mcp 1.0.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 (263) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +336 -0
  3. package/dist/auth/index.d.ts +3 -0
  4. package/dist/auth/index.d.ts.map +1 -0
  5. package/dist/auth/index.js +3 -0
  6. package/dist/auth/index.js.map +1 -0
  7. package/dist/auth/snapchat-auth-adapter.d.ts +44 -0
  8. package/dist/auth/snapchat-auth-adapter.d.ts.map +1 -0
  9. package/dist/auth/snapchat-auth-adapter.js +127 -0
  10. package/dist/auth/snapchat-auth-adapter.js.map +1 -0
  11. package/dist/auth/snapchat-auth-strategy.d.ts +13 -0
  12. package/dist/auth/snapchat-auth-strategy.d.ts.map +1 -0
  13. package/dist/auth/snapchat-auth-strategy.js +54 -0
  14. package/dist/auth/snapchat-auth-strategy.js.map +1 -0
  15. package/dist/config/index.d.ts +124 -0
  16. package/dist/config/index.d.ts.map +1 -0
  17. package/dist/config/index.js +57 -0
  18. package/dist/config/index.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +46 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
  24. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
  25. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +127 -0
  26. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
  27. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
  28. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
  29. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +121 -0
  30. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
  31. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts +4 -0
  32. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts.map +1 -0
  33. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js +121 -0
  34. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js.map +1 -0
  35. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
  36. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
  37. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
  38. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
  39. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
  40. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
  41. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
  42. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
  43. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
  44. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
  45. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +198 -0
  46. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
  47. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
  48. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
  49. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +189 -0
  50. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
  51. package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts +4 -0
  52. package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts.map +1 -0
  53. package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js +126 -0
  54. package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js.map +1 -0
  55. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts +4 -0
  56. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts.map +1 -0
  57. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js +198 -0
  58. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js.map +1 -0
  59. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
  60. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
  61. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +91 -0
  62. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
  63. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts +4 -0
  64. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts.map +1 -0
  65. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js +111 -0
  66. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js.map +1 -0
  67. package/dist/mcp-server/prompts/index.d.ts +9 -0
  68. package/dist/mcp-server/prompts/index.d.ts.map +1 -0
  69. package/dist/mcp-server/prompts/index.js +89 -0
  70. package/dist/mcp-server/prompts/index.js.map +1 -0
  71. package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
  72. package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
  73. package/dist/mcp-server/resources/definitions/entity-examples.resource.js +177 -0
  74. package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
  75. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
  76. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
  77. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +194 -0
  78. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
  79. package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
  80. package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
  81. package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +117 -0
  82. package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
  83. package/dist/mcp-server/resources/definitions/index.d.ts +7 -0
  84. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  85. package/dist/mcp-server/resources/definitions/index.js +54 -0
  86. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  87. package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts +3 -0
  88. package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts.map +1 -0
  89. package/dist/mcp-server/resources/definitions/reporting-reference.resource.js +148 -0
  90. package/dist/mcp-server/resources/definitions/reporting-reference.resource.js.map +1 -0
  91. package/dist/mcp-server/resources/index.d.ts +3 -0
  92. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  93. package/dist/mcp-server/resources/index.js +2 -0
  94. package/dist/mcp-server/resources/index.js.map +1 -0
  95. package/dist/mcp-server/resources/types.d.ts +8 -0
  96. package/dist/mcp-server/resources/types.d.ts.map +1 -0
  97. package/dist/mcp-server/resources/types.js +2 -0
  98. package/dist/mcp-server/resources/types.js.map +1 -0
  99. package/dist/mcp-server/server.d.ts +5 -0
  100. package/dist/mcp-server/server.d.ts.map +1 -0
  101. package/dist/mcp-server/server.js +134 -0
  102. package/dist/mcp-server/server.js.map +1 -0
  103. package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +209 -0
  104. package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
  105. package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +141 -0
  106. package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
  107. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +163 -0
  108. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
  109. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +119 -0
  110. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
  111. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts +241 -0
  112. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts.map +1 -0
  113. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js +149 -0
  114. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js.map +1 -0
  115. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +203 -0
  116. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
  117. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +154 -0
  118. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
  119. package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts +119 -0
  120. package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts.map +1 -0
  121. package/dist/mcp-server/tools/definitions/check-report-status.tool.js +89 -0
  122. package/dist/mcp-server/tools/definitions/check-report-status.tool.js.map +1 -0
  123. package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +131 -0
  124. package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts.map +1 -0
  125. package/dist/mcp-server/tools/definitions/create-entity.tool.js +116 -0
  126. package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
  127. package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts +100 -0
  128. package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts.map +1 -0
  129. package/dist/mcp-server/tools/definitions/delete-entity.tool.js +110 -0
  130. package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
  131. package/dist/mcp-server/tools/definitions/download-report.tool.d.ts +297 -0
  132. package/dist/mcp-server/tools/definitions/download-report.tool.d.ts.map +1 -0
  133. package/dist/mcp-server/tools/definitions/download-report.tool.js +103 -0
  134. package/dist/mcp-server/tools/definitions/download-report.tool.js.map +1 -0
  135. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +105 -0
  136. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts.map +1 -0
  137. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js +93 -0
  138. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js.map +1 -0
  139. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +68 -0
  140. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
  141. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +61 -0
  142. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
  143. package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts +104 -0
  144. package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts.map +1 -0
  145. package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js +107 -0
  146. package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js.map +1 -0
  147. package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +76 -0
  148. package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
  149. package/dist/mcp-server/tools/definitions/get-entity.tool.js +71 -0
  150. package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
  151. package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts +295 -0
  152. package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts.map +1 -0
  153. package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js +172 -0
  154. package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js.map +1 -0
  155. package/dist/mcp-server/tools/definitions/get-report.tool.d.ts +279 -0
  156. package/dist/mcp-server/tools/definitions/get-report.tool.d.ts.map +1 -0
  157. package/dist/mcp-server/tools/definitions/get-report.tool.js +166 -0
  158. package/dist/mcp-server/tools/definitions/get-report.tool.js.map +1 -0
  159. package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +89 -0
  160. package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts.map +1 -0
  161. package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js +99 -0
  162. package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
  163. package/dist/mcp-server/tools/definitions/index.d.ts +25 -0
  164. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  165. package/dist/mcp-server/tools/definitions/index.js +75 -0
  166. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  167. package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts +54 -0
  168. package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts.map +1 -0
  169. package/dist/mcp-server/tools/definitions/list-advertisers.tool.js +61 -0
  170. package/dist/mcp-server/tools/definitions/list-advertisers.tool.js.map +1 -0
  171. package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +161 -0
  172. package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts.map +1 -0
  173. package/dist/mcp-server/tools/definitions/list-entities.tool.js +94 -0
  174. package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
  175. package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts +103 -0
  176. package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts.map +1 -0
  177. package/dist/mcp-server/tools/definitions/search-targeting.tool.js +108 -0
  178. package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
  179. package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts +134 -0
  180. package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts.map +1 -0
  181. package/dist/mcp-server/tools/definitions/submit-report.tool.js +110 -0
  182. package/dist/mcp-server/tools/definitions/submit-report.tool.js.map +1 -0
  183. package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +155 -0
  184. package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
  185. package/dist/mcp-server/tools/definitions/update-entity.tool.js +115 -0
  186. package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
  187. package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts +82 -0
  188. package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts.map +1 -0
  189. package/dist/mcp-server/tools/definitions/upload-image.tool.js +111 -0
  190. package/dist/mcp-server/tools/definitions/upload-image.tool.js.map +1 -0
  191. package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts +82 -0
  192. package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts.map +1 -0
  193. package/dist/mcp-server/tools/definitions/upload-video.tool.js +109 -0
  194. package/dist/mcp-server/tools/definitions/upload-video.tool.js.map +1 -0
  195. package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +169 -0
  196. package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
  197. package/dist/mcp-server/tools/definitions/validate-entity.tool.js +204 -0
  198. package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
  199. package/dist/mcp-server/tools/index.d.ts +2 -0
  200. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  201. package/dist/mcp-server/tools/index.js +2 -0
  202. package/dist/mcp-server/tools/index.js.map +1 -0
  203. package/dist/mcp-server/tools/utils/entity-mapping.d.ts +18 -0
  204. package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
  205. package/dist/mcp-server/tools/utils/entity-mapping.js +96 -0
  206. package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
  207. package/dist/mcp-server/tools/utils/media-types.d.ts +19 -0
  208. package/dist/mcp-server/tools/utils/media-types.d.ts.map +1 -0
  209. package/dist/mcp-server/tools/utils/media-types.js +2 -0
  210. package/dist/mcp-server/tools/utils/media-types.js.map +1 -0
  211. package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
  212. package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
  213. package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
  214. package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
  215. package/dist/mcp-server/transports/streamable-http-transport.d.ts +61 -0
  216. package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
  217. package/dist/mcp-server/transports/streamable-http-transport.js +105 -0
  218. package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
  219. package/dist/services/session-services.d.ts +20 -0
  220. package/dist/services/session-services.d.ts.map +1 -0
  221. package/dist/services/session-services.js +23 -0
  222. package/dist/services/session-services.js.map +1 -0
  223. package/dist/services/snapchat/snapchat-http-client.d.ts +16 -0
  224. package/dist/services/snapchat/snapchat-http-client.d.ts.map +1 -0
  225. package/dist/services/snapchat/snapchat-http-client.js +153 -0
  226. package/dist/services/snapchat/snapchat-http-client.js.map +1 -0
  227. package/dist/services/snapchat/snapchat-reporting-service.d.ts +64 -0
  228. package/dist/services/snapchat/snapchat-reporting-service.d.ts.map +1 -0
  229. package/dist/services/snapchat/snapchat-reporting-service.js +172 -0
  230. package/dist/services/snapchat/snapchat-reporting-service.js.map +1 -0
  231. package/dist/services/snapchat/snapchat-service.d.ts +82 -0
  232. package/dist/services/snapchat/snapchat-service.d.ts.map +1 -0
  233. package/dist/services/snapchat/snapchat-service.js +321 -0
  234. package/dist/services/snapchat/snapchat-service.js.map +1 -0
  235. package/dist/services/snapchat/types.d.ts +136 -0
  236. package/dist/services/snapchat/types.d.ts.map +1 -0
  237. package/dist/services/snapchat/types.js +59 -0
  238. package/dist/services/snapchat/types.js.map +1 -0
  239. package/dist/types-global/mcp.d.ts +2 -0
  240. package/dist/types-global/mcp.d.ts.map +1 -0
  241. package/dist/types-global/mcp.js +2 -0
  242. package/dist/types-global/mcp.js.map +1 -0
  243. package/dist/utils/errors/index.d.ts +2 -0
  244. package/dist/utils/errors/index.d.ts.map +1 -0
  245. package/dist/utils/errors/index.js +2 -0
  246. package/dist/utils/errors/index.js.map +1 -0
  247. package/dist/utils/platform.d.ts +3 -0
  248. package/dist/utils/platform.d.ts.map +1 -0
  249. package/dist/utils/platform.js +5 -0
  250. package/dist/utils/platform.js.map +1 -0
  251. package/dist/utils/security/rate-limiter.d.ts +3 -0
  252. package/dist/utils/security/rate-limiter.d.ts.map +1 -0
  253. package/dist/utils/security/rate-limiter.js +5 -0
  254. package/dist/utils/security/rate-limiter.js.map +1 -0
  255. package/dist/utils/telemetry/index.d.ts +2 -0
  256. package/dist/utils/telemetry/index.d.ts.map +1 -0
  257. package/dist/utils/telemetry/index.js +2 -0
  258. package/dist/utils/telemetry/index.js.map +1 -0
  259. package/dist/utils/telemetry/tracing.d.ts +3 -0
  260. package/dist/utils/telemetry/tracing.d.ts.map +1 -0
  261. package/dist/utils/telemetry/tracing.js +4 -0
  262. package/dist/utils/telemetry/tracing.js.map +1 -0
  263. package/package.json +55 -0
@@ -0,0 +1,141 @@
1
+ import { z } from "zod";
2
+ import { resolveSessionServices } from "../utils/resolve-session.js";
3
+ import { elicitBidChangeConfirmation } from "@cesteral/shared";
4
+ const TOOL_NAME = "snapchat_adjust_bids";
5
+ const TOOL_TITLE = "Snapchat Ad Group Bid Adjustment";
6
+ const TOOL_DESCRIPTION = `Batch adjust ad group bid prices with safe read-modify-write.
7
+
8
+ Reads current bid prices, applies new values, and reports previous/new amounts.
9
+ Bid prices are in the advertiser's account currency.
10
+
11
+ **Gotchas:**
12
+ - Only applies to ad groups with manual bidding (bid_price field).
13
+ - Ad groups using automated bidding strategies may ignore bid_price.
14
+ - Each read + write pair consumes rate limit tokens.
15
+ - Max 50 adjustments per call.`;
16
+ export const AdjustBidsInputSchema = z
17
+ .object({
18
+ adAccountId: z.string().min(1).describe("Snapchat Advertiser ID"),
19
+ adjustments: z
20
+ .array(z.object({
21
+ adGroupId: z.string().min(1).describe("The ad group ID to adjust"),
22
+ bidPrice: z.number().positive().describe("New bid price in the advertiser's currency"),
23
+ }))
24
+ .min(1)
25
+ .max(50)
26
+ .describe("Bid adjustments to apply (max 50)"),
27
+ reason: z.string().optional().describe("Optional reason for the bid adjustment"),
28
+ })
29
+ .describe("Parameters for batch bid adjustment on Snapchat ad groups");
30
+ export const AdjustBidsOutputSchema = z
31
+ .object({
32
+ confirmed: z.boolean(),
33
+ declineReason: z.string().optional(),
34
+ totalRequested: z.number(),
35
+ totalSucceeded: z.number(),
36
+ totalFailed: z.number(),
37
+ results: z.array(z.object({
38
+ adGroupId: z.string(),
39
+ success: z.boolean(),
40
+ previousBid: z.number().optional(),
41
+ newBid: z.number().optional(),
42
+ error: z.string().optional(),
43
+ })),
44
+ timestamp: z.string().datetime(),
45
+ })
46
+ .describe("Bid adjustment results");
47
+ export async function adjustBidsLogic(input, context, sdkContext) {
48
+ const confirmed = await elicitBidChangeConfirmation({
49
+ count: input.adjustments.length,
50
+ entityLabel: "ad squad",
51
+ summary: input.reason ?? "Applying bid_price changes.",
52
+ impactPreview: input.adjustments.map((a) => a.adGroupId),
53
+ sdkContext,
54
+ });
55
+ if (!confirmed) {
56
+ return {
57
+ confirmed: false,
58
+ declineReason: "user_declined",
59
+ totalRequested: input.adjustments.length,
60
+ totalSucceeded: 0,
61
+ totalFailed: 0,
62
+ results: [],
63
+ timestamp: new Date().toISOString(),
64
+ };
65
+ }
66
+ const { snapchatService } = resolveSessionServices(sdkContext);
67
+ const result = await snapchatService.adjustBids(input.adjustments.map((a) => ({
68
+ adGroupId: a.adGroupId,
69
+ bidPrice: a.bidPrice,
70
+ })), context);
71
+ const totalSucceeded = result.results.filter((r) => r.success).length;
72
+ return {
73
+ confirmed: true,
74
+ totalRequested: input.adjustments.length,
75
+ totalSucceeded,
76
+ totalFailed: input.adjustments.length - totalSucceeded,
77
+ results: result.results,
78
+ timestamp: new Date().toISOString(),
79
+ };
80
+ }
81
+ export function adjustBidsResponseFormatter(result) {
82
+ if (!result.confirmed) {
83
+ return [
84
+ {
85
+ type: "text",
86
+ text: `Bid adjustments cancelled by user.\n\nTimestamp: ${result.timestamp}`,
87
+ },
88
+ ];
89
+ }
90
+ const lines = [
91
+ `Bid adjustments: ${result.totalSucceeded}/${result.totalRequested} succeeded, ${result.totalFailed} failed`,
92
+ "",
93
+ ];
94
+ for (const r of result.results) {
95
+ if (r.success) {
96
+ const prev = r.previousBid ?? "unknown";
97
+ lines.push(` ${r.adGroupId}: ${prev} -> ${r.newBid}`);
98
+ }
99
+ else {
100
+ lines.push(` ${r.adGroupId}: FAILED - ${r.error}`);
101
+ }
102
+ }
103
+ lines.push("", `Timestamp: ${result.timestamp}`);
104
+ return [{ type: "text", text: lines.join("\n") }];
105
+ }
106
+ export const adjustBidsTool = {
107
+ name: TOOL_NAME,
108
+ title: TOOL_TITLE,
109
+ description: TOOL_DESCRIPTION,
110
+ inputSchema: AdjustBidsInputSchema,
111
+ outputSchema: AdjustBidsOutputSchema,
112
+ annotations: {
113
+ readOnlyHint: false,
114
+ openWorldHint: true,
115
+ idempotentHint: true,
116
+ destructiveHint: true,
117
+ },
118
+ inputExamples: [
119
+ {
120
+ label: "Single bid adjustment",
121
+ input: {
122
+ adAccountId: "1234567890",
123
+ adjustments: [{ adGroupId: "1700123456789", bidPrice: 1.5 }],
124
+ },
125
+ },
126
+ {
127
+ label: "Multiple bid adjustments with reason",
128
+ input: {
129
+ adAccountId: "1234567890",
130
+ adjustments: [
131
+ { adGroupId: "1700111111111", bidPrice: 2.0 },
132
+ { adGroupId: "1700222222222", bidPrice: 1.2 },
133
+ ],
134
+ reason: "Increase bids to improve delivery pacing",
135
+ },
136
+ },
137
+ ],
138
+ logic: adjustBidsLogic,
139
+ responseFormatter: adjustBidsResponseFormatter,
140
+ };
141
+ //# sourceMappingURL=adjust-bids.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adjust-bids.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/adjust-bids.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ import { z } from "zod";
2
+ import type { RequestContext, McpTextContent } from "@cesteral/shared";
3
+ import type { SdkContext } from "@cesteral/shared";
4
+ export declare const BulkCreateEntitiesInputSchema: z.ZodObject<{
5
+ entityType: z.ZodEnum<[string, ...string[]]>;
6
+ adAccountId: z.ZodString;
7
+ campaignId: z.ZodOptional<z.ZodString>;
8
+ adSquadId: z.ZodOptional<z.ZodString>;
9
+ items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">;
10
+ }, "strip", z.ZodTypeAny, {
11
+ adAccountId: string;
12
+ entityType: string;
13
+ items: Record<string, any>[];
14
+ campaignId?: string | undefined;
15
+ adSquadId?: string | undefined;
16
+ }, {
17
+ adAccountId: string;
18
+ entityType: string;
19
+ items: Record<string, any>[];
20
+ campaignId?: string | undefined;
21
+ adSquadId?: string | undefined;
22
+ }>;
23
+ export declare const BulkCreateEntitiesOutputSchema: z.ZodObject<{
24
+ totalRequested: z.ZodNumber;
25
+ successCount: z.ZodNumber;
26
+ failureCount: z.ZodNumber;
27
+ results: z.ZodArray<z.ZodObject<{
28
+ success: z.ZodBoolean;
29
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
30
+ error: z.ZodOptional<z.ZodString>;
31
+ } & {
32
+ index: z.ZodNumber;
33
+ }, "strip", z.ZodTypeAny, {
34
+ success: boolean;
35
+ index: number;
36
+ error?: string | undefined;
37
+ entity?: Record<string, any> | undefined;
38
+ }, {
39
+ success: boolean;
40
+ index: number;
41
+ error?: string | undefined;
42
+ entity?: Record<string, any> | undefined;
43
+ }>, "many">;
44
+ timestamp: z.ZodString;
45
+ }, "strip", z.ZodTypeAny, {
46
+ results: {
47
+ success: boolean;
48
+ index: number;
49
+ error?: string | undefined;
50
+ entity?: Record<string, any> | undefined;
51
+ }[];
52
+ timestamp: string;
53
+ totalRequested: number;
54
+ successCount: number;
55
+ failureCount: number;
56
+ }, {
57
+ results: {
58
+ success: boolean;
59
+ index: number;
60
+ error?: string | undefined;
61
+ entity?: Record<string, any> | undefined;
62
+ }[];
63
+ timestamp: string;
64
+ totalRequested: number;
65
+ successCount: number;
66
+ failureCount: number;
67
+ }>;
68
+ type BulkCreateEntitiesInput = z.infer<typeof BulkCreateEntitiesInputSchema>;
69
+ type BulkCreateEntitiesOutput = z.infer<typeof BulkCreateEntitiesOutputSchema>;
70
+ export declare function bulkCreateEntitiesLogic(input: BulkCreateEntitiesInput, context: RequestContext, sdkContext?: SdkContext): Promise<BulkCreateEntitiesOutput>;
71
+ export declare function bulkCreateEntitiesResponseFormatter(result: BulkCreateEntitiesOutput): McpTextContent[];
72
+ export declare const bulkCreateEntitiesTool: {
73
+ name: string;
74
+ title: string;
75
+ description: string;
76
+ inputSchema: z.ZodObject<{
77
+ entityType: z.ZodEnum<[string, ...string[]]>;
78
+ adAccountId: z.ZodString;
79
+ campaignId: z.ZodOptional<z.ZodString>;
80
+ adSquadId: z.ZodOptional<z.ZodString>;
81
+ items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">;
82
+ }, "strip", z.ZodTypeAny, {
83
+ adAccountId: string;
84
+ entityType: string;
85
+ items: Record<string, any>[];
86
+ campaignId?: string | undefined;
87
+ adSquadId?: string | undefined;
88
+ }, {
89
+ adAccountId: string;
90
+ entityType: string;
91
+ items: Record<string, any>[];
92
+ campaignId?: string | undefined;
93
+ adSquadId?: string | undefined;
94
+ }>;
95
+ outputSchema: z.ZodObject<{
96
+ totalRequested: z.ZodNumber;
97
+ successCount: z.ZodNumber;
98
+ failureCount: z.ZodNumber;
99
+ results: z.ZodArray<z.ZodObject<{
100
+ success: z.ZodBoolean;
101
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
102
+ error: z.ZodOptional<z.ZodString>;
103
+ } & {
104
+ index: z.ZodNumber;
105
+ }, "strip", z.ZodTypeAny, {
106
+ success: boolean;
107
+ index: number;
108
+ error?: string | undefined;
109
+ entity?: Record<string, any> | undefined;
110
+ }, {
111
+ success: boolean;
112
+ index: number;
113
+ error?: string | undefined;
114
+ entity?: Record<string, any> | undefined;
115
+ }>, "many">;
116
+ timestamp: z.ZodString;
117
+ }, "strip", z.ZodTypeAny, {
118
+ results: {
119
+ success: boolean;
120
+ index: number;
121
+ error?: string | undefined;
122
+ entity?: Record<string, any> | undefined;
123
+ }[];
124
+ timestamp: string;
125
+ totalRequested: number;
126
+ successCount: number;
127
+ failureCount: number;
128
+ }, {
129
+ results: {
130
+ success: boolean;
131
+ index: number;
132
+ error?: string | undefined;
133
+ entity?: Record<string, any> | undefined;
134
+ }[];
135
+ timestamp: string;
136
+ totalRequested: number;
137
+ successCount: number;
138
+ failureCount: number;
139
+ }>;
140
+ annotations: {
141
+ readOnlyHint: boolean;
142
+ openWorldHint: boolean;
143
+ idempotentHint: boolean;
144
+ destructiveHint: boolean;
145
+ };
146
+ inputExamples: {
147
+ label: string;
148
+ input: {
149
+ entityType: string;
150
+ adAccountId: string;
151
+ items: {
152
+ name: string;
153
+ objective: string;
154
+ daily_budget_micro: number;
155
+ status: string;
156
+ }[];
157
+ };
158
+ }[];
159
+ logic: typeof bulkCreateEntitiesLogic;
160
+ responseFormatter: typeof bulkCreateEntitiesResponseFormatter;
161
+ };
162
+ export {};
163
+ //# sourceMappingURL=bulk-create-entities.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-create-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bulk-create-entities.tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAanD,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;EAeQ,CAAC;AAEnD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYV,CAAC;AAElC,KAAK,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAC7E,KAAK,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE/E,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,cAAc,EACvB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,wBAAwB,CAAC,CA8BnC;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,wBAAwB,GAC/B,cAAc,EAAE,CAiBlB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClC,CAAC"}
@@ -0,0 +1,119 @@
1
+ import { z } from "zod";
2
+ import { resolveSessionServices } from "../utils/resolve-session.js";
3
+ import { getEntityTypeEnum } from "../utils/entity-mapping.js";
4
+ import { BulkOperationResultSchema } from "@cesteral/shared";
5
+ const TOOL_NAME = "snapchat_bulk_create_entities";
6
+ const TOOL_TITLE = "Snapchat Bulk Create Entities";
7
+ const TOOL_DESCRIPTION = `Batch create multiple Snapchat Ads entities of the same type.
8
+
9
+ **Supported entity types:** ${getEntityTypeEnum().join(", ")}
10
+
11
+ Creates entities sequentially (with concurrency). Each item follows the same
12
+ schema as \`snapchat_create_entity\`.
13
+
14
+ Max 50 items per call. ad_account_id is automatically injected per item.`;
15
+ export const BulkCreateEntitiesInputSchema = z
16
+ .object({
17
+ entityType: z.enum(getEntityTypeEnum()).describe("Type of entities to create"),
18
+ adAccountId: z.string().min(1).describe("Snapchat Advertiser ID"),
19
+ campaignId: z
20
+ .string()
21
+ .optional()
22
+ .describe("Campaign ID — required when entityType is 'adGroup'"),
23
+ adSquadId: z.string().optional().describe("Ad Squad ID — required when entityType is 'ad'"),
24
+ items: z
25
+ .array(z.record(z.any()))
26
+ .min(1)
27
+ .max(50)
28
+ .describe("Array of entity data objects to create (max 50)"),
29
+ })
30
+ .describe("Parameters for bulk entity creation");
31
+ export const BulkCreateEntitiesOutputSchema = z
32
+ .object({
33
+ totalRequested: z.number(),
34
+ successCount: z.number(),
35
+ failureCount: z.number(),
36
+ results: z.array(BulkOperationResultSchema.extend({
37
+ index: z.number(),
38
+ })),
39
+ timestamp: z.string().datetime(),
40
+ })
41
+ .describe("Bulk create result");
42
+ export async function bulkCreateEntitiesLogic(input, context, sdkContext) {
43
+ const { snapchatService } = resolveSessionServices(sdkContext);
44
+ const filters = { adAccountId: input.adAccountId };
45
+ if (input.campaignId)
46
+ filters.campaignId = input.campaignId;
47
+ if (input.adSquadId)
48
+ filters.adSquadId = input.adSquadId;
49
+ const bulkResult = await snapchatService.bulkCreateEntities(input.entityType, filters, input.items, context);
50
+ const results = bulkResult.results.map((r, i) => ({
51
+ index: i,
52
+ success: r.success,
53
+ entity: r.entity,
54
+ error: r.error,
55
+ }));
56
+ const totalSucceeded = results.filter((r) => r.success).length;
57
+ return {
58
+ totalRequested: input.items.length,
59
+ successCount: totalSucceeded,
60
+ failureCount: input.items.length - totalSucceeded,
61
+ results,
62
+ timestamp: new Date().toISOString(),
63
+ };
64
+ }
65
+ export function bulkCreateEntitiesResponseFormatter(result) {
66
+ const lines = [
67
+ `Bulk create: ${result.successCount}/${result.totalRequested} succeeded, ${result.failureCount} failed`,
68
+ "",
69
+ ];
70
+ for (const r of result.results) {
71
+ if (r.success) {
72
+ lines.push(` [${r.index}]: SUCCESS - ${JSON.stringify(r.entity)}`);
73
+ }
74
+ else {
75
+ lines.push(` [${r.index}]: FAILED - ${r.error}`);
76
+ }
77
+ }
78
+ lines.push("", `Timestamp: ${result.timestamp}`);
79
+ return [{ type: "text", text: lines.join("\n") }];
80
+ }
81
+ export const bulkCreateEntitiesTool = {
82
+ name: TOOL_NAME,
83
+ title: TOOL_TITLE,
84
+ description: TOOL_DESCRIPTION,
85
+ inputSchema: BulkCreateEntitiesInputSchema,
86
+ outputSchema: BulkCreateEntitiesOutputSchema,
87
+ annotations: {
88
+ readOnlyHint: false,
89
+ openWorldHint: false,
90
+ idempotentHint: false,
91
+ destructiveHint: true,
92
+ },
93
+ inputExamples: [
94
+ {
95
+ label: "Bulk create campaigns",
96
+ input: {
97
+ entityType: "campaign",
98
+ adAccountId: "1234567890",
99
+ items: [
100
+ {
101
+ name: "Campaign A",
102
+ objective: "TRAFFIC",
103
+ daily_budget_micro: 10000000,
104
+ status: "ACTIVE",
105
+ },
106
+ {
107
+ name: "Campaign B",
108
+ objective: "APP_INSTALLS",
109
+ daily_budget_micro: 20000000,
110
+ status: "ACTIVE",
111
+ },
112
+ ],
113
+ },
114
+ },
115
+ ],
116
+ logic: bulkCreateEntitiesLogic,
117
+ responseFormatter: bulkCreateEntitiesResponseFormatter,
118
+ };
119
+ //# sourceMappingURL=bulk-create-entities.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-create-entities.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bulk-create-entities.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ import { z } from "zod";
2
+ import type { RequestContext, McpTextContent } from "@cesteral/shared";
3
+ import type { SdkContext } from "@cesteral/shared";
4
+ export declare const BulkUpdateEntitiesInputSchema: z.ZodEffects<z.ZodObject<{
5
+ entityType: z.ZodEnum<[string, ...string[]]>;
6
+ adAccountId: z.ZodString;
7
+ campaignId: z.ZodOptional<z.ZodString>;
8
+ adSquadId: z.ZodOptional<z.ZodString>;
9
+ items: z.ZodArray<z.ZodObject<{
10
+ entityId: z.ZodString;
11
+ data: z.ZodRecord<z.ZodString, z.ZodAny>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ entityId: string;
14
+ data: Record<string, any>;
15
+ }, {
16
+ entityId: string;
17
+ data: Record<string, any>;
18
+ }>, "many">;
19
+ }, "strip", z.ZodTypeAny, {
20
+ adAccountId: string;
21
+ entityType: string;
22
+ items: {
23
+ entityId: string;
24
+ data: Record<string, any>;
25
+ }[];
26
+ campaignId?: string | undefined;
27
+ adSquadId?: string | undefined;
28
+ }, {
29
+ adAccountId: string;
30
+ entityType: string;
31
+ items: {
32
+ entityId: string;
33
+ data: Record<string, any>;
34
+ }[];
35
+ campaignId?: string | undefined;
36
+ adSquadId?: string | undefined;
37
+ }>, {
38
+ adAccountId: string;
39
+ entityType: string;
40
+ items: {
41
+ entityId: string;
42
+ data: Record<string, any>;
43
+ }[];
44
+ campaignId?: string | undefined;
45
+ adSquadId?: string | undefined;
46
+ }, {
47
+ adAccountId: string;
48
+ entityType: string;
49
+ items: {
50
+ entityId: string;
51
+ data: Record<string, any>;
52
+ }[];
53
+ campaignId?: string | undefined;
54
+ adSquadId?: string | undefined;
55
+ }>;
56
+ export declare const BulkUpdateEntitiesOutputSchema: z.ZodObject<{
57
+ confirmed: z.ZodBoolean;
58
+ declineReason: z.ZodOptional<z.ZodString>;
59
+ totalRequested: z.ZodNumber;
60
+ successCount: z.ZodNumber;
61
+ failureCount: z.ZodNumber;
62
+ results: z.ZodArray<z.ZodObject<{
63
+ success: z.ZodBoolean;
64
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
65
+ error: z.ZodOptional<z.ZodString>;
66
+ } & {
67
+ entityId: z.ZodString;
68
+ }, "strip", z.ZodTypeAny, {
69
+ entityId: string;
70
+ success: boolean;
71
+ error?: string | undefined;
72
+ entity?: Record<string, any> | undefined;
73
+ }, {
74
+ entityId: string;
75
+ success: boolean;
76
+ error?: string | undefined;
77
+ entity?: Record<string, any> | undefined;
78
+ }>, "many">;
79
+ timestamp: z.ZodString;
80
+ }, "strip", z.ZodTypeAny, {
81
+ results: {
82
+ entityId: string;
83
+ success: boolean;
84
+ error?: string | undefined;
85
+ entity?: Record<string, any> | undefined;
86
+ }[];
87
+ timestamp: string;
88
+ confirmed: boolean;
89
+ totalRequested: number;
90
+ successCount: number;
91
+ failureCount: number;
92
+ declineReason?: string | undefined;
93
+ }, {
94
+ results: {
95
+ entityId: string;
96
+ success: boolean;
97
+ error?: string | undefined;
98
+ entity?: Record<string, any> | undefined;
99
+ }[];
100
+ timestamp: string;
101
+ confirmed: boolean;
102
+ totalRequested: number;
103
+ successCount: number;
104
+ failureCount: number;
105
+ declineReason?: string | undefined;
106
+ }>;
107
+ type BulkUpdateEntitiesInput = z.infer<typeof BulkUpdateEntitiesInputSchema>;
108
+ type BulkUpdateEntitiesOutput = z.infer<typeof BulkUpdateEntitiesOutputSchema>;
109
+ export declare function bulkUpdateEntitiesLogic(input: BulkUpdateEntitiesInput, context: RequestContext, sdkContext?: SdkContext): Promise<BulkUpdateEntitiesOutput>;
110
+ export declare function bulkUpdateEntitiesResponseFormatter(result: BulkUpdateEntitiesOutput): McpTextContent[];
111
+ export declare const bulkUpdateEntitiesTool: {
112
+ name: string;
113
+ title: string;
114
+ description: string;
115
+ inputSchema: z.ZodEffects<z.ZodObject<{
116
+ entityType: z.ZodEnum<[string, ...string[]]>;
117
+ adAccountId: z.ZodString;
118
+ campaignId: z.ZodOptional<z.ZodString>;
119
+ adSquadId: z.ZodOptional<z.ZodString>;
120
+ items: z.ZodArray<z.ZodObject<{
121
+ entityId: z.ZodString;
122
+ data: z.ZodRecord<z.ZodString, z.ZodAny>;
123
+ }, "strip", z.ZodTypeAny, {
124
+ entityId: string;
125
+ data: Record<string, any>;
126
+ }, {
127
+ entityId: string;
128
+ data: Record<string, any>;
129
+ }>, "many">;
130
+ }, "strip", z.ZodTypeAny, {
131
+ adAccountId: string;
132
+ entityType: string;
133
+ items: {
134
+ entityId: string;
135
+ data: Record<string, any>;
136
+ }[];
137
+ campaignId?: string | undefined;
138
+ adSquadId?: string | undefined;
139
+ }, {
140
+ adAccountId: string;
141
+ entityType: string;
142
+ items: {
143
+ entityId: string;
144
+ data: Record<string, any>;
145
+ }[];
146
+ campaignId?: string | undefined;
147
+ adSquadId?: string | undefined;
148
+ }>, {
149
+ adAccountId: string;
150
+ entityType: string;
151
+ items: {
152
+ entityId: string;
153
+ data: Record<string, any>;
154
+ }[];
155
+ campaignId?: string | undefined;
156
+ adSquadId?: string | undefined;
157
+ }, {
158
+ adAccountId: string;
159
+ entityType: string;
160
+ items: {
161
+ entityId: string;
162
+ data: Record<string, any>;
163
+ }[];
164
+ campaignId?: string | undefined;
165
+ adSquadId?: string | undefined;
166
+ }>;
167
+ outputSchema: z.ZodObject<{
168
+ confirmed: z.ZodBoolean;
169
+ declineReason: z.ZodOptional<z.ZodString>;
170
+ totalRequested: z.ZodNumber;
171
+ successCount: z.ZodNumber;
172
+ failureCount: z.ZodNumber;
173
+ results: z.ZodArray<z.ZodObject<{
174
+ success: z.ZodBoolean;
175
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
176
+ error: z.ZodOptional<z.ZodString>;
177
+ } & {
178
+ entityId: z.ZodString;
179
+ }, "strip", z.ZodTypeAny, {
180
+ entityId: string;
181
+ success: boolean;
182
+ error?: string | undefined;
183
+ entity?: Record<string, any> | undefined;
184
+ }, {
185
+ entityId: string;
186
+ success: boolean;
187
+ error?: string | undefined;
188
+ entity?: Record<string, any> | undefined;
189
+ }>, "many">;
190
+ timestamp: z.ZodString;
191
+ }, "strip", z.ZodTypeAny, {
192
+ results: {
193
+ entityId: string;
194
+ success: boolean;
195
+ error?: string | undefined;
196
+ entity?: Record<string, any> | undefined;
197
+ }[];
198
+ timestamp: string;
199
+ confirmed: boolean;
200
+ totalRequested: number;
201
+ successCount: number;
202
+ failureCount: number;
203
+ declineReason?: string | undefined;
204
+ }, {
205
+ results: {
206
+ entityId: string;
207
+ success: boolean;
208
+ error?: string | undefined;
209
+ entity?: Record<string, any> | undefined;
210
+ }[];
211
+ timestamp: string;
212
+ confirmed: boolean;
213
+ totalRequested: number;
214
+ successCount: number;
215
+ failureCount: number;
216
+ declineReason?: string | undefined;
217
+ }>;
218
+ annotations: {
219
+ readOnlyHint: boolean;
220
+ openWorldHint: boolean;
221
+ idempotentHint: boolean;
222
+ destructiveHint: boolean;
223
+ };
224
+ inputExamples: {
225
+ label: string;
226
+ input: {
227
+ entityType: string;
228
+ adAccountId: string;
229
+ items: {
230
+ entityId: string;
231
+ data: {
232
+ daily_budget_micro: number;
233
+ };
234
+ }[];
235
+ };
236
+ }[];
237
+ logic: typeof bulkUpdateEntitiesLogic;
238
+ responseFormatter: typeof bulkUpdateEntitiesResponseFormatter;
239
+ };
240
+ export {};
241
+ //# sourceMappingURL=bulk-update-entities.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-update-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bulk-update-entities.tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAanD,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCO,CAAC;AAElD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcV,CAAC;AAElC,KAAK,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAC7E,KAAK,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE/E,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,uBAAuB,EAC9B,OAAO,EAAE,cAAc,EACvB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,wBAAwB,CAAC,CA6CnC;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,wBAAwB,GAC/B,cAAc,EAAE,CAyBlB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BlC,CAAC"}