@cesteral/dbm-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 +197 -0
- package/dist/config/index.d.ts +112 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +55 -0
- package/dist/config/index.js.map +1 -0
- package/dist/generated/compatibility-rules.d.ts +26 -0
- package/dist/generated/compatibility-rules.d.ts.map +1 -0
- package/dist/generated/compatibility-rules.js +142 -0
- package/dist/generated/compatibility-rules.js.map +1 -0
- package/dist/generated/filters.d.ts +19 -0
- package/dist/generated/filters.d.ts.map +1 -0
- package/dist/generated/filters.js +2541 -0
- package/dist/generated/filters.js.map +1 -0
- package/dist/generated/index.d.ts +5 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +5 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/metrics.d.ts +28 -0
- package/dist/generated/metrics.d.ts.map +1 -0
- package/dist/generated/metrics.js +961 -0
- package/dist/generated/metrics.js.map +1 -0
- package/dist/generated/report-types.d.ts +14 -0
- package/dist/generated/report-types.d.ts.map +1 -0
- package/dist/generated/report-types.js +94 -0
- package/dist/generated/report-types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.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/custom-query-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.js +164 -0
- package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.js +204 -0
- package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.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 +66 -0
- package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.js +179 -0
- package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/types.d.ts +15 -0
- package/dist/mcp-server/prompts/definitions/types.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/types.js +2 -0
- package/dist/mcp-server/prompts/definitions/types.js.map +1 -0
- package/dist/mcp-server/prompts/index.d.ts +6 -0
- package/dist/mcp-server/prompts/index.d.ts.map +1 -0
- package/dist/mcp-server/prompts/index.js +57 -0
- package/dist/mcp-server/prompts/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/compatibility-rules.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/compatibility-rules.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/compatibility-rules.resource.js +130 -0
- package/dist/mcp-server/resources/definitions/compatibility-rules.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/filter-types.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/filter-types.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/filter-types.resource.js +198 -0
- package/dist/mcp-server/resources/definitions/filter-types.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 +49 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/metric-types.resource.d.ts +4 -0
- package/dist/mcp-server/resources/definitions/metric-types.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/metric-types.resource.js +221 -0
- package/dist/mcp-server/resources/definitions/metric-types.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/query-examples.resource.d.ts +169 -0
- package/dist/mcp-server/resources/definitions/query-examples.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/query-examples.resource.js +261 -0
- package/dist/mcp-server/resources/definitions/query-examples.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/report-types.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/report-types.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/report-types.resource.js +198 -0
- package/dist/mcp-server/resources/definitions/report-types.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 +16 -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 +115 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.d.ts +89 -0
- package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.js +128 -0
- package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.d.ts +155 -0
- package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.js +160 -0
- package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts +138 -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 +171 -0
- package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.d.ts +122 -0
- package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.js +143 -0
- package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +8 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +23 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.js +46 -0
- package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/run-custom-query.tool.d.ts +186 -0
- package/dist/mcp-server/tools/definitions/run-custom-query.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/run-custom-query.tool.js +202 -0
- package/dist/mcp-server/tools/definitions/run-custom-query.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/query-validation.d.ts +44 -0
- package/dist/mcp-server/tools/utils/query-validation.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/query-validation.js +107 -0
- package/dist/mcp-server/tools/utils/query-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 +55 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +55 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/bid-manager/BidManagerService.d.ts +68 -0
- package/dist/services/bid-manager/BidManagerService.d.ts.map +1 -0
- package/dist/services/bid-manager/BidManagerService.js +464 -0
- package/dist/services/bid-manager/BidManagerService.js.map +1 -0
- package/dist/services/bid-manager/auth-bridge.d.ts +6 -0
- package/dist/services/bid-manager/auth-bridge.d.ts.map +1 -0
- package/dist/services/bid-manager/auth-bridge.js +13 -0
- package/dist/services/bid-manager/auth-bridge.js.map +1 -0
- package/dist/services/bid-manager/client.d.ts +4 -0
- package/dist/services/bid-manager/client.d.ts.map +1 -0
- package/dist/services/bid-manager/client.js +2 -0
- package/dist/services/bid-manager/client.js.map +1 -0
- package/dist/services/bid-manager/index.d.ts +6 -0
- package/dist/services/bid-manager/index.d.ts.map +1 -0
- package/dist/services/bid-manager/index.js +4 -0
- package/dist/services/bid-manager/index.js.map +1 -0
- package/dist/services/bid-manager/report-parser.d.ts +26 -0
- package/dist/services/bid-manager/report-parser.d.ts.map +1 -0
- package/dist/services/bid-manager/report-parser.js +141 -0
- package/dist/services/bid-manager/report-parser.js.map +1 -0
- package/dist/services/bid-manager/types.d.ts +668 -0
- package/dist/services/bid-manager/types.d.ts.map +1 -0
- package/dist/services/bid-manager/types.js +256 -0
- package/dist/services/bid-manager/types.js.map +1 -0
- package/dist/services/session-services.d.ts +12 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +18 -0
- package/dist/services/session-services.js.map +1 -0
- package/dist/types-global/bid-manager.d.ts +76 -0
- package/dist/types-global/bid-manager.d.ts.map +1 -0
- package/dist/types-global/bid-manager.js +2 -0
- package/dist/types-global/bid-manager.js.map +1 -0
- package/dist/types-global/index.d.ts +2 -0
- package/dist/types-global/index.d.ts.map +1 -0
- package/dist/types-global/index.js +2 -0
- package/dist/types-global/index.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/date.d.ts +2 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +7 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/errors/bid-manager-errors.d.ts +57 -0
- package/dist/utils/errors/bid-manager-errors.d.ts.map +1 -0
- package/dist/utils/errors/bid-manager-errors.js +119 -0
- package/dist/utils/errors/bid-manager-errors.js.map +1 -0
- package/dist/utils/errors/index.d.ts +3 -0
- package/dist/utils/errors/index.d.ts.map +1 -0
- package/dist/utils/errors/index.js +3 -0
- package/dist/utils/errors/index.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/math.d.ts +9 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +38 -0
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/metrics.d.ts +21 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +92 -0
- package/dist/utils/metrics.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/index.d.ts +2 -0
- package/dist/utils/security/index.d.ts.map +1 -0
- package/dist/utils/security/index.js +2 -0
- package/dist/utils/security/index.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 +60 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
export const crossPlatformPerformancePrompt = {
|
|
2
|
+
name: "cross_platform_performance_comparison",
|
|
3
|
+
description: "Guide for comparing campaign performance across DV360 (via dbm-mcp), The Trade Desk (ttd-mcp), Google Ads (gads-mcp), and Meta Ads (meta-mcp). Normalizes metrics, identifies top performers, and recommends budget reallocation.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "dateRange",
|
|
7
|
+
description: "Date range for comparison (e.g., LAST_7_DAYS, LAST_30_DAYS, or custom YYYY-MM-DD format)",
|
|
8
|
+
required: false,
|
|
9
|
+
},
|
|
10
|
+
],
|
|
11
|
+
};
|
|
12
|
+
export function getCrossPlatformPerformanceMessage(args) {
|
|
13
|
+
const dateRange = args?.dateRange || "LAST_7_DAYS";
|
|
14
|
+
return `# Cross-Platform Performance Comparison
|
|
15
|
+
|
|
16
|
+
Date Range: \`${dateRange}\`
|
|
17
|
+
|
|
18
|
+
This workflow coordinates across multiple MCP servers to gather, normalize, and compare campaign performance. You must be connected to all relevant servers.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Step 1: Gather Metrics from Each Platform
|
|
23
|
+
|
|
24
|
+
### DV360 (via dbm-mcp)
|
|
25
|
+
|
|
26
|
+
\`\`\`json
|
|
27
|
+
{
|
|
28
|
+
"tool": "dbm_get_performance_metrics",
|
|
29
|
+
"params": {
|
|
30
|
+
"campaignId": "{dv360CampaignId}",
|
|
31
|
+
"advertiserId": "{dv360AdvertiserId}",
|
|
32
|
+
"dateRange": "${dateRange}"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
\`\`\`
|
|
36
|
+
|
|
37
|
+
Key metrics returned: impressions, clicks, spend, CPM, CTR, CPA, ROAS.
|
|
38
|
+
|
|
39
|
+
### The Trade Desk (via ttd-mcp)
|
|
40
|
+
|
|
41
|
+
\`\`\`json
|
|
42
|
+
{
|
|
43
|
+
"tool": "ttd_get_report",
|
|
44
|
+
"params": {
|
|
45
|
+
"reportName": "Cross-Platform Comparison",
|
|
46
|
+
"dateRange": "${dateRange}",
|
|
47
|
+
"dimensions": ["CampaignId", "CampaignName"],
|
|
48
|
+
"metrics": ["Impressions", "Clicks", "TotalCostAdvertiserCurrency", "Conversions", "Revenue"],
|
|
49
|
+
"advertiserIds": ["{ttdAdvertiserId}"]
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
\`\`\`
|
|
53
|
+
|
|
54
|
+
### Google Ads (via gads-mcp)
|
|
55
|
+
|
|
56
|
+
\`\`\`json
|
|
57
|
+
{
|
|
58
|
+
"tool": "gads_get_insights",
|
|
59
|
+
"params": {
|
|
60
|
+
"customerId": "{gadsCustomerId}",
|
|
61
|
+
"entityType": "campaign",
|
|
62
|
+
"dateRange": "${dateRange}"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
\`\`\`
|
|
66
|
+
|
|
67
|
+
### Meta Ads (via meta-mcp)
|
|
68
|
+
|
|
69
|
+
\`\`\`json
|
|
70
|
+
{
|
|
71
|
+
"tool": "meta_get_insights",
|
|
72
|
+
"params": {
|
|
73
|
+
"entityId": "{metaCampaignId}",
|
|
74
|
+
"fields": ["impressions", "clicks", "spend", "cpm", "ctr", "cpc", "conversions", "cost_per_action_type"],
|
|
75
|
+
"datePreset": "last_7d"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Step 2: Normalize Metrics
|
|
83
|
+
|
|
84
|
+
Each platform reports metrics differently. Normalize to a common format:
|
|
85
|
+
|
|
86
|
+
| Metric | DV360 (dbm-mcp) | TTD (ttd-mcp) | Google Ads (gads-mcp) | Meta (meta-mcp) |
|
|
87
|
+
|--------|-----------------|---------------|----------------------|-----------------|
|
|
88
|
+
| **Spend** | USD (from report) | Advertiser currency | Micros (÷ 1,000,000) | Cents (÷ 100) |
|
|
89
|
+
| **CPM** | Calculated | Calculated | Micros (÷ 1,000,000) | Cents (÷ 100) |
|
|
90
|
+
| **CPC** | Calculated | Calculated | Micros (÷ 1,000,000) | Cents (÷ 100) |
|
|
91
|
+
| **CTR** | Ratio (0-1) | Ratio (0-1) | Ratio (0-1) | Percentage string |
|
|
92
|
+
| **Conversions** | Bid Manager metric | \`Conversions\` field | \`conversions\` metric | \`conversions\` field |
|
|
93
|
+
|
|
94
|
+
### Normalization formulas:
|
|
95
|
+
|
|
96
|
+
- **Google Ads micros → USD**: Divide by 1,000,000
|
|
97
|
+
- **Meta cents → USD**: Divide by 100
|
|
98
|
+
- **Meta CTR string → number**: Parse "1.23%" to 0.0123
|
|
99
|
+
- **CPM**: (Spend / Impressions) × 1,000
|
|
100
|
+
- **CTR**: Clicks / Impressions
|
|
101
|
+
- **CPA**: Spend / Conversions
|
|
102
|
+
- **ROAS**: Revenue / Spend
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Step 3: Compare in Normalized Table
|
|
107
|
+
|
|
108
|
+
Present results in a unified format:
|
|
109
|
+
|
|
110
|
+
| Platform | Campaign | Impressions | Clicks | CTR | Spend (USD) | CPM (USD) | CPA (USD) | ROAS |
|
|
111
|
+
|----------|----------|-------------|--------|-----|-------------|-----------|-----------|------|
|
|
112
|
+
| DV360 | {name} | {n} | {n} | {%} | \${n} | \${n} | \${n} | {n}x |
|
|
113
|
+
| TTD | {name} | {n} | {n} | {%} | \${n} | \${n} | \${n} | {n}x |
|
|
114
|
+
| Google Ads | {name} | {n} | {n} | {%} | \${n} | \${n} | \${n} | {n}x |
|
|
115
|
+
| Meta | {name} | {n} | {n} | {%} | \${n} | \${n} | \${n} | {n}x |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Step 4: Identify Winners and Losers
|
|
120
|
+
|
|
121
|
+
Rank platforms by key efficiency metrics:
|
|
122
|
+
|
|
123
|
+
### By CPA (lower is better)
|
|
124
|
+
1. Best CPA platform → candidate for budget increase
|
|
125
|
+
2. Worst CPA platform → candidate for budget decrease or pause
|
|
126
|
+
|
|
127
|
+
### By ROAS (higher is better)
|
|
128
|
+
1. Best ROAS platform → highest return on investment
|
|
129
|
+
2. Worst ROAS platform → losing money if < 1.0
|
|
130
|
+
|
|
131
|
+
### By CPM (context-dependent)
|
|
132
|
+
- Low CPM + low CTR → cheap but ineffective (awareness only)
|
|
133
|
+
- High CPM + high CTR → expensive but effective (consider if CPA is good)
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Step 5: Recommend Budget Reallocation
|
|
138
|
+
|
|
139
|
+
Based on the comparison, suggest budget moves:
|
|
140
|
+
|
|
141
|
+
### Conservative Approach (low risk)
|
|
142
|
+
- Shift 10-15% of budget from worst performer to best performer
|
|
143
|
+
- Monitor for 1 week before making further changes
|
|
144
|
+
|
|
145
|
+
### Aggressive Approach (high confidence)
|
|
146
|
+
- Shift 25-30% of budget from worst performer to best performer
|
|
147
|
+
- Pause campaigns on platforms with ROAS < 0.5
|
|
148
|
+
|
|
149
|
+
### Execution
|
|
150
|
+
|
|
151
|
+
For each platform where budget changes are needed:
|
|
152
|
+
|
|
153
|
+
- **DV360**: Use \`dv360_update_entity\` (via dv360-mcp) to adjust IO/Line Item budgets
|
|
154
|
+
- **TTD**: Use \`ttd_update_entity\` (via ttd-mcp) to adjust campaign/ad group budgets
|
|
155
|
+
- **Google Ads**: Use \`gads_update_entity\` (via gads-mcp) to adjust campaign budgets
|
|
156
|
+
- **Meta**: Use \`meta_update_entity\` (via meta-mcp) to adjust campaign/ad set budgets
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Gotchas
|
|
161
|
+
|
|
162
|
+
- **Date ranges differ by platform**: DV360 uses Bid Manager presets (LAST_7_DAYS), TTD uses date strings, Google Ads uses date ranges in GAQL, Meta uses datePreset or timeRange. Align dates carefully.
|
|
163
|
+
- **Currency differences**: Ensure all platforms report in the same currency before comparing. TTD reports in advertiser currency, others in USD by default.
|
|
164
|
+
- **Attribution models differ**: Each platform attributes conversions differently. Cross-platform CPA comparisons are directional, not exact.
|
|
165
|
+
- **Data freshness varies**: Meta has up to 48-hour lag. DV360 reports are async. TTD and Google Ads are near-real-time. Compare data from the same time window.
|
|
166
|
+
- **Impression counting differs**: Viewability standards vary by platform. CPM comparisons should account for this.
|
|
167
|
+
- **Not all campaigns are comparable**: Only compare campaigns targeting similar audiences, geos, and objectives. A brand awareness campaign on DV360 shouldn't be compared with a direct response campaign on Google Ads.
|
|
168
|
+
`;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=cross-platform-performance.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-platform-performance.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/cross-platform-performance.prompt.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,8BAA8B,GAAW;IACpD,IAAI,EAAE,uCAAuC;IAC7C,WAAW,EACT,mOAAmO;IACrO,SAAS,EAAE;QACT;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,0FAA0F;YAC5F,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,kCAAkC,CAAC,IAA6B;IAC9E,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa,CAAC;IAEnD,OAAO;;gBAEO,SAAS;;;;;;;;;;;;;;;;oBAgBL,SAAS;;;;;;;;;;;;;;oBAcT,SAAS;;;;;;;;;;;;;;;;oBAgBT,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0G5B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-query-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/custom-query-workflow.prompt.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,yBAAyB,EAAE,MAiBvC,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAmJnF"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
export const customQueryWorkflowPrompt = {
|
|
2
|
+
name: "custom_query_workflow",
|
|
3
|
+
description: "Step-by-step guide for building custom Bid Manager queries with the dbm_run_custom_query tool",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "advertiserId",
|
|
7
|
+
description: "DV360 Advertiser ID to query",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "queryGoal",
|
|
12
|
+
description: "What you want to analyze (e.g., 'campaign performance', 'device breakdown', 'video metrics')",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getCustomQueryWorkflowMessage(args) {
|
|
18
|
+
const advertiserId = args?.advertiserId || "{advertiserId}";
|
|
19
|
+
const queryGoal = args?.queryGoal || "campaign performance";
|
|
20
|
+
return `# Custom Query Building Workflow
|
|
21
|
+
|
|
22
|
+
## Goal: ${queryGoal}
|
|
23
|
+
|
|
24
|
+
Follow these steps to build a custom Bid Manager query using the \`dbm_run_custom_query\` tool.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Step 1: Determine Report Type
|
|
29
|
+
|
|
30
|
+
**Most common:** \`STANDARD\` for general delivery metrics.
|
|
31
|
+
|
|
32
|
+
Available types:
|
|
33
|
+
- \`STANDARD\` - Impressions, clicks, cost, conversions (most common)
|
|
34
|
+
- \`FLOODLIGHT\` - Conversion tracking with Floodlight data
|
|
35
|
+
- \`YOUTUBE\` - TrueView/YouTube-specific metrics
|
|
36
|
+
- \`REACH\` - Reach and frequency metrics
|
|
37
|
+
|
|
38
|
+
Fetch \`report-types://all\` for full details.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step 2: Choose Dimensions (groupBys)
|
|
43
|
+
|
|
44
|
+
Dimensions determine how results are broken down.
|
|
45
|
+
|
|
46
|
+
**Common groupBys for ${queryGoal}:**
|
|
47
|
+
- \`FILTER_DATE\` - Daily breakdown
|
|
48
|
+
- \`FILTER_MEDIA_PLAN\` - By campaign
|
|
49
|
+
- \`FILTER_LINE_ITEM\` - By line item
|
|
50
|
+
- \`FILTER_DEVICE_TYPE\` - By device
|
|
51
|
+
- \`FILTER_CREATIVE\` - By creative
|
|
52
|
+
|
|
53
|
+
Fetch \`filter-types://all\` for the complete list of ${278} available filters.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Step 3: Select Metrics
|
|
58
|
+
|
|
59
|
+
Choose the metrics you want to measure.
|
|
60
|
+
|
|
61
|
+
**Common metrics for ${queryGoal}:**
|
|
62
|
+
- \`METRIC_IMPRESSIONS\` - Total impressions
|
|
63
|
+
- \`METRIC_CLICKS\` - Total clicks
|
|
64
|
+
- \`METRIC_CTR\` - Click-through rate
|
|
65
|
+
- \`METRIC_TOTAL_MEDIA_COST_ADVERTISER\` - Total spend
|
|
66
|
+
- \`METRIC_TOTAL_CONVERSIONS\` - Total conversions
|
|
67
|
+
|
|
68
|
+
Fetch \`metric-types://all\` for the complete list of ${100} available metrics.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Step 4: Set Filters
|
|
73
|
+
|
|
74
|
+
Filters restrict the data to specific values.
|
|
75
|
+
|
|
76
|
+
**Required filter:**
|
|
77
|
+
\`\`\`json
|
|
78
|
+
{ "type": "FILTER_ADVERTISER", "value": "${advertiserId}" }
|
|
79
|
+
\`\`\`
|
|
80
|
+
|
|
81
|
+
**Optional filters:**
|
|
82
|
+
- \`FILTER_MEDIA_PLAN\` - Specific campaign(s)
|
|
83
|
+
- \`FILTER_LINE_ITEM\` - Specific line item(s)
|
|
84
|
+
- \`FILTER_DATE\` - Specific date range
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Step 5: Set Date Range
|
|
89
|
+
|
|
90
|
+
**Presets (recommended):**
|
|
91
|
+
- \`LAST_7_DAYS\` - Quick recent view
|
|
92
|
+
- \`LAST_30_DAYS\` - Monthly view
|
|
93
|
+
- \`MONTH_TO_DATE\` - Current month
|
|
94
|
+
- \`PREVIOUS_MONTH\` - Last complete month
|
|
95
|
+
|
|
96
|
+
**Custom dates:**
|
|
97
|
+
\`\`\`json
|
|
98
|
+
{
|
|
99
|
+
"startDate": "2025-01-01",
|
|
100
|
+
"endDate": "2025-01-31"
|
|
101
|
+
}
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Step 6: Execute Query
|
|
107
|
+
|
|
108
|
+
Example query for ${queryGoal}:
|
|
109
|
+
|
|
110
|
+
\`\`\`json
|
|
111
|
+
{
|
|
112
|
+
"reportType": "STANDARD",
|
|
113
|
+
"groupBys": ["FILTER_DATE", "FILTER_MEDIA_PLAN"],
|
|
114
|
+
"metrics": [
|
|
115
|
+
"METRIC_IMPRESSIONS",
|
|
116
|
+
"METRIC_CLICKS",
|
|
117
|
+
"METRIC_CTR",
|
|
118
|
+
"METRIC_TOTAL_MEDIA_COST_ADVERTISER"
|
|
119
|
+
],
|
|
120
|
+
"filters": [
|
|
121
|
+
{ "type": "FILTER_ADVERTISER", "value": "${advertiserId}" }
|
|
122
|
+
],
|
|
123
|
+
"dateRange": {
|
|
124
|
+
"preset": "LAST_7_DAYS"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
\`\`\`
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Validation Options
|
|
132
|
+
|
|
133
|
+
- \`strictValidation: true\` (default) - Validates all filter/metric names against known values
|
|
134
|
+
- \`strictValidation: false\` - Passes unknown values to API (useful for new API features)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Output Options
|
|
139
|
+
|
|
140
|
+
- \`outputFormat: "structured"\` (default) - Returns JSON array of records
|
|
141
|
+
- \`outputFormat: "csv"\` - Returns raw CSV string
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Common Errors
|
|
146
|
+
|
|
147
|
+
| Error | Solution |
|
|
148
|
+
|-------|----------|
|
|
149
|
+
| "Unknown filter type" | Check spelling, fetch \`filter-types://all\` |
|
|
150
|
+
| "Unknown metric type" | Check spelling, fetch \`metric-types://all\` |
|
|
151
|
+
| "Report failed" | Check date range validity, reduce groupBys |
|
|
152
|
+
| "No data returned" | Verify advertiser ID, check filters aren't too restrictive |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Next Steps
|
|
157
|
+
|
|
158
|
+
1. Run the query with \`dbm_run_custom_query\`
|
|
159
|
+
2. Analyze results
|
|
160
|
+
3. Refine groupBys/metrics based on findings
|
|
161
|
+
4. Use \`dbm_get_historical_metrics\` for trend analysis
|
|
162
|
+
`;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=custom-query-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-query-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/custom-query-workflow.prompt.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,yBAAyB,GAAW;IAC/C,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,+FAA+F;IACjG,SAAS,EAAE;QACT;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,8FAA8F;YAChG,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAAC,IAA6B;IACzE,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,gBAAgB,CAAC;IAC5D,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,sBAAsB,CAAC;IAE5D,OAAO;;WAEE,SAAS;;;;;;;;;;;;;;;;;;;;;;;;wBAwBI,SAAS;;;;;;;wDAOuB,GAAG;;;;;;;;uBAQpC,SAAS;;;;;;;wDAOwB,GAAG;;;;;;;;;;2CAUhB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8BnC,SAAS;;;;;;;;;;;;;+CAakB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC1D,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "./types.js";
|
|
2
|
+
export declare const pacingPerformanceAnalysisPrompt: Prompt;
|
|
3
|
+
export declare function getPacingPerformanceAnalysisMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=pacing-performance-analysis.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pacing-performance-analysis.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAQzC,eAAO,MAAM,+BAA+B,EAAE,MAqB7C,CAAC;AAEF,wBAAgB,mCAAmC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAsLzF"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
export const pacingPerformanceAnalysisPrompt = {
|
|
2
|
+
name: "pacing_performance_analysis_workflow",
|
|
3
|
+
description: "Step-by-step guide for DV360 pacing assessment and performance deep-dive: check delivery pacing, analyze CPM/CTR/CPA/ROAS, identify historical trends, and recommend bid/budget adjustments via dv360-mcp.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "campaignId",
|
|
7
|
+
description: "DV360 Campaign ID to analyze",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "advertiserId",
|
|
12
|
+
description: "DV360 Advertiser ID",
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "focus",
|
|
17
|
+
description: "Analysis focus: 'pacing', 'performance', or 'both' (default: both)",
|
|
18
|
+
required: false,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
export function getPacingPerformanceAnalysisMessage(args) {
|
|
23
|
+
const campaignId = args?.campaignId || "{campaignId}";
|
|
24
|
+
const advertiserId = args?.advertiserId || "{advertiserId}";
|
|
25
|
+
const focus = args?.focus || "both";
|
|
26
|
+
return `# DV360 Pacing & Performance Analysis
|
|
27
|
+
|
|
28
|
+
Campaign: \`${campaignId}\`
|
|
29
|
+
Advertiser: \`${advertiserId}\`
|
|
30
|
+
Focus: \`${focus}\`
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Step 1: Assess Delivery Pacing
|
|
35
|
+
|
|
36
|
+
Check whether the campaign is on track to spend its budget by flight end.
|
|
37
|
+
|
|
38
|
+
\`\`\`json
|
|
39
|
+
{
|
|
40
|
+
"tool": "dbm_get_pacing_status",
|
|
41
|
+
"params": {
|
|
42
|
+
"campaignId": "${campaignId}",
|
|
43
|
+
"advertiserId": "${advertiserId}"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
\`\`\`
|
|
47
|
+
|
|
48
|
+
**Interpret the pacing percentage:**
|
|
49
|
+
|
|
50
|
+
| Pacing % | Status | Action |
|
|
51
|
+
|----------|--------|--------|
|
|
52
|
+
| 95–105% | On pace | No action needed |
|
|
53
|
+
| 85–94% | Slightly under | Monitor — may self-correct |
|
|
54
|
+
| 70–84% | Underdelivering | Investigate and adjust bids/targeting |
|
|
55
|
+
| < 70% | Severely under | Urgent — likely a configuration or targeting issue |
|
|
56
|
+
| 106–115% | Slightly over | Monitor — consider lowering bids |
|
|
57
|
+
| > 115% | Overspending | Reduce bids or pause line items immediately |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Step 2: Analyze Performance Metrics
|
|
62
|
+
|
|
63
|
+
Get calculated performance metrics for the campaign:
|
|
64
|
+
|
|
65
|
+
\`\`\`json
|
|
66
|
+
{
|
|
67
|
+
"tool": "dbm_get_performance_metrics",
|
|
68
|
+
"params": {
|
|
69
|
+
"campaignId": "${campaignId}",
|
|
70
|
+
"advertiserId": "${advertiserId}",
|
|
71
|
+
"dateRange": "LAST_7_DAYS"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
\`\`\`
|
|
75
|
+
|
|
76
|
+
**Key metrics to evaluate:**
|
|
77
|
+
|
|
78
|
+
| Metric | What It Tells You | Action Threshold |
|
|
79
|
+
|--------|-------------------|------------------|
|
|
80
|
+
| **CPM** | Cost efficiency of impressions | Compare to vertical benchmarks |
|
|
81
|
+
| **CTR** | Ad engagement rate | < 0.05% suggests creative fatigue or poor targeting |
|
|
82
|
+
| **CPA** | Cost per acquisition | Compare to target CPA goal |
|
|
83
|
+
| **ROAS** | Return on ad spend | < 1.0 means losing money |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Step 3: Identify Historical Trends
|
|
88
|
+
|
|
89
|
+
Pull time-series data to spot trends over time:
|
|
90
|
+
|
|
91
|
+
\`\`\`json
|
|
92
|
+
{
|
|
93
|
+
"tool": "dbm_get_historical_metrics",
|
|
94
|
+
"params": {
|
|
95
|
+
"campaignId": "${campaignId}",
|
|
96
|
+
"advertiserId": "${advertiserId}",
|
|
97
|
+
"startDate": "{YYYY-MM-DD}",
|
|
98
|
+
"endDate": "{YYYY-MM-DD}",
|
|
99
|
+
"granularity": "DAILY"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
\`\`\`
|
|
103
|
+
|
|
104
|
+
**What to look for:**
|
|
105
|
+
|
|
106
|
+
- **CPM trending up** → Competition increasing or targeting too narrow. Consider broadening audience.
|
|
107
|
+
- **CTR trending down** → Creative fatigue. Recommend creative refresh.
|
|
108
|
+
- **Spend dropping day-over-day** → Delivery issue. Check targeting restrictions, bid floors, budget caps.
|
|
109
|
+
- **CPA spiking** → Conversion drop-off. Check landing page, conversion tracking, audience quality.
|
|
110
|
+
- **Consistent flat delivery** → May indicate a frequency cap or pacing issue.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Step 4: Build a Custom Deep-Dive Query (Optional)
|
|
115
|
+
|
|
116
|
+
For more granular analysis, compose a custom Bid Manager query:
|
|
117
|
+
|
|
118
|
+
\`\`\`json
|
|
119
|
+
{
|
|
120
|
+
"tool": "dbm_run_custom_query",
|
|
121
|
+
"params": {
|
|
122
|
+
"reportType": "STANDARD",
|
|
123
|
+
"timeRange": "LAST_14_DAYS",
|
|
124
|
+
"metrics": [
|
|
125
|
+
"METRIC_IMPRESSIONS",
|
|
126
|
+
"METRIC_CLICKS",
|
|
127
|
+
"METRIC_TOTAL_MEDIA_COST_ADVERTISER",
|
|
128
|
+
"METRIC_TOTAL_CONVERSIONS",
|
|
129
|
+
"METRIC_REVENUE_ADVERTISER"
|
|
130
|
+
],
|
|
131
|
+
"dimensions": [
|
|
132
|
+
"FILTER_LINE_ITEM"
|
|
133
|
+
],
|
|
134
|
+
"filters": [
|
|
135
|
+
{
|
|
136
|
+
"type": "FILTER_ADVERTISER",
|
|
137
|
+
"value": "${advertiserId}"
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"type": "FILTER_CAMPAIGN",
|
|
141
|
+
"value": "${campaignId}"
|
|
142
|
+
}
|
|
143
|
+
]
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
**Resource reference:** Fetch \`metric-types://all\` and \`filter-types://all\` for available metrics and dimensions. Check \`compatibility-rules://all\` to ensure your metric/dimension combination is valid.
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Step 5: Diagnose and Recommend
|
|
153
|
+
|
|
154
|
+
Based on findings from Steps 1–4, determine the root cause and recommended action:
|
|
155
|
+
|
|
156
|
+
### Underdelivery Diagnosis
|
|
157
|
+
|
|
158
|
+
| Symptom | Likely Cause | Recommended Action |
|
|
159
|
+
|---------|-------------|-------------------|
|
|
160
|
+
| Low pacing + high CPM | Bid too low for competition | Increase bids via **dv360-mcp** \`dv360_adjust_line_item_bids\` |
|
|
161
|
+
| Low pacing + low CPM | Targeting too narrow | Broaden audience or geo targeting via **dv360-mcp** targeting tools |
|
|
162
|
+
| Low pacing + normal CPM | Budget cap or frequency cap | Check IO/LI budget and frequency settings via **dv360-mcp** \`dv360_get_entity\` |
|
|
163
|
+
| Declining CTR + stable impressions | Creative fatigue | Recommend creative refresh (new creatives via **dv360-mcp**) |
|
|
164
|
+
| High CPA + good CTR | Landing page or conversion issue | Check conversion tracking setup (outside MCP scope) |
|
|
165
|
+
|
|
166
|
+
### Overspend Diagnosis
|
|
167
|
+
|
|
168
|
+
| Symptom | Likely Cause | Recommended Action |
|
|
169
|
+
|---------|-------------|-------------------|
|
|
170
|
+
| High pacing + low CPM | Bids too aggressive | Lower bids via **dv360-mcp** \`dv360_adjust_line_item_bids\` |
|
|
171
|
+
| High pacing + high CPM | Budget pacing too aggressive | Adjust pacing to EVEN via **dv360-mcp** \`dv360_update_entity\` |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Step 6: Apply Remediation (via dv360-mcp)
|
|
176
|
+
|
|
177
|
+
This reporting server (dbm-mcp) is read-only. To make changes, use **dv360-mcp** tools:
|
|
178
|
+
|
|
179
|
+
- **Adjust bids**: \`dv360_adjust_line_item_bids\` (batch bid changes)
|
|
180
|
+
- **Pause line items**: \`dv360_bulk_update_status\` (pause underperformers)
|
|
181
|
+
- **Update budgets**: \`dv360_update_entity\` with updateMask on budget fields
|
|
182
|
+
- **Modify targeting**: \`dv360_create_assigned_targeting\` / \`dv360_delete_assigned_targeting\`
|
|
183
|
+
|
|
184
|
+
After making changes, wait at least 2-4 hours for delivery to adjust, then re-run Steps 1-2 to verify improvement.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## Summary Template
|
|
189
|
+
|
|
190
|
+
Present findings in this format:
|
|
191
|
+
|
|
192
|
+
| Metric | Current Value | Trend (7d) | Status |
|
|
193
|
+
|--------|--------------|------------|--------|
|
|
194
|
+
| Pacing | {X}% | {direction} | {On track / Under / Over} |
|
|
195
|
+
| CPM | \${X.XX} | {direction} | {Normal / High / Low} |
|
|
196
|
+
| CTR | {X.XX}% | {direction} | {Normal / Low} |
|
|
197
|
+
| CPA | \${X.XX} | {direction} | {Below / Above target} |
|
|
198
|
+
| ROAS | {X.XX}x | {direction} | {Profitable / Unprofitable} |
|
|
199
|
+
|
|
200
|
+
**Diagnosis:** {one-sentence summary}
|
|
201
|
+
**Recommended Actions:** {numbered list of specific actions with tool calls}
|
|
202
|
+
`;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=pacing-performance-analysis.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pacing-performance-analysis.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,+BAA+B,GAAW;IACrD,IAAI,EAAE,sCAAsC;IAC5C,WAAW,EACT,4MAA4M;IAC9M,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,oEAAoE;YACjF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,mCAAmC,CAAC,IAA6B;IAC/E,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,gBAAgB,CAAC;IAC5D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC;IAEpC,OAAO;;cAEK,UAAU;gBACR,YAAY;WACjB,KAAK;;;;;;;;;;;;qBAYK,UAAU;uBACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;qBA0Bd,UAAU;uBACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;qBAyBd,UAAU;uBACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBAyCf,YAAY;;;;oBAIZ,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6D7B,CAAC;AACF,CAAC"}
|
|
@@ -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":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,2BAA2B,EAAE,MAiBzC,CAAC;AAEF,wBAAgB,+BAA+B,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAiDrF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export const toolSchemaExplorationPrompt = {
|
|
2
|
+
name: "tool_schema_exploration_workflow",
|
|
3
|
+
description: "Step-by-step workflow for exploring available MCP tools, prompts, and resources with minimal context usage.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "serverFocus",
|
|
7
|
+
description: "Server to focus on: dbm-mcp, dv360-mcp, or both (default: both)",
|
|
8
|
+
required: false,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "objective",
|
|
12
|
+
description: "Exploration objective (e.g. query planning, entity schema lookup, troubleshooting)",
|
|
13
|
+
required: false,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getToolSchemaExplorationMessage(args) {
|
|
18
|
+
const serverFocus = args?.serverFocus || "both";
|
|
19
|
+
const objective = args?.objective || "tool and schema discovery";
|
|
20
|
+
return `# Tool and Schema Exploration Workflow
|
|
21
|
+
|
|
22
|
+
## Context
|
|
23
|
+
- Focus: ${serverFocus}
|
|
24
|
+
- Objective: ${objective}
|
|
25
|
+
|
|
26
|
+
Use this workflow to discover capabilities while minimizing token/context bloat.
|
|
27
|
+
|
|
28
|
+
## Step 1: List capabilities first
|
|
29
|
+
1. Call \`tools/list\`
|
|
30
|
+
2. Call \`prompts/list\`
|
|
31
|
+
3. Call \`resources/list\`
|
|
32
|
+
|
|
33
|
+
Do not fetch large resources before narrowing scope.
|
|
34
|
+
|
|
35
|
+
## Step 2: Narrow to one task path
|
|
36
|
+
Pick one immediate action:
|
|
37
|
+
- Build a custom reporting query
|
|
38
|
+
- Inspect DV360 entity schema/update fields
|
|
39
|
+
- Troubleshoot delivery/performance
|
|
40
|
+
|
|
41
|
+
## Step 3: Fetch only targeted resources
|
|
42
|
+
Prefer smallest resources first:
|
|
43
|
+
- For filters: \`filter-types://category/{slug}\`
|
|
44
|
+
- For metrics: \`metric-types://category/{slug}\`
|
|
45
|
+
- Use \`://all\` resources only when needed
|
|
46
|
+
- For DV360 entities: \`entity-schema://{entityType}\`, \`entity-fields://{entityType}\`, \`entity-examples://{entityType}\`
|
|
47
|
+
|
|
48
|
+
## Step 4: Validate compatibility before execution
|
|
49
|
+
- Confirm reportType/filter/metric compatibility via \`compatibility-rules://all\`
|
|
50
|
+
- Confirm DV360 updateMask fields via \`entity-fields://{entityType}\`
|
|
51
|
+
|
|
52
|
+
## Step 5: Execute one smallest-viable tool call
|
|
53
|
+
Start with one call, inspect output, then iterate.
|
|
54
|
+
|
|
55
|
+
## Context-minimization rules
|
|
56
|
+
- Keep text summaries concise; rely on structured output where available
|
|
57
|
+
- Avoid copying full JSON into chat unless requested
|
|
58
|
+
- Reuse fetched resource facts instead of re-fetching full docs
|
|
59
|
+
|
|
60
|
+
## Suggested next prompt
|
|
61
|
+
- For reporting query construction: \`custom_query_workflow\`
|
|
62
|
+
- For reporting troubleshooting: \`troubleshoot_report\`
|
|
63
|
+
- For DV360 budget/campaign setup: use corresponding dv360-mcp prompts
|
|
64
|
+
`;
|
|
65
|
+
}
|
|
66
|
+
//# 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":"AAWA,MAAM,CAAC,MAAM,2BAA2B,GAAW;IACjD,IAAI,EAAE,kCAAkC;IACxC,WAAW,EACT,6GAA6G;IAC/G,SAAS,EAAE;QACT;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,EAAE,KAAK;SAChB;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EACT,oFAAoF;YACtF,QAAQ,EAAE,KAAK;SAChB;KACF;CACF,CAAC;AAEF,MAAM,UAAU,+BAA+B,CAAC,IAA6B;IAC3E,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,2BAA2B,CAAC;IAEjE,OAAO;;;WAGE,WAAW;eACP,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCvB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"troubleshoot-report.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/troubleshoot-report.prompt.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,eAAO,MAAM,wBAAwB,EAAE,MAgBtC,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAkKlF"}
|