@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,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { RequestContext, McpTextContent } from "@cesteral/shared";
|
|
3
|
+
import type { SdkContext, ToolDefinition } from "@cesteral/shared";
|
|
4
|
+
export declare const GetCampaignDeliveryInputSchema: z.ZodObject<{
|
|
5
|
+
advertiserId: z.ZodString;
|
|
6
|
+
campaignId: z.ZodString;
|
|
7
|
+
startDate: z.ZodString;
|
|
8
|
+
endDate: z.ZodString;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
advertiserId: string;
|
|
11
|
+
campaignId: string;
|
|
12
|
+
startDate: string;
|
|
13
|
+
endDate: string;
|
|
14
|
+
}, {
|
|
15
|
+
advertiserId: string;
|
|
16
|
+
campaignId: string;
|
|
17
|
+
startDate: string;
|
|
18
|
+
endDate: string;
|
|
19
|
+
}>;
|
|
20
|
+
export declare const GetCampaignDeliveryOutputSchema: z.ZodObject<{
|
|
21
|
+
advertiserId: z.ZodString;
|
|
22
|
+
campaignId: z.ZodString;
|
|
23
|
+
dateRange: z.ZodObject<{
|
|
24
|
+
startDate: z.ZodString;
|
|
25
|
+
endDate: z.ZodString;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
startDate: string;
|
|
28
|
+
endDate: string;
|
|
29
|
+
}, {
|
|
30
|
+
startDate: string;
|
|
31
|
+
endDate: string;
|
|
32
|
+
}>;
|
|
33
|
+
metrics: z.ZodObject<{
|
|
34
|
+
impressions: z.ZodNumber;
|
|
35
|
+
clicks: z.ZodNumber;
|
|
36
|
+
spend: z.ZodNumber;
|
|
37
|
+
conversions: z.ZodNumber;
|
|
38
|
+
revenue: z.ZodNumber;
|
|
39
|
+
}, "strip", z.ZodTypeAny, {
|
|
40
|
+
impressions: number;
|
|
41
|
+
clicks: number;
|
|
42
|
+
spend: number;
|
|
43
|
+
conversions: number;
|
|
44
|
+
revenue: number;
|
|
45
|
+
}, {
|
|
46
|
+
impressions: number;
|
|
47
|
+
clicks: number;
|
|
48
|
+
spend: number;
|
|
49
|
+
conversions: number;
|
|
50
|
+
revenue: number;
|
|
51
|
+
}>;
|
|
52
|
+
timestamp: z.ZodString;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
advertiserId: string;
|
|
55
|
+
metrics: {
|
|
56
|
+
impressions: number;
|
|
57
|
+
clicks: number;
|
|
58
|
+
spend: number;
|
|
59
|
+
conversions: number;
|
|
60
|
+
revenue: number;
|
|
61
|
+
};
|
|
62
|
+
campaignId: string;
|
|
63
|
+
dateRange: {
|
|
64
|
+
startDate: string;
|
|
65
|
+
endDate: string;
|
|
66
|
+
};
|
|
67
|
+
timestamp: string;
|
|
68
|
+
}, {
|
|
69
|
+
advertiserId: string;
|
|
70
|
+
metrics: {
|
|
71
|
+
impressions: number;
|
|
72
|
+
clicks: number;
|
|
73
|
+
spend: number;
|
|
74
|
+
conversions: number;
|
|
75
|
+
revenue: number;
|
|
76
|
+
};
|
|
77
|
+
campaignId: string;
|
|
78
|
+
dateRange: {
|
|
79
|
+
startDate: string;
|
|
80
|
+
endDate: string;
|
|
81
|
+
};
|
|
82
|
+
timestamp: string;
|
|
83
|
+
}>;
|
|
84
|
+
export type GetCampaignDeliveryInput = z.infer<typeof GetCampaignDeliveryInputSchema>;
|
|
85
|
+
export type GetCampaignDeliveryOutput = z.infer<typeof GetCampaignDeliveryOutputSchema>;
|
|
86
|
+
export declare function getCampaignDeliveryLogic(input: GetCampaignDeliveryInput, _context: RequestContext, sdkContext?: SdkContext): Promise<GetCampaignDeliveryOutput>;
|
|
87
|
+
export declare function getCampaignDeliveryResponseFormatter(result: GetCampaignDeliveryOutput, input: GetCampaignDeliveryInput): McpTextContent[];
|
|
88
|
+
export declare const getCampaignDeliveryTool: ToolDefinition<typeof GetCampaignDeliveryInputSchema, typeof GetCampaignDeliveryOutputSchema>;
|
|
89
|
+
//# sourceMappingURL=get-campaign-delivery.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-campaign-delivery.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-campaign-delivery.tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAWnE,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;EAaqB,CAAC;AAKjE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBG,CAAC;AAEhD,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACtF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAKxF,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,wBAAwB,EAC/B,QAAQ,EAAE,cAAc,EACxB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,yBAAyB,CAAC,CA4BpC;AAOD,wBAAgB,oCAAoC,CAClD,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,wBAAwB,GAC9B,cAAc,EAAE,CAqBlB;AAKD,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAClD,OAAO,8BAA8B,EACrC,OAAO,+BAA+B,CA4CvC,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { resolveSessionServices } from "../utils/resolve-session.js";
|
|
3
|
+
import { calculateCTR, calculateCPM, formatMetricValue } from "../../../utils/metrics.js";
|
|
4
|
+
const TOOL_NAME = "dbm_get_campaign_delivery";
|
|
5
|
+
const TOOL_TITLE = "Get Campaign Delivery";
|
|
6
|
+
const TOOL_DESCRIPTION = "Fetch DV360 delivery metrics (impressions, clicks, spend, conversions) for a campaign within a date range via Bid Manager API";
|
|
7
|
+
export const GetCampaignDeliveryInputSchema = z
|
|
8
|
+
.object({
|
|
9
|
+
advertiserId: z.string().min(1).describe("DV360 Advertiser ID"),
|
|
10
|
+
campaignId: z.string().min(1).describe("DV360 Campaign ID to fetch delivery metrics for"),
|
|
11
|
+
startDate: z
|
|
12
|
+
.string()
|
|
13
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
14
|
+
.describe("Start date in YYYY-MM-DD format"),
|
|
15
|
+
endDate: z
|
|
16
|
+
.string()
|
|
17
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
18
|
+
.describe("End date in YYYY-MM-DD format"),
|
|
19
|
+
})
|
|
20
|
+
.describe("Parameters for fetching campaign delivery metrics");
|
|
21
|
+
export const GetCampaignDeliveryOutputSchema = z
|
|
22
|
+
.object({
|
|
23
|
+
advertiserId: z.string(),
|
|
24
|
+
campaignId: z.string(),
|
|
25
|
+
dateRange: z.object({
|
|
26
|
+
startDate: z.string(),
|
|
27
|
+
endDate: z.string(),
|
|
28
|
+
}),
|
|
29
|
+
metrics: z.object({
|
|
30
|
+
impressions: z.number(),
|
|
31
|
+
clicks: z.number(),
|
|
32
|
+
spend: z.number(),
|
|
33
|
+
conversions: z.number(),
|
|
34
|
+
revenue: z.number(),
|
|
35
|
+
}),
|
|
36
|
+
timestamp: z.string().datetime(),
|
|
37
|
+
})
|
|
38
|
+
.describe("Campaign delivery metrics result");
|
|
39
|
+
export async function getCampaignDeliveryLogic(input, _context, sdkContext) {
|
|
40
|
+
const { bidManagerService } = resolveSessionServices(sdkContext);
|
|
41
|
+
const metrics = await bidManagerService.getDeliveryMetrics({
|
|
42
|
+
advertiserId: input.advertiserId,
|
|
43
|
+
campaignId: input.campaignId,
|
|
44
|
+
startDate: input.startDate,
|
|
45
|
+
endDate: input.endDate,
|
|
46
|
+
});
|
|
47
|
+
return {
|
|
48
|
+
advertiserId: input.advertiserId,
|
|
49
|
+
campaignId: input.campaignId,
|
|
50
|
+
dateRange: {
|
|
51
|
+
startDate: input.startDate,
|
|
52
|
+
endDate: input.endDate,
|
|
53
|
+
},
|
|
54
|
+
metrics: {
|
|
55
|
+
impressions: metrics.impressions,
|
|
56
|
+
clicks: metrics.clicks,
|
|
57
|
+
spend: metrics.spend,
|
|
58
|
+
conversions: metrics.conversions,
|
|
59
|
+
revenue: metrics.revenue,
|
|
60
|
+
},
|
|
61
|
+
timestamp: new Date().toISOString(),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
export function getCampaignDeliveryResponseFormatter(result, input) {
|
|
65
|
+
const ctr = calculateCTR(result.metrics.clicks, result.metrics.impressions);
|
|
66
|
+
const cpm = calculateCPM(result.metrics.spend, result.metrics.impressions);
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
type: "text",
|
|
70
|
+
text: `Campaign ${input.campaignId} Delivery (${input.startDate} to ${input.endDate}):
|
|
71
|
+
|
|
72
|
+
Delivery Metrics:
|
|
73
|
+
- Impressions: ${result.metrics.impressions.toLocaleString()}
|
|
74
|
+
- Clicks: ${result.metrics.clicks.toLocaleString()}
|
|
75
|
+
- CTR: ${formatMetricValue("ctr", ctr)}
|
|
76
|
+
- Spend: $${result.metrics.spend.toFixed(2)}
|
|
77
|
+
- CPM: ${formatMetricValue("cpm", cpm)}
|
|
78
|
+
- Conversions: ${result.metrics.conversions}
|
|
79
|
+
- Revenue: $${result.metrics.revenue.toFixed(2)}
|
|
80
|
+
`,
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
export const getCampaignDeliveryTool = {
|
|
85
|
+
name: TOOL_NAME,
|
|
86
|
+
title: TOOL_TITLE,
|
|
87
|
+
description: TOOL_DESCRIPTION,
|
|
88
|
+
inputSchema: GetCampaignDeliveryInputSchema,
|
|
89
|
+
outputSchema: GetCampaignDeliveryOutputSchema,
|
|
90
|
+
annotations: {
|
|
91
|
+
readOnlyHint: true,
|
|
92
|
+
destructiveHint: false,
|
|
93
|
+
openWorldHint: false,
|
|
94
|
+
idempotentHint: true,
|
|
95
|
+
},
|
|
96
|
+
inputExamples: [
|
|
97
|
+
{
|
|
98
|
+
label: "Fetch last month's delivery for a campaign",
|
|
99
|
+
input: {
|
|
100
|
+
advertiserId: "1234567",
|
|
101
|
+
campaignId: "9876543",
|
|
102
|
+
startDate: "2026-01-01",
|
|
103
|
+
endDate: "2026-01-31",
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
label: "Fetch delivery for a short campaign burst",
|
|
108
|
+
input: {
|
|
109
|
+
advertiserId: "7654321",
|
|
110
|
+
campaignId: "1122334",
|
|
111
|
+
startDate: "2026-02-10",
|
|
112
|
+
endDate: "2026-02-17",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
label: "Fetch Q4 delivery for a large advertiser campaign",
|
|
117
|
+
input: {
|
|
118
|
+
advertiserId: "9988776",
|
|
119
|
+
campaignId: "5544332",
|
|
120
|
+
startDate: "2025-10-01",
|
|
121
|
+
endDate: "2025-12-31",
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
logic: getCampaignDeliveryLogic,
|
|
126
|
+
responseFormatter: getCampaignDeliveryResponseFormatter,
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=get-campaign-delivery.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-campaign-delivery.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-campaign-delivery.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { RequestContext, McpTextContent } from "@cesteral/shared";
|
|
3
|
+
import type { SdkContext, ToolDefinition } from "@cesteral/shared";
|
|
4
|
+
export declare const GetHistoricalMetricsInputSchema: z.ZodObject<{
|
|
5
|
+
advertiserId: z.ZodString;
|
|
6
|
+
campaignId: z.ZodString;
|
|
7
|
+
startDate: z.ZodString;
|
|
8
|
+
endDate: z.ZodString;
|
|
9
|
+
granularity: z.ZodDefault<z.ZodEnum<["daily", "weekly", "monthly"]>>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
advertiserId: string;
|
|
12
|
+
campaignId: string;
|
|
13
|
+
startDate: string;
|
|
14
|
+
endDate: string;
|
|
15
|
+
granularity: "daily" | "weekly" | "monthly";
|
|
16
|
+
}, {
|
|
17
|
+
advertiserId: string;
|
|
18
|
+
campaignId: string;
|
|
19
|
+
startDate: string;
|
|
20
|
+
endDate: string;
|
|
21
|
+
granularity?: "daily" | "weekly" | "monthly" | undefined;
|
|
22
|
+
}>;
|
|
23
|
+
export declare const GetHistoricalMetricsOutputSchema: z.ZodObject<{
|
|
24
|
+
advertiserId: z.ZodString;
|
|
25
|
+
campaignId: z.ZodString;
|
|
26
|
+
dateRange: z.ZodObject<{
|
|
27
|
+
startDate: z.ZodString;
|
|
28
|
+
endDate: z.ZodString;
|
|
29
|
+
}, "strip", z.ZodTypeAny, {
|
|
30
|
+
startDate: string;
|
|
31
|
+
endDate: string;
|
|
32
|
+
}, {
|
|
33
|
+
startDate: string;
|
|
34
|
+
endDate: string;
|
|
35
|
+
}>;
|
|
36
|
+
granularity: z.ZodEnum<["daily", "weekly", "monthly"]>;
|
|
37
|
+
timeSeries: z.ZodArray<z.ZodObject<{
|
|
38
|
+
date: z.ZodString;
|
|
39
|
+
metrics: z.ZodObject<{
|
|
40
|
+
impressions: z.ZodNumber;
|
|
41
|
+
clicks: z.ZodNumber;
|
|
42
|
+
spend: z.ZodNumber;
|
|
43
|
+
conversions: z.ZodNumber;
|
|
44
|
+
revenue: z.ZodNumber;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
impressions: number;
|
|
47
|
+
clicks: number;
|
|
48
|
+
spend: number;
|
|
49
|
+
conversions: number;
|
|
50
|
+
revenue: number;
|
|
51
|
+
}, {
|
|
52
|
+
impressions: number;
|
|
53
|
+
clicks: number;
|
|
54
|
+
spend: number;
|
|
55
|
+
conversions: number;
|
|
56
|
+
revenue: number;
|
|
57
|
+
}>;
|
|
58
|
+
}, "strip", z.ZodTypeAny, {
|
|
59
|
+
date: string;
|
|
60
|
+
metrics: {
|
|
61
|
+
impressions: number;
|
|
62
|
+
clicks: number;
|
|
63
|
+
spend: number;
|
|
64
|
+
conversions: number;
|
|
65
|
+
revenue: number;
|
|
66
|
+
};
|
|
67
|
+
}, {
|
|
68
|
+
date: string;
|
|
69
|
+
metrics: {
|
|
70
|
+
impressions: number;
|
|
71
|
+
clicks: number;
|
|
72
|
+
spend: number;
|
|
73
|
+
conversions: number;
|
|
74
|
+
revenue: number;
|
|
75
|
+
};
|
|
76
|
+
}>, "many">;
|
|
77
|
+
summary: z.ZodObject<{
|
|
78
|
+
totalImpressions: z.ZodNumber;
|
|
79
|
+
totalClicks: z.ZodNumber;
|
|
80
|
+
totalSpend: z.ZodNumber;
|
|
81
|
+
totalConversions: z.ZodNumber;
|
|
82
|
+
dataPoints: z.ZodNumber;
|
|
83
|
+
}, "strip", z.ZodTypeAny, {
|
|
84
|
+
dataPoints: number;
|
|
85
|
+
totalImpressions: number;
|
|
86
|
+
totalClicks: number;
|
|
87
|
+
totalSpend: number;
|
|
88
|
+
totalConversions: number;
|
|
89
|
+
}, {
|
|
90
|
+
dataPoints: number;
|
|
91
|
+
totalImpressions: number;
|
|
92
|
+
totalClicks: number;
|
|
93
|
+
totalSpend: number;
|
|
94
|
+
totalConversions: number;
|
|
95
|
+
}>;
|
|
96
|
+
timestamp: z.ZodString;
|
|
97
|
+
}, "strip", z.ZodTypeAny, {
|
|
98
|
+
advertiserId: string;
|
|
99
|
+
campaignId: string;
|
|
100
|
+
granularity: "daily" | "weekly" | "monthly";
|
|
101
|
+
dateRange: {
|
|
102
|
+
startDate: string;
|
|
103
|
+
endDate: string;
|
|
104
|
+
};
|
|
105
|
+
timestamp: string;
|
|
106
|
+
timeSeries: {
|
|
107
|
+
date: string;
|
|
108
|
+
metrics: {
|
|
109
|
+
impressions: number;
|
|
110
|
+
clicks: number;
|
|
111
|
+
spend: number;
|
|
112
|
+
conversions: number;
|
|
113
|
+
revenue: number;
|
|
114
|
+
};
|
|
115
|
+
}[];
|
|
116
|
+
summary: {
|
|
117
|
+
dataPoints: number;
|
|
118
|
+
totalImpressions: number;
|
|
119
|
+
totalClicks: number;
|
|
120
|
+
totalSpend: number;
|
|
121
|
+
totalConversions: number;
|
|
122
|
+
};
|
|
123
|
+
}, {
|
|
124
|
+
advertiserId: string;
|
|
125
|
+
campaignId: string;
|
|
126
|
+
granularity: "daily" | "weekly" | "monthly";
|
|
127
|
+
dateRange: {
|
|
128
|
+
startDate: string;
|
|
129
|
+
endDate: string;
|
|
130
|
+
};
|
|
131
|
+
timestamp: string;
|
|
132
|
+
timeSeries: {
|
|
133
|
+
date: string;
|
|
134
|
+
metrics: {
|
|
135
|
+
impressions: number;
|
|
136
|
+
clicks: number;
|
|
137
|
+
spend: number;
|
|
138
|
+
conversions: number;
|
|
139
|
+
revenue: number;
|
|
140
|
+
};
|
|
141
|
+
}[];
|
|
142
|
+
summary: {
|
|
143
|
+
dataPoints: number;
|
|
144
|
+
totalImpressions: number;
|
|
145
|
+
totalClicks: number;
|
|
146
|
+
totalSpend: number;
|
|
147
|
+
totalConversions: number;
|
|
148
|
+
};
|
|
149
|
+
}>;
|
|
150
|
+
export type GetHistoricalMetricsInput = z.infer<typeof GetHistoricalMetricsInputSchema>;
|
|
151
|
+
export type GetHistoricalMetricsOutput = z.infer<typeof GetHistoricalMetricsOutputSchema>;
|
|
152
|
+
export declare function getHistoricalMetricsLogic(input: GetHistoricalMetricsInput, _context: RequestContext, sdkContext?: SdkContext): Promise<GetHistoricalMetricsOutput>;
|
|
153
|
+
export declare function getHistoricalMetricsResponseFormatter(result: GetHistoricalMetricsOutput, input: GetHistoricalMetricsInput): McpTextContent[];
|
|
154
|
+
export declare const getHistoricalMetricsTool: ToolDefinition<typeof GetHistoricalMetricsInputSchema, typeof GetHistoricalMetricsOutputSchema>;
|
|
155
|
+
//# sourceMappingURL=get-historical-metrics.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-historical-metrics.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-historical-metrics.tool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASnE,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;EAiBa,CAAC;AAK1D,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BO,CAAC;AAErD,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AACxF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAK1F,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,yBAAyB,EAChC,QAAQ,EAAE,cAAc,EACxB,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,0BAA0B,CAAC,CAiDrC;AAKD,wBAAgB,qCAAqC,CACnD,MAAM,EAAE,0BAA0B,EAClC,KAAK,EAAE,yBAAyB,GAC/B,cAAc,EAAE,CAwBlB;AAKD,eAAO,MAAM,wBAAwB,EAAE,cAAc,CACnD,OAAO,+BAA+B,EACtC,OAAO,gCAAgC,CA+CxC,CAAC"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { resolveSessionServices } from "../utils/resolve-session.js";
|
|
3
|
+
const TOOL_NAME = "dbm_get_historical_metrics";
|
|
4
|
+
const TOOL_TITLE = "Get Historical Metrics";
|
|
5
|
+
const TOOL_DESCRIPTION = "Fetch time-series historical metrics for trend analysis";
|
|
6
|
+
export const GetHistoricalMetricsInputSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
advertiserId: z.string().min(1).describe("DV360 Advertiser ID"),
|
|
9
|
+
campaignId: z.string().min(1).describe("The campaign ID to fetch historical data for"),
|
|
10
|
+
startDate: z
|
|
11
|
+
.string()
|
|
12
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
13
|
+
.describe("Start date in YYYY-MM-DD format"),
|
|
14
|
+
endDate: z
|
|
15
|
+
.string()
|
|
16
|
+
.regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format")
|
|
17
|
+
.describe("End date in YYYY-MM-DD format"),
|
|
18
|
+
granularity: z
|
|
19
|
+
.enum(["daily", "weekly", "monthly"])
|
|
20
|
+
.default("daily")
|
|
21
|
+
.describe("Time series granularity (default: daily)"),
|
|
22
|
+
})
|
|
23
|
+
.describe("Parameters for fetching historical metrics");
|
|
24
|
+
export const GetHistoricalMetricsOutputSchema = z
|
|
25
|
+
.object({
|
|
26
|
+
advertiserId: z.string(),
|
|
27
|
+
campaignId: z.string(),
|
|
28
|
+
dateRange: z.object({
|
|
29
|
+
startDate: z.string(),
|
|
30
|
+
endDate: z.string(),
|
|
31
|
+
}),
|
|
32
|
+
granularity: z.enum(["daily", "weekly", "monthly"]),
|
|
33
|
+
timeSeries: z.array(z.object({
|
|
34
|
+
date: z.string(),
|
|
35
|
+
metrics: z.object({
|
|
36
|
+
impressions: z.number(),
|
|
37
|
+
clicks: z.number(),
|
|
38
|
+
spend: z.number(),
|
|
39
|
+
conversions: z.number(),
|
|
40
|
+
revenue: z.number(),
|
|
41
|
+
}),
|
|
42
|
+
})),
|
|
43
|
+
summary: z.object({
|
|
44
|
+
totalImpressions: z.number(),
|
|
45
|
+
totalClicks: z.number(),
|
|
46
|
+
totalSpend: z.number(),
|
|
47
|
+
totalConversions: z.number(),
|
|
48
|
+
dataPoints: z.number(),
|
|
49
|
+
}),
|
|
50
|
+
timestamp: z.string().datetime(),
|
|
51
|
+
})
|
|
52
|
+
.describe("Historical metrics time-series result");
|
|
53
|
+
export async function getHistoricalMetricsLogic(input, _context, sdkContext) {
|
|
54
|
+
const { bidManagerService } = resolveSessionServices(sdkContext);
|
|
55
|
+
const historicalData = await bidManagerService.getHistoricalMetrics({
|
|
56
|
+
advertiserId: input.advertiserId,
|
|
57
|
+
campaignId: input.campaignId,
|
|
58
|
+
startDate: input.startDate,
|
|
59
|
+
endDate: input.endDate,
|
|
60
|
+
granularity: input.granularity,
|
|
61
|
+
});
|
|
62
|
+
const timeSeries = historicalData.map((point) => ({
|
|
63
|
+
date: point.date,
|
|
64
|
+
metrics: {
|
|
65
|
+
impressions: point.metrics.impressions,
|
|
66
|
+
clicks: point.metrics.clicks,
|
|
67
|
+
spend: point.metrics.spend,
|
|
68
|
+
conversions: point.metrics.conversions,
|
|
69
|
+
revenue: point.metrics.revenue,
|
|
70
|
+
},
|
|
71
|
+
}));
|
|
72
|
+
const summary = timeSeries.reduce((acc, point) => ({
|
|
73
|
+
totalImpressions: acc.totalImpressions + point.metrics.impressions,
|
|
74
|
+
totalClicks: acc.totalClicks + point.metrics.clicks,
|
|
75
|
+
totalSpend: acc.totalSpend + point.metrics.spend,
|
|
76
|
+
totalConversions: acc.totalConversions + point.metrics.conversions,
|
|
77
|
+
dataPoints: acc.dataPoints + 1,
|
|
78
|
+
}), { totalImpressions: 0, totalClicks: 0, totalSpend: 0, totalConversions: 0, dataPoints: 0 });
|
|
79
|
+
return {
|
|
80
|
+
advertiserId: input.advertiserId,
|
|
81
|
+
campaignId: input.campaignId,
|
|
82
|
+
dateRange: {
|
|
83
|
+
startDate: input.startDate,
|
|
84
|
+
endDate: input.endDate,
|
|
85
|
+
},
|
|
86
|
+
granularity: input.granularity,
|
|
87
|
+
timeSeries,
|
|
88
|
+
summary,
|
|
89
|
+
timestamp: new Date().toISOString(),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
export function getHistoricalMetricsResponseFormatter(result, input) {
|
|
93
|
+
const trendsText = result.timeSeries
|
|
94
|
+
.slice(0, 5)
|
|
95
|
+
.map((point) => ` ${point.date}: ${point.metrics.impressions.toLocaleString()} impr, $${point.metrics.spend.toFixed(2)} spend`)
|
|
96
|
+
.join("\n");
|
|
97
|
+
return [
|
|
98
|
+
{
|
|
99
|
+
type: "text",
|
|
100
|
+
text: `Campaign ${input.campaignId} Historical Metrics (${input.startDate} to ${input.endDate}):
|
|
101
|
+
|
|
102
|
+
Summary (${result.summary.dataPoints} data points, ${result.granularity}):
|
|
103
|
+
• Total Impressions: ${result.summary.totalImpressions.toLocaleString()}
|
|
104
|
+
• Total Clicks: ${result.summary.totalClicks.toLocaleString()}
|
|
105
|
+
• Total Spend: $${result.summary.totalSpend.toFixed(2)}
|
|
106
|
+
• Total Conversions: ${result.summary.totalConversions}
|
|
107
|
+
|
|
108
|
+
Trend (first 5 periods):
|
|
109
|
+
${trendsText}`,
|
|
110
|
+
},
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
export const getHistoricalMetricsTool = {
|
|
114
|
+
name: TOOL_NAME,
|
|
115
|
+
title: TOOL_TITLE,
|
|
116
|
+
description: TOOL_DESCRIPTION,
|
|
117
|
+
inputSchema: GetHistoricalMetricsInputSchema,
|
|
118
|
+
outputSchema: GetHistoricalMetricsOutputSchema,
|
|
119
|
+
annotations: {
|
|
120
|
+
readOnlyHint: true,
|
|
121
|
+
destructiveHint: false,
|
|
122
|
+
openWorldHint: false,
|
|
123
|
+
idempotentHint: true,
|
|
124
|
+
},
|
|
125
|
+
inputExamples: [
|
|
126
|
+
{
|
|
127
|
+
label: "Daily trend over the past 30 days",
|
|
128
|
+
input: {
|
|
129
|
+
advertiserId: "1234567",
|
|
130
|
+
campaignId: "9876543",
|
|
131
|
+
startDate: "2026-01-01",
|
|
132
|
+
endDate: "2026-01-31",
|
|
133
|
+
granularity: "daily",
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
label: "Weekly trend over a quarter",
|
|
138
|
+
input: {
|
|
139
|
+
advertiserId: "7654321",
|
|
140
|
+
campaignId: "1122334",
|
|
141
|
+
startDate: "2025-10-01",
|
|
142
|
+
endDate: "2025-12-31",
|
|
143
|
+
granularity: "weekly",
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
label: "Monthly trend over a full year",
|
|
148
|
+
input: {
|
|
149
|
+
advertiserId: "9988776",
|
|
150
|
+
campaignId: "5544332",
|
|
151
|
+
startDate: "2025-01-01",
|
|
152
|
+
endDate: "2025-12-31",
|
|
153
|
+
granularity: "monthly",
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
logic: getHistoricalMetricsLogic,
|
|
158
|
+
responseFormatter: getHistoricalMetricsResponseFormatter,
|
|
159
|
+
};
|
|
160
|
+
//# sourceMappingURL=get-historical-metrics.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-historical-metrics.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/get-historical-metrics.tool.ts"],"names":[],"mappings":"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"}
|