@cesteral/linkedin-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 (259) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +304 -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/linkedin-auth-adapter.d.ts +38 -0
  8. package/dist/auth/linkedin-auth-adapter.d.ts.map +1 -0
  9. package/dist/auth/linkedin-auth-adapter.js +110 -0
  10. package/dist/auth/linkedin-auth-adapter.js.map +1 -0
  11. package/dist/auth/linkedin-auth-strategy.d.ts +14 -0
  12. package/dist/auth/linkedin-auth-strategy.d.ts.map +1 -0
  13. package/dist/auth/linkedin-auth-strategy.js +50 -0
  14. package/dist/auth/linkedin-auth-strategy.js.map +1 -0
  15. package/dist/config/index.d.ts +100 -0
  16. package/dist/config/index.d.ts.map +1 -0
  17. package/dist/config/index.js +37 -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 +40 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts +4 -0
  24. package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts.map +1 -0
  25. package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.js +108 -0
  26. package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.js.map +1 -0
  27. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
  28. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
  29. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +177 -0
  30. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
  31. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
  32. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
  33. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +171 -0
  34. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
  35. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts +4 -0
  36. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts.map +1 -0
  37. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js +109 -0
  38. package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js.map +1 -0
  39. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
  40. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
  41. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
  42. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
  43. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
  44. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
  45. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
  46. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
  47. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
  48. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
  49. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +213 -0
  50. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
  51. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
  52. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
  53. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +151 -0
  54. package/dist/mcp-server/prompts/definitions/entity-update-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 +217 -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 +98 -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 +91 -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 +97 -0
  70. package/dist/mcp-server/prompts/index.js.map +1 -0
  71. package/dist/mcp-server/resources/definitions/analytics-reference.resource.d.ts +3 -0
  72. package/dist/mcp-server/resources/definitions/analytics-reference.resource.d.ts.map +1 -0
  73. package/dist/mcp-server/resources/definitions/analytics-reference.resource.js +162 -0
  74. package/dist/mcp-server/resources/definitions/analytics-reference.resource.js.map +1 -0
  75. package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
  76. package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
  77. package/dist/mcp-server/resources/definitions/entity-examples.resource.js +164 -0
  78. package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
  79. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
  80. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
  81. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +144 -0
  82. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
  83. package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
  84. package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
  85. package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +127 -0
  86. package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
  87. package/dist/mcp-server/resources/definitions/index.d.ts +8 -0
  88. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  89. package/dist/mcp-server/resources/definitions/index.js +54 -0
  90. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  91. package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts +3 -0
  92. package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts.map +1 -0
  93. package/dist/mcp-server/resources/definitions/targeting-reference.resource.js +122 -0
  94. package/dist/mcp-server/resources/definitions/targeting-reference.resource.js.map +1 -0
  95. package/dist/mcp-server/resources/index.d.ts +3 -0
  96. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  97. package/dist/mcp-server/resources/index.js +2 -0
  98. package/dist/mcp-server/resources/index.js.map +1 -0
  99. package/dist/mcp-server/resources/types.d.ts +8 -0
  100. package/dist/mcp-server/resources/types.d.ts.map +1 -0
  101. package/dist/mcp-server/resources/types.js +2 -0
  102. package/dist/mcp-server/resources/types.js.map +1 -0
  103. package/dist/mcp-server/server.d.ts +5 -0
  104. package/dist/mcp-server/server.d.ts.map +1 -0
  105. package/dist/mcp-server/server.js +128 -0
  106. package/dist/mcp-server/server.js.map +1 -0
  107. package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +213 -0
  108. package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
  109. package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +174 -0
  110. package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
  111. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +128 -0
  112. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
  113. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +95 -0
  114. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
  115. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts +183 -0
  116. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts.map +1 -0
  117. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js +122 -0
  118. package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js.map +1 -0
  119. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +140 -0
  120. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
  121. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +109 -0
  122. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
  123. package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +117 -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 +98 -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 +93 -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 +100 -0
  130. package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
  131. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +95 -0
  132. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts.map +1 -0
  133. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js +89 -0
  134. package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js.map +1 -0
  135. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +75 -0
  136. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
  137. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +68 -0
  138. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
  139. package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts +75 -0
  140. package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts.map +1 -0
  141. package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js +71 -0
  142. package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js.map +1 -0
  143. package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts +223 -0
  144. package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts.map +1 -0
  145. package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js +152 -0
  146. package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js.map +1 -0
  147. package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts +325 -0
  148. package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts.map +1 -0
  149. package/dist/mcp-server/tools/definitions/get-analytics.tool.js +154 -0
  150. package/dist/mcp-server/tools/definitions/get-analytics.tool.js.map +1 -0
  151. package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts +95 -0
  152. package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts.map +1 -0
  153. package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js +90 -0
  154. package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js.map +1 -0
  155. package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +75 -0
  156. package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
  157. package/dist/mcp-server/tools/definitions/get-entity.tool.js +75 -0
  158. package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
  159. package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +81 -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 +76 -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 +23 -0
  164. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  165. package/dist/mcp-server/tools/definitions/index.js +69 -0
  166. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  167. package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts +141 -0
  168. package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts.map +1 -0
  169. package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js +84 -0
  170. package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js.map +1 -0
  171. package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +165 -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 +112 -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 +102 -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 +98 -0
  178. package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
  179. package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +104 -0
  180. package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
  181. package/dist/mcp-server/tools/definitions/update-entity.tool.js +88 -0
  182. package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
  183. package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts +75 -0
  184. package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts.map +1 -0
  185. package/dist/mcp-server/tools/definitions/upload-image.tool.js +99 -0
  186. package/dist/mcp-server/tools/definitions/upload-image.tool.js.map +1 -0
  187. package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts +69 -0
  188. package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts.map +1 -0
  189. package/dist/mcp-server/tools/definitions/upload-video.tool.js +98 -0
  190. package/dist/mcp-server/tools/definitions/upload-video.tool.js.map +1 -0
  191. package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +168 -0
  192. package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
  193. package/dist/mcp-server/tools/definitions/validate-entity.tool.js +200 -0
  194. package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
  195. package/dist/mcp-server/tools/index.d.ts +2 -0
  196. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  197. package/dist/mcp-server/tools/index.js +2 -0
  198. package/dist/mcp-server/tools/index.js.map +1 -0
  199. package/dist/mcp-server/tools/utils/entity-mapping.d.ts +13 -0
  200. package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
  201. package/dist/mcp-server/tools/utils/entity-mapping.js +68 -0
  202. package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
  203. package/dist/mcp-server/tools/utils/media-types.d.ts +12 -0
  204. package/dist/mcp-server/tools/utils/media-types.d.ts.map +1 -0
  205. package/dist/mcp-server/tools/utils/media-types.js +2 -0
  206. package/dist/mcp-server/tools/utils/media-types.js.map +1 -0
  207. package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
  208. package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
  209. package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
  210. package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
  211. package/dist/mcp-server/transports/streamable-http-transport.d.ts +49 -0
  212. package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
  213. package/dist/mcp-server/transports/streamable-http-transport.js +91 -0
  214. package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
  215. package/dist/services/linkedin/linkedin-http-client.d.ts +20 -0
  216. package/dist/services/linkedin/linkedin-http-client.d.ts.map +1 -0
  217. package/dist/services/linkedin/linkedin-http-client.js +147 -0
  218. package/dist/services/linkedin/linkedin-http-client.js.map +1 -0
  219. package/dist/services/linkedin/linkedin-reporting-service.d.ts +26 -0
  220. package/dist/services/linkedin/linkedin-reporting-service.d.ts.map +1 -0
  221. package/dist/services/linkedin/linkedin-reporting-service.js +69 -0
  222. package/dist/services/linkedin/linkedin-reporting-service.js.map +1 -0
  223. package/dist/services/linkedin/linkedin-service.d.ts +84 -0
  224. package/dist/services/linkedin/linkedin-service.d.ts.map +1 -0
  225. package/dist/services/linkedin/linkedin-service.js +195 -0
  226. package/dist/services/linkedin/linkedin-service.js.map +1 -0
  227. package/dist/services/linkedin/types.d.ts +166 -0
  228. package/dist/services/linkedin/types.d.ts.map +1 -0
  229. package/dist/services/linkedin/types.js +31 -0
  230. package/dist/services/linkedin/types.js.map +1 -0
  231. package/dist/services/session-services.d.ts +18 -0
  232. package/dist/services/session-services.d.ts.map +1 -0
  233. package/dist/services/session-services.js +16 -0
  234. package/dist/services/session-services.js.map +1 -0
  235. package/dist/types-global/mcp.d.ts +2 -0
  236. package/dist/types-global/mcp.d.ts.map +1 -0
  237. package/dist/types-global/mcp.js +2 -0
  238. package/dist/types-global/mcp.js.map +1 -0
  239. package/dist/utils/errors/index.d.ts +2 -0
  240. package/dist/utils/errors/index.d.ts.map +1 -0
  241. package/dist/utils/errors/index.js +2 -0
  242. package/dist/utils/errors/index.js.map +1 -0
  243. package/dist/utils/platform.d.ts +3 -0
  244. package/dist/utils/platform.d.ts.map +1 -0
  245. package/dist/utils/platform.js +5 -0
  246. package/dist/utils/platform.js.map +1 -0
  247. package/dist/utils/security/rate-limiter.d.ts +3 -0
  248. package/dist/utils/security/rate-limiter.d.ts.map +1 -0
  249. package/dist/utils/security/rate-limiter.js +5 -0
  250. package/dist/utils/security/rate-limiter.js.map +1 -0
  251. package/dist/utils/telemetry/index.d.ts +2 -0
  252. package/dist/utils/telemetry/index.d.ts.map +1 -0
  253. package/dist/utils/telemetry/index.js +2 -0
  254. package/dist/utils/telemetry/index.js.map +1 -0
  255. package/dist/utils/telemetry/tracing.d.ts +3 -0
  256. package/dist/utils/telemetry/tracing.d.ts.map +1 -0
  257. package/dist/utils/telemetry/tracing.js +4 -0
  258. package/dist/utils/telemetry/tracing.js.map +1 -0
  259. package/package.json +55 -0
@@ -0,0 +1,174 @@
1
+ import { z } from "zod";
2
+ import { resolveSessionServices } from "../utils/resolve-session.js";
3
+ import { elicitBidChangeConfirmation } from "@cesteral/shared";
4
+ const TOOL_NAME = "linkedin_adjust_bids";
5
+ const TOOL_TITLE = "LinkedIn Ads Bid Adjustment";
6
+ const TOOL_DESCRIPTION = `Batch adjust campaign bid amounts.
7
+
8
+ Updates the \`unitCost\` (bid) for each campaign via PATCH.
9
+
10
+ **bid structure:** \`{ "amount": "10.00", "currencyCode": "USD" }\`
11
+
12
+ **Gotchas:**
13
+ - Only applies to campaigns with manual bidding (bidType: CPM, CPC, etc.).
14
+ - LOWEST_COST campaigns may ignore unitCost.
15
+ - Each adjustment consumes 3x rate limit tokens (write operation).
16
+ - Max 50 adjustments per call.`;
17
+ export const AdjustBidsInputSchema = z
18
+ .object({
19
+ adjustments: z
20
+ .array(z.object({
21
+ campaignUrn: z
22
+ .string()
23
+ .min(1)
24
+ .describe("The campaign URN to adjust (e.g., urn:li:sponsoredCampaign:123)"),
25
+ amount: z.string().describe('New bid amount as a decimal string (e.g., "10.00")'),
26
+ currencyCode: z
27
+ .string()
28
+ .length(3)
29
+ .describe("ISO 4217 currency code (e.g., USD, EUR, GBP)"),
30
+ }))
31
+ .min(1)
32
+ .max(50)
33
+ .describe("Bid adjustments to apply (max 50)"),
34
+ reason: z.string().optional().describe("Optional reason for the bid adjustment"),
35
+ })
36
+ .describe("Parameters for batch bid adjustment on LinkedIn campaigns");
37
+ export const AdjustBidsOutputSchema = z
38
+ .object({
39
+ confirmed: z.boolean(),
40
+ declineReason: z.string().optional(),
41
+ totalRequested: z.number(),
42
+ totalSucceeded: z.number(),
43
+ totalFailed: z.number(),
44
+ results: z.array(z.object({
45
+ campaignUrn: z.string(),
46
+ success: z.boolean(),
47
+ newAmount: z.string().optional(),
48
+ currencyCode: z.string().optional(),
49
+ error: z.string().optional(),
50
+ })),
51
+ timestamp: z.string().datetime(),
52
+ })
53
+ .describe("Bid adjustment results");
54
+ export async function adjustBidsLogic(input, context, sdkContext) {
55
+ const confirmed = await elicitBidChangeConfirmation({
56
+ count: input.adjustments.length,
57
+ entityLabel: "campaign",
58
+ summary: input.reason ?? "Applying unitCost (bid) changes via PATCH.",
59
+ impactPreview: input.adjustments.map((a) => a.campaignUrn),
60
+ sdkContext,
61
+ });
62
+ if (!confirmed) {
63
+ return {
64
+ confirmed: false,
65
+ declineReason: "user_declined",
66
+ totalRequested: input.adjustments.length,
67
+ totalSucceeded: 0,
68
+ totalFailed: 0,
69
+ results: [],
70
+ timestamp: new Date().toISOString(),
71
+ };
72
+ }
73
+ const { linkedInService } = resolveSessionServices(sdkContext);
74
+ const serviceResult = await linkedInService.adjustBids(input.adjustments.map((a) => ({
75
+ campaignUrn: a.campaignUrn,
76
+ bidAmount: {
77
+ amount: a.amount,
78
+ currencyCode: a.currencyCode,
79
+ },
80
+ })), context);
81
+ const results = serviceResult.results.map((r, i) => ({
82
+ campaignUrn: r.campaignUrn,
83
+ success: r.success,
84
+ newAmount: r.success ? input.adjustments[i].amount : undefined,
85
+ currencyCode: r.success ? input.adjustments[i].currencyCode : undefined,
86
+ error: r.error,
87
+ }));
88
+ const totalSucceeded = results.filter((r) => r.success).length;
89
+ return {
90
+ confirmed: true,
91
+ totalRequested: input.adjustments.length,
92
+ totalSucceeded,
93
+ totalFailed: input.adjustments.length - totalSucceeded,
94
+ results,
95
+ timestamp: new Date().toISOString(),
96
+ };
97
+ }
98
+ export function adjustBidsResponseFormatter(result) {
99
+ if (!result.confirmed) {
100
+ return [
101
+ {
102
+ type: "text",
103
+ text: `Bid adjustments cancelled by user.\n\nTimestamp: ${result.timestamp}`,
104
+ },
105
+ ];
106
+ }
107
+ const lines = [];
108
+ lines.push(`Bid adjustments: ${result.totalSucceeded}/${result.totalRequested} succeeded, ${result.totalFailed} failed`);
109
+ lines.push("");
110
+ for (const r of result.results) {
111
+ if (r.success) {
112
+ lines.push(` ${r.campaignUrn}: ${r.newAmount} ${r.currencyCode}`);
113
+ }
114
+ else {
115
+ lines.push(` ${r.campaignUrn}: FAILED - ${r.error}`);
116
+ }
117
+ }
118
+ lines.push("");
119
+ lines.push(`Timestamp: ${result.timestamp}`);
120
+ return [
121
+ {
122
+ type: "text",
123
+ text: lines.join("\n"),
124
+ },
125
+ ];
126
+ }
127
+ export const adjustBidsTool = {
128
+ name: TOOL_NAME,
129
+ title: TOOL_TITLE,
130
+ description: TOOL_DESCRIPTION,
131
+ inputSchema: AdjustBidsInputSchema,
132
+ outputSchema: AdjustBidsOutputSchema,
133
+ annotations: {
134
+ readOnlyHint: false,
135
+ openWorldHint: true,
136
+ idempotentHint: true,
137
+ destructiveHint: true,
138
+ },
139
+ inputExamples: [
140
+ {
141
+ label: "Single bid adjustment",
142
+ input: {
143
+ adjustments: [
144
+ {
145
+ campaignUrn: "urn:li:sponsoredCampaign:123456789",
146
+ amount: "12.00",
147
+ currencyCode: "USD",
148
+ },
149
+ ],
150
+ },
151
+ },
152
+ {
153
+ label: "Multiple bid adjustments",
154
+ input: {
155
+ adjustments: [
156
+ {
157
+ campaignUrn: "urn:li:sponsoredCampaign:111111111",
158
+ amount: "8.50",
159
+ currencyCode: "USD",
160
+ },
161
+ {
162
+ campaignUrn: "urn:li:sponsoredCampaign:222222222",
163
+ amount: "15.00",
164
+ currencyCode: "USD",
165
+ },
166
+ ],
167
+ reason: "Increase bids to improve delivery",
168
+ },
169
+ },
170
+ ],
171
+ logic: adjustBidsLogic,
172
+ responseFormatter: adjustBidsResponseFormatter,
173
+ };
174
+ //# 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,128 @@
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
+ items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">;
7
+ }, "strip", z.ZodTypeAny, {
8
+ entityType: string;
9
+ items: Record<string, any>[];
10
+ }, {
11
+ entityType: string;
12
+ items: Record<string, any>[];
13
+ }>;
14
+ export declare const BulkCreateEntitiesOutputSchema: z.ZodObject<{
15
+ results: z.ZodArray<z.ZodObject<{
16
+ success: z.ZodBoolean;
17
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
18
+ error: z.ZodOptional<z.ZodString>;
19
+ }, "strip", z.ZodTypeAny, {
20
+ success: boolean;
21
+ error?: string | undefined;
22
+ entity?: Record<string, any> | undefined;
23
+ }, {
24
+ success: boolean;
25
+ error?: string | undefined;
26
+ entity?: Record<string, any> | undefined;
27
+ }>, "many">;
28
+ successCount: z.ZodNumber;
29
+ failureCount: z.ZodNumber;
30
+ timestamp: z.ZodString;
31
+ }, "strip", z.ZodTypeAny, {
32
+ results: {
33
+ success: boolean;
34
+ error?: string | undefined;
35
+ entity?: Record<string, any> | undefined;
36
+ }[];
37
+ timestamp: string;
38
+ successCount: number;
39
+ failureCount: number;
40
+ }, {
41
+ results: {
42
+ success: boolean;
43
+ error?: string | undefined;
44
+ entity?: Record<string, any> | undefined;
45
+ }[];
46
+ timestamp: string;
47
+ successCount: number;
48
+ failureCount: number;
49
+ }>;
50
+ type BulkCreateEntitiesInput = z.infer<typeof BulkCreateEntitiesInputSchema>;
51
+ type BulkCreateEntitiesOutput = z.infer<typeof BulkCreateEntitiesOutputSchema>;
52
+ export declare function bulkCreateEntitiesLogic(input: BulkCreateEntitiesInput, context: RequestContext, sdkContext?: SdkContext): Promise<BulkCreateEntitiesOutput>;
53
+ export declare function bulkCreateEntitiesResponseFormatter(result: BulkCreateEntitiesOutput): McpTextContent[];
54
+ export declare const bulkCreateEntitiesTool: {
55
+ name: string;
56
+ title: string;
57
+ description: string;
58
+ inputSchema: z.ZodObject<{
59
+ entityType: z.ZodEnum<[string, ...string[]]>;
60
+ items: z.ZodArray<z.ZodRecord<z.ZodString, z.ZodAny>, "many">;
61
+ }, "strip", z.ZodTypeAny, {
62
+ entityType: string;
63
+ items: Record<string, any>[];
64
+ }, {
65
+ entityType: string;
66
+ items: Record<string, any>[];
67
+ }>;
68
+ outputSchema: z.ZodObject<{
69
+ results: z.ZodArray<z.ZodObject<{
70
+ success: z.ZodBoolean;
71
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
72
+ error: z.ZodOptional<z.ZodString>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ success: boolean;
75
+ error?: string | undefined;
76
+ entity?: Record<string, any> | undefined;
77
+ }, {
78
+ success: boolean;
79
+ error?: string | undefined;
80
+ entity?: Record<string, any> | undefined;
81
+ }>, "many">;
82
+ successCount: z.ZodNumber;
83
+ failureCount: z.ZodNumber;
84
+ timestamp: z.ZodString;
85
+ }, "strip", z.ZodTypeAny, {
86
+ results: {
87
+ success: boolean;
88
+ error?: string | undefined;
89
+ entity?: Record<string, any> | undefined;
90
+ }[];
91
+ timestamp: string;
92
+ successCount: number;
93
+ failureCount: number;
94
+ }, {
95
+ results: {
96
+ success: boolean;
97
+ error?: string | undefined;
98
+ entity?: Record<string, any> | undefined;
99
+ }[];
100
+ timestamp: string;
101
+ successCount: number;
102
+ failureCount: number;
103
+ }>;
104
+ annotations: {
105
+ readOnlyHint: boolean;
106
+ openWorldHint: boolean;
107
+ idempotentHint: boolean;
108
+ destructiveHint: boolean;
109
+ };
110
+ inputExamples: {
111
+ label: string;
112
+ input: {
113
+ entityType: string;
114
+ items: {
115
+ name: string;
116
+ campaignGroup: string;
117
+ account: string;
118
+ type: string;
119
+ objectiveType: string;
120
+ status: string;
121
+ }[];
122
+ };
123
+ }[];
124
+ logic: typeof bulkCreateEntitiesLogic;
125
+ responseFormatter: typeof bulkCreateEntitiesResponseFormatter;
126
+ };
127
+ export {};
128
+ //# 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;AAenD,eAAO,MAAM,6BAA6B;;;;;;;;;EAKQ,CAAC;AAEnD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOR,CAAC;AAEpC,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,CAqBnC;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,wBAAwB,GAC/B,cAAc,EAAE,CAOlB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwClC,CAAC"}
@@ -0,0 +1,95 @@
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 = "linkedin_bulk_create_entities";
6
+ const TOOL_TITLE = "Bulk Create LinkedIn Ads Entities";
7
+ const TOOL_DESCRIPTION = `Batch create multiple LinkedIn Ads entities of the same type.
8
+
9
+ **Supported entity types:** ${getEntityTypeEnum().join(", ")}
10
+
11
+ Creates entities individually with concurrency (max 5 concurrent requests).
12
+ Each item must be a complete entity payload (same as linkedin_create_entity data).
13
+
14
+ **Gotchas:**
15
+ - Max 50 items per call.
16
+ - Partial failures are allowed — check results for individual errors.`;
17
+ export const BulkCreateEntitiesInputSchema = z
18
+ .object({
19
+ entityType: z.enum(getEntityTypeEnum()).describe("Type of entities to create"),
20
+ items: z.array(z.record(z.any())).min(1).max(50).describe("Entity payloads to create (max 50)"),
21
+ })
22
+ .describe("Parameters for bulk entity creation");
23
+ export const BulkCreateEntitiesOutputSchema = z
24
+ .object({
25
+ results: z.array(BulkOperationResultSchema),
26
+ successCount: z.number(),
27
+ failureCount: z.number(),
28
+ timestamp: z.string().datetime(),
29
+ })
30
+ .describe("Bulk creation result");
31
+ export async function bulkCreateEntitiesLogic(input, context, sdkContext) {
32
+ const { linkedInService } = resolveSessionServices(sdkContext);
33
+ const result = await linkedInService.bulkCreateEntities(input.entityType, input.items, context);
34
+ const successCount = result.results.filter((r) => r.success).length;
35
+ return {
36
+ results: result.results.map((r) => ({
37
+ success: r.success,
38
+ entity: r.entity,
39
+ error: r.error,
40
+ })),
41
+ successCount,
42
+ failureCount: result.results.length - successCount,
43
+ timestamp: new Date().toISOString(),
44
+ };
45
+ }
46
+ export function bulkCreateEntitiesResponseFormatter(result) {
47
+ return [
48
+ {
49
+ type: "text",
50
+ text: `Bulk create: ${result.successCount} succeeded, ${result.failureCount} failed\n\n${JSON.stringify(result.results, null, 2)}\n\nTimestamp: ${result.timestamp}`,
51
+ },
52
+ ];
53
+ }
54
+ export const bulkCreateEntitiesTool = {
55
+ name: TOOL_NAME,
56
+ title: TOOL_TITLE,
57
+ description: TOOL_DESCRIPTION,
58
+ inputSchema: BulkCreateEntitiesInputSchema,
59
+ outputSchema: BulkCreateEntitiesOutputSchema,
60
+ annotations: {
61
+ readOnlyHint: false,
62
+ openWorldHint: false,
63
+ idempotentHint: false,
64
+ destructiveHint: true,
65
+ },
66
+ inputExamples: [
67
+ {
68
+ label: "Create multiple campaigns",
69
+ input: {
70
+ entityType: "campaign",
71
+ items: [
72
+ {
73
+ name: "Campaign A",
74
+ campaignGroup: "urn:li:sponsoredCampaignGroup:987654321",
75
+ account: "urn:li:sponsoredAccount:123456789",
76
+ type: "SPONSORED_UPDATES",
77
+ objectiveType: "BRAND_AWARENESS",
78
+ status: "DRAFT",
79
+ },
80
+ {
81
+ name: "Campaign B",
82
+ campaignGroup: "urn:li:sponsoredCampaignGroup:987654321",
83
+ account: "urn:li:sponsoredAccount:123456789",
84
+ type: "SPONSORED_UPDATES",
85
+ objectiveType: "WEBSITE_TRAFFIC",
86
+ status: "DRAFT",
87
+ },
88
+ ],
89
+ },
90
+ },
91
+ ],
92
+ logic: bulkCreateEntitiesLogic,
93
+ responseFormatter: bulkCreateEntitiesResponseFormatter,
94
+ };
95
+ //# 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":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAA2B,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAI7D,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAClD,MAAM,UAAU,GAAG,mCAAmC,CAAC;AACvD,MAAM,gBAAgB,GAAG;;8BAEK,iBAAiB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;sEAOU,CAAC;AAEvE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC;KAC3C,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IAC9E,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAChG,CAAC;KACD,QAAQ,CAAC,qCAAqC,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC5C,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;IAC3C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;KACD,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AAKpC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAA8B,EAC9B,OAAuB,EACvB,UAAuB;IAEvB,MAAM,EAAE,eAAe,EAAE,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,kBAAkB,CACrD,KAAK,CAAC,UAAgC,EACtC,KAAK,CAAC,KAAK,EACX,OAAO,CACR,CAAC;IAEF,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAEpE,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClC,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAA6C;YACvD,KAAK,EAAE,CAAC,CAAC,KAAK;SACf,CAAC,CAAC;QACH,YAAY;QACZ,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,YAAY;QAClD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mCAAmC,CACjD,MAAgC;IAEhC,OAAO;QACL;YACE,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,gBAAgB,MAAM,CAAC,YAAY,eAAe,MAAM,CAAC,YAAY,cAAc,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE;SACrK;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,6BAA6B;IAC1C,YAAY,EAAE,8BAA8B;IAC5C,WAAW,EAAE;QACX,YAAY,EAAE,KAAK;QACnB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,KAAK;QACrB,eAAe,EAAE,IAAI;KACtB;IACD,aAAa,EAAE;QACb;YACE,KAAK,EAAE,2BAA2B;YAClC,KAAK,EAAE;gBACL,UAAU,EAAE,UAAU;gBACtB,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,YAAY;wBAClB,aAAa,EAAE,yCAAyC;wBACxD,OAAO,EAAE,mCAAmC;wBAC5C,IAAI,EAAE,mBAAmB;wBACzB,aAAa,EAAE,iBAAiB;wBAChC,MAAM,EAAE,OAAO;qBAChB;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,aAAa,EAAE,yCAAyC;wBACxD,OAAO,EAAE,mCAAmC;wBAC5C,IAAI,EAAE,mBAAmB;wBACzB,aAAa,EAAE,iBAAiB;wBAChC,MAAM,EAAE,OAAO;qBAChB;iBACF;aACF;SACF;KACF;IACD,KAAK,EAAE,uBAAuB;IAC9B,iBAAiB,EAAE,mCAAmC;CACvD,CAAC"}
@@ -0,0 +1,183 @@
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.ZodObject<{
5
+ entityType: z.ZodEnum<[string, ...string[]]>;
6
+ items: z.ZodArray<z.ZodObject<{
7
+ entityUrn: z.ZodString;
8
+ data: z.ZodRecord<z.ZodString, z.ZodAny>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ entityUrn: string;
11
+ data: Record<string, any>;
12
+ }, {
13
+ entityUrn: string;
14
+ data: Record<string, any>;
15
+ }>, "many">;
16
+ }, "strip", z.ZodTypeAny, {
17
+ entityType: string;
18
+ items: {
19
+ entityUrn: string;
20
+ data: Record<string, any>;
21
+ }[];
22
+ }, {
23
+ entityType: string;
24
+ items: {
25
+ entityUrn: string;
26
+ data: Record<string, any>;
27
+ }[];
28
+ }>;
29
+ export declare const BulkUpdateEntitiesOutputSchema: z.ZodObject<{
30
+ confirmed: z.ZodBoolean;
31
+ declineReason: z.ZodOptional<z.ZodString>;
32
+ results: z.ZodArray<z.ZodObject<{
33
+ success: z.ZodBoolean;
34
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
35
+ error: z.ZodOptional<z.ZodString>;
36
+ } & {
37
+ entityUrn: z.ZodString;
38
+ }, "strip", z.ZodTypeAny, {
39
+ entityUrn: string;
40
+ success: boolean;
41
+ error?: string | undefined;
42
+ entity?: Record<string, any> | undefined;
43
+ }, {
44
+ entityUrn: string;
45
+ success: boolean;
46
+ error?: string | undefined;
47
+ entity?: Record<string, any> | undefined;
48
+ }>, "many">;
49
+ successCount: z.ZodNumber;
50
+ failureCount: z.ZodNumber;
51
+ timestamp: z.ZodString;
52
+ }, "strip", z.ZodTypeAny, {
53
+ results: {
54
+ entityUrn: string;
55
+ success: boolean;
56
+ error?: string | undefined;
57
+ entity?: Record<string, any> | undefined;
58
+ }[];
59
+ timestamp: string;
60
+ confirmed: boolean;
61
+ successCount: number;
62
+ failureCount: number;
63
+ declineReason?: string | undefined;
64
+ }, {
65
+ results: {
66
+ entityUrn: string;
67
+ success: boolean;
68
+ error?: string | undefined;
69
+ entity?: Record<string, any> | undefined;
70
+ }[];
71
+ timestamp: string;
72
+ confirmed: boolean;
73
+ successCount: number;
74
+ failureCount: number;
75
+ declineReason?: string | undefined;
76
+ }>;
77
+ type BulkUpdateEntitiesInput = z.infer<typeof BulkUpdateEntitiesInputSchema>;
78
+ type BulkUpdateEntitiesOutput = z.infer<typeof BulkUpdateEntitiesOutputSchema>;
79
+ export declare function bulkUpdateEntitiesLogic(input: BulkUpdateEntitiesInput, context: RequestContext, sdkContext?: SdkContext): Promise<BulkUpdateEntitiesOutput>;
80
+ export declare function bulkUpdateEntitiesResponseFormatter(result: BulkUpdateEntitiesOutput): McpTextContent[];
81
+ export declare const bulkUpdateEntitiesTool: {
82
+ name: string;
83
+ title: string;
84
+ description: string;
85
+ inputSchema: z.ZodObject<{
86
+ entityType: z.ZodEnum<[string, ...string[]]>;
87
+ items: z.ZodArray<z.ZodObject<{
88
+ entityUrn: z.ZodString;
89
+ data: z.ZodRecord<z.ZodString, z.ZodAny>;
90
+ }, "strip", z.ZodTypeAny, {
91
+ entityUrn: string;
92
+ data: Record<string, any>;
93
+ }, {
94
+ entityUrn: string;
95
+ data: Record<string, any>;
96
+ }>, "many">;
97
+ }, "strip", z.ZodTypeAny, {
98
+ entityType: string;
99
+ items: {
100
+ entityUrn: string;
101
+ data: Record<string, any>;
102
+ }[];
103
+ }, {
104
+ entityType: string;
105
+ items: {
106
+ entityUrn: string;
107
+ data: Record<string, any>;
108
+ }[];
109
+ }>;
110
+ outputSchema: z.ZodObject<{
111
+ confirmed: z.ZodBoolean;
112
+ declineReason: z.ZodOptional<z.ZodString>;
113
+ results: z.ZodArray<z.ZodObject<{
114
+ success: z.ZodBoolean;
115
+ entity: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
116
+ error: z.ZodOptional<z.ZodString>;
117
+ } & {
118
+ entityUrn: z.ZodString;
119
+ }, "strip", z.ZodTypeAny, {
120
+ entityUrn: string;
121
+ success: boolean;
122
+ error?: string | undefined;
123
+ entity?: Record<string, any> | undefined;
124
+ }, {
125
+ entityUrn: string;
126
+ success: boolean;
127
+ error?: string | undefined;
128
+ entity?: Record<string, any> | undefined;
129
+ }>, "many">;
130
+ successCount: z.ZodNumber;
131
+ failureCount: z.ZodNumber;
132
+ timestamp: z.ZodString;
133
+ }, "strip", z.ZodTypeAny, {
134
+ results: {
135
+ entityUrn: string;
136
+ success: boolean;
137
+ error?: string | undefined;
138
+ entity?: Record<string, any> | undefined;
139
+ }[];
140
+ timestamp: string;
141
+ confirmed: boolean;
142
+ successCount: number;
143
+ failureCount: number;
144
+ declineReason?: string | undefined;
145
+ }, {
146
+ results: {
147
+ entityUrn: string;
148
+ success: boolean;
149
+ error?: string | undefined;
150
+ entity?: Record<string, any> | undefined;
151
+ }[];
152
+ timestamp: string;
153
+ confirmed: boolean;
154
+ successCount: number;
155
+ failureCount: number;
156
+ declineReason?: string | undefined;
157
+ }>;
158
+ annotations: {
159
+ readOnlyHint: boolean;
160
+ openWorldHint: boolean;
161
+ idempotentHint: boolean;
162
+ destructiveHint: boolean;
163
+ };
164
+ inputExamples: {
165
+ label: string;
166
+ input: {
167
+ entityType: string;
168
+ items: {
169
+ entityUrn: string;
170
+ data: {
171
+ dailyBudget: {
172
+ amount: string;
173
+ currencyCode: string;
174
+ };
175
+ };
176
+ }[];
177
+ };
178
+ }[];
179
+ logic: typeof bulkUpdateEntitiesLogic;
180
+ responseFormatter: typeof bulkUpdateEntitiesResponseFormatter;
181
+ };
182
+ export {};
183
+ //# 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;AAenD,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;EAcO,CAAC;AAElD,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaV,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,CAsCnC;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,wBAAwB,GAC/B,cAAc,EAAE,CAelB;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClC,CAAC"}