@cesteral/tiktok-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 +347 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/tiktok-auth-adapter.d.ts +40 -0
- package/dist/auth/tiktok-auth-adapter.d.ts.map +1 -0
- package/dist/auth/tiktok-auth-adapter.js +126 -0
- package/dist/auth/tiktok-auth-adapter.js.map +1 -0
- package/dist/auth/tiktok-auth-strategy.d.ts +14 -0
- package/dist/auth/tiktok-auth-strategy.d.ts.map +1 -0
- package/dist/auth/tiktok-auth-strategy.js +54 -0
- package/dist/auth/tiktok-auth-strategy.js.map +1 -0
- package/dist/config/index.d.ts +120 -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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -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 +127 -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 +104 -0
- package/dist/mcp-server/prompts/definitions/campaign-setup-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-workflow.prompt.js +121 -0
- package/dist/mcp-server/prompts/definitions/creative-upload-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 +198 -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 +189 -0
- package/dist/mcp-server/prompts/definitions/entity-update-workflow.prompt.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/reporting-workflow.prompt.js +126 -0
- package/dist/mcp-server/prompts/definitions/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 +200 -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 +93 -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 +111 -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 +182 -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 +147 -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 +135 -0
- package/dist/mcp-server/resources/definitions/entity-schemas.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 +79 -0
- package/dist/mcp-server/resources/definitions/index.js.map +1 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.js +165 -0
- package/dist/mcp-server/resources/definitions/reporting-reference.resource.js.map +1 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/targeting-reference.resource.js +134 -0
- package/dist/mcp-server/resources/definitions/targeting-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 +134 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +209 -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 +141 -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 +151 -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 +112 -0
- package/dist/mcp-server/tools/definitions/bulk-create-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts +193 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js +130 -0
- package/dist/mcp-server/tools/definitions/bulk-update-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.d.ts +153 -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 +137 -0
- package/dist/mcp-server/tools/definitions/bulk-update-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts +119 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.js +89 -0
- package/dist/mcp-server/tools/definitions/check-report-status.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.d.ts +115 -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 +103 -0
- package/dist/mcp-server/tools/definitions/create-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts +100 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js +110 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.d.ts +297 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.js +105 -0
- package/dist/mcp-server/tools/definitions/download-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +105 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js +85 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.d.ts +89 -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 +74 -0
- package/dist/mcp-server/tools/definitions/get-ad-preview.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts +89 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js +83 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts +85 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js +88 -0
- package/dist/mcp-server/tools/definitions/get-audience-estimate.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +76 -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 +71 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts +295 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js +174 -0
- package/dist/mcp-server/tools/definitions/get-report-breakdowns.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.d.ts +303 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.js +178 -0
- package/dist/mcp-server/tools/definitions/get-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +127 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js +120 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +26 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +78 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts +54 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.js +58 -0
- package/dist/mcp-server/tools/definitions/list-advertisers.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +167 -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 +114 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts +131 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js +123 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts +153 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.js +117 -0
- package/dist/mcp-server/tools/definitions/submit-report.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +111 -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 +89 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts +87 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js +82 -0
- package/dist/mcp-server/tools/definitions/upload-image.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts +88 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js +113 -0
- package/dist/mcp-server/tools/definitions/upload-video.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/validate-entity.tool.d.ts +197 -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 +237 -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/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 +121 -0
- package/dist/mcp-server/tools/utils/entity-mapping.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 +59 -0
- package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
- package/dist/mcp-server/transports/streamable-http-transport.js +107 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/session-services.d.ts +21 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +25 -0
- package/dist/services/session-services.js.map +1 -0
- package/dist/services/tiktok/tiktok-http-client.d.ts +19 -0
- package/dist/services/tiktok/tiktok-http-client.d.ts.map +1 -0
- package/dist/services/tiktok/tiktok-http-client.js +184 -0
- package/dist/services/tiktok/tiktok-http-client.js.map +1 -0
- package/dist/services/tiktok/tiktok-reporting-service.d.ts +62 -0
- package/dist/services/tiktok/tiktok-reporting-service.d.ts.map +1 -0
- package/dist/services/tiktok/tiktok-reporting-service.js +129 -0
- package/dist/services/tiktok/tiktok-reporting-service.js.map +1 -0
- package/dist/services/tiktok/tiktok-service.d.ts +86 -0
- package/dist/services/tiktok/tiktok-service.d.ts.map +1 -0
- package/dist/services/tiktok/tiktok-service.js +217 -0
- package/dist/services/tiktok/tiktok-service.js.map +1 -0
- package/dist/services/tiktok/types.d.ts +161 -0
- package/dist/services/tiktok/types.d.ts.map +1 -0
- package/dist/services/tiktok/types.js +31 -0
- package/dist/services/tiktok/types.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 +55 -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,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const tiktokEntityDuplicationWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getTiktokEntityDuplicationWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=entity-duplication-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-duplication-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAQjE,eAAO,MAAM,qCAAqC,EAAE,MAqBnD,CAAC;AAEF,wBAAgB,yCAAyC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAgL/F"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
export const tiktokEntityDuplicationWorkflowPrompt = {
|
|
2
|
+
name: "tiktok_entity_duplication_workflow",
|
|
3
|
+
description: "Step-by-step guide for duplicating TikTok Ads campaigns, ad groups, and ads using tiktok_duplicate_entity — covers A/B testing, scaling, and common patterns.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "entityType",
|
|
7
|
+
description: "Entity type to duplicate: campaign, adGroup, or ad",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "entityId",
|
|
12
|
+
description: "Numeric ID of the entity to duplicate",
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "advertiserId",
|
|
17
|
+
description: "TikTok Advertiser ID",
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
export function getTiktokEntityDuplicationWorkflowMessage(args) {
|
|
23
|
+
const entityType = args?.entityType || "{entityType}";
|
|
24
|
+
const entityId = args?.entityId || "{entityId}";
|
|
25
|
+
const advertiserId = args?.advertiserId || "{advertiserId}";
|
|
26
|
+
return `# TikTok Entity Duplication Workflow
|
|
27
|
+
|
|
28
|
+
Entity Type: \`${entityType}\`
|
|
29
|
+
Entity ID: \`${entityId}\`
|
|
30
|
+
Advertiser ID: \`${advertiserId}\`
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Overview
|
|
35
|
+
|
|
36
|
+
\`tiktok_duplicate_entity\` creates a copy of a campaign, ad group, or ad with all settings preserved.
|
|
37
|
+
|
|
38
|
+
| What Gets Copied | Details |
|
|
39
|
+
|------------------|---------|
|
|
40
|
+
| **Campaign** | Structure, budget mode, objective |
|
|
41
|
+
| **Ad Group** | Targeting, bid, schedule, budget |
|
|
42
|
+
| **Ad** | Creative reference, copy, CTA, landing page |
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Step 1: Review the Source Entity
|
|
47
|
+
|
|
48
|
+
Before duplicating, inspect the entity you're copying:
|
|
49
|
+
|
|
50
|
+
\`\`\`json
|
|
51
|
+
{
|
|
52
|
+
"tool": "tiktok_get_entity",
|
|
53
|
+
"params": {
|
|
54
|
+
"entityType": "${entityType}",
|
|
55
|
+
"advertiserId": "${advertiserId}",
|
|
56
|
+
"entityId": "${entityId}"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
\`\`\`
|
|
60
|
+
|
|
61
|
+
Confirm this is the right entity and note its current state.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Step 2: Duplicate the Entity
|
|
66
|
+
|
|
67
|
+
\`\`\`json
|
|
68
|
+
{
|
|
69
|
+
"tool": "tiktok_duplicate_entity",
|
|
70
|
+
"params": {
|
|
71
|
+
"entityType": "${entityType}",
|
|
72
|
+
"advertiserId": "${advertiserId}",
|
|
73
|
+
"entityId": "${entityId}",
|
|
74
|
+
"options": {
|
|
75
|
+
"newName": "Copy of ${entityType} ${entityId}"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
\`\`\`
|
|
80
|
+
|
|
81
|
+
The response includes the new entity ID.
|
|
82
|
+
|
|
83
|
+
⚠️ **GOTCHA**: Duplicated entities are created in **DISABLE** status by default. Enable only after review.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Step 3: Customize the Copy
|
|
88
|
+
|
|
89
|
+
Use the returned entity ID to modify the copy:
|
|
90
|
+
|
|
91
|
+
### Update Name and Budget
|
|
92
|
+
|
|
93
|
+
\`\`\`json
|
|
94
|
+
{
|
|
95
|
+
"tool": "tiktok_update_entity",
|
|
96
|
+
"params": {
|
|
97
|
+
"entityType": "${entityType}",
|
|
98
|
+
"advertiserId": "${advertiserId}",
|
|
99
|
+
"entityId": "{newEntityId}",
|
|
100
|
+
"data": {
|
|
101
|
+
"campaign_name": "Campaign B - Broad Targeting Test",
|
|
102
|
+
"budget": 150
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
### Update Targeting (Ad Group)
|
|
109
|
+
|
|
110
|
+
\`\`\`json
|
|
111
|
+
{
|
|
112
|
+
"tool": "tiktok_update_entity",
|
|
113
|
+
"params": {
|
|
114
|
+
"entityType": "adGroup",
|
|
115
|
+
"advertiserId": "${advertiserId}",
|
|
116
|
+
"entityId": "{newAdGroupId}",
|
|
117
|
+
"data": {
|
|
118
|
+
"age": ["AGE_35_44", "AGE_45_54"],
|
|
119
|
+
"gender": ["GENDER_FEMALE"],
|
|
120
|
+
"location_ids": ["GB", "CA"]
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
⚠️ **GOTCHA**: Budget values are in **account currency** — \`budget: 150\` means $150.00.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Step 4: Activate When Ready
|
|
131
|
+
|
|
132
|
+
After reviewing and customizing the copy:
|
|
133
|
+
|
|
134
|
+
\`\`\`json
|
|
135
|
+
{
|
|
136
|
+
"tool": "tiktok_bulk_update_status",
|
|
137
|
+
"params": {
|
|
138
|
+
"entityType": "${entityType}",
|
|
139
|
+
"advertiserId": "${advertiserId}",
|
|
140
|
+
"entityIds": ["{newEntityId}"],
|
|
141
|
+
"operationStatus": "ENABLE"
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
\`\`\`
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Common Patterns
|
|
149
|
+
|
|
150
|
+
### A/B Testing
|
|
151
|
+
|
|
152
|
+
1. Duplicate the ad group
|
|
153
|
+
2. Change targeting or bid on the copy
|
|
154
|
+
3. Enable both and compare via \`tiktok_get_report\`
|
|
155
|
+
|
|
156
|
+
### Scaling to New Geos
|
|
157
|
+
|
|
158
|
+
1. Duplicate a proven ad group
|
|
159
|
+
2. Update \`location_ids\` on the copy
|
|
160
|
+
3. Adjust budget for the new market
|
|
161
|
+
4. Enable
|
|
162
|
+
|
|
163
|
+
### Creative Testing
|
|
164
|
+
|
|
165
|
+
1. Duplicate an ad
|
|
166
|
+
2. Update \`ad_text\` or CTA on the copy
|
|
167
|
+
3. Run both ads in the same ad group
|
|
168
|
+
|
|
169
|
+
⚠️ **GOTCHA**: Video IDs are immutable — you cannot change the video on an existing ad. Create a new ad instead of duplicating if you want different video creative.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Verification
|
|
174
|
+
|
|
175
|
+
After duplication, verify the copy:
|
|
176
|
+
|
|
177
|
+
\`\`\`json
|
|
178
|
+
{
|
|
179
|
+
"tool": "tiktok_get_entity",
|
|
180
|
+
"params": {
|
|
181
|
+
"entityType": "${entityType}",
|
|
182
|
+
"advertiserId": "${advertiserId}",
|
|
183
|
+
"entityId": "{newEntityId}"
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
\`\`\`
|
|
187
|
+
|
|
188
|
+
## Success Criteria
|
|
189
|
+
|
|
190
|
+
- [ ] Source entity reviewed before duplication
|
|
191
|
+
- [ ] Copy created (check DISABLE status)
|
|
192
|
+
- [ ] Copy renamed to distinguish from original
|
|
193
|
+
- [ ] Desired changes applied (targeting, budget, creative)
|
|
194
|
+
- [ ] Copy verified via \`tiktok_get_entity\`
|
|
195
|
+
- [ ] Enabled only after review via \`tiktok_bulk_update_status\`
|
|
196
|
+
`;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=entity-duplication-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-duplication-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/entity-duplication-workflow.prompt.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,qCAAqC,GAAW;IAC3D,IAAI,EAAE,oCAAoC;IAC1C,WAAW,EACT,+JAA+J;IACjK,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,oDAAoD;YACjE,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,yCAAyC,CAAC,IAA6B;IACrF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,YAAY,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,gBAAgB,CAAC;IAE5D,OAAO;;iBAEQ,UAAU;eACZ,QAAQ;mBACJ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;qBAwBV,UAAU;uBACR,YAAY;mBAChB,QAAQ;;;;;;;;;;;;;;;qBAeN,UAAU;uBACR,YAAY;mBAChB,QAAQ;;4BAEC,UAAU,IAAI,QAAQ;;;;;;;;;;;;;;;;;;;;;;qBAsB7B,UAAU;uBACR,YAAY;;;;;;;;;;;;;;;;;uBAiBZ,YAAY;;;;;;;;;;;;;;;;;;;;;;;qBAuBd,UAAU;uBACR,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA0Cd,UAAU;uBACR,YAAY;;;;;;;;;;;;;;CAclC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const tiktokEntityUpdateWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getTiktokEntityUpdateWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=entity-update-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-update-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/entity-update-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AASjE,eAAO,MAAM,gCAAgC,EAAE,MAqB9C,CAAC;AAEF,wBAAgB,oCAAoC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAuK1F"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
export const tiktokEntityUpdateWorkflowPrompt = {
|
|
2
|
+
name: "tiktok_entity_update_workflow",
|
|
3
|
+
description: "Step-by-step guide for safely updating TikTok Ads entities — covers field updates vs status changes (separate endpoints), budget values in account currency, and verification.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "entityType",
|
|
7
|
+
description: "Entity type to update: campaign, adGroup, or ad",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "entityId",
|
|
12
|
+
description: "Numeric ID of the entity to update",
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "advertiserId",
|
|
17
|
+
description: "TikTok Advertiser ID",
|
|
18
|
+
required: true,
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
};
|
|
22
|
+
export function getTiktokEntityUpdateWorkflowMessage(args) {
|
|
23
|
+
const entityType = args?.entityType || "{entityType}";
|
|
24
|
+
const entityId = args?.entityId || "{entityId}";
|
|
25
|
+
const advertiserId = args?.advertiserId || "{advertiserId}";
|
|
26
|
+
return `# TikTok Ads Entity Update Workflow
|
|
27
|
+
|
|
28
|
+
Entity Type: \`${entityType}\`
|
|
29
|
+
Entity ID: \`${entityId}\`
|
|
30
|
+
Advertiser ID: \`${advertiserId}\`
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Step 1: Fetch Current State
|
|
35
|
+
|
|
36
|
+
Before updating, always read the entity's current configuration:
|
|
37
|
+
|
|
38
|
+
\`\`\`json
|
|
39
|
+
{
|
|
40
|
+
"tool": "tiktok_get_entity",
|
|
41
|
+
"params": {
|
|
42
|
+
"entityType": "${entityType}",
|
|
43
|
+
"advertiserId": "${advertiserId}",
|
|
44
|
+
"entityId": "${entityId}"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
\`\`\`
|
|
48
|
+
|
|
49
|
+
Review the current values. Save the current state for rollback reference.
|
|
50
|
+
|
|
51
|
+
**Resource reference:** Fetch \`entity-schema://tiktok/${entityType}\` for the full field schema and \`entity-examples://tiktok/${entityType}\` for common update patterns.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Step 2: Update Entity Fields
|
|
56
|
+
|
|
57
|
+
Use \`tiktok_update_entity\` for **field changes** (name, budget, bid, targeting):
|
|
58
|
+
|
|
59
|
+
### Campaign Updates
|
|
60
|
+
|
|
61
|
+
\`\`\`json
|
|
62
|
+
{
|
|
63
|
+
"tool": "tiktok_update_entity",
|
|
64
|
+
"params": {
|
|
65
|
+
"entityType": "campaign",
|
|
66
|
+
"advertiserId": "${advertiserId}",
|
|
67
|
+
"entityId": "${entityId}",
|
|
68
|
+
"data": {
|
|
69
|
+
"campaign_name": "Updated Campaign Name",
|
|
70
|
+
"budget": 200,
|
|
71
|
+
"budget_mode": "BUDGET_MODE_DAY"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
\`\`\`
|
|
76
|
+
|
|
77
|
+
### Ad Group Updates
|
|
78
|
+
|
|
79
|
+
\`\`\`json
|
|
80
|
+
{
|
|
81
|
+
"tool": "tiktok_update_entity",
|
|
82
|
+
"params": {
|
|
83
|
+
"entityType": "adGroup",
|
|
84
|
+
"advertiserId": "${advertiserId}",
|
|
85
|
+
"entityId": "${entityId}",
|
|
86
|
+
"data": {
|
|
87
|
+
"adgroup_name": "Updated Ad Group",
|
|
88
|
+
"budget": 100,
|
|
89
|
+
"bid_price": 0.8,
|
|
90
|
+
"age": ["AGE_25_34", "AGE_35_44"],
|
|
91
|
+
"gender": ["GENDER_UNLIMITED"],
|
|
92
|
+
"location_ids": ["US", "GB"]
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
\`\`\`
|
|
97
|
+
|
|
98
|
+
### Ad Updates
|
|
99
|
+
|
|
100
|
+
\`\`\`json
|
|
101
|
+
{
|
|
102
|
+
"tool": "tiktok_update_entity",
|
|
103
|
+
"params": {
|
|
104
|
+
"entityType": "ad",
|
|
105
|
+
"advertiserId": "${advertiserId}",
|
|
106
|
+
"entityId": "${entityId}",
|
|
107
|
+
"data": {
|
|
108
|
+
"ad_name": "Updated Ad Name",
|
|
109
|
+
"ad_text": "New ad copy (max 100 chars)",
|
|
110
|
+
"call_to_action": "SHOP_NOW",
|
|
111
|
+
"landing_page_url": "https://example.com/new-page"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Step 3: Update Status (Separate Endpoint)
|
|
120
|
+
|
|
121
|
+
⚠️ **CRITICAL GOTCHA**: TikTok uses a **separate endpoint** for status changes. Do NOT include \`operation_status\` in \`tiktok_update_entity\` — it won't work.
|
|
122
|
+
|
|
123
|
+
Use \`tiktok_bulk_update_status\` for all status changes:
|
|
124
|
+
|
|
125
|
+
\`\`\`json
|
|
126
|
+
{
|
|
127
|
+
"tool": "tiktok_bulk_update_status",
|
|
128
|
+
"params": {
|
|
129
|
+
"entityType": "${entityType}",
|
|
130
|
+
"advertiserId": "${advertiserId}",
|
|
131
|
+
"entityIds": ["${entityId}"],
|
|
132
|
+
"operationStatus": "ENABLE"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
Valid status values: \`"ENABLE"\`, \`"DISABLE"\`, \`"DELETE"\`
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Step 4: Verify Changes
|
|
142
|
+
|
|
143
|
+
After the update call succeeds, verify the changes:
|
|
144
|
+
|
|
145
|
+
\`\`\`json
|
|
146
|
+
{
|
|
147
|
+
"tool": "tiktok_get_entity",
|
|
148
|
+
"params": {
|
|
149
|
+
"entityType": "${entityType}",
|
|
150
|
+
"advertiserId": "${advertiserId}",
|
|
151
|
+
"entityId": "${entityId}"
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
\`\`\`
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Gotchas
|
|
159
|
+
|
|
160
|
+
- **Status changes use a different tool**: Never use \`tiktok_update_entity\` for enabling/disabling entities — use \`tiktok_bulk_update_status\`.
|
|
161
|
+
- **Budget values are in account currency**: \`budget: 100\` means $100.00 (not cents, not micros).
|
|
162
|
+
- **Targeting replaces on ad group**: When updating targeting fields on an ad group, include all targeting you want to keep.
|
|
163
|
+
- **Video IDs are immutable**: You cannot change the video on an existing ad. Delete and recreate instead.
|
|
164
|
+
- **Ad review re-triggered**: Updating ad copy or creative may trigger a new review cycle (24-48h).
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## Rollback
|
|
169
|
+
|
|
170
|
+
If an update causes issues, reverse it by sending the original values:
|
|
171
|
+
|
|
172
|
+
\`\`\`json
|
|
173
|
+
{
|
|
174
|
+
"tool": "tiktok_update_entity",
|
|
175
|
+
"params": {
|
|
176
|
+
"entityType": "${entityType}",
|
|
177
|
+
"advertiserId": "${advertiserId}",
|
|
178
|
+
"entityId": "${entityId}",
|
|
179
|
+
"data": {
|
|
180
|
+
"field_that_was_changed": "{original_value}"
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
\`\`\`
|
|
185
|
+
|
|
186
|
+
Report the rollback hint (original values) whenever you make a change so the user can revert if needed.
|
|
187
|
+
`;
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=entity-update-workflow.prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-update-workflow.prompt.js","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/entity-update-workflow.prompt.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,gCAAgC,GAAW;IACtD,IAAI,EAAE,+BAA+B;IACrC,WAAW,EACT,gLAAgL;IAClL,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,oCAAoC,CAAC,IAA6B;IAChF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,YAAY,CAAC;IAChD,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAI,gBAAgB,CAAC;IAE5D,OAAO;;iBAEQ,UAAU;eACZ,QAAQ;mBACJ,YAAY;;;;;;;;;;;;qBAYV,UAAU;uBACR,YAAY;mBAChB,QAAQ;;;;;;;yDAO8B,UAAU,+DAA+D,UAAU;;;;;;;;;;;;;;;uBAerH,YAAY;mBAChB,QAAQ;;;;;;;;;;;;;;;;;uBAiBJ,YAAY;mBAChB,QAAQ;;;;;;;;;;;;;;;;;;;;uBAoBJ,YAAY;mBAChB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;qBAuBN,UAAU;uBACR,YAAY;qBACd,QAAQ;;;;;;;;;;;;;;;;;;qBAkBR,UAAU;uBACR,YAAY;mBAChB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;qBAyBN,UAAU;uBACR,YAAY;mBAChB,QAAQ;;;;;;;;;CAS1B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const tiktokReportingWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getTiktokReportingWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=reporting-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reporting-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/reporting-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjE,eAAO,MAAM,6BAA6B,EAAE,MAgB3C,CAAC;AAEF,wBAAgB,iCAAiC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA6GvF"}
|