@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,223 @@
1
+ export const targetingDiscoveryWorkflowPrompt = {
2
+ name: "gads_targeting_discovery_workflow",
3
+ description: "Step-by-step guide for discovering and analyzing Google Ads targeting segments via GAQL. Covers audience, keyword, geographic, and device targeting, plus performance insights by segment.",
4
+ arguments: [
5
+ {
6
+ name: "customerId",
7
+ description: "Google Ads customer ID (no dashes)",
8
+ required: true,
9
+ },
10
+ {
11
+ name: "campaignId",
12
+ description: "Campaign ID to scope targeting discovery (optional)",
13
+ required: false,
14
+ },
15
+ ],
16
+ };
17
+ export function getTargetingDiscoveryWorkflowMessage(args) {
18
+ const customerId = args?.customerId || "{customerId}";
19
+ const campaignId = args?.campaignId || "{campaignId}";
20
+ return `# Google Ads Targeting Discovery Workflow
21
+
22
+ ## Context
23
+ - Customer ID: \`${customerId}\`
24
+ - Campaign ID: \`${campaignId}\`
25
+ - Platform: Google Ads API v23
26
+ - Tool: \`gads_gaql_search\`, \`gads_get_insights\`
27
+
28
+ This workflow helps you explore what targeting is already applied, understand segment performance, and identify targeting opportunities.
29
+
30
+ ---
31
+
32
+ ## Step 1: Understand Available Targeting Dimensions
33
+
34
+ Google Ads targeting operates across several dimensions:
35
+
36
+ | Dimension | Description | GAQL Resource |
37
+ |-----------|-------------|---------------|
38
+ | Keywords | Search query matching | \`keyword_view\` |
39
+ | Audiences | User interest / demographic segments | \`ad_group_audience_view\` |
40
+ | Geographic | Country, region, city, DMA | \`geographic_view\` |
41
+ | Device | Desktop, mobile, tablet | Segment via \`segments.device\` |
42
+ | Ad Schedule | Day of week, hour of day | Segment via \`segments.hour\`, \`segments.day_of_week\` |
43
+ | Demographics | Age, gender, parental status | \`age_range_view\`, \`gender_view\` |
44
+
45
+ ---
46
+
47
+ ## Step 2: Discover Existing Keyword Targeting
48
+
49
+ List the keywords active in the campaign:
50
+
51
+ \`\`\`
52
+ Tool: gads_gaql_search
53
+ Input: {
54
+ "customerId": "${customerId}",
55
+ "query": "SELECT ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type, ad_group_criterion.status, ad_group.name, campaign.name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM keyword_view WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS AND ad_group_criterion.status != 'REMOVED' ORDER BY metrics.impressions DESC LIMIT 100"
56
+ }
57
+ \`\`\`
58
+
59
+ **Analyze**: Identify high-impression / low-conversion keywords for bid adjustments or exclusion.
60
+
61
+ ---
62
+
63
+ ## Step 3: Discover Geographic Performance
64
+
65
+ Identify which geographic locations are driving performance:
66
+
67
+ \`\`\`
68
+ Tool: gads_gaql_search
69
+ Input: {
70
+ "customerId": "${customerId}",
71
+ "query": "SELECT geographic_view.country_criterion_id, geographic_view.location_type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions, metrics.cost_per_conversion FROM geographic_view WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS ORDER BY metrics.cost_micros DESC LIMIT 50"
72
+ }
73
+ \`\`\`
74
+
75
+ ### Top Cities Query
76
+ \`\`\`
77
+ Tool: gads_gaql_search
78
+ Input: {
79
+ "customerId": "${customerId}",
80
+ "query": "SELECT segments.geo_target_city, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM campaign WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS ORDER BY metrics.impressions DESC LIMIT 50"
81
+ }
82
+ \`\`\`
83
+
84
+ **Analyze**: Look for high-cost / low-conversion geographies to exclude or reduce bids.
85
+
86
+ ---
87
+
88
+ ## Step 4: Analyze Device Performance
89
+
90
+ Understand how performance varies by device type:
91
+
92
+ \`\`\`
93
+ Tool: gads_gaql_search
94
+ Input: {
95
+ "customerId": "${customerId}",
96
+ "query": "SELECT segments.device, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.ctr, metrics.conversions, metrics.cost_per_conversion FROM campaign WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS"
97
+ }
98
+ \`\`\`
99
+
100
+ Device values: \`DESKTOP\`, \`MOBILE\`, \`TABLET\`, \`CONNECTED_TV\`
101
+
102
+ **Analyze**: If mobile CPAs are significantly higher, consider adding a mobile bid adjustment.
103
+
104
+ ---
105
+
106
+ ## Step 5: Analyze Demographic Targeting
107
+
108
+ Review age and gender breakdowns:
109
+
110
+ ### Age Range Performance
111
+ \`\`\`
112
+ Tool: gads_gaql_search
113
+ Input: {
114
+ "customerId": "${customerId}",
115
+ "query": "SELECT ad_group_criterion.age_range.type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM age_range_view WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS ORDER BY metrics.impressions DESC"
116
+ }
117
+ \`\`\`
118
+
119
+ ### Gender Performance
120
+ \`\`\`
121
+ Tool: gads_gaql_search
122
+ Input: {
123
+ "customerId": "${customerId}",
124
+ "query": "SELECT ad_group_criterion.gender.type, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM gender_view WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS"
125
+ }
126
+ \`\`\`
127
+
128
+ ---
129
+
130
+ ## Step 6: Discover Audience Segment Performance
131
+
132
+ Analyze in-market and affinity audience performance:
133
+
134
+ \`\`\`
135
+ Tool: gads_gaql_search
136
+ Input: {
137
+ "customerId": "${customerId}",
138
+ "query": "SELECT ad_group_audience_view.resource_name, user_list.name, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM ad_group_audience_view WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS ORDER BY metrics.impressions DESC LIMIT 50"
139
+ }
140
+ \`\`\`
141
+
142
+ ---
143
+
144
+ ## Step 7: Use gads_get_insights for Segment Summaries
145
+
146
+ For a higher-level view of performance by entity and segment:
147
+
148
+ \`\`\`
149
+ Tool: gads_get_insights
150
+ Input: {
151
+ "customerId": "${customerId}",
152
+ "entityType": "campaign",
153
+ "dateRange": "LAST_30_DAYS"
154
+ }
155
+ \`\`\`
156
+
157
+ This returns aggregated performance metrics and can surface top/bottom performers quickly.
158
+
159
+ ---
160
+
161
+ ## Step 8: Discover Search Term Opportunities
162
+
163
+ Find new keyword opportunities from actual search queries:
164
+
165
+ \`\`\`
166
+ Tool: gads_gaql_search
167
+ Input: {
168
+ "customerId": "${customerId}",
169
+ "query": "SELECT search_term_view.search_term, search_term_view.status, metrics.impressions, metrics.clicks, metrics.conversions, metrics.cost_micros FROM search_term_view WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS AND metrics.impressions > 10 ORDER BY metrics.conversions DESC LIMIT 100"
170
+ }
171
+ \`\`\`
172
+
173
+ **Analyze**:
174
+ - High-conversion search terms → add as exact/phrase match keywords
175
+ - Irrelevant terms → add as negative keywords
176
+ - High-spend / zero-conversion terms → investigate match type issues
177
+
178
+ ---
179
+
180
+ ## Step 9: Ad Schedule Performance
181
+
182
+ Identify the best hours and days to run ads:
183
+
184
+ \`\`\`
185
+ Tool: gads_gaql_search
186
+ Input: {
187
+ "customerId": "${customerId}",
188
+ "query": "SELECT segments.day_of_week, segments.hour, metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.conversions FROM campaign WHERE campaign.id = ${campaignId} AND segments.date DURING LAST_30_DAYS ORDER BY metrics.conversions DESC"
189
+ }
190
+ \`\`\`
191
+
192
+ Day values: \`MONDAY\`, \`TUESDAY\`, \`WEDNESDAY\`, \`THURSDAY\`, \`FRIDAY\`, \`SATURDAY\`, \`SUNDAY\`
193
+
194
+ ---
195
+
196
+ ## Tips
197
+
198
+ - **Combine dimensions carefully**: Some segments cannot be combined in a single GAQL query. If you get an error, split into separate queries.
199
+ - **Micros conversion**: All cost values are in micros. Divide by 1,000,000 for actual currency.
200
+ - **Zero impressions**: Entities with 0 impressions in the date range may simply be new, paused, or have limited targeting.
201
+ - **Statistical significance**: Don't make targeting decisions on fewer than 100 impressions — results may be noise.
202
+ - **Act on insights**: Use \`gads_update_entity\` with \`updateMask\` to apply bid adjustments, or \`gads_create_entity\` to add new keywords/audiences discovered here.
203
+
204
+ ---
205
+
206
+ ## Success Checklist
207
+
208
+ - [ ] Keyword targeting reviewed — high-waste keywords identified
209
+ - [ ] Geographic performance analyzed — low-performing locations noted
210
+ - [ ] Device breakdown reviewed — mobile/desktop bid adjustments considered
211
+ - [ ] Demographic performance reviewed — age/gender outliers identified
212
+ - [ ] Audience segments analyzed — underperforming segments flagged
213
+ - [ ] Search terms explored — new keyword opportunities discovered
214
+ - [ ] Ad schedule analyzed — peak hours/days identified
215
+ - [ ] Action plan created based on segment insights
216
+
217
+ ## Related Resources
218
+ - \`gaql-reference://syntax\` — Full GAQL syntax and field reference
219
+ - \`entity-hierarchy://gads\` — Entity relationships and targeting structure
220
+ - \`entity-schema://keyword\` — Keyword entity field reference
221
+ `;
222
+ }
223
+ //# sourceMappingURL=targeting-discovery-workflow.prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"targeting-discovery-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,gCAAgC,GAAW;IACtD,IAAI,EAAE,mCAAmC;IACzC,WAAW,EACT,4LAA4L;IAC9L,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,oCAAoC,CAAC,IAA6B;IAChF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IAEtD,OAAO;;;mBAGU,UAAU;mBACV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA8BV,UAAU;0QAC6O,UAAU;;;;;;;;;;;;;;;mBAejQ,UAAU;8OACiN,UAAU;;;;;;;;mBAQrO,UAAU;+JACkI,UAAU;;;;;;;;;;;;;;;mBAetJ,UAAU;gMACmK,UAAU;;;;;;;;;;;;;;;;;;mBAkBvL,UAAU;8KACiJ,UAAU;;;;;;;;mBAQrK,UAAU;wKAC2I,UAAU;;;;;;;;;;;;;mBAa/J,UAAU;yMAC4K,UAAU;;;;;;;;;;;;;mBAahM,UAAU;;;;;;;;;;;;;;;;;mBAiBV,UAAU;oMACuK,UAAU;;;;;;;;;;;;;;;;;;mBAkB3L,UAAU;0KAC6I,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCnL,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const toolSchemaExplorationPrompt: Prompt;
3
+ export declare function getToolSchemaExplorationMessage(args?: Record<string, string>): string;
4
+ //# sourceMappingURL=tool-schema-exploration.prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema-exploration.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/tool-schema-exploration.prompt.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,2BAA2B,EAAE,MAYzC,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAiHrF"}
@@ -0,0 +1,125 @@
1
+ export const toolSchemaExplorationPrompt = {
2
+ name: "gads_tool_schema_exploration",
3
+ description: "Step-by-step workflow for exploring available Google Ads MCP tools, prompts, and resources with minimal context usage",
4
+ arguments: [
5
+ {
6
+ name: "objective",
7
+ description: "Exploration objective (e.g., entity management, GAQL reporting, troubleshooting)",
8
+ required: false,
9
+ },
10
+ ],
11
+ };
12
+ export function getToolSchemaExplorationMessage(args) {
13
+ const objective = args?.objective || "general capability discovery";
14
+ return `# Google Ads Tool and Schema Exploration
15
+
16
+ ## Context
17
+ - Server: gads-mcp (Google Ads)
18
+ - Objective: ${objective}
19
+
20
+ Use this workflow to discover Google Ads MCP capabilities while minimizing token usage.
21
+
22
+ ---
23
+
24
+ ## Step 1: List Capabilities
25
+
26
+ Run these three calls to see what's available:
27
+ 1. \`tools/list\` — See all available tools
28
+ 2. \`prompts/list\` — See workflow prompts
29
+ 3. \`resources/list\` — See on-demand documentation resources
30
+
31
+ Do **not** fetch large resources before narrowing your scope.
32
+
33
+ ---
34
+
35
+ ## Step 2: Identify Your Task Path
36
+
37
+ Pick one immediate action:
38
+
39
+ | Task | Start Here |
40
+ |------|-----------|
41
+ | Create a campaign structure | Prompt: \`gads_campaign_setup_workflow\` |
42
+ | Debug an entity issue | Prompt: \`gads_troubleshoot_entity\` |
43
+ | Understand entity fields | Resource: \`entity-schema://{entityType}\` |
44
+ | See CRUD examples | Resource: \`entity-examples://{entityType}\` |
45
+ | Learn entity relationships | Resource: \`entity-hierarchy://gads\` |
46
+ | Write GAQL queries | Resource: \`gaql-reference://syntax\` |
47
+
48
+ ---
49
+
50
+ ## Step 3: Fetch Targeted Resources
51
+
52
+ Prefer specific resources over aggregate ones:
53
+
54
+ | Need | Fetch |
55
+ |------|-------|
56
+ | Campaign fields | \`entity-schema://campaign\` (not \`://all\`) |
57
+ | Ad group examples | \`entity-examples://adGroup\` (not \`://all\`) |
58
+ | Keyword examples | \`entity-examples://keyword\` |
59
+ | GAQL syntax | \`gaql-reference://syntax\` |
60
+ | Available metrics & date ranges | \`insights-reference://gads\` |
61
+
62
+ Only use \`://all\` resources when you need a cross-entity view.
63
+
64
+ ---
65
+
66
+ ## Step 4: Execute a Minimal Tool Call
67
+
68
+ Start with the simplest useful call:
69
+
70
+ | Action | Tool | Minimal Input |
71
+ |--------|------|---------------|
72
+ | Check an entity | \`gads_get_entity\` | \`entityType\` + \`customerId\` + \`entityId\` |
73
+ | List entities | \`gads_list_entities\` | \`entityType\` + \`customerId\` |
74
+ | Run a GAQL query | \`gads_gaql_search\` | \`customerId\` + \`query\` |
75
+ | List accounts | \`gads_list_accounts\` | _(no arguments needed)_ |
76
+
77
+ Inspect the output, then iterate with more specific calls.
78
+
79
+ ---
80
+
81
+ ## Available Tools Summary (15 tools)
82
+
83
+ ### Read Tools
84
+ | Tool | Purpose | Notes |
85
+ |------|---------|-------|
86
+ | \`gads_gaql_search\` | Execute GAQL queries for ad-hoc reporting | Most flexible read tool |
87
+ | \`gads_list_accounts\` | List accessible customer accounts | No arguments needed |
88
+ | \`gads_get_entity\` | Get a single entity by type/ID | Returns full entity |
89
+ | \`gads_list_entities\` | List entities with optional GAQL filters | Supports pagination |
90
+ | \`gads_get_insights\` | Performance insights with preset params | Convenience wrapper |
91
+
92
+ ### Write Tools
93
+ | Tool | Purpose | Notes |
94
+ |------|---------|-------|
95
+ | \`gads_create_entity\` | Create a new entity | Returns resource name |
96
+ | \`gads_update_entity\` | Update an entity | Requires \`updateMask\` |
97
+ | \`gads_remove_entity\` | Remove an entity | Sets status to REMOVED (permanent) |
98
+ | \`gads_bulk_mutate\` | Batch create/update/remove | Up to 5000 operations |
99
+ | \`gads_bulk_create_entities\` | Batch create entities | Max 50, partial failure |
100
+ | \`gads_bulk_update_status\` | Batch enable/pause/remove | Convenience wrapper |
101
+ | \`gads_adjust_bids\` | Batch adjust ad group bids | Safe read-modify-write |
102
+ | \`gads_validate_entity\` | Dry-run validate entity payload | Returns validation errors |
103
+ | \`gads_get_ad_preview\` | Get ad preview HTML/URL | Returns preview for an ad |
104
+ | \`gads_get_pacing_status\` | Real-time pacing calc for a campaign | Reads spend + budget |
105
+
106
+ ### Supported Entity Types (6)
107
+ \`campaign\`, \`adGroup\`, \`ad\`, \`keyword\`, \`campaignBudget\`, \`asset\`
108
+
109
+ ---
110
+
111
+ ## Context-Minimization Rules
112
+
113
+ - Summarize fetched resources in your own words instead of pasting full content
114
+ - Reuse facts from previous tool calls instead of re-fetching
115
+ - Start with one tool call, inspect results, then decide next steps
116
+ - Avoid requesting \`://all\` resources unless you need a complete overview
117
+
118
+ ## Suggested Next Steps
119
+ - For campaign setup: invoke \`gads_campaign_setup_workflow\` prompt
120
+ - For debugging: invoke \`gads_troubleshoot_entity\` prompt
121
+ - For ad-hoc reporting: use \`gads_gaql_search\` directly
122
+ - For bulk operations: use \`gads_bulk_mutate\` or \`gads_bulk_update_status\`
123
+ `;
124
+ }
125
+ //# sourceMappingURL=tool-schema-exploration.prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema-exploration.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/tool-schema-exploration.prompt.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,2BAA2B,GAAW;IACjD,IAAI,EAAE,8BAA8B;IACpC,WAAW,EACT,uHAAuH;IACzH,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,kFAAkF;YACpF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,+BAA+B,CAAC,IAA6B;IAC3E,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,8BAA8B,CAAC;IAEpE,OAAO;;;;eAIM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyGvB,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
2
+ export declare const troubleshootEntityPrompt: Prompt;
3
+ export declare function getTroubleshootEntityMessage(args?: Record<string, string>): string;
4
+ //# sourceMappingURL=troubleshoot-entity.prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"troubleshoot-entity.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/troubleshoot-entity.prompt.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,wBAAwB,EAAE,MAiBtC,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAgKlF"}
@@ -0,0 +1,177 @@
1
+ export const troubleshootEntityPrompt = {
2
+ name: "gads_troubleshoot_entity",
3
+ description: "Step-by-step diagnostic workflow for troubleshooting Google Ads entity errors and common issues",
4
+ arguments: [
5
+ {
6
+ name: "entityType",
7
+ description: "Entity type to troubleshoot (campaign, adGroup, ad, keyword, campaignBudget, asset)",
8
+ required: false,
9
+ },
10
+ {
11
+ name: "errorMessage",
12
+ description: "The error message or symptom you are investigating",
13
+ required: false,
14
+ },
15
+ ],
16
+ };
17
+ export function getTroubleshootEntityMessage(args) {
18
+ const entityType = args?.entityType || "{entityType}";
19
+ const errorMessage = args?.errorMessage || "(not specified)";
20
+ return `# Google Ads Entity Troubleshooting
21
+
22
+ ## Context
23
+ - Entity Type: \`${entityType}\`
24
+ - Reported Error: ${errorMessage}
25
+ - Platform: Google Ads API v23
26
+
27
+ ---
28
+
29
+ ## Step 1: Verify the Entity Exists
30
+
31
+ \`\`\`
32
+ Tool: gads_get_entity
33
+ Input: { "entityType": "${entityType}", "customerId": "{customerId}", "entityId": "{entityId}" }
34
+ \`\`\`
35
+
36
+ **Check**: Does the entity exist? What is its current status?
37
+
38
+ If the entity is not found, check:
39
+ - Is the \`customerId\` correct (no dashes, 10 digits)?
40
+ - For composite IDs (\`ad\`, \`keyword\`): is the format \`{adGroupId}~{criterionId}\`?
41
+ - Was the entity already removed?
42
+
43
+ ---
44
+
45
+ ## Step 2: Check Parent References
46
+
47
+ Google Ads entities form a strict hierarchy. Verify each parent exists:
48
+
49
+ | Entity | Parent | How to Check |
50
+ |--------|--------|-------------|
51
+ | \`campaign\` | \`campaignBudget\` | Budget resource name must exist |
52
+ | \`adGroup\` | \`campaign\` | Campaign resource name must exist |
53
+ | \`ad\` | \`adGroup\` | Ad group resource name must exist |
54
+ | \`keyword\` | \`adGroup\` | Ad group resource name must exist |
55
+ | \`asset\` | _(standalone)_ | No parent required |
56
+
57
+ Use GAQL to verify:
58
+ \`\`\`
59
+ Tool: gads_gaql_search
60
+ Input: {
61
+ "customerId": "{customerId}",
62
+ "query": "SELECT campaign.id, campaign.status FROM campaign WHERE campaign.id = {campaignId}"
63
+ }
64
+ \`\`\`
65
+
66
+ ---
67
+
68
+ ## Step 3: Inspect Status Chain
69
+
70
+ An entity can only serve if its **entire hierarchy** is ENABLED:
71
+
72
+ \`\`\`
73
+ campaignBudget (has sufficient amount)
74
+ └── campaign (ENABLED)
75
+ └── adGroup (ENABLED)
76
+ ├── ad (ENABLED, approved)
77
+ └── keyword (ENABLED, approved)
78
+ \`\`\`
79
+
80
+ Use GAQL to check the full chain:
81
+ \`\`\`
82
+ Tool: gads_gaql_search
83
+ Input: {
84
+ "customerId": "{customerId}",
85
+ "query": "SELECT campaign.status, ad_group.status, ad_group_ad.status, ad_group_ad.ad.type FROM ad_group_ad WHERE campaign.id = {campaignId} LIMIT 10"
86
+ }
87
+ \`\`\`
88
+
89
+ ---
90
+
91
+ ## Step 4: Check Field Values and Constraints
92
+
93
+ ### Common Field Issues
94
+
95
+ | Issue | Cause | Fix |
96
+ |-------|-------|-----|
97
+ | \`MUTATE_ERROR_CAMPAIGN_BUDGET_NOT_FOUND\` | Budget resource name doesn't exist | Create the budget first, then reference it |
98
+ | \`FIELD_MASK_ERROR_FIELD_NOT_FOUND\` | Invalid field in \`updateMask\` | Check \`entity-schema://${entityType}\` for valid fields |
99
+ | \`FIELD_ERROR_IMMUTABLE_FIELD\` | Trying to change an immutable field | \`advertisingChannelType\`, \`type\` cannot be changed after creation |
100
+ | \`VALUE_ERROR_MICROS_TOO_SMALL\` | Bid or budget is below minimum | Minimum CPC is usually $0.01 (10000 micros) |
101
+ | \`AD_ERROR_INVALID_HEADLINE\` | Headline too long or contains invalid chars | Max 30 chars, no exclamation marks in headlines |
102
+ | \`KEYWORD_ERROR_DUPLICATE_KEYWORD\` | Same keyword+match type already exists | Check existing keywords with \`gads_list_entities\` |
103
+ | \`RESOURCE_NOT_FOUND\` | Entity was removed or never existed | Check \`entityId\` and \`customerId\` |
104
+
105
+ ---
106
+
107
+ ## Step 5: Validate Resource Names
108
+
109
+ Google Ads uses full resource name paths. Common format errors:
110
+
111
+ | Format | Example | Notes |
112
+ |--------|---------|-------|
113
+ | Campaign | \`customers/1234567890/campaigns/111222333\` | 10-digit customer ID, no dashes |
114
+ | Ad Group | \`customers/1234567890/adGroups/444555666\` | camelCase \`adGroups\` |
115
+ | Budget | \`customers/1234567890/campaignBudgets/777888999\` | camelCase \`campaignBudgets\` |
116
+ | Ad (composite) | \`{adGroupId}~{adId}\` | Tilde separator for get/update |
117
+ | Keyword (composite) | \`{adGroupId}~{criterionId}\` | Tilde separator for get/update |
118
+
119
+ ---
120
+
121
+ ## Step 6: Common Error Resolution Patterns
122
+
123
+ ### "Budget not found" when creating campaign
124
+ 1. Create budget: \`gads_create_entity\` with \`entityType: "campaignBudget"\`
125
+ 2. Note the returned resource name
126
+ 3. Use that resource name in the campaign's \`campaignBudget\` field
127
+
128
+ ### "Entity cannot be modified" (REMOVED status)
129
+ - Removed entities cannot be updated — create a new one instead
130
+ - REMOVED is permanent in Google Ads
131
+
132
+ ### "Field mask required"
133
+ - \`gads_update_entity\` requires \`updateMask\` — a comma-separated list of fields being changed
134
+ - Example: \`"updateMask": "status,name"\`
135
+
136
+ ### "Invalid customer ID"
137
+ - Customer ID must be 10 digits with no dashes
138
+ - Use \`gads_list_accounts\` to find correct IDs
139
+ - If using a manager account, set \`loginCustomerId\` in headers
140
+
141
+ ### GAQL query errors
142
+ - Use \`gaql-reference://syntax\` resource for syntax reference
143
+ - Common issue: single quotes around string values are required
144
+ - Date format: \`'YYYY-MM-DD'\`
145
+
146
+ ---
147
+
148
+ ## Quick Diagnostic GAQL Queries
149
+
150
+ ### Check campaign status and budget
151
+ \`\`\`sql
152
+ SELECT campaign.name, campaign.status, campaign_budget.amount_micros
153
+ FROM campaign WHERE campaign.id = {campaignId}
154
+ \`\`\`
155
+
156
+ ### Find disapproved ads
157
+ \`\`\`sql
158
+ SELECT ad_group_ad.ad.id, ad_group_ad.policy_summary.approval_status
159
+ FROM ad_group_ad WHERE ad_group_ad.policy_summary.approval_status != 'APPROVED'
160
+ \`\`\`
161
+
162
+ ### Check keyword quality scores
163
+ \`\`\`sql
164
+ SELECT ad_group_criterion.keyword.text, ad_group_criterion.quality_info.quality_score
165
+ FROM keyword_view WHERE campaign.id = {campaignId}
166
+ \`\`\`
167
+
168
+ ---
169
+
170
+ ## Related Resources
171
+ - \`entity-schema://${entityType}\` — Full field reference
172
+ - \`entity-examples://${entityType}\` — Example payloads
173
+ - \`entity-hierarchy://gads\` — Entity relationships
174
+ - \`gaql-reference://syntax\` — GAQL query syntax
175
+ `;
176
+ }
177
+ //# sourceMappingURL=troubleshoot-entity.prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"troubleshoot-entity.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/troubleshoot-entity.prompt.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,wBAAwB,GAAW;IAC9C,IAAI,EAAE,0BAA0B;IAChC,WAAW,EACT,iGAAiG;IACnG,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EACT,qFAAqF;YACvF,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,oDAAoD;YACjE,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,IAA6B;IACxE,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,iBAAiB,CAAC;IAE7D,OAAO;;;mBAGU,UAAU;oBACT,YAAY;;;;;;;;;0BASN,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qGAiEiE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAyEzF,UAAU;wBACR,UAAU;;;CAGjC,CAAC;AACF,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
2
+ export interface PromptDefinition {
3
+ prompt: Prompt;
4
+ generateMessage: (args?: Record<string, string>) => string;
5
+ }
6
+ export declare const promptRegistry: Map<string, PromptDefinition>;
7
+ export declare function getAllPrompts(): Prompt[];
8
+ export declare function getPromptDefinition(name: string): PromptDefinition | undefined;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/prompts/index.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AA8CjE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;CAC5D;AAED,eAAO,MAAM,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CA8EvD,CAAC;AAEH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAE9E"}
@@ -0,0 +1,97 @@
1
+ import { campaignSetupWorkflowPrompt, getCampaignSetupWorkflowMessage, } from "./definitions/campaign-setup-workflow.prompt.js";
2
+ import { toolSchemaExplorationPrompt, getToolSchemaExplorationMessage, } from "./definitions/tool-schema-exploration.prompt.js";
3
+ import { troubleshootEntityPrompt, getTroubleshootEntityMessage, } from "./definitions/troubleshoot-entity.prompt.js";
4
+ import { gaqlReportingWorkflowPrompt, getGaqlReportingWorkflowMessage, } from "./definitions/gaql-reporting-workflow.prompt.js";
5
+ import { crossPlatformPerformancePrompt, getCrossPlatformPerformanceMessage, } from "./definitions/cross-platform-performance.prompt.js";
6
+ import { bulkOperationsWorkflowPrompt, getBulkOperationsWorkflowMessage, } from "./definitions/bulk-operations-workflow.prompt.js";
7
+ import { crossPlatformCampaignSetupPrompt, getCrossPlatformCampaignSetupMessage, } from "./definitions/cross-platform-campaign-setup.prompt.js";
8
+ import { entityUpdateWorkflowPrompt, getEntityUpdateWorkflowMessage, } from "./definitions/entity-update-workflow.prompt.js";
9
+ import { entityDuplicationWorkflowPrompt, getEntityDuplicationWorkflowMessage, } from "./definitions/entity-duplication-workflow.prompt.js";
10
+ import { targetingDiscoveryWorkflowPrompt, getTargetingDiscoveryWorkflowMessage, } from "./definitions/targeting-discovery-workflow.prompt.js";
11
+ import { gadsCreativeSetupWorkflowPrompt, getGadsCreativeSetupWorkflowMessage, } from "./definitions/creative-setup-workflow.prompt.js";
12
+ export const promptRegistry = new Map([
13
+ [
14
+ campaignSetupWorkflowPrompt.name,
15
+ {
16
+ prompt: campaignSetupWorkflowPrompt,
17
+ generateMessage: getCampaignSetupWorkflowMessage,
18
+ },
19
+ ],
20
+ [
21
+ toolSchemaExplorationPrompt.name,
22
+ {
23
+ prompt: toolSchemaExplorationPrompt,
24
+ generateMessage: getToolSchemaExplorationMessage,
25
+ },
26
+ ],
27
+ [
28
+ troubleshootEntityPrompt.name,
29
+ {
30
+ prompt: troubleshootEntityPrompt,
31
+ generateMessage: getTroubleshootEntityMessage,
32
+ },
33
+ ],
34
+ [
35
+ gaqlReportingWorkflowPrompt.name,
36
+ {
37
+ prompt: gaqlReportingWorkflowPrompt,
38
+ generateMessage: getGaqlReportingWorkflowMessage,
39
+ },
40
+ ],
41
+ [
42
+ crossPlatformPerformancePrompt.name,
43
+ {
44
+ prompt: crossPlatformPerformancePrompt,
45
+ generateMessage: getCrossPlatformPerformanceMessage,
46
+ },
47
+ ],
48
+ [
49
+ bulkOperationsWorkflowPrompt.name,
50
+ {
51
+ prompt: bulkOperationsWorkflowPrompt,
52
+ generateMessage: getBulkOperationsWorkflowMessage,
53
+ },
54
+ ],
55
+ [
56
+ crossPlatformCampaignSetupPrompt.name,
57
+ {
58
+ prompt: crossPlatformCampaignSetupPrompt,
59
+ generateMessage: getCrossPlatformCampaignSetupMessage,
60
+ },
61
+ ],
62
+ [
63
+ entityUpdateWorkflowPrompt.name,
64
+ {
65
+ prompt: entityUpdateWorkflowPrompt,
66
+ generateMessage: getEntityUpdateWorkflowMessage,
67
+ },
68
+ ],
69
+ [
70
+ entityDuplicationWorkflowPrompt.name,
71
+ {
72
+ prompt: entityDuplicationWorkflowPrompt,
73
+ generateMessage: getEntityDuplicationWorkflowMessage,
74
+ },
75
+ ],
76
+ [
77
+ targetingDiscoveryWorkflowPrompt.name,
78
+ {
79
+ prompt: targetingDiscoveryWorkflowPrompt,
80
+ generateMessage: getTargetingDiscoveryWorkflowMessage,
81
+ },
82
+ ],
83
+ [
84
+ gadsCreativeSetupWorkflowPrompt.name,
85
+ {
86
+ prompt: gadsCreativeSetupWorkflowPrompt,
87
+ generateMessage: getGadsCreativeSetupWorkflowMessage,
88
+ },
89
+ ],
90
+ ]);
91
+ export function getAllPrompts() {
92
+ return Array.from(promptRegistry.values()).map((def) => def.prompt);
93
+ }
94
+ export function getPromptDefinition(name) {
95
+ return promptRegistry.get(name);
96
+ }
97
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-server/prompts/index.ts"],"names":[],"mappings":"AAUA,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,8BAA8B,EAC9B,kCAAkC,GACnC,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,GACjC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,GACpC,MAAM,qDAAqD,CAAC;AAC7D,OAAO,EACL,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,sDAAsD,CAAC;AAC9D,OAAO,EACL,+BAA+B,EAC/B,mCAAmC,GACpC,MAAM,iDAAiD,CAAC;AAOzD,MAAM,CAAC,MAAM,cAAc,GAAkC,IAAI,GAAG,CAAC;IACnE;QACE,2BAA2B,CAAC,IAAI;QAChC;YACE,MAAM,EAAE,2BAA2B;YACnC,eAAe,EAAE,+BAA+B;SACjD;KACF;IACD;QACE,2BAA2B,CAAC,IAAI;QAChC;YACE,MAAM,EAAE,2BAA2B;YACnC,eAAe,EAAE,+BAA+B;SACjD;KACF;IACD;QACE,wBAAwB,CAAC,IAAI;QAC7B;YACE,MAAM,EAAE,wBAAwB;YAChC,eAAe,EAAE,4BAA4B;SAC9C;KACF;IACD;QACE,2BAA2B,CAAC,IAAI;QAChC;YACE,MAAM,EAAE,2BAA2B;YACnC,eAAe,EAAE,+BAA+B;SACjD;KACF;IACD;QACE,8BAA8B,CAAC,IAAI;QACnC;YACE,MAAM,EAAE,8BAA8B;YACtC,eAAe,EAAE,kCAAkC;SACpD;KACF;IACD;QACE,4BAA4B,CAAC,IAAI;QACjC;YACE,MAAM,EAAE,4BAA4B;YACpC,eAAe,EAAE,gCAAgC;SAClD;KACF;IACD;QACE,gCAAgC,CAAC,IAAI;QACrC;YACE,MAAM,EAAE,gCAAgC;YACxC,eAAe,EAAE,oCAAoC;SACtD;KACF;IACD;QACE,0BAA0B,CAAC,IAAI;QAC/B;YACE,MAAM,EAAE,0BAA0B;YAClC,eAAe,EAAE,8BAA8B;SAChD;KACF;IACD;QACE,+BAA+B,CAAC,IAAI;QACpC;YACE,MAAM,EAAE,+BAA+B;YACvC,eAAe,EAAE,mCAAmC;SACrD;KACF;IACD;QACE,gCAAgC,CAAC,IAAI;QACrC;YACE,MAAM,EAAE,gCAAgC;YACxC,eAAe,EAAE,oCAAoC;SACtD;KACF;IACD;QACE,+BAA+B,CAAC,IAAI;QACpC;YACE,MAAM,EAAE,+BAA+B;YACvC,eAAe,EAAE,mCAAmC;SACrD;KACF;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}