@cesteral/linkedin-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 +304 -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/linkedin-auth-adapter.d.ts +38 -0
- package/dist/auth/linkedin-auth-adapter.d.ts.map +1 -0
- package/dist/auth/linkedin-auth-adapter.js +110 -0
- package/dist/auth/linkedin-auth-adapter.js.map +1 -0
- package/dist/auth/linkedin-auth-strategy.d.ts +14 -0
- package/dist/auth/linkedin-auth-strategy.d.ts.map +1 -0
- package/dist/auth/linkedin-auth-strategy.js +50 -0
- package/dist/auth/linkedin-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/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts +4 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.d.ts.map +1 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.js +108 -0
- package/dist/mcp-server/prompts/definitions/analytics-reporting-workflow.prompt.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 +177 -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 +171 -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 +109 -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 +213 -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 +151 -0
- package/dist/mcp-server/prompts/definitions/entity-update-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 +217 -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 +98 -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 +91 -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/analytics-reference.resource.d.ts +3 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.d.ts.map +1 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.js +162 -0
- package/dist/mcp-server/resources/definitions/analytics-reference.resource.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 +164 -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 +144 -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 +127 -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 +54 -0
- package/dist/mcp-server/resources/definitions/index.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 +122 -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 +128 -0
- package/dist/mcp-server/server.js.map +1 -0
- package/dist/mcp-server/tools/definitions/adjust-bids.tool.d.ts +213 -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 +174 -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 +128 -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 +95 -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 +183 -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 +122 -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 +140 -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 +109 -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 +117 -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/delete-entity.tool.d.ts +93 -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 +100 -0
- package/dist/mcp-server/tools/definitions/delete-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/duplicate-entity.tool.d.ts +95 -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 +89 -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 +75 -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 +68 -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 +75 -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 +71 -0
- package/dist/mcp-server/tools/definitions/get-ad-previews.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts +223 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js +152 -0
- package/dist/mcp-server/tools/definitions/get-analytics-breakdowns.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts +325 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.js +154 -0
- package/dist/mcp-server/tools/definitions/get-analytics.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts +95 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js +90 -0
- package/dist/mcp-server/tools/definitions/get-delivery-forecast.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.d.ts +75 -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 +75 -0
- package/dist/mcp-server/tools/definitions/get-entity.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.d.ts +81 -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 +76 -0
- package/dist/mcp-server/tools/definitions/get-targeting-options.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/index.d.ts +23 -0
- package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/index.js +69 -0
- package/dist/mcp-server/tools/definitions/index.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts +141 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.d.ts.map +1 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js +84 -0
- package/dist/mcp-server/tools/definitions/list-ad-accounts.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/list-entities.tool.d.ts +165 -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/search-targeting.tool.d.ts +102 -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 +98 -0
- package/dist/mcp-server/tools/definitions/search-targeting.tool.js.map +1 -0
- package/dist/mcp-server/tools/definitions/update-entity.tool.d.ts +104 -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 +88 -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 +75 -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 +99 -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 +69 -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 +98 -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 +168 -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 +200 -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 +13 -0
- package/dist/mcp-server/tools/utils/entity-mapping.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js +68 -0
- package/dist/mcp-server/tools/utils/entity-mapping.js.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts +12 -0
- package/dist/mcp-server/tools/utils/media-types.d.ts.map +1 -0
- package/dist/mcp-server/tools/utils/media-types.js +2 -0
- package/dist/mcp-server/tools/utils/media-types.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 +91 -0
- package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
- package/dist/services/linkedin/linkedin-http-client.d.ts +20 -0
- package/dist/services/linkedin/linkedin-http-client.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-http-client.js +147 -0
- package/dist/services/linkedin/linkedin-http-client.js.map +1 -0
- package/dist/services/linkedin/linkedin-reporting-service.d.ts +26 -0
- package/dist/services/linkedin/linkedin-reporting-service.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-reporting-service.js +69 -0
- package/dist/services/linkedin/linkedin-reporting-service.js.map +1 -0
- package/dist/services/linkedin/linkedin-service.d.ts +84 -0
- package/dist/services/linkedin/linkedin-service.d.ts.map +1 -0
- package/dist/services/linkedin/linkedin-service.js +195 -0
- package/dist/services/linkedin/linkedin-service.js.map +1 -0
- package/dist/services/linkedin/types.d.ts +166 -0
- package/dist/services/linkedin/types.d.ts.map +1 -0
- package/dist/services/linkedin/types.js +31 -0
- package/dist/services/linkedin/types.js.map +1 -0
- package/dist/services/session-services.d.ts +18 -0
- package/dist/services/session-services.d.ts.map +1 -0
- package/dist/services/session-services.js +16 -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 +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 linkedInEntityDuplicationWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getLinkedInEntityDuplicationWorkflowMessage(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,uCAAuC,EAAE,MAgBrD,CAAC;AAEF,wBAAgB,2CAA2C,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAoMjG"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
export const linkedInEntityDuplicationWorkflowPrompt = {
|
|
2
|
+
name: "linkedin_entity_duplication_workflow",
|
|
3
|
+
description: "Step-by-step guide for duplicating LinkedIn Ads campaign groups, campaigns, and creatives using linkedin_duplicate_entity — covers A/B testing, scaling, and common patterns.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "entityType",
|
|
7
|
+
description: "Entity type to duplicate: campaignGroup, campaign, or creative",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "entityUrn",
|
|
12
|
+
description: "URN of the entity to duplicate",
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getLinkedInEntityDuplicationWorkflowMessage(args) {
|
|
18
|
+
const entityType = args?.entityType || "{entityType}";
|
|
19
|
+
const entityUrn = args?.entityUrn || "{entityUrn}";
|
|
20
|
+
return `# LinkedIn Entity Duplication Workflow
|
|
21
|
+
|
|
22
|
+
Entity Type: \`${entityType}\`
|
|
23
|
+
Entity URN: \`${entityUrn}\`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Overview
|
|
28
|
+
|
|
29
|
+
\`linkedin_duplicate_entity\` creates a copy of a campaign group, campaign, or creative. The copy includes child entities and all settings.
|
|
30
|
+
|
|
31
|
+
| What Gets Copied | Details |
|
|
32
|
+
|------------------|---------|
|
|
33
|
+
| **Campaign Group** | All campaigns and their creatives |
|
|
34
|
+
| **Campaign** | All creatives, targeting, and budget settings |
|
|
35
|
+
| **Creative** | Creative reference and tracking settings |
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Step 1: Review the Source Entity
|
|
40
|
+
|
|
41
|
+
Before duplicating, inspect the entity you're copying:
|
|
42
|
+
|
|
43
|
+
\`\`\`json
|
|
44
|
+
{
|
|
45
|
+
"tool": "linkedin_get_entity",
|
|
46
|
+
"params": {
|
|
47
|
+
"entityType": "${entityType}",
|
|
48
|
+
"entityUrn": "${entityUrn}"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
\`\`\`
|
|
52
|
+
|
|
53
|
+
Confirm this is the right entity and note its current state.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Step 2: Duplicate the Entity
|
|
58
|
+
|
|
59
|
+
\`\`\`json
|
|
60
|
+
{
|
|
61
|
+
"tool": "linkedin_duplicate_entity",
|
|
62
|
+
"params": {
|
|
63
|
+
"entityType": "${entityType}",
|
|
64
|
+
"entityUrn": "${entityUrn}",
|
|
65
|
+
"options": {
|
|
66
|
+
"copyCreatives": true
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
\`\`\`
|
|
71
|
+
|
|
72
|
+
The response includes the new entity URN.
|
|
73
|
+
|
|
74
|
+
⚠️ **GOTCHA**: Duplicated entities are created in **DRAFT** status by default. Review before activating.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Step 3: Customize the Copy
|
|
79
|
+
|
|
80
|
+
Use the returned URN to modify the copy:
|
|
81
|
+
|
|
82
|
+
### Update Name
|
|
83
|
+
|
|
84
|
+
\`\`\`json
|
|
85
|
+
{
|
|
86
|
+
"tool": "linkedin_update_entity",
|
|
87
|
+
"params": {
|
|
88
|
+
"entityType": "${entityType}",
|
|
89
|
+
"entityUrn": "{newEntityUrn}",
|
|
90
|
+
"data": {
|
|
91
|
+
"name": "Campaign B - Senior Tech Leaders"
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
\`\`\`
|
|
96
|
+
|
|
97
|
+
### Update Targeting (Campaign)
|
|
98
|
+
|
|
99
|
+
\`\`\`json
|
|
100
|
+
{
|
|
101
|
+
"tool": "linkedin_update_entity",
|
|
102
|
+
"params": {
|
|
103
|
+
"entityType": "campaign",
|
|
104
|
+
"entityUrn": "{newCampaignUrn}",
|
|
105
|
+
"data": {
|
|
106
|
+
"targetingCriteria": {
|
|
107
|
+
"include": {
|
|
108
|
+
"and": [
|
|
109
|
+
{
|
|
110
|
+
"or": {
|
|
111
|
+
"urn:li:adTargetingFacet:geos": ["urn:li:geo:101282230"]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
\`\`\`
|
|
121
|
+
|
|
122
|
+
### Update Budget
|
|
123
|
+
|
|
124
|
+
\`\`\`json
|
|
125
|
+
{
|
|
126
|
+
"tool": "linkedin_update_entity",
|
|
127
|
+
"params": {
|
|
128
|
+
"entityType": "campaign",
|
|
129
|
+
"entityUrn": "{newCampaignUrn}",
|
|
130
|
+
"data": {
|
|
131
|
+
"dailyBudget": { "amount": "200.00", "currencyCode": "USD" }
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
⚠️ **GOTCHA**: Budget is a CurrencyAmount object. The \`amount\` field is a string (e.g., \`"200.00"\`), not a number.
|
|
138
|
+
|
|
139
|
+
⚠️ **GOTCHA**: Targeting updates **replace entirely**. Always send the complete targetingCriteria object.
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Step 4: Activate When Ready
|
|
144
|
+
|
|
145
|
+
After reviewing and customizing the copy:
|
|
146
|
+
|
|
147
|
+
\`\`\`json
|
|
148
|
+
{
|
|
149
|
+
"tool": "linkedin_bulk_update_status",
|
|
150
|
+
"params": {
|
|
151
|
+
"entityType": "${entityType}",
|
|
152
|
+
"entityUrns": ["{newEntityUrn}"],
|
|
153
|
+
"status": "ACTIVE"
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Common Patterns
|
|
161
|
+
|
|
162
|
+
### A/B Testing (Split Test)
|
|
163
|
+
|
|
164
|
+
1. Duplicate the campaign
|
|
165
|
+
2. Change one variable on the copy (targeting, creative, bid)
|
|
166
|
+
3. Activate both and compare via \`linkedin_get_analytics\`
|
|
167
|
+
|
|
168
|
+
\`\`\`
|
|
169
|
+
Original: "Brand Campaign - Tech Leaders" (targeting: senior engineers)
|
|
170
|
+
Copy: "Brand Campaign - Marketing Leaders" (targeting: marketing managers)
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
### Scaling to New Geos
|
|
174
|
+
|
|
175
|
+
1. Duplicate a proven campaign
|
|
176
|
+
2. Update geo targeting on the copy
|
|
177
|
+
3. Adjust budget for the new market
|
|
178
|
+
4. Activate
|
|
179
|
+
|
|
180
|
+
### Template Campaigns
|
|
181
|
+
|
|
182
|
+
1. Create a "template" campaign with desired settings (DRAFT)
|
|
183
|
+
2. Duplicate it for each new client/product
|
|
184
|
+
3. Update names, budgets, targeting on each copy
|
|
185
|
+
4. Activate when ready
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Verification
|
|
190
|
+
|
|
191
|
+
After duplication, verify the copy:
|
|
192
|
+
|
|
193
|
+
\`\`\`json
|
|
194
|
+
{
|
|
195
|
+
"tool": "linkedin_get_entity",
|
|
196
|
+
"params": {
|
|
197
|
+
"entityType": "${entityType}",
|
|
198
|
+
"entityUrn": "{newEntityUrn}"
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
\`\`\`
|
|
202
|
+
|
|
203
|
+
## Success Criteria
|
|
204
|
+
|
|
205
|
+
- [ ] Source entity reviewed before duplication
|
|
206
|
+
- [ ] Copy created (check DRAFT status)
|
|
207
|
+
- [ ] Copy renamed to distinguish from original
|
|
208
|
+
- [ ] Desired changes applied (targeting, budget, creative)
|
|
209
|
+
- [ ] Copy verified via \`linkedin_get_entity\`
|
|
210
|
+
- [ ] Activated only after review
|
|
211
|
+
`;
|
|
212
|
+
}
|
|
213
|
+
//# 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,uCAAuC,GAAW;IAC7D,IAAI,EAAE,sCAAsC;IAC5C,WAAW,EACT,+KAA+K;IACjL,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,gEAAgE;YAC7E,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,gCAAgC;YAC7C,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,2CAA2C,CAAC,IAA6B;IACvF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa,CAAC;IAEnD,OAAO;;iBAEQ,UAAU;gBACX,SAAS;;;;;;;;;;;;;;;;;;;;;;;;qBAwBJ,UAAU;oBACX,SAAS;;;;;;;;;;;;;;;qBAeR,UAAU;oBACX,SAAS;;;;;;;;;;;;;;;;;;;;;;;;qBAwBR,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA+DV,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA8CV,UAAU;;;;;;;;;;;;;;CAc9B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const linkedInEntityUpdateWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getLinkedInEntityUpdateWorkflowMessage(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;AAQjE,eAAO,MAAM,kCAAkC,EAAE,MAgBhD,CAAC;AAEF,wBAAgB,sCAAsC,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAsI5F"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
export const linkedInEntityUpdateWorkflowPrompt = {
|
|
2
|
+
name: "linkedin_entity_update_workflow",
|
|
3
|
+
description: "Step-by-step guide for safely updating LinkedIn Ads entities using PATCH semantics with URN-based IDs. Covers campaign groups, campaigns, creatives, and conversion rules.",
|
|
4
|
+
arguments: [
|
|
5
|
+
{
|
|
6
|
+
name: "entityType",
|
|
7
|
+
description: "Entity type to update: campaignGroup, campaign, creative, or conversionRule",
|
|
8
|
+
required: true,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: "entityUrn",
|
|
12
|
+
description: "URN of the entity to update (e.g., urn:li:sponsoredCampaign:123)",
|
|
13
|
+
required: true,
|
|
14
|
+
},
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
export function getLinkedInEntityUpdateWorkflowMessage(args) {
|
|
18
|
+
const entityType = args?.entityType || "{entityType}";
|
|
19
|
+
const entityUrn = args?.entityUrn || "{entityUrn}";
|
|
20
|
+
return `# LinkedIn Ads Entity Update Workflow
|
|
21
|
+
|
|
22
|
+
Entity Type: \`${entityType}\`
|
|
23
|
+
Entity URN: \`${entityUrn}\`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Step 1: Fetch Current State
|
|
28
|
+
|
|
29
|
+
Before updating, always read the entity's current configuration:
|
|
30
|
+
|
|
31
|
+
\`\`\`json
|
|
32
|
+
{
|
|
33
|
+
"tool": "linkedin_get_entity",
|
|
34
|
+
"params": {
|
|
35
|
+
"entityType": "${entityType}",
|
|
36
|
+
"entityUrn": "${entityUrn}"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
\`\`\`
|
|
40
|
+
|
|
41
|
+
Review the current values. Save the current state for rollback reference.
|
|
42
|
+
|
|
43
|
+
**Resource reference:** Fetch \`entity-schema://linkedin/${entityType}\` for the full field schema and \`entity-examples://linkedin/${entityType}\` for common update patterns.
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Step 2: Build Update Payload
|
|
48
|
+
|
|
49
|
+
LinkedIn uses PATCH semantics — only include the fields you want to change. Unspecified fields remain unchanged.
|
|
50
|
+
|
|
51
|
+
### Campaign Group Updates
|
|
52
|
+
|
|
53
|
+
\`\`\`json
|
|
54
|
+
{
|
|
55
|
+
"tool": "linkedin_update_entity",
|
|
56
|
+
"params": {
|
|
57
|
+
"entityType": "campaignGroup",
|
|
58
|
+
"entityUrn": "${entityUrn}",
|
|
59
|
+
"data": {
|
|
60
|
+
"name": "Updated Campaign Group Name",
|
|
61
|
+
"status": "ACTIVE",
|
|
62
|
+
"totalBudget": { "amount": "15000.00", "currencyCode": "USD" }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
### Campaign Updates
|
|
69
|
+
|
|
70
|
+
\`\`\`json
|
|
71
|
+
{
|
|
72
|
+
"tool": "linkedin_update_entity",
|
|
73
|
+
"params": {
|
|
74
|
+
"entityType": "campaign",
|
|
75
|
+
"entityUrn": "${entityUrn}",
|
|
76
|
+
"data": {
|
|
77
|
+
"dailyBudget": { "amount": "150.00", "currencyCode": "USD" },
|
|
78
|
+
"unitCost": { "amount": "15.00", "currencyCode": "USD" },
|
|
79
|
+
"status": "ACTIVE"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
\`\`\`
|
|
84
|
+
|
|
85
|
+
### Creative Updates
|
|
86
|
+
|
|
87
|
+
\`\`\`json
|
|
88
|
+
{
|
|
89
|
+
"tool": "linkedin_update_entity",
|
|
90
|
+
"params": {
|
|
91
|
+
"entityType": "creative",
|
|
92
|
+
"entityUrn": "${entityUrn}",
|
|
93
|
+
"data": {
|
|
94
|
+
"status": "ACTIVE"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
\`\`\`
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Step 3: Execute and Verify
|
|
103
|
+
|
|
104
|
+
After the update call succeeds, verify the changes:
|
|
105
|
+
|
|
106
|
+
\`\`\`json
|
|
107
|
+
{
|
|
108
|
+
"tool": "linkedin_get_entity",
|
|
109
|
+
"params": {
|
|
110
|
+
"entityType": "${entityType}",
|
|
111
|
+
"entityUrn": "${entityUrn}"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
\`\`\`
|
|
115
|
+
|
|
116
|
+
Compare the returned values with what you set in Step 2.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Gotchas
|
|
121
|
+
|
|
122
|
+
- **URN format required**: All entity IDs must be full URNs (e.g., \`urn:li:sponsoredCampaign:123\`), not bare numeric IDs.
|
|
123
|
+
- **Budget format**: Use CurrencyAmount objects: \`{ "amount": "100.00", "currencyCode": "USD" }\`. The amount is a string, not a number.
|
|
124
|
+
- **Targeting replaces entirely**: When updating \`targetingCriteria\`, the entire object is replaced. Always include all criteria you want to keep.
|
|
125
|
+
- **Status values**: \`ACTIVE\`, \`PAUSED\`, \`ARCHIVED\`, \`DRAFT\`. Archiving is irreversible.
|
|
126
|
+
- **Creative review lag**: Status changes to creatives may trigger re-review (24-48h).
|
|
127
|
+
- **PATCH semantics**: Only send fields you want to change. Unspecified fields are preserved.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Rollback
|
|
132
|
+
|
|
133
|
+
If an update causes issues, reverse it by sending the original values:
|
|
134
|
+
|
|
135
|
+
\`\`\`json
|
|
136
|
+
{
|
|
137
|
+
"tool": "linkedin_update_entity",
|
|
138
|
+
"params": {
|
|
139
|
+
"entityType": "${entityType}",
|
|
140
|
+
"entityUrn": "${entityUrn}",
|
|
141
|
+
"data": {
|
|
142
|
+
"field_that_was_changed": "{original_value}"
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
Report the rollback hint (original values) whenever you make a change so the user can revert if needed.
|
|
149
|
+
`;
|
|
150
|
+
}
|
|
151
|
+
//# 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":"AAWA,MAAM,CAAC,MAAM,kCAAkC,GAAW;IACxD,IAAI,EAAE,iCAAiC;IACvC,WAAW,EACT,4KAA4K;IAC9K,SAAS,EAAE;QACT;YACE,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,kEAAkE;YAC/E,QAAQ,EAAE,IAAI;SACf;KACF;CACF,CAAC;AAEF,MAAM,UAAU,sCAAsC,CAAC,IAA6B;IAClF,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC;IACtD,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,aAAa,CAAC;IAEnD,OAAO;;iBAEQ,UAAU;gBACX,SAAS;;;;;;;;;;;;qBAYJ,UAAU;oBACX,SAAS;;;;;;;2DAO8B,UAAU,iEAAiE,UAAU;;;;;;;;;;;;;;;oBAe5H,SAAS;;;;;;;;;;;;;;;;;oBAiBT,SAAS;;;;;;;;;;;;;;;;;oBAiBT,SAAS;;;;;;;;;;;;;;;;;;qBAkBR,UAAU;oBACX,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA4BR,UAAU;oBACX,SAAS;;;;;;;;;CAS5B,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Prompt } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
export declare const linkedInTargetingDiscoveryWorkflowPrompt: Prompt;
|
|
3
|
+
export declare function getLinkedInTargetingDiscoveryWorkflowMessage(args?: Record<string, string>): string;
|
|
4
|
+
//# sourceMappingURL=targeting-discovery-workflow.prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"targeting-discovery-workflow.prompt.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/prompts/definitions/targeting-discovery-workflow.prompt.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAQjE,eAAO,MAAM,wCAAwC,EAAE,MAiBtD,CAAC;AAEF,wBAAgB,4CAA4C,CAC1D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAwMR"}
|