@cesteral/gads-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 (251) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +262 -0
  3. package/dist/auth/gads-auth-adapter.d.ts +31 -0
  4. package/dist/auth/gads-auth-adapter.d.ts.map +1 -0
  5. package/dist/auth/gads-auth-adapter.js +70 -0
  6. package/dist/auth/gads-auth-adapter.js.map +1 -0
  7. package/dist/auth/gads-auth-strategy.d.ts +9 -0
  8. package/dist/auth/gads-auth-strategy.d.ts.map +1 -0
  9. package/dist/auth/gads-auth-strategy.js +27 -0
  10. package/dist/auth/gads-auth-strategy.js.map +1 -0
  11. package/dist/config/index.d.ts +100 -0
  12. package/dist/config/index.d.ts.map +1 -0
  13. package/dist/config/index.js +37 -0
  14. package/dist/config/index.js.map +1 -0
  15. package/dist/container/index.d.ts +5 -0
  16. package/dist/container/index.d.ts.map +1 -0
  17. package/dist/container/index.js +14 -0
  18. package/dist/container/index.js.map +1 -0
  19. package/dist/container/registrations/core.d.ts +3 -0
  20. package/dist/container/registrations/core.d.ts.map +1 -0
  21. package/dist/container/registrations/core.js +14 -0
  22. package/dist/container/registrations/core.js.map +1 -0
  23. package/dist/container/registrations/mcp.d.ts +2 -0
  24. package/dist/container/registrations/mcp.d.ts.map +1 -0
  25. package/dist/container/registrations/mcp.js +3 -0
  26. package/dist/container/registrations/mcp.js.map +1 -0
  27. package/dist/container/tokens.d.ts +6 -0
  28. package/dist/container/tokens.d.ts.map +1 -0
  29. package/dist/container/tokens.js +6 -0
  30. package/dist/container/tokens.js.map +1 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +50 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
  36. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
  37. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +230 -0
  38. package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
  39. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
  40. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
  41. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +237 -0
  42. package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
  43. package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.d.ts +4 -0
  44. package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.d.ts.map +1 -0
  45. package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.js +154 -0
  46. package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.js.map +1 -0
  47. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
  48. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
  49. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
  50. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
  51. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
  52. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
  53. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
  54. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
  55. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
  56. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
  57. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +221 -0
  58. package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
  59. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
  60. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
  61. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +207 -0
  62. package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
  63. package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.d.ts +4 -0
  64. package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.d.ts.map +1 -0
  65. package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.js +182 -0
  66. package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.js.map +1 -0
  67. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts +4 -0
  68. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts.map +1 -0
  69. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js +223 -0
  70. package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js.map +1 -0
  71. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
  72. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
  73. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +125 -0
  74. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
  75. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts +4 -0
  76. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts.map +1 -0
  77. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js +177 -0
  78. package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js.map +1 -0
  79. package/dist/mcp-server/prompts/index.d.ts +9 -0
  80. package/dist/mcp-server/prompts/index.d.ts.map +1 -0
  81. package/dist/mcp-server/prompts/index.js +97 -0
  82. package/dist/mcp-server/prompts/index.js.map +1 -0
  83. package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
  84. package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
  85. package/dist/mcp-server/resources/definitions/entity-examples.resource.js +574 -0
  86. package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
  87. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
  88. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
  89. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +124 -0
  90. package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
  91. package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
  92. package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
  93. package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +264 -0
  94. package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
  95. package/dist/mcp-server/resources/definitions/gaql-reference.resource.d.ts +3 -0
  96. package/dist/mcp-server/resources/definitions/gaql-reference.resource.d.ts.map +1 -0
  97. package/dist/mcp-server/resources/definitions/gaql-reference.resource.js +157 -0
  98. package/dist/mcp-server/resources/definitions/gaql-reference.resource.js.map +1 -0
  99. package/dist/mcp-server/resources/definitions/index.d.ts +8 -0
  100. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  101. package/dist/mcp-server/resources/definitions/index.js +42 -0
  102. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  103. package/dist/mcp-server/resources/definitions/insights-reference.resource.d.ts +3 -0
  104. package/dist/mcp-server/resources/definitions/insights-reference.resource.d.ts.map +1 -0
  105. package/dist/mcp-server/resources/definitions/insights-reference.resource.js +78 -0
  106. package/dist/mcp-server/resources/definitions/insights-reference.resource.js.map +1 -0
  107. package/dist/mcp-server/resources/index.d.ts +3 -0
  108. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  109. package/dist/mcp-server/resources/index.js +2 -0
  110. package/dist/mcp-server/resources/index.js.map +1 -0
  111. package/dist/mcp-server/resources/types.d.ts +8 -0
  112. package/dist/mcp-server/resources/types.d.ts.map +1 -0
  113. package/dist/mcp-server/resources/types.js +2 -0
  114. package/dist/mcp-server/resources/types.js.map +1 -0
  115. package/dist/mcp-server/server.d.ts +5 -0
  116. package/dist/mcp-server/server.d.ts.map +1 -0
  117. package/dist/mcp-server/server.js +124 -0
  118. package/dist/mcp-server/server.js.map +1 -0
  119. package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +270 -0
  120. package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
  121. package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +189 -0
  122. package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
  123. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +148 -0
  124. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
  125. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +141 -0
  126. package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
  127. package/dist/mcp-server/tools/definitions/bulk-mutate.tool.d.ts +136 -0
  128. package/dist/mcp-server/tools/definitions/bulk-mutate.tool.d.ts.map +1 -0
  129. package/dist/mcp-server/tools/definitions/bulk-mutate.tool.js +127 -0
  130. package/dist/mcp-server/tools/definitions/bulk-mutate.tool.js.map +1 -0
  131. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +185 -0
  132. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
  133. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +149 -0
  134. package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
  135. package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +123 -0
  136. package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts.map +1 -0
  137. package/dist/mcp-server/tools/definitions/create-entity.tool.js +98 -0
  138. package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
  139. package/dist/mcp-server/tools/definitions/gaql-search.tool.d.ts +197 -0
  140. package/dist/mcp-server/tools/definitions/gaql-search.tool.d.ts.map +1 -0
  141. package/dist/mcp-server/tools/definitions/gaql-search.tool.js +110 -0
  142. package/dist/mcp-server/tools/definitions/gaql-search.tool.js.map +1 -0
  143. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +87 -0
  144. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
  145. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +91 -0
  146. package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
  147. package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +92 -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 +87 -0
  150. package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
  151. package/dist/mcp-server/tools/definitions/get-insights.tool.d.ts +382 -0
  152. package/dist/mcp-server/tools/definitions/get-insights.tool.d.ts.map +1 -0
  153. package/dist/mcp-server/tools/definitions/get-insights.tool.js +246 -0
  154. package/dist/mcp-server/tools/definitions/get-insights.tool.js.map +1 -0
  155. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts +141 -0
  156. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts.map +1 -0
  157. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js +163 -0
  158. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js.map +1 -0
  159. package/dist/mcp-server/tools/definitions/index.d.ts +18 -0
  160. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  161. package/dist/mcp-server/tools/definitions/index.js +53 -0
  162. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  163. package/dist/mcp-server/tools/definitions/list-accounts.tool.d.ts +54 -0
  164. package/dist/mcp-server/tools/definitions/list-accounts.tool.d.ts.map +1 -0
  165. package/dist/mcp-server/tools/definitions/list-accounts.tool.js +61 -0
  166. package/dist/mcp-server/tools/definitions/list-accounts.tool.js.map +1 -0
  167. package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +220 -0
  168. package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts.map +1 -0
  169. package/dist/mcp-server/tools/definitions/list-entities.tool.js +112 -0
  170. package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
  171. package/dist/mcp-server/tools/definitions/remove-entity.tool.d.ts +116 -0
  172. package/dist/mcp-server/tools/definitions/remove-entity.tool.d.ts.map +1 -0
  173. package/dist/mcp-server/tools/definitions/remove-entity.tool.js +120 -0
  174. package/dist/mcp-server/tools/definitions/remove-entity.tool.js.map +1 -0
  175. package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +129 -0
  176. package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
  177. package/dist/mcp-server/tools/definitions/update-entity.tool.js +91 -0
  178. package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
  179. package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +239 -0
  180. package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
  181. package/dist/mcp-server/tools/definitions/validate-entity.tool.js +151 -0
  182. package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
  183. package/dist/mcp-server/tools/index.d.ts +2 -0
  184. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  185. package/dist/mcp-server/tools/index.js +2 -0
  186. package/dist/mcp-server/tools/index.js.map +1 -0
  187. package/dist/mcp-server/tools/utils/computed-metrics.d.ts +8 -0
  188. package/dist/mcp-server/tools/utils/computed-metrics.d.ts.map +1 -0
  189. package/dist/mcp-server/tools/utils/computed-metrics.js +19 -0
  190. package/dist/mcp-server/tools/utils/computed-metrics.js.map +1 -0
  191. package/dist/mcp-server/tools/utils/entity-mapping.d.ts +22 -0
  192. package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
  193. package/dist/mcp-server/tools/utils/entity-mapping.js +99 -0
  194. package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
  195. package/dist/mcp-server/tools/utils/gaql-helpers.d.ts +4 -0
  196. package/dist/mcp-server/tools/utils/gaql-helpers.d.ts.map +1 -0
  197. package/dist/mcp-server/tools/utils/gaql-helpers.js +82 -0
  198. package/dist/mcp-server/tools/utils/gaql-helpers.js.map +1 -0
  199. package/dist/mcp-server/tools/utils/parent-id-validation.d.ts +10 -0
  200. package/dist/mcp-server/tools/utils/parent-id-validation.d.ts.map +1 -0
  201. package/dist/mcp-server/tools/utils/parent-id-validation.js +58 -0
  202. package/dist/mcp-server/tools/utils/parent-id-validation.js.map +1 -0
  203. package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
  204. package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
  205. package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
  206. package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
  207. package/dist/mcp-server/transports/streamable-http-transport.d.ts +49 -0
  208. package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
  209. package/dist/mcp-server/transports/streamable-http-transport.js +84 -0
  210. package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
  211. package/dist/services/gads/gads-http-client.d.ts +13 -0
  212. package/dist/services/gads/gads-http-client.d.ts.map +1 -0
  213. package/dist/services/gads/gads-http-client.js +113 -0
  214. package/dist/services/gads/gads-http-client.js.map +1 -0
  215. package/dist/services/gads/gads-service.d.ts +60 -0
  216. package/dist/services/gads/gads-service.d.ts.map +1 -0
  217. package/dist/services/gads/gads-service.js +363 -0
  218. package/dist/services/gads/gads-service.js.map +1 -0
  219. package/dist/services/gads/types.d.ts +211 -0
  220. package/dist/services/gads/types.d.ts.map +1 -0
  221. package/dist/services/gads/types.js +16 -0
  222. package/dist/services/gads/types.js.map +1 -0
  223. package/dist/services/session-services.d.ts +17 -0
  224. package/dist/services/session-services.d.ts.map +1 -0
  225. package/dist/services/session-services.js +14 -0
  226. package/dist/services/session-services.js.map +1 -0
  227. package/dist/types-global/mcp.d.ts +2 -0
  228. package/dist/types-global/mcp.d.ts.map +1 -0
  229. package/dist/types-global/mcp.js +2 -0
  230. package/dist/types-global/mcp.js.map +1 -0
  231. package/dist/utils/errors/index.d.ts +2 -0
  232. package/dist/utils/errors/index.d.ts.map +1 -0
  233. package/dist/utils/errors/index.js +2 -0
  234. package/dist/utils/errors/index.js.map +1 -0
  235. package/dist/utils/platform.d.ts +3 -0
  236. package/dist/utils/platform.d.ts.map +1 -0
  237. package/dist/utils/platform.js +5 -0
  238. package/dist/utils/platform.js.map +1 -0
  239. package/dist/utils/security/rate-limiter.d.ts +3 -0
  240. package/dist/utils/security/rate-limiter.d.ts.map +1 -0
  241. package/dist/utils/security/rate-limiter.js +5 -0
  242. package/dist/utils/security/rate-limiter.js.map +1 -0
  243. package/dist/utils/telemetry/index.d.ts +2 -0
  244. package/dist/utils/telemetry/index.d.ts.map +1 -0
  245. package/dist/utils/telemetry/index.js +2 -0
  246. package/dist/utils/telemetry/index.js.map +1 -0
  247. package/dist/utils/telemetry/tracing.d.ts +3 -0
  248. package/dist/utils/telemetry/tracing.d.ts.map +1 -0
  249. package/dist/utils/telemetry/tracing.js +4 -0
  250. package/dist/utils/telemetry/tracing.js.map +1 -0
  251. package/package.json +56 -0
@@ -0,0 +1,246 @@
1
+ import { z } from "zod";
2
+ import { resolveSessionServices } from "../utils/resolve-session.js";
3
+ import { addComputedMetrics } from "../utils/computed-metrics.js";
4
+ import { createReportView, formatReportViewResponse, getReportViewFetchLimit, ReportViewInputSchema, ReportViewOutputSchema, } from "@cesteral/shared";
5
+ import { McpError, JsonRpcErrorCode } from "@cesteral/shared";
6
+ const TOOL_NAME = "gads_get_insights";
7
+ const TOOL_TITLE = "Google Ads Performance Insights";
8
+ const TOOL_DESCRIPTION = `Get performance insights for Google Ads entities using preset parameters.
9
+
10
+ Convenience wrapper around GAQL that constructs queries from simple inputs. For ad-hoc queries, use \`gads_gaql_search\` directly.
11
+
12
+ **Supported entity types:** campaign, adGroup, ad, keyword
13
+
14
+ **Default metrics:** impressions, clicks, cost_micros, conversions, ctr, average_cpc
15
+
16
+ **Date ranges:** Preset (TODAY, YESTERDAY, LAST_7_DAYS, etc.) OR custom (startDate + endDate)
17
+
18
+ **Computed metrics:** Set includeComputedMetrics=true for derived CPA, ROAS, CPM`;
19
+ const ENTITY_TYPE_ENUM = ["campaign", "adGroup", "ad", "keyword"];
20
+ const METRIC_NAME_PATTERN = /^(metrics\.)?[a-z_][a-z0-9_]*$/;
21
+ const DATE_RANGE_ENUM = [
22
+ "TODAY",
23
+ "YESTERDAY",
24
+ "LAST_7_DAYS",
25
+ "LAST_30_DAYS",
26
+ "THIS_MONTH",
27
+ "LAST_MONTH",
28
+ "LAST_90_DAYS",
29
+ ];
30
+ const DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
31
+ const DEFAULT_METRICS = [
32
+ "metrics.impressions",
33
+ "metrics.clicks",
34
+ "metrics.cost_micros",
35
+ "metrics.conversions",
36
+ "metrics.ctr",
37
+ "metrics.average_cpc",
38
+ ];
39
+ const GAQL_RESOURCE_MAP = {
40
+ campaign: "campaign",
41
+ adGroup: "ad_group",
42
+ ad: "ad_group_ad",
43
+ keyword: "keyword_view",
44
+ };
45
+ const ENTITY_ID_FIELD_MAP = {
46
+ campaign: "campaign.id",
47
+ adGroup: "ad_group.id",
48
+ ad: "ad_group_ad.ad.id",
49
+ keyword: "ad_group_criterion.criterion_id",
50
+ };
51
+ const ENTITY_NAME_FIELD_MAP = {
52
+ campaign: "campaign.name",
53
+ adGroup: "ad_group.name",
54
+ ad: "ad_group_ad.ad.name",
55
+ keyword: "ad_group_criterion.keyword.text",
56
+ };
57
+ export const GetInsightsInputSchema = z
58
+ .object({
59
+ customerId: z
60
+ .string()
61
+ .regex(/^\d+$/, "customerId must be numeric")
62
+ .describe("Google Ads customer ID (no dashes)"),
63
+ entityType: z.enum(ENTITY_TYPE_ENUM).describe("Type of entity to get insights for"),
64
+ entityId: z
65
+ .string()
66
+ .regex(/^\d+$/, "entityId must be numeric")
67
+ .optional()
68
+ .describe("Filter to a specific entity ID"),
69
+ dateRange: z
70
+ .enum(DATE_RANGE_ENUM)
71
+ .optional()
72
+ .describe("Preset date range for metrics (use this OR startDate+endDate)"),
73
+ startDate: z
74
+ .string()
75
+ .regex(DATE_PATTERN, "startDate must be YYYY-MM-DD")
76
+ .optional()
77
+ .describe("Custom start date (YYYY-MM-DD) — requires endDate"),
78
+ endDate: z
79
+ .string()
80
+ .regex(DATE_PATTERN, "endDate must be YYYY-MM-DD")
81
+ .optional()
82
+ .describe("Custom end date (YYYY-MM-DD) — requires startDate"),
83
+ metrics: z
84
+ .array(z
85
+ .string()
86
+ .regex(METRIC_NAME_PATTERN, "metrics must be metric names like 'clicks' or 'metrics.clicks'"))
87
+ .optional()
88
+ .describe("Metrics to include (defaults to impressions, clicks, cost_micros, conversions, ctr, average_cpc)"),
89
+ includeComputedMetrics: z
90
+ .boolean()
91
+ .optional()
92
+ .default(false)
93
+ .describe("Include computed CPA, ROAS, CPM derived from raw metrics"),
94
+ limit: z
95
+ .number()
96
+ .min(1)
97
+ .max(10000)
98
+ .optional()
99
+ .describe("Deprecated. Use maxRows for the returned row count."),
100
+ })
101
+ .merge(ReportViewInputSchema)
102
+ .refine((data) => {
103
+ const hasPreset = !!data.dateRange;
104
+ const hasCustomStart = !!data.startDate;
105
+ const hasCustomEnd = !!data.endDate;
106
+ if (hasPreset && (hasCustomStart || hasCustomEnd))
107
+ return false;
108
+ if (!hasPreset && !hasCustomStart && !hasCustomEnd)
109
+ return false;
110
+ if (hasCustomStart !== hasCustomEnd)
111
+ return false;
112
+ return true;
113
+ }, {
114
+ message: "Provide either dateRange OR both startDate and endDate (not both, not neither)",
115
+ })
116
+ .refine((data) => {
117
+ if (data.startDate && data.endDate) {
118
+ return data.startDate <= data.endDate;
119
+ }
120
+ return true;
121
+ }, {
122
+ message: "startDate must be on or before endDate",
123
+ })
124
+ .describe("Parameters for getting Google Ads performance insights");
125
+ export const GetInsightsOutputSchema = z
126
+ .object({
127
+ ...ReportViewOutputSchema.shape,
128
+ totalResults: z.number().describe("Number of results returned"),
129
+ dateRange: z.string().describe("Date range used"),
130
+ startDate: z.string().optional().describe("Custom start date (when used)"),
131
+ endDate: z.string().optional().describe("Custom end date (when used)"),
132
+ timestamp: z.string().datetime(),
133
+ })
134
+ .describe("Google Ads performance insights");
135
+ function buildGaqlQuery(input) {
136
+ const resource = GAQL_RESOURCE_MAP[input.entityType];
137
+ const idField = ENTITY_ID_FIELD_MAP[input.entityType];
138
+ const nameField = ENTITY_NAME_FIELD_MAP[input.entityType];
139
+ const metricFields = input.metrics && input.metrics.length > 0
140
+ ? input.metrics.map((m) => {
141
+ if (!METRIC_NAME_PATTERN.test(m)) {
142
+ throw new McpError(JsonRpcErrorCode.InvalidParams, `Invalid metric name: ${m}`);
143
+ }
144
+ return m.startsWith("metrics.") ? m : `metrics.${m}`;
145
+ })
146
+ : DEFAULT_METRICS;
147
+ const selectFields = [idField, nameField, ...metricFields].join(", ");
148
+ const whereClauses = [];
149
+ if (input.dateRange) {
150
+ whereClauses.push(`segments.date DURING ${input.dateRange}`);
151
+ }
152
+ else if (input.startDate && input.endDate) {
153
+ whereClauses.push(`segments.date BETWEEN '${input.startDate}' AND '${input.endDate}'`);
154
+ }
155
+ if (input.entityId) {
156
+ if (!/^\d+$/.test(input.entityId)) {
157
+ throw new McpError(JsonRpcErrorCode.InvalidParams, "entityId must be numeric");
158
+ }
159
+ whereClauses.push(`${idField} = ${input.entityId}`);
160
+ }
161
+ const whereClause = whereClauses.join(" AND ");
162
+ return `SELECT ${selectFields} FROM ${resource} WHERE ${whereClause} ORDER BY metrics.impressions DESC LIMIT ${input.limit} PARAMETERS omit_unselected_resource_names=true`;
163
+ }
164
+ export async function getInsightsLogic(input, context, sdkContext) {
165
+ const { gadsService } = resolveSessionServices(sdkContext);
166
+ const viewInput = input.maxRows === undefined && input.limit !== undefined
167
+ ? { ...input, maxRows: input.limit }
168
+ : input;
169
+ const query = buildGaqlQuery({ ...input, limit: getReportViewFetchLimit(viewInput) });
170
+ const result = await gadsService.gaqlSearch(input.customerId, query, getReportViewFetchLimit(viewInput), undefined, context);
171
+ let results = result.results;
172
+ if (input.includeComputedMetrics) {
173
+ results = results.map(addComputedMetrics);
174
+ }
175
+ const dateRangeLabel = input.dateRange || `${input.startDate} to ${input.endDate}`;
176
+ return {
177
+ ...createReportView({
178
+ rows: results,
179
+ totalRows: results.length + (result.nextPageToken ? 1 : 0),
180
+ input: viewInput,
181
+ warnings: result.nextPageToken
182
+ ? [
183
+ "More rows are available. Use gads_gaql_search with the returned page token to continue.",
184
+ ]
185
+ : [],
186
+ }),
187
+ totalResults: results.length,
188
+ dateRange: dateRangeLabel,
189
+ ...(input.startDate && { startDate: input.startDate }),
190
+ ...(input.endDate && { endDate: input.endDate }),
191
+ timestamp: new Date().toISOString(),
192
+ };
193
+ }
194
+ export function getInsightsResponseFormatter(result) {
195
+ return [
196
+ {
197
+ type: "text",
198
+ text: `Insights (${result.dateRange}): ${result.returnedRows} result(s)\n\n${formatReportViewResponse(result, "Insight data")}\n\nTimestamp: ${result.timestamp}`,
199
+ },
200
+ ];
201
+ }
202
+ export const getInsightsTool = {
203
+ name: TOOL_NAME,
204
+ title: TOOL_TITLE,
205
+ description: TOOL_DESCRIPTION,
206
+ inputSchema: GetInsightsInputSchema,
207
+ outputSchema: GetInsightsOutputSchema,
208
+ annotations: {
209
+ readOnlyHint: true,
210
+ idempotentHint: true,
211
+ openWorldHint: true,
212
+ destructiveHint: false,
213
+ },
214
+ inputExamples: [
215
+ {
216
+ label: "Campaign performance last 30 days",
217
+ input: {
218
+ customerId: "1234567890",
219
+ entityType: "campaign",
220
+ dateRange: "LAST_30_DAYS",
221
+ },
222
+ },
223
+ {
224
+ label: "Ad group metrics for specific campaign",
225
+ input: {
226
+ customerId: "1234567890",
227
+ entityType: "adGroup",
228
+ dateRange: "LAST_7_DAYS",
229
+ limit: 100,
230
+ },
231
+ },
232
+ {
233
+ label: "Custom date range with computed metrics",
234
+ input: {
235
+ customerId: "1234567890",
236
+ entityType: "campaign",
237
+ startDate: "2026-01-01",
238
+ endDate: "2026-01-31",
239
+ includeComputedMetrics: true,
240
+ },
241
+ },
242
+ ],
243
+ logic: getInsightsLogic,
244
+ responseFormatter: getInsightsResponseFormatter,
245
+ };
246
+ //# sourceMappingURL=get-insights.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-insights.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-insights.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ import { z } from "zod";
2
+ import type { RequestContext, McpTextContent } from "@cesteral/shared";
3
+ import type { SdkContext, ToolDefinition } from "@cesteral/shared";
4
+ export declare const GetPacingStatusInputSchema: z.ZodObject<{
5
+ customerId: z.ZodString;
6
+ campaignId: z.ZodString;
7
+ spendToDate: z.ZodNumber;
8
+ budgetTotal: z.ZodNumber;
9
+ flightStartDate: z.ZodString;
10
+ flightEndDate: z.ZodString;
11
+ currency: z.ZodDefault<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ customerId: string;
14
+ campaignId: string;
15
+ spendToDate: number;
16
+ budgetTotal: number;
17
+ flightStartDate: string;
18
+ flightEndDate: string;
19
+ currency: string;
20
+ }, {
21
+ customerId: string;
22
+ campaignId: string;
23
+ spendToDate: number;
24
+ budgetTotal: number;
25
+ flightStartDate: string;
26
+ flightEndDate: string;
27
+ currency?: string | undefined;
28
+ }>;
29
+ export declare const GetPacingStatusOutputSchema: z.ZodObject<{
30
+ customerId: z.ZodString;
31
+ campaignId: z.ZodString;
32
+ budget: z.ZodObject<{
33
+ total: z.ZodNumber;
34
+ spent: z.ZodNumber;
35
+ remaining: z.ZodNumber;
36
+ currency: z.ZodString;
37
+ }, "strip", z.ZodTypeAny, {
38
+ currency: string;
39
+ total: number;
40
+ spent: number;
41
+ remaining: number;
42
+ }, {
43
+ currency: string;
44
+ total: number;
45
+ spent: number;
46
+ remaining: number;
47
+ }>;
48
+ flight: z.ZodObject<{
49
+ startDate: z.ZodString;
50
+ endDate: z.ZodString;
51
+ daysElapsed: z.ZodNumber;
52
+ daysRemaining: z.ZodNumber;
53
+ totalDays: z.ZodNumber;
54
+ }, "strip", z.ZodTypeAny, {
55
+ startDate: string;
56
+ endDate: string;
57
+ daysElapsed: number;
58
+ daysRemaining: number;
59
+ totalDays: number;
60
+ }, {
61
+ startDate: string;
62
+ endDate: string;
63
+ daysElapsed: number;
64
+ daysRemaining: number;
65
+ totalDays: number;
66
+ }>;
67
+ pacing: z.ZodObject<{
68
+ expectedSpendPercent: z.ZodNumber;
69
+ actualSpendPercent: z.ZodNumber;
70
+ pacingRatio: z.ZodNumber;
71
+ status: z.ZodEnum<["ON_PACE", "AHEAD", "BEHIND", "SEVERELY_BEHIND"]>;
72
+ projectedEndSpend: z.ZodNumber;
73
+ }, "strip", z.ZodTypeAny, {
74
+ status: "ON_PACE" | "AHEAD" | "BEHIND" | "SEVERELY_BEHIND";
75
+ expectedSpendPercent: number;
76
+ actualSpendPercent: number;
77
+ pacingRatio: number;
78
+ projectedEndSpend: number;
79
+ }, {
80
+ status: "ON_PACE" | "AHEAD" | "BEHIND" | "SEVERELY_BEHIND";
81
+ expectedSpendPercent: number;
82
+ actualSpendPercent: number;
83
+ pacingRatio: number;
84
+ projectedEndSpend: number;
85
+ }>;
86
+ timestamp: z.ZodString;
87
+ }, "strip", z.ZodTypeAny, {
88
+ customerId: string;
89
+ campaignId: string;
90
+ timestamp: string;
91
+ budget: {
92
+ currency: string;
93
+ total: number;
94
+ spent: number;
95
+ remaining: number;
96
+ };
97
+ flight: {
98
+ startDate: string;
99
+ endDate: string;
100
+ daysElapsed: number;
101
+ daysRemaining: number;
102
+ totalDays: number;
103
+ };
104
+ pacing: {
105
+ status: "ON_PACE" | "AHEAD" | "BEHIND" | "SEVERELY_BEHIND";
106
+ expectedSpendPercent: number;
107
+ actualSpendPercent: number;
108
+ pacingRatio: number;
109
+ projectedEndSpend: number;
110
+ };
111
+ }, {
112
+ customerId: string;
113
+ campaignId: string;
114
+ timestamp: string;
115
+ budget: {
116
+ currency: string;
117
+ total: number;
118
+ spent: number;
119
+ remaining: number;
120
+ };
121
+ flight: {
122
+ startDate: string;
123
+ endDate: string;
124
+ daysElapsed: number;
125
+ daysRemaining: number;
126
+ totalDays: number;
127
+ };
128
+ pacing: {
129
+ status: "ON_PACE" | "AHEAD" | "BEHIND" | "SEVERELY_BEHIND";
130
+ expectedSpendPercent: number;
131
+ actualSpendPercent: number;
132
+ pacingRatio: number;
133
+ projectedEndSpend: number;
134
+ };
135
+ }>;
136
+ export type GetPacingStatusInput = z.infer<typeof GetPacingStatusInputSchema>;
137
+ export type GetPacingStatusOutput = z.infer<typeof GetPacingStatusOutputSchema>;
138
+ export declare function getPacingStatusLogic(input: GetPacingStatusInput, _context: RequestContext, _sdkContext?: SdkContext): Promise<GetPacingStatusOutput>;
139
+ export declare function getPacingStatusResponseFormatter(result: GetPacingStatusOutput, _input: GetPacingStatusInput): McpTextContent[];
140
+ export declare const getPacingStatusTool: ToolDefinition<typeof GetPacingStatusInputSchema, typeof GetPacingStatusOutputSchema>;
141
+ //# sourceMappingURL=get-pacing-status.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-pacing-status.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-pacing-status.tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUnE,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;EAsBsB,CAAC;AAK9D,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BI,CAAC;AAE7C,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAKhF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,cAAc,EACxB,WAAW,CAAC,EAAE,UAAU,GACvB,OAAO,CAAC,qBAAqB,CAAC,CAiChC;AAKD,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,qBAAqB,EAC7B,MAAM,EAAE,oBAAoB,GAC3B,cAAc,EAAE,CAkClB;AAKD,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAC9C,OAAO,0BAA0B,EACjC,OAAO,2BAA2B,CAyCnC,CAAC"}
@@ -0,0 +1,163 @@
1
+ import { z } from "zod";
2
+ import { calculatePacingStatus } from "@cesteral/shared";
3
+ const TOOL_NAME = "gads_get_pacing_status";
4
+ const TOOL_TITLE = "Get Pacing Status";
5
+ const TOOL_DESCRIPTION = "Calculate real-time pacing status for a Google Ads campaign (actual vs expected delivery). Requires budget, spend to date, and flight dates as inputs. Note: spendToDate should be in actual currency units (not micros).";
6
+ export const GetPacingStatusInputSchema = z
7
+ .object({
8
+ customerId: z
9
+ .string()
10
+ .regex(/^\d+$/, "Customer ID must contain only digits (no dashes)")
11
+ .describe("Google Ads customer ID (no dashes)"),
12
+ campaignId: z.string().describe("Google Ads Campaign ID"),
13
+ spendToDate: z
14
+ .number()
15
+ .min(0)
16
+ .describe("Total spend to date in account currency (not micros — actual currency units)"),
17
+ budgetTotal: z.number().min(0).describe("Total campaign budget in account currency"),
18
+ flightStartDate: z
19
+ .string()
20
+ .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
21
+ .describe("Flight start date (YYYY-MM-DD)"),
22
+ flightEndDate: z
23
+ .string()
24
+ .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
25
+ .describe("Flight end date (YYYY-MM-DD)"),
26
+ currency: z.string().default("USD").describe("Currency code (default: USD)"),
27
+ })
28
+ .describe("Parameters for checking campaign pacing status");
29
+ export const GetPacingStatusOutputSchema = z
30
+ .object({
31
+ customerId: z.string(),
32
+ campaignId: z.string(),
33
+ budget: z.object({
34
+ total: z.number(),
35
+ spent: z.number(),
36
+ remaining: z.number(),
37
+ currency: z.string(),
38
+ }),
39
+ flight: z.object({
40
+ startDate: z.string(),
41
+ endDate: z.string(),
42
+ daysElapsed: z.number(),
43
+ daysRemaining: z.number(),
44
+ totalDays: z.number(),
45
+ }),
46
+ pacing: z.object({
47
+ expectedSpendPercent: z.number(),
48
+ actualSpendPercent: z.number(),
49
+ pacingRatio: z.number().describe("actual / expected (1.0 = on pace)"),
50
+ status: z.enum(["ON_PACE", "AHEAD", "BEHIND", "SEVERELY_BEHIND"]),
51
+ projectedEndSpend: z.number(),
52
+ }),
53
+ timestamp: z.string().datetime(),
54
+ })
55
+ .describe("Campaign pacing status result");
56
+ export async function getPacingStatusLogic(input, _context, _sdkContext) {
57
+ const pacingStatus = calculatePacingStatus({
58
+ spendToDate: input.spendToDate,
59
+ budgetTotal: input.budgetTotal,
60
+ flightStartDate: input.flightStartDate,
61
+ flightEndDate: input.flightEndDate,
62
+ });
63
+ return {
64
+ customerId: input.customerId,
65
+ campaignId: input.campaignId,
66
+ budget: {
67
+ total: input.budgetTotal,
68
+ spent: input.spendToDate,
69
+ remaining: Math.max(0, input.budgetTotal - input.spendToDate),
70
+ currency: input.currency,
71
+ },
72
+ flight: {
73
+ startDate: input.flightStartDate,
74
+ endDate: input.flightEndDate,
75
+ daysElapsed: pacingStatus.daysElapsed,
76
+ daysRemaining: pacingStatus.daysRemaining,
77
+ totalDays: pacingStatus.totalDays,
78
+ },
79
+ pacing: {
80
+ expectedSpendPercent: pacingStatus.expectedSpendPercent,
81
+ actualSpendPercent: pacingStatus.actualSpendPercent,
82
+ pacingRatio: pacingStatus.pacingRatio,
83
+ status: pacingStatus.status,
84
+ projectedEndSpend: pacingStatus.projectedEndSpend,
85
+ },
86
+ timestamp: new Date().toISOString(),
87
+ };
88
+ }
89
+ export function getPacingStatusResponseFormatter(result, _input) {
90
+ const statusEmoji = result.pacing.status === "ON_PACE"
91
+ ? "[OK]"
92
+ : result.pacing.status === "AHEAD"
93
+ ? "[AHEAD]"
94
+ : result.pacing.status === "BEHIND"
95
+ ? "[BEHIND]"
96
+ : "[CRITICAL]";
97
+ return [
98
+ {
99
+ type: "text",
100
+ text: `Campaign "${result.campaignId}" Pacing Status:
101
+
102
+ ${statusEmoji} Status: ${result.pacing.status}
103
+
104
+ Budget:
105
+ • Total: $${result.budget.total.toLocaleString()}
106
+ • Spent: $${result.budget.spent.toLocaleString()} (${result.pacing.actualSpendPercent.toFixed(1)}%)
107
+ • Remaining: $${result.budget.remaining.toLocaleString()}
108
+
109
+ Flight:
110
+ • ${result.flight.startDate} to ${result.flight.endDate}
111
+ • Days: ${result.flight.daysElapsed} elapsed / ${result.flight.totalDays} total
112
+ • Days Remaining: ${result.flight.daysRemaining}
113
+
114
+ Pacing Analysis:
115
+ • Expected Spend: ${result.pacing.expectedSpendPercent.toFixed(1)}%
116
+ • Actual Spend: ${result.pacing.actualSpendPercent.toFixed(1)}%
117
+ • Pacing Ratio: ${result.pacing.pacingRatio.toFixed(2)}x
118
+ • Projected End Spend: $${result.pacing.projectedEndSpend.toFixed(2)}`,
119
+ },
120
+ ];
121
+ }
122
+ export const getPacingStatusTool = {
123
+ name: TOOL_NAME,
124
+ title: TOOL_TITLE,
125
+ description: TOOL_DESCRIPTION,
126
+ inputSchema: GetPacingStatusInputSchema,
127
+ outputSchema: GetPacingStatusOutputSchema,
128
+ annotations: {
129
+ readOnlyHint: true,
130
+ destructiveHint: false,
131
+ openWorldHint: false,
132
+ idempotentHint: true,
133
+ },
134
+ inputExamples: [
135
+ {
136
+ label: "Check pacing for a standard monthly campaign",
137
+ input: {
138
+ customerId: "1234567890",
139
+ campaignId: "9876543",
140
+ spendToDate: 18000,
141
+ budgetTotal: 50000,
142
+ flightStartDate: "2026-03-01",
143
+ flightEndDate: "2026-03-31",
144
+ currency: "USD",
145
+ },
146
+ },
147
+ {
148
+ label: "Check pacing for a short-burst campaign in GBP",
149
+ input: {
150
+ customerId: "9876543210",
151
+ campaignId: "1122334",
152
+ spendToDate: 4200,
153
+ budgetTotal: 10000,
154
+ flightStartDate: "2026-03-15",
155
+ flightEndDate: "2026-03-21",
156
+ currency: "GBP",
157
+ },
158
+ },
159
+ ],
160
+ logic: getPacingStatusLogic,
161
+ responseFormatter: getPacingStatusResponseFormatter,
162
+ };
163
+ //# sourceMappingURL=get-pacing-status.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-pacing-status.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-pacing-status.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export { gaqlSearchTool } from "./gaql-search.tool.js";
2
+ export { listAccountsTool } from "./list-accounts.tool.js";
3
+ export { getEntityTool } from "./get-entity.tool.js";
4
+ export { listEntitiesTool } from "./list-entities.tool.js";
5
+ export { getInsightsTool } from "./get-insights.tool.js";
6
+ export { createEntityTool } from "./create-entity.tool.js";
7
+ export { updateEntityTool } from "./update-entity.tool.js";
8
+ export { removeEntityTool } from "./remove-entity.tool.js";
9
+ export { bulkMutateTool } from "./bulk-mutate.tool.js";
10
+ export { bulkCreateEntitiesTool } from "./bulk-create-entities.tool.js";
11
+ export { bulkUpdateStatusTool } from "./bulk-update-status.tool.js";
12
+ export { validateEntityTool } from "./validate-entity.tool.js";
13
+ export { adjustBidsTool } from "./adjust-bids.tool.js";
14
+ export { getAdPreviewTool } from "./get-ad-preview.tool.js";
15
+ export { getPacingStatusTool } from "./get-pacing-status.tool.js";
16
+ import { type ToolDefinitionForFactory } from "@cesteral/shared";
17
+ export declare const allTools: ToolDefinitionForFactory[];
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAiBlE,OAAO,EAAoB,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AA6BnF,eAAO,MAAM,QAAQ,EAAE,wBAAwB,EAG9C,CAAC"}
@@ -0,0 +1,53 @@
1
+ export { gaqlSearchTool } from "./gaql-search.tool.js";
2
+ export { listAccountsTool } from "./list-accounts.tool.js";
3
+ export { getEntityTool } from "./get-entity.tool.js";
4
+ export { listEntitiesTool } from "./list-entities.tool.js";
5
+ export { getInsightsTool } from "./get-insights.tool.js";
6
+ export { createEntityTool } from "./create-entity.tool.js";
7
+ export { updateEntityTool } from "./update-entity.tool.js";
8
+ export { removeEntityTool } from "./remove-entity.tool.js";
9
+ export { bulkMutateTool } from "./bulk-mutate.tool.js";
10
+ export { bulkCreateEntitiesTool } from "./bulk-create-entities.tool.js";
11
+ export { bulkUpdateStatusTool } from "./bulk-update-status.tool.js";
12
+ export { validateEntityTool } from "./validate-entity.tool.js";
13
+ export { adjustBidsTool } from "./adjust-bids.tool.js";
14
+ export { getAdPreviewTool } from "./get-ad-preview.tool.js";
15
+ export { getPacingStatusTool } from "./get-pacing-status.tool.js";
16
+ import { gaqlSearchTool } from "./gaql-search.tool.js";
17
+ import { listAccountsTool } from "./list-accounts.tool.js";
18
+ import { getEntityTool } from "./get-entity.tool.js";
19
+ import { listEntitiesTool } from "./list-entities.tool.js";
20
+ import { getInsightsTool } from "./get-insights.tool.js";
21
+ import { createEntityTool } from "./create-entity.tool.js";
22
+ import { updateEntityTool } from "./update-entity.tool.js";
23
+ import { removeEntityTool } from "./remove-entity.tool.js";
24
+ import { bulkMutateTool } from "./bulk-mutate.tool.js";
25
+ import { bulkCreateEntitiesTool } from "./bulk-create-entities.tool.js";
26
+ import { bulkUpdateStatusTool } from "./bulk-update-status.tool.js";
27
+ import { validateEntityTool } from "./validate-entity.tool.js";
28
+ import { adjustBidsTool } from "./adjust-bids.tool.js";
29
+ import { getAdPreviewTool } from "./get-ad-preview.tool.js";
30
+ import { getPacingStatusTool } from "./get-pacing-status.tool.js";
31
+ import { conformanceTools } from "@cesteral/shared";
32
+ const productionTools = [
33
+ gaqlSearchTool,
34
+ listAccountsTool,
35
+ getEntityTool,
36
+ listEntitiesTool,
37
+ getInsightsTool,
38
+ createEntityTool,
39
+ updateEntityTool,
40
+ removeEntityTool,
41
+ bulkMutateTool,
42
+ bulkCreateEntitiesTool,
43
+ bulkUpdateStatusTool,
44
+ adjustBidsTool,
45
+ validateEntityTool,
46
+ getAdPreviewTool,
47
+ getPacingStatusTool,
48
+ ];
49
+ export const allTools = [
50
+ ...productionTools,
51
+ ...(process.env.MCP_INCLUDE_CONFORMANCE_TOOLS === "true" ? conformanceTools : []),
52
+ ];
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAiC,MAAM,kBAAkB,CAAC;AAEnF,MAAM,eAAe,GAA+B;IAElD,cAAc;IACd,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,eAAe;IAEf,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,cAAc;IACd,sBAAsB;IACtB,oBAAoB;IACpB,cAAc;IAEd,kBAAkB;IAElB,gBAAgB;IAEhB,mBAAmB;CACpB,CAAC;AAMF,MAAM,CAAC,MAAM,QAAQ,GAA+B;IAClD,GAAG,eAAe;IAClB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;CAClF,CAAC"}