@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.
- package/LICENSE.md +201 -0
- package/README.md +262 -0
- package/dist/auth/gads-auth-adapter.d.ts +31 -0
- package/dist/auth/gads-auth-adapter.d.ts.map +1 -0
- package/dist/auth/gads-auth-adapter.js +70 -0
- package/dist/auth/gads-auth-adapter.js.map +1 -0
- package/dist/auth/gads-auth-strategy.d.ts +9 -0
- package/dist/auth/gads-auth-strategy.d.ts.map +1 -0
- package/dist/auth/gads-auth-strategy.js +27 -0
- package/dist/auth/gads-auth-strategy.js.map +1 -0
- package/dist/config/index.d.ts +100 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +37 -0
- package/dist/config/index.js.map +1 -0
- package/dist/container/index.d.ts +5 -0
- package/dist/container/index.d.ts.map +1 -0
- package/dist/container/index.js +14 -0
- package/dist/container/index.js.map +1 -0
- package/dist/container/registrations/core.d.ts +3 -0
- package/dist/container/registrations/core.d.ts.map +1 -0
- package/dist/container/registrations/core.js +14 -0
- package/dist/container/registrations/core.js.map +1 -0
- package/dist/container/registrations/mcp.d.ts +2 -0
- package/dist/container/registrations/mcp.d.ts.map +1 -0
- package/dist/container/registrations/mcp.js +3 -0
- package/dist/container/registrations/mcp.js.map +1 -0
- package/dist/container/tokens.d.ts +6 -0
- package/dist/container/tokens.d.ts.map +1 -0
- package/dist/container/tokens.js +6 -0
- package/dist/container/tokens.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js +230 -0
- package/dist/mcp-server/prompts/definitions/bulk-operations-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js +237 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.js +154 -0
- package/dist/mcp-server/prompts/definitions/creative-setup-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
- package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js +221 -0
- package/dist/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js +207 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.js +182 -0
- package/dist/mcp-server/prompts/definitions/gaql-reporting-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js +223 -0
- package/dist/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +125 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js +177 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-entity.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/index.d.ts +9 -0
- package/dist/mcp-server/prompts/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/index.js +97 -0
- package/dist/mcp-server/prompts/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js +574 -0
- package/dist/mcp-server/resources/definitions/entity-examples.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js +124 -0
- package/dist/mcp-server/resources/definitions/entity-hierarchy.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js +264 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/gaql-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/gaql-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/gaql-reference.resource.js +157 -0
- package/dist/mcp-server/resources/definitions/gaql-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/index.d.ts +8 -0
- package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/index.js +42 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/insights-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/insights-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/insights-reference.resource.js +78 -0
- package/dist/mcp-server/resources/definitions/insights-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/index.d.ts +3 -0
- package/dist/mcp-server/resources/index.d.ts.map +1 -0
- package/dist/mcp-server/resources/index.js +2 -0
- package/dist/mcp-server/resources/index.js.map +1 -0
- package/dist/mcp-server/resources/types.d.ts +8 -0
- package/dist/mcp-server/resources/types.d.ts.map +1 -0
- package/dist/mcp-server/resources/types.js +2 -0
- package/dist/mcp-server/resources/types.js.map +1 -0
- package/dist/mcp-server/server.d.ts +5 -0
- package/dist/mcp-server/server.d.ts.map +1 -0
- package/dist/mcp-server/server.js +124 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +270 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js +189 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts +148 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js +141 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-mutate.tool.d.ts +136 -0
- package/dist/mcp-server/tools/definitions/bulk-mutate.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-mutate.tool.js +127 -0
- package/dist/mcp-server/tools/definitions/bulk-mutate.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +185 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js +149 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +123 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js +98 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/gaql-search.tool.d.ts +197 -0
- package/dist/mcp-server/tools/definitions/gaql-search.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/gaql-search.tool.js +110 -0
- package/dist/mcp-server/tools/definitions/gaql-search.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +87 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js +91 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +92 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js +87 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-insights.tool.d.ts +382 -0
- package/dist/mcp-server/tools/definitions/get-insights.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-insights.tool.js +246 -0
- package/dist/mcp-server/tools/definitions/get-insights.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts +141 -0
- package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js +163 -0
- package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +18 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +53 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-accounts.tool.d.ts +54 -0
- package/dist/mcp-server/tools/definitions/list-accounts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-accounts.tool.js +61 -0
- package/dist/mcp-server/tools/definitions/list-accounts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +220 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js +112 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/remove-entity.tool.d.ts +116 -0
- package/dist/mcp-server/tools/definitions/remove-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/remove-entity.tool.js +120 -0
- package/dist/mcp-server/tools/definitions/remove-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +129 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js +91 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +239 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js +151 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/index.d.ts +2 -0
- package/dist/mcp-server/tools/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/index.js +2 -0
- package/dist/mcp-server/tools/index.js.map +1 -0
- package/dist/mcp-server/tools/utils/computed-metrics.d.ts +8 -0
- package/dist/mcp-server/tools/utils/computed-metrics.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/computed-metrics.js +19 -0
- package/dist/mcp-server/tools/utils/computed-metrics.js.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts +22 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js +99 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/gaql-helpers.d.ts +4 -0
- package/dist/mcp-server/tools/utils/gaql-helpers.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/gaql-helpers.js +82 -0
- package/dist/mcp-server/tools/utils/gaql-helpers.js.map +1 -0
- package/dist/mcp-server/tools/utils/parent-id-validation.d.ts +10 -0
- package/dist/mcp-server/tools/utils/parent-id-validation.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/parent-id-validation.js +58 -0
- package/dist/mcp-server/tools/utils/parent-id-validation.js.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
- package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
- package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts +49 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +84 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/gads/gads-http-client.d.ts +13 -0
- package/dist/services/gads/gads-http-client.d.ts.map +1 -0
- package/dist/services/gads/gads-http-client.js +113 -0
- package/dist/services/gads/gads-http-client.js.map +1 -0
- package/dist/services/gads/gads-service.d.ts +60 -0
- package/dist/services/gads/gads-service.d.ts.map +1 -0
- package/dist/services/gads/gads-service.js +363 -0
- package/dist/services/gads/gads-service.js.map +1 -0
- package/dist/services/gads/types.d.ts +211 -0
- package/dist/services/gads/types.d.ts.map +1 -0
- package/dist/services/gads/types.js +16 -0
- package/dist/services/gads/types.js.map +1 -0
- package/dist/services/session-services.d.ts +17 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +14 -0
- package/dist/services/session-services.js.map +1 -0
- package/dist/types-global/mcp.d.ts +2 -0
- package/dist/types-global/mcp.d.ts.map +1 -0
- package/dist/types-global/mcp.js +2 -0
- package/dist/types-global/mcp.js.map +1 -0
- package/dist/utils/errors/index.d.ts +2 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/index.js +2 -0
- package/dist/utils/errors/index.js.map +1 -0
- package/dist/utils/platform.d.ts +3 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +5 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/security/rate-limiter.d.ts +3 -0
- package/dist/utils/security/rate-limiter.d.ts.map +1 -0
- package/dist/utils/security/rate-limiter.js +5 -0
- package/dist/utils/security/rate-limiter.js.map +1 -0
- package/dist/utils/telemetry/index.d.ts +2 -0
- package/dist/utils/telemetry/index.d.ts.map +1 -0
- package/dist/utils/telemetry/index.js +2 -0
- package/dist/utils/telemetry/index.js.map +1 -0
- package/dist/utils/telemetry/tracing.d.ts +3 -0
- package/dist/utils/telemetry/tracing.d.ts.map +1 -0
- package/dist/utils/telemetry/tracing.js +4 -0
- package/dist/utils/telemetry/tracing.js.map +1 -0
- 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"}
|