@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,237 @@
1
+ export const campaignSetupWorkflowPrompt = {
2
+ name: "gads_campaign_setup_workflow",
3
+ description: "Step-by-step workflow for creating a complete Google Ads Search campaign (Budget → Campaign → Ad Group → Ads → Keywords)",
4
+ arguments: [
5
+ {
6
+ name: "customerId",
7
+ description: "Google Ads customer ID (no dashes)",
8
+ required: true,
9
+ },
10
+ ],
11
+ };
12
+ export function getCampaignSetupWorkflowMessage(args) {
13
+ const customerId = args?.customerId || "{customerId}";
14
+ return `# Google Ads Campaign Setup Workflow
15
+
16
+ ## Context
17
+ - Customer ID: \`${customerId}\`
18
+ - Platform: Google Ads API v23
19
+ - Campaign Type: Search (most common)
20
+
21
+ This workflow guides you through creating a full campaign hierarchy. Each step depends on the previous one.
22
+
23
+ ---
24
+
25
+ ## Step 1: Verify the Account
26
+
27
+ Confirm the account exists and is accessible.
28
+
29
+ \`\`\`
30
+ Tool: gads_list_accounts
31
+ Input: {}
32
+ \`\`\`
33
+
34
+ **Check**: Confirm \`${customerId}\` appears in the list.
35
+
36
+ ---
37
+
38
+ ## Step 2: Create a Campaign Budget
39
+
40
+ ⚠️ **GOTCHA**: Google Ads requires a separate CampaignBudget entity. Create it before the campaign.
41
+
42
+ \`\`\`
43
+ Tool: gads_create_entity
44
+ Input: {
45
+ "entityType": "campaignBudget",
46
+ "customerId": "${customerId}",
47
+ "data": {
48
+ "name": "My Campaign Budget",
49
+ "amountMicros": "50000000",
50
+ "deliveryMethod": "STANDARD"
51
+ }
52
+ }
53
+ \`\`\`
54
+
55
+ **Save**: Note the returned resource name (e.g., \`customers/${customerId}/campaignBudgets/{budgetId}\`).
56
+
57
+ > \`amountMicros\` is the **daily** budget in micros. $50/day = "50000000".
58
+
59
+ ---
60
+
61
+ ## Step 3: Create the Campaign
62
+
63
+ \`\`\`
64
+ Tool: gads_create_entity
65
+ Input: {
66
+ "entityType": "campaign",
67
+ "customerId": "${customerId}",
68
+ "data": {
69
+ "name": "My Search Campaign",
70
+ "advertisingChannelType": "SEARCH",
71
+ "status": "PAUSED",
72
+ "campaignBudget": "customers/${customerId}/campaignBudgets/{budgetId}",
73
+ "startDate": "2025-03-01",
74
+ "networkSettings": {
75
+ "targetGoogleSearch": true,
76
+ "targetSearchNetwork": true,
77
+ "targetContentNetwork": false,
78
+ "targetPartnerSearchNetwork": false
79
+ },
80
+ "manualCpc": {
81
+ "enhancedCpcEnabled": false
82
+ }
83
+ }
84
+ }
85
+ \`\`\`
86
+
87
+ **Save**: Note the returned resource name (e.g., \`customers/${customerId}/campaigns/{campaignId}\`).
88
+
89
+ ### Common Gotchas
90
+ - Set \`status: "PAUSED"\` initially — enable after full setup is verified
91
+ - \`campaignBudget\` must be the full resource name from Step 2
92
+ - \`advertisingChannelType\` cannot be changed after creation
93
+ - Choose bidding strategy carefully: \`manualCpc\` for control, \`maximizeConversions\` for automation
94
+
95
+ ---
96
+
97
+ ## Step 4: Create Ad Group(s)
98
+
99
+ \`\`\`
100
+ Tool: gads_create_entity
101
+ Input: {
102
+ "entityType": "adGroup",
103
+ "customerId": "${customerId}",
104
+ "data": {
105
+ "name": "My Ad Group",
106
+ "campaign": "customers/${customerId}/campaigns/{campaignId}",
107
+ "status": "ENABLED",
108
+ "type": "SEARCH_STANDARD",
109
+ "cpcBidMicros": "2500000"
110
+ }
111
+ }
112
+ \`\`\`
113
+
114
+ **Save**: Note the returned resource name.
115
+
116
+ > \`cpcBidMicros\` is the default max CPC bid. $2.50 = "2500000".
117
+
118
+ ---
119
+
120
+ ## Step 5: Add Keywords
121
+
122
+ \`\`\`
123
+ Tool: gads_create_entity
124
+ Input: {
125
+ "entityType": "keyword",
126
+ "customerId": "${customerId}",
127
+ "data": {
128
+ "adGroup": "customers/${customerId}/adGroups/{adGroupId}",
129
+ "status": "ENABLED",
130
+ "keyword": {
131
+ "text": "running shoes",
132
+ "matchType": "PHRASE"
133
+ },
134
+ "cpcBidMicros": "3000000"
135
+ }
136
+ }
137
+ \`\`\`
138
+
139
+ ### Keyword Strategy Tips
140
+ - Start with 10-20 keywords per ad group
141
+ - Use a mix of match types (Broad for reach, Phrase/Exact for precision)
142
+ - Add negative keywords to exclude irrelevant searches
143
+ - Group related keywords together in the same ad group
144
+
145
+ ---
146
+
147
+ ## Step 6: Create Responsive Search Ads
148
+
149
+ \`\`\`
150
+ Tool: gads_create_entity
151
+ Input: {
152
+ "entityType": "ad",
153
+ "customerId": "${customerId}",
154
+ "data": {
155
+ "adGroup": "customers/${customerId}/adGroups/{adGroupId}",
156
+ "status": "ENABLED",
157
+ "ad": {
158
+ "responsiveSearchAd": {
159
+ "headlines": [
160
+ { "text": "Buy Running Shoes" },
161
+ { "text": "Free Shipping Available" },
162
+ { "text": "Shop Top Brands Today" }
163
+ ],
164
+ "descriptions": [
165
+ { "text": "Wide selection of running shoes. Free returns on all orders." },
166
+ { "text": "Top brands at great prices. Order today and get free shipping." }
167
+ ],
168
+ "path1": "shoes",
169
+ "path2": "running"
170
+ },
171
+ "finalUrls": ["https://www.example.com/running-shoes"]
172
+ }
173
+ }
174
+ }
175
+ \`\`\`
176
+
177
+ ### Ad Copy Tips
178
+ - Provide 8-15 headlines and 3-4 descriptions for best performance
179
+ - Headlines: max 30 characters each
180
+ - Descriptions: max 90 characters each
181
+ - Include keywords in headlines and descriptions
182
+ - Google auto-tests combinations and optimizes
183
+
184
+ ---
185
+
186
+ ## Step 7: Enable the Campaign
187
+
188
+ After verifying all components are set up correctly:
189
+
190
+ \`\`\`
191
+ Tool: gads_update_entity
192
+ Input: {
193
+ "entityType": "campaign",
194
+ "customerId": "${customerId}",
195
+ "entityId": "{campaignId}",
196
+ "data": {
197
+ "status": "ENABLED"
198
+ },
199
+ "updateMask": "status"
200
+ }
201
+ \`\`\`
202
+
203
+ ---
204
+
205
+ ## Step 8: Verify the Hierarchy
206
+
207
+ Confirm everything was created correctly:
208
+
209
+ 1. List campaigns: \`gads_list_entities\` with \`{ "entityType": "campaign", "customerId": "${customerId}" }\`
210
+ 2. List ad groups: \`gads_list_entities\` with \`{ "entityType": "adGroup", "customerId": "${customerId}", "filters": { "ad_group.campaign": "= 'customers/${customerId}/campaigns/{campaignId}'" } }\`
211
+ 3. Check performance after 24h: \`gads_gaql_search\` with campaign performance GAQL query
212
+
213
+ ---
214
+
215
+ ## Success Checklist
216
+
217
+ - [ ] Account verified and accessible
218
+ - [ ] Campaign budget created with daily amount
219
+ - [ ] Campaign created (initially PAUSED) with budget linked
220
+ - [ ] Ad group(s) created with appropriate CPC bids
221
+ - [ ] Keywords added with proper match types
222
+ - [ ] Responsive Search Ads created with multiple headlines/descriptions
223
+ - [ ] Campaign enabled after verification
224
+ - [ ] Hierarchy verified via list queries
225
+
226
+ ## Related Resources
227
+ - \`entity-hierarchy://gads\` — Entity relationships and API patterns
228
+ - \`entity-schema://{entityType}\` — Full field reference per entity type
229
+ - \`gaql-reference://syntax\` — GAQL query syntax and common patterns
230
+
231
+ ## Bulk Alternative
232
+ For creating multiple entities at once, use:
233
+ - \`gads_bulk_mutate\` — batch create/update/remove in single API call
234
+ - \`gads_bulk_update_status\` — batch enable/pause after verification
235
+ `;
236
+ }
237
+ //# sourceMappingURL=campaign-setup-workflow.prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"campaign-setup-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,2BAA2B,GAAW;IACjD,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,0HAA0H;IAC5H,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,+BAA+B,CAAC,IAA6B;IAC3E,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IAEtD,OAAO;;;mBAGU,UAAU;;;;;;;;;;;;;;;;;uBAiBN,UAAU;;;;;;;;;;;;mBAYd,UAAU;;;;;;;;;+DASkC,UAAU;;;;;;;;;;;;mBAYtD,UAAU;;;;;mCAKM,UAAU;;;;;;;;;;;;;;;+DAekB,UAAU;;;;;;;;;;;;;;;;mBAgBtD,UAAU;;;6BAGA,UAAU;;;;;;;;;;;;;;;;;;;;mBAoBpB,UAAU;;4BAED,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;mBAyBnB,UAAU;;4BAED,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAuCnB,UAAU;;;;;;;;;;;;;;;8FAeiE,UAAU;6FACX,UAAU,sDAAsD,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;CAyBtK,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const gadsCreativeSetupWorkflowPrompt: Prompt;
3
+ export declare function getGadsCreativeSetupWorkflowMessage(args?: Record<string, string>): string;
4
+ //# sourceMappingURL=creative-setup-workflow.prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creative-setup-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/creative-setup-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,+BAA+B,EAAE,MAW7C,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA8IzF"}
@@ -0,0 +1,154 @@
1
+ export const gadsCreativeSetupWorkflowPrompt = {
2
+ name: "creative_setup_workflow",
3
+ description: "Step-by-step guide for creating Google Ads responsive display ads and video creatives",
4
+ arguments: [
5
+ {
6
+ name: "customerId",
7
+ description: "Google Ads Customer ID (e.g., 1234567890)",
8
+ required: true,
9
+ },
10
+ ],
11
+ };
12
+ export function getGadsCreativeSetupWorkflowMessage(args) {
13
+ const customerId = args?.customerId || "{customerId}";
14
+ return `# Google Ads Creative Setup Workflow
15
+
16
+ ## Prerequisites
17
+ - Customer ID: \`${customerId}\`
18
+ - Google Ads account with active campaigns
19
+
20
+ ## Overview
21
+ Google Ads uses **Responsive Display Ads (RDA)** and **Responsive Search Ads (RSA)** for automated asset optimization.
22
+
23
+ ---
24
+
25
+ ## Step 1: Understand Ad Types
26
+
27
+ **Responsive Display Ads**: Provide headlines, descriptions, images, logos → Google optimizes combinations.
28
+ **Responsive Search Ads**: Provide 3-15 headlines, 2-4 descriptions → Google optimizes combinations.
29
+ **Video Ads**: YouTube video URL + companion banner.
30
+
31
+ ## Step 2: Create a Responsive Display Ad
32
+
33
+ \`\`\`json
34
+ gads_create_entity({
35
+ "entityType": "ad",
36
+ "customerId": "${customerId}",
37
+ "data": {
38
+ "type": "RESPONSIVE_DISPLAY_AD",
39
+ "responsiveDisplayAd": {
40
+ "headlines": [
41
+ { "text": "Your Headline 1" },
42
+ { "text": "Your Headline 2" }
43
+ ],
44
+ "longHeadline": { "text": "Your Long Headline" },
45
+ "descriptions": [
46
+ { "text": "Your description here" }
47
+ ],
48
+ "businessName": "Your Business Name",
49
+ "marketingImages": [
50
+ {
51
+ "asset": "customers/${customerId}/assets/{image_asset_id}",
52
+ "fieldType": "MARKETING_IMAGE"
53
+ }
54
+ ],
55
+ "logoImages": [
56
+ {
57
+ "asset": "customers/${customerId}/assets/{logo_asset_id}",
58
+ "fieldType": "LOGO_IMAGE"
59
+ }
60
+ ]
61
+ },
62
+ "finalUrls": ["https://yoursite.com"]
63
+ }
64
+ })
65
+ \`\`\`
66
+
67
+ ⚠️ **GOTCHA**: Google Ads requires image assets to be uploaded first as Asset entities (type: IMAGE). Use \`gads_create_entity\` with entityType "asset" to upload via URL.
68
+
69
+ ## Step 3: Upload Image as Asset
70
+
71
+ \`\`\`json
72
+ gads_create_entity({
73
+ "entityType": "asset",
74
+ "customerId": "${customerId}",
75
+ "data": {
76
+ "type": "IMAGE",
77
+ "imageAsset": {
78
+ "data": "{base64_encoded_image_or_url}"
79
+ },
80
+ "name": "Banner 1200x628"
81
+ }
82
+ })
83
+ \`\`\`
84
+
85
+ ⚠️ **GOTCHA**: Google Ads API requires images as base64-encoded data or via asset resource name. For URL-based uploads, use the Asset API with imageAsset.data as base64.
86
+
87
+ ## Step 4: Create Responsive Search Ad
88
+
89
+ \`\`\`json
90
+ gads_create_entity({
91
+ "entityType": "ad",
92
+ "customerId": "${customerId}",
93
+ "data": {
94
+ "type": "RESPONSIVE_SEARCH_AD",
95
+ "responsiveSearchAd": {
96
+ "headlines": [
97
+ { "text": "Headline 1", "pinned_field": "HEADLINE_1" },
98
+ { "text": "Headline 2" },
99
+ { "text": "Headline 3" }
100
+ ],
101
+ "descriptions": [
102
+ { "text": "Description line 1 here" },
103
+ { "text": "Description line 2 here" }
104
+ ]
105
+ },
106
+ "finalUrls": ["https://yoursite.com"]
107
+ }
108
+ })
109
+ \`\`\`
110
+
111
+ ## Step 5: Preview Ad
112
+
113
+ \`\`\`json
114
+ gads_get_ad_preview({
115
+ "customerId": "${customerId}",
116
+ "adId": "{adId_from_step_2_or_4}"
117
+ })
118
+ \`\`\`
119
+
120
+ ## Step 6: Create Ad Group Ad
121
+
122
+ To link the ad to an ad group:
123
+ \`\`\`json
124
+ gads_create_entity({
125
+ "entityType": "adGroupAd",
126
+ "customerId": "${customerId}",
127
+ "data": {
128
+ "adGroup": "customers/${customerId}/adGroups/{adGroupId}",
129
+ "ad": { "resourceName": "customers/${customerId}/ads/{adId}" },
130
+ "status": "PAUSED"
131
+ }
132
+ })
133
+ \`\`\`
134
+
135
+ ## Common Errors
136
+
137
+ | Error | Cause | Fix |
138
+ |-------|-------|-----|
139
+ | "Image too small" | Below min dimensions | Use 600x314px min (1.91:1), 300x300px min (square) |
140
+ | "Headline too long" | Over 30 characters | Shorten to 30 chars max |
141
+ | "Description too long" | Over 90 characters | Shorten to 90 chars max |
142
+ | "Invalid landing page" | URL not approved | Verify URL loads correctly |
143
+ | "Policy violation" | Ad content issue | Review Google Ads policies |
144
+
145
+ ## Success Criteria
146
+ - [ ] Assets uploaded (image_asset_id obtained)
147
+ - [ ] Ad created (adId obtained)
148
+ - [ ] Ad linked to ad group (adGroupAd created)
149
+ - [ ] Preview reviewed
150
+ - [ ] Status changed to ENABLED when ready
151
+
152
+ `;
153
+ }
154
+ //# sourceMappingURL=creative-setup-workflow.prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creative-setup-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/creative-setup-workflow.prompt.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,+BAA+B,GAAW;IACrD,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,uFAAuF;IACzF,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,2CAA2C;YACxD,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,mCAAmC,CAAC,IAA6B;IAC/E,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IAEtD,OAAO;;;mBAGU,UAAU;;;;;;;;;;;;;;;;;;;mBAmBV,UAAU;;;;;;;;;;;;;;;gCAeG,UAAU;;;;;;gCAMV,UAAU;;;;;;;;;;;;;;;;;mBAiBvB,UAAU;;;;;;;;;;;;;;;;;;mBAkBV,UAAU;;;;;;;;;;;;;;;;;;;;;;;mBAuBV,UAAU;;;;;;;;;;;mBAWV,UAAU;;4BAED,UAAU;yCACG,UAAU;;;;;;;;;;;;;;;;;;;;;;;CAuBlD,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const crossPlatformCampaignSetupPrompt: Prompt;
3
+ export declare function getCrossPlatformCampaignSetupMessage(args?: Record<string, string>): string;
4
+ //# sourceMappingURL=cross-platform-campaign-setup.prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-platform-campaign-setup.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAQjE,eAAO,MAAM,gCAAgC,EAAE,MAiB9C,CAAC;AAEF,wBAAgB,oCAAoC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA0R1F"}