@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.
Files changed (227) hide show
  1. package/LICENSE.md +201 -0
  2. package/README.md +197 -0
  3. package/dist/config/index.d.ts +112 -0
  4. package/dist/config/index.d.ts.map +1 -0
  5. package/dist/config/index.js +55 -0
  6. package/dist/config/index.js.map +1 -0
  7. package/dist/generated/compatibility-rules.d.ts +26 -0
  8. package/dist/generated/compatibility-rules.d.ts.map +1 -0
  9. package/dist/generated/compatibility-rules.js +142 -0
  10. package/dist/generated/compatibility-rules.js.map +1 -0
  11. package/dist/generated/filters.d.ts +19 -0
  12. package/dist/generated/filters.d.ts.map +1 -0
  13. package/dist/generated/filters.js +2541 -0
  14. package/dist/generated/filters.js.map +1 -0
  15. package/dist/generated/index.d.ts +5 -0
  16. package/dist/generated/index.d.ts.map +1 -0
  17. package/dist/generated/index.js +5 -0
  18. package/dist/generated/index.js.map +1 -0
  19. package/dist/generated/metrics.d.ts +28 -0
  20. package/dist/generated/metrics.d.ts.map +1 -0
  21. package/dist/generated/metrics.js +961 -0
  22. package/dist/generated/metrics.js.map +1 -0
  23. package/dist/generated/report-types.d.ts +14 -0
  24. package/dist/generated/report-types.d.ts.map +1 -0
  25. package/dist/generated/report-types.js +94 -0
  26. package/dist/generated/report-types.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +51 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts +4 -0
  32. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.d.ts.map +1 -0
  33. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js +299 -0
  34. package/dist/mcp-server/prompts/definitions/cross-platform-campaign-setup.prompt.js.map +1 -0
  35. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts +4 -0
  36. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.d.ts.map +1 -0
  37. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js +170 -0
  38. package/dist/mcp-server/prompts/definitions/cross-platform-performance.prompt.js.map +1 -0
  39. package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.d.ts +4 -0
  40. package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.d.ts.map +1 -0
  41. package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.js +164 -0
  42. package/dist/mcp-server/prompts/definitions/custom-query-workflow.prompt.js.map +1 -0
  43. package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.d.ts +4 -0
  44. package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.d.ts.map +1 -0
  45. package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.js +204 -0
  46. package/dist/mcp-server/prompts/definitions/pacing-performance-analysis.prompt.js.map +1 -0
  47. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts +4 -0
  48. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.d.ts.map +1 -0
  49. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js +66 -0
  50. package/dist/mcp-server/prompts/definitions/tool-schema-exploration.prompt.js.map +1 -0
  51. package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.d.ts +4 -0
  52. package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.d.ts.map +1 -0
  53. package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.js +179 -0
  54. package/dist/mcp-server/prompts/definitions/troubleshoot-report.prompt.js.map +1 -0
  55. package/dist/mcp-server/prompts/definitions/types.d.ts +15 -0
  56. package/dist/mcp-server/prompts/definitions/types.d.ts.map +1 -0
  57. package/dist/mcp-server/prompts/definitions/types.js +2 -0
  58. package/dist/mcp-server/prompts/definitions/types.js.map +1 -0
  59. package/dist/mcp-server/prompts/index.d.ts +6 -0
  60. package/dist/mcp-server/prompts/index.d.ts.map +1 -0
  61. package/dist/mcp-server/prompts/index.js +57 -0
  62. package/dist/mcp-server/prompts/index.js.map +1 -0
  63. package/dist/mcp-server/resources/definitions/compatibility-rules.resource.d.ts +3 -0
  64. package/dist/mcp-server/resources/definitions/compatibility-rules.resource.d.ts.map +1 -0
  65. package/dist/mcp-server/resources/definitions/compatibility-rules.resource.js +130 -0
  66. package/dist/mcp-server/resources/definitions/compatibility-rules.resource.js.map +1 -0
  67. package/dist/mcp-server/resources/definitions/filter-types.resource.d.ts +4 -0
  68. package/dist/mcp-server/resources/definitions/filter-types.resource.d.ts.map +1 -0
  69. package/dist/mcp-server/resources/definitions/filter-types.resource.js +198 -0
  70. package/dist/mcp-server/resources/definitions/filter-types.resource.js.map +1 -0
  71. package/dist/mcp-server/resources/definitions/index.d.ts +8 -0
  72. package/dist/mcp-server/resources/definitions/index.d.ts.map +1 -0
  73. package/dist/mcp-server/resources/definitions/index.js +49 -0
  74. package/dist/mcp-server/resources/definitions/index.js.map +1 -0
  75. package/dist/mcp-server/resources/definitions/metric-types.resource.d.ts +4 -0
  76. package/dist/mcp-server/resources/definitions/metric-types.resource.d.ts.map +1 -0
  77. package/dist/mcp-server/resources/definitions/metric-types.resource.js +221 -0
  78. package/dist/mcp-server/resources/definitions/metric-types.resource.js.map +1 -0
  79. package/dist/mcp-server/resources/definitions/query-examples.resource.d.ts +169 -0
  80. package/dist/mcp-server/resources/definitions/query-examples.resource.d.ts.map +1 -0
  81. package/dist/mcp-server/resources/definitions/query-examples.resource.js +261 -0
  82. package/dist/mcp-server/resources/definitions/query-examples.resource.js.map +1 -0
  83. package/dist/mcp-server/resources/definitions/report-types.resource.d.ts +3 -0
  84. package/dist/mcp-server/resources/definitions/report-types.resource.d.ts.map +1 -0
  85. package/dist/mcp-server/resources/definitions/report-types.resource.js +198 -0
  86. package/dist/mcp-server/resources/definitions/report-types.resource.js.map +1 -0
  87. package/dist/mcp-server/resources/index.d.ts +3 -0
  88. package/dist/mcp-server/resources/index.d.ts.map +1 -0
  89. package/dist/mcp-server/resources/index.js +2 -0
  90. package/dist/mcp-server/resources/index.js.map +1 -0
  91. package/dist/mcp-server/resources/types.d.ts +16 -0
  92. package/dist/mcp-server/resources/types.d.ts.map +1 -0
  93. package/dist/mcp-server/resources/types.js +2 -0
  94. package/dist/mcp-server/resources/types.js.map +1 -0
  95. package/dist/mcp-server/server.d.ts +5 -0
  96. package/dist/mcp-server/server.d.ts.map +1 -0
  97. package/dist/mcp-server/server.js +115 -0
  98. package/dist/mcp-server/server.js.map +1 -0
  99. package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.d.ts +89 -0
  100. package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.d.ts.map +1 -0
  101. package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.js +128 -0
  102. package/dist/mcp-server/tools/definitions/get-campaign-delivery.tool.js.map +1 -0
  103. package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.d.ts +155 -0
  104. package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.d.ts.map +1 -0
  105. package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.js +160 -0
  106. package/dist/mcp-server/tools/definitions/get-historical-metrics.tool.js.map +1 -0
  107. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts +138 -0
  108. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.d.ts.map +1 -0
  109. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js +171 -0
  110. package/dist/mcp-server/tools/definitions/get-pacing-status.tool.js.map +1 -0
  111. package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.d.ts +122 -0
  112. package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.d.ts.map +1 -0
  113. package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.js +143 -0
  114. package/dist/mcp-server/tools/definitions/get-performance-metrics.tool.js.map +1 -0
  115. package/dist/mcp-server/tools/definitions/index.d.ts +8 -0
  116. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  117. package/dist/mcp-server/tools/definitions/index.js +23 -0
  118. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  119. package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.d.ts +4 -0
  120. package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.d.ts.map +1 -0
  121. package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.js +46 -0
  122. package/dist/mcp-server/tools/definitions/run-custom-query-async.tool.js.map +1 -0
  123. package/dist/mcp-server/tools/definitions/run-custom-query.tool.d.ts +186 -0
  124. package/dist/mcp-server/tools/definitions/run-custom-query.tool.d.ts.map +1 -0
  125. package/dist/mcp-server/tools/definitions/run-custom-query.tool.js +202 -0
  126. package/dist/mcp-server/tools/definitions/run-custom-query.tool.js.map +1 -0
  127. package/dist/mcp-server/tools/index.d.ts +2 -0
  128. package/dist/mcp-server/tools/index.d.ts.map +1 -0
  129. package/dist/mcp-server/tools/index.js +2 -0
  130. package/dist/mcp-server/tools/index.js.map +1 -0
  131. package/dist/mcp-server/tools/utils/query-validation.d.ts +44 -0
  132. package/dist/mcp-server/tools/utils/query-validation.d.ts.map +1 -0
  133. package/dist/mcp-server/tools/utils/query-validation.js +107 -0
  134. package/dist/mcp-server/tools/utils/query-validation.js.map +1 -0
  135. package/dist/mcp-server/tools/utils/resolve-session.d.ts +4 -0
  136. package/dist/mcp-server/tools/utils/resolve-session.d.ts.map +1 -0
  137. package/dist/mcp-server/tools/utils/resolve-session.js +6 -0
  138. package/dist/mcp-server/tools/utils/resolve-session.js.map +1 -0
  139. package/dist/mcp-server/transports/streamable-http-transport.d.ts +55 -0
  140. package/dist/mcp-server/transports/streamable-http-transport.d.ts.map +1 -0
  141. package/dist/mcp-server/transports/streamable-http-transport.js +55 -0
  142. package/dist/mcp-server/transports/streamable-http-transport.js.map +1 -0
  143. package/dist/services/bid-manager/BidManagerService.d.ts +68 -0
  144. package/dist/services/bid-manager/BidManagerService.d.ts.map +1 -0
  145. package/dist/services/bid-manager/BidManagerService.js +464 -0
  146. package/dist/services/bid-manager/BidManagerService.js.map +1 -0
  147. package/dist/services/bid-manager/auth-bridge.d.ts +6 -0
  148. package/dist/services/bid-manager/auth-bridge.d.ts.map +1 -0
  149. package/dist/services/bid-manager/auth-bridge.js +13 -0
  150. package/dist/services/bid-manager/auth-bridge.js.map +1 -0
  151. package/dist/services/bid-manager/client.d.ts +4 -0
  152. package/dist/services/bid-manager/client.d.ts.map +1 -0
  153. package/dist/services/bid-manager/client.js +2 -0
  154. package/dist/services/bid-manager/client.js.map +1 -0
  155. package/dist/services/bid-manager/index.d.ts +6 -0
  156. package/dist/services/bid-manager/index.d.ts.map +1 -0
  157. package/dist/services/bid-manager/index.js +4 -0
  158. package/dist/services/bid-manager/index.js.map +1 -0
  159. package/dist/services/bid-manager/report-parser.d.ts +26 -0
  160. package/dist/services/bid-manager/report-parser.d.ts.map +1 -0
  161. package/dist/services/bid-manager/report-parser.js +141 -0
  162. package/dist/services/bid-manager/report-parser.js.map +1 -0
  163. package/dist/services/bid-manager/types.d.ts +668 -0
  164. package/dist/services/bid-manager/types.d.ts.map +1 -0
  165. package/dist/services/bid-manager/types.js +256 -0
  166. package/dist/services/bid-manager/types.js.map +1 -0
  167. package/dist/services/session-services.d.ts +12 -0
  168. package/dist/services/session-services.d.ts.map +1 -0
  169. package/dist/services/session-services.js +18 -0
  170. package/dist/services/session-services.js.map +1 -0
  171. package/dist/types-global/bid-manager.d.ts +76 -0
  172. package/dist/types-global/bid-manager.d.ts.map +1 -0
  173. package/dist/types-global/bid-manager.js +2 -0
  174. package/dist/types-global/bid-manager.js.map +1 -0
  175. package/dist/types-global/index.d.ts +2 -0
  176. package/dist/types-global/index.d.ts.map +1 -0
  177. package/dist/types-global/index.js +2 -0
  178. package/dist/types-global/index.js.map +1 -0
  179. package/dist/types-global/mcp.d.ts +2 -0
  180. package/dist/types-global/mcp.d.ts.map +1 -0
  181. package/dist/types-global/mcp.js +2 -0
  182. package/dist/types-global/mcp.js.map +1 -0
  183. package/dist/utils/date.d.ts +2 -0
  184. package/dist/utils/date.d.ts.map +1 -0
  185. package/dist/utils/date.js +7 -0
  186. package/dist/utils/date.js.map +1 -0
  187. package/dist/utils/errors/bid-manager-errors.d.ts +57 -0
  188. package/dist/utils/errors/bid-manager-errors.d.ts.map +1 -0
  189. package/dist/utils/errors/bid-manager-errors.js +119 -0
  190. package/dist/utils/errors/bid-manager-errors.js.map +1 -0
  191. package/dist/utils/errors/index.d.ts +3 -0
  192. package/dist/utils/errors/index.d.ts.map +1 -0
  193. package/dist/utils/errors/index.js +3 -0
  194. package/dist/utils/errors/index.js.map +1 -0
  195. package/dist/utils/index.d.ts +4 -0
  196. package/dist/utils/index.d.ts.map +1 -0
  197. package/dist/utils/index.js +4 -0
  198. package/dist/utils/index.js.map +1 -0
  199. package/dist/utils/math.d.ts +9 -0
  200. package/dist/utils/math.d.ts.map +1 -0
  201. package/dist/utils/math.js +38 -0
  202. package/dist/utils/math.js.map +1 -0
  203. package/dist/utils/metrics.d.ts +21 -0
  204. package/dist/utils/metrics.d.ts.map +1 -0
  205. package/dist/utils/metrics.js +92 -0
  206. package/dist/utils/metrics.js.map +1 -0
  207. package/dist/utils/platform.d.ts +3 -0
  208. package/dist/utils/platform.d.ts.map +1 -0
  209. package/dist/utils/platform.js +5 -0
  210. package/dist/utils/platform.js.map +1 -0
  211. package/dist/utils/security/index.d.ts +2 -0
  212. package/dist/utils/security/index.d.ts.map +1 -0
  213. package/dist/utils/security/index.js +2 -0
  214. package/dist/utils/security/index.js.map +1 -0
  215. package/dist/utils/security/rate-limiter.d.ts +3 -0
  216. package/dist/utils/security/rate-limiter.d.ts.map +1 -0
  217. package/dist/utils/security/rate-limiter.js +5 -0
  218. package/dist/utils/security/rate-limiter.js.map +1 -0
  219. package/dist/utils/telemetry/index.d.ts +2 -0
  220. package/dist/utils/telemetry/index.d.ts.map +1 -0
  221. package/dist/utils/telemetry/index.js +2 -0
  222. package/dist/utils/telemetry/index.js.map +1 -0
  223. package/dist/utils/telemetry/tracing.d.ts +3 -0
  224. package/dist/utils/telemetry/tracing.d.ts.map +1 -0
  225. package/dist/utils/telemetry/tracing.js +4 -0
  226. package/dist/utils/telemetry/tracing.js.map +1 -0
  227. package/package.json +60 -0
@@ -0,0 +1,261 @@
1
+ export const QUERY_EXAMPLES = {
2
+ delivery: {
3
+ name: "Campaign Delivery Report",
4
+ description: "Basic delivery metrics (impressions, clicks, spend) for a campaign",
5
+ querySpec: {
6
+ metadata: {
7
+ title: "Campaign Delivery Report",
8
+ dataRange: {
9
+ range: "LAST_7_DAYS",
10
+ },
11
+ format: "CSV",
12
+ },
13
+ params: {
14
+ type: "STANDARD",
15
+ groupBys: ["FILTER_DATE", "FILTER_MEDIA_PLAN"],
16
+ metrics: [
17
+ "METRIC_IMPRESSIONS",
18
+ "METRIC_CLICKS",
19
+ "METRIC_CTR",
20
+ "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
21
+ ],
22
+ filters: [
23
+ { type: "FILTER_ADVERTISER", value: "{advertiserId}" },
24
+ { type: "FILTER_MEDIA_PLAN", value: "{campaignId}" },
25
+ ],
26
+ },
27
+ },
28
+ },
29
+ performance: {
30
+ name: "Performance Analysis Report",
31
+ description: "Full performance metrics including conversions and revenue",
32
+ querySpec: {
33
+ metadata: {
34
+ title: "Performance Analysis Report",
35
+ dataRange: {
36
+ range: "CUSTOM_DATES",
37
+ customStartDate: { year: 2025, month: 1, day: 1 },
38
+ customEndDate: { year: 2025, month: 1, day: 31 },
39
+ },
40
+ format: "CSV",
41
+ },
42
+ params: {
43
+ type: "STANDARD",
44
+ groupBys: ["FILTER_DATE", "FILTER_MEDIA_PLAN"],
45
+ metrics: [
46
+ "METRIC_IMPRESSIONS",
47
+ "METRIC_CLICKS",
48
+ "METRIC_CTR",
49
+ "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
50
+ "METRIC_TOTAL_CONVERSIONS",
51
+ "METRIC_POST_CLICK_CONVERSIONS",
52
+ "METRIC_POST_VIEW_CONVERSIONS",
53
+ "METRIC_REVENUE_ADVERTISER",
54
+ "METRIC_CPA_ADVERTISER",
55
+ ],
56
+ filters: [{ type: "FILTER_ADVERTISER", value: "{advertiserId}" }],
57
+ },
58
+ },
59
+ },
60
+ lineItemBreakdown: {
61
+ name: "Line Item Breakdown Report",
62
+ description: "Performance breakdown by line item within a campaign",
63
+ querySpec: {
64
+ metadata: {
65
+ title: "Line Item Breakdown",
66
+ dataRange: {
67
+ range: "LAST_30_DAYS",
68
+ },
69
+ format: "CSV",
70
+ },
71
+ params: {
72
+ type: "STANDARD",
73
+ groupBys: ["FILTER_LINE_ITEM"],
74
+ metrics: [
75
+ "METRIC_IMPRESSIONS",
76
+ "METRIC_CLICKS",
77
+ "METRIC_CTR",
78
+ "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
79
+ "METRIC_CPM_ADVERTISER",
80
+ ],
81
+ filters: [
82
+ { type: "FILTER_ADVERTISER", value: "{advertiserId}" },
83
+ { type: "FILTER_MEDIA_PLAN", value: "{campaignId}" },
84
+ ],
85
+ },
86
+ },
87
+ },
88
+ deviceType: {
89
+ name: "Device Type Report",
90
+ description: "Performance breakdown by device type",
91
+ querySpec: {
92
+ metadata: {
93
+ title: "Device Type Performance",
94
+ dataRange: {
95
+ range: "LAST_7_DAYS",
96
+ },
97
+ format: "CSV",
98
+ },
99
+ params: {
100
+ type: "STANDARD",
101
+ groupBys: ["FILTER_DEVICE_TYPE"],
102
+ metrics: [
103
+ "METRIC_IMPRESSIONS",
104
+ "METRIC_CLICKS",
105
+ "METRIC_CTR",
106
+ "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
107
+ "METRIC_TOTAL_CONVERSIONS",
108
+ ],
109
+ filters: [
110
+ { type: "FILTER_ADVERTISER", value: "{advertiserId}" },
111
+ { type: "FILTER_MEDIA_PLAN", value: "{campaignId}" },
112
+ ],
113
+ },
114
+ },
115
+ },
116
+ geographic: {
117
+ name: "Geographic Report",
118
+ description: "Performance breakdown by country and region",
119
+ querySpec: {
120
+ metadata: {
121
+ title: "Geographic Performance",
122
+ dataRange: {
123
+ range: "LAST_30_DAYS",
124
+ },
125
+ format: "CSV",
126
+ },
127
+ params: {
128
+ type: "STANDARD",
129
+ groupBys: ["FILTER_COUNTRY"],
130
+ metrics: [
131
+ "METRIC_IMPRESSIONS",
132
+ "METRIC_CLICKS",
133
+ "METRIC_CTR",
134
+ "METRIC_TOTAL_MEDIA_COST_ADVERTISER",
135
+ ],
136
+ filters: [{ type: "FILTER_ADVERTISER", value: "{advertiserId}" }],
137
+ },
138
+ },
139
+ },
140
+ viewability: {
141
+ name: "Viewability Report",
142
+ description: "Active View viewability metrics",
143
+ querySpec: {
144
+ metadata: {
145
+ title: "Viewability Analysis",
146
+ dataRange: {
147
+ range: "LAST_7_DAYS",
148
+ },
149
+ format: "CSV",
150
+ },
151
+ params: {
152
+ type: "STANDARD",
153
+ groupBys: ["FILTER_DATE", "FILTER_MEDIA_PLAN"],
154
+ metrics: [
155
+ "METRIC_IMPRESSIONS",
156
+ "METRIC_ACTIVE_VIEW_MEASURABLE_IMPRESSIONS",
157
+ "METRIC_ACTIVE_VIEW_VIEWABLE_IMPRESSIONS",
158
+ "METRIC_ACTIVE_VIEW_PCT_MEASURABLE_IMPRESSIONS",
159
+ "METRIC_ACTIVE_VIEW_PCT_VIEWABLE_IMPRESSIONS",
160
+ ],
161
+ filters: [
162
+ { type: "FILTER_ADVERTISER", value: "{advertiserId}" },
163
+ { type: "FILTER_MEDIA_PLAN", value: "{campaignId}" },
164
+ ],
165
+ },
166
+ },
167
+ },
168
+ video: {
169
+ name: "Video Performance Report",
170
+ description: "Video engagement metrics",
171
+ querySpec: {
172
+ metadata: {
173
+ title: "Video Performance",
174
+ dataRange: {
175
+ range: "LAST_7_DAYS",
176
+ },
177
+ format: "CSV",
178
+ },
179
+ params: {
180
+ type: "STANDARD",
181
+ groupBys: ["FILTER_DATE", "FILTER_CREATIVE"],
182
+ metrics: [
183
+ "METRIC_IMPRESSIONS",
184
+ "METRIC_VIDEO_PLAYS",
185
+ "METRIC_VIDEO_FIRST_QUARTILE_COMPLETIONS",
186
+ "METRIC_VIDEO_MIDPOINTS",
187
+ "METRIC_VIDEO_THIRD_QUARTILE_COMPLETIONS",
188
+ "METRIC_VIDEO_COMPLETIONS",
189
+ "METRIC_VIDEO_COMPLETION_RATE",
190
+ "METRIC_VIDEO_SKIPS",
191
+ ],
192
+ filters: [
193
+ { type: "FILTER_ADVERTISER", value: "{advertiserId}" },
194
+ { type: "FILTER_MEDIA_PLAN", value: "{campaignId}" },
195
+ ],
196
+ },
197
+ },
198
+ },
199
+ };
200
+ function formatQueryExamplesMarkdown() {
201
+ let markdown = `# Bid Manager Query Examples
202
+
203
+ This resource provides curated example queries for common Bid Manager API use cases.
204
+
205
+ ## How to Use These Examples
206
+
207
+ 1. Replace placeholder values (e.g., \`{advertiserId}\`, \`{campaignId}\`) with actual IDs
208
+ 2. Adjust the \`dataRange\` to your desired time period
209
+ 3. Modify \`metrics\` and \`groupBys\` as needed
210
+
211
+ ---
212
+
213
+ `;
214
+ for (const [, example] of Object.entries(QUERY_EXAMPLES)) {
215
+ markdown += `## ${example.name}\n\n`;
216
+ markdown += `**Description:** ${example.description}\n\n`;
217
+ markdown += "```json\n";
218
+ markdown += JSON.stringify(example.querySpec, null, 2);
219
+ markdown += "\n```\n\n";
220
+ markdown += "---\n\n";
221
+ }
222
+ markdown += `## Tips for Building Queries
223
+
224
+ ### Date Ranges
225
+
226
+ Available preset ranges:
227
+ - \`CURRENT_DAY\`, \`PREVIOUS_DAY\`
228
+ - \`WEEK_TO_DATE\`, \`MONTH_TO_DATE\`, \`QUARTER_TO_DATE\`, \`YEAR_TO_DATE\`
229
+ - \`PREVIOUS_WEEK\`, \`PREVIOUS_MONTH\`, \`PREVIOUS_QUARTER\`, \`PREVIOUS_YEAR\`
230
+ - \`LAST_7_DAYS\`, \`LAST_14_DAYS\`, \`LAST_30_DAYS\`, \`LAST_60_DAYS\`, \`LAST_90_DAYS\`, \`LAST_365_DAYS\`
231
+ - \`ALL_TIME\`
232
+ - \`CUSTOM_DATES\` (requires \`customStartDate\` and \`customEndDate\`)
233
+
234
+ ### Report Types
235
+
236
+ - \`STANDARD\`: Standard delivery metrics (most common)
237
+ - \`AUDIENCE_COMPOSITION\`: Audience demographic breakdowns (deprecated but functional)
238
+ - \`FLOODLIGHT\`: Conversion tracking reports
239
+ - \`YOUTUBE\`: YouTube-specific metrics
240
+ - \`GRP\`: Gross Rating Point reports
241
+ - \`YOUTUBE_PROGRAMMATIC_GUARANTEED\`: YouTube PG reports
242
+ - \`REACH\`: Reach reports
243
+ - \`UNIQUE_REACH_AUDIENCE\`: Unique reach by audience
244
+
245
+ ### Best Practices
246
+
247
+ 1. **Minimize groupBys**: More dimensions = larger reports and longer processing
248
+ 2. **Filter early**: Use filters to reduce data volume
249
+ 3. **Choose relevant metrics**: Only request metrics you need
250
+ 4. **Use preset date ranges**: Faster than custom dates when possible
251
+ `;
252
+ return markdown;
253
+ }
254
+ export const queryExamplesResource = {
255
+ uri: "query-examples://all",
256
+ name: "Bid Manager Query Examples",
257
+ description: "Curated example queries for common Bid Manager API use cases",
258
+ mimeType: "text/markdown",
259
+ getContent: () => formatQueryExamplesMarkdown(),
260
+ };
261
+ //# sourceMappingURL=query-examples.resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-examples.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/query-examples.resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Resource } from "../types.js";
2
+ export declare const reportTypesResource: Resource;
3
+ //# sourceMappingURL=report-types.resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-types.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/report-types.resource.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAuO5C,eAAO,MAAM,mBAAmB,EAAE,QAOjC,CAAC"}
@@ -0,0 +1,198 @@
1
+ import { REPORT_TYPE_METADATA, DATA_RANGE_DESCRIPTIONS, METRIC_METADATA, FILTER_METADATA, } from "../../../generated/index.js";
2
+ function getMetricsForReportType(reportType) {
3
+ const metrics = [];
4
+ for (const [metric, meta] of Object.entries(METRIC_METADATA)) {
5
+ if (meta.reportTypes?.includes(reportType)) {
6
+ metrics.push(metric);
7
+ }
8
+ }
9
+ return metrics.sort();
10
+ }
11
+ function getFiltersForReportType(reportType) {
12
+ const filters = [];
13
+ for (const [filter, meta] of Object.entries(FILTER_METADATA)) {
14
+ if (meta.reportTypes?.includes(reportType)) {
15
+ filters.push(filter);
16
+ }
17
+ }
18
+ return filters.sort();
19
+ }
20
+ function formatReportTypesMarkdown() {
21
+ let markdown = `# Bid Manager API Report Types Reference
22
+
23
+ This resource provides a complete reference of all available report types and date range presets for Bid Manager API queries.
24
+
25
+ ---
26
+
27
+ ## Report Types
28
+
29
+ | Report Type | Display Name | Description |
30
+ |-------------|--------------|-------------|
31
+ `;
32
+ for (const [type, meta] of Object.entries(REPORT_TYPE_METADATA)) {
33
+ markdown += `| \`${type}\` | ${meta.displayName} | ${meta.description} |\n`;
34
+ }
35
+ markdown += `
36
+
37
+ ### When to Use Each Report Type
38
+
39
+ #### STANDARD (Most Common)
40
+ Use for general delivery metrics, campaign performance, and cost analysis.
41
+ \`\`\`json
42
+ {
43
+ "reportType": "STANDARD",
44
+ "groupBys": ["FILTER_DATE", "FILTER_MEDIA_PLAN"],
45
+ "metrics": ["METRIC_IMPRESSIONS", "METRIC_CLICKS", "METRIC_TOTAL_MEDIA_COST_ADVERTISER"]
46
+ }
47
+ \`\`\`
48
+
49
+ #### FLOODLIGHT
50
+ Use when analyzing conversion data from Floodlight tags.
51
+ \`\`\`json
52
+ {
53
+ "reportType": "FLOODLIGHT",
54
+ "groupBys": ["FILTER_DATE", "FILTER_FLOODLIGHT_ACTIVITY"],
55
+ "metrics": ["METRIC_TOTAL_CONVERSIONS", "METRIC_POST_CLICK_CONVERSIONS", "METRIC_POST_VIEW_CONVERSIONS"]
56
+ }
57
+ \`\`\`
58
+
59
+ #### YOUTUBE
60
+ Use for YouTube-specific campaign analysis.
61
+ \`\`\`json
62
+ {
63
+ "reportType": "YOUTUBE",
64
+ "groupBys": ["FILTER_DATE", "FILTER_LINE_ITEM"],
65
+ "metrics": ["METRIC_TRUEVIEW_VIEWS", "METRIC_TRUEVIEW_VIEW_RATE", "METRIC_TRUEVIEW_CPV_ADVERTISER"]
66
+ }
67
+ \`\`\`
68
+
69
+ #### REACH / UNIQUE_REACH_AUDIENCE
70
+ Use for reach and frequency analysis.
71
+ \`\`\`json
72
+ {
73
+ "reportType": "REACH",
74
+ "groupBys": ["FILTER_DATE"],
75
+ "metrics": ["METRIC_UNIQUE_REACH_IMPRESSION_REACH", "METRIC_UNIQUE_REACH_AVERAGE_IMPRESSION_FREQUENCY"]
76
+ }
77
+ \`\`\`
78
+
79
+ ---
80
+
81
+ ## Date Range Presets
82
+
83
+ Date ranges can be specified either as a preset or with custom dates.
84
+
85
+ ### Available Presets
86
+
87
+ | Preset | Description |
88
+ |--------|-------------|
89
+ `;
90
+ for (const [preset, description] of Object.entries(DATA_RANGE_DESCRIPTIONS)) {
91
+ markdown += `| \`${preset}\` | ${description} |\n`;
92
+ }
93
+ markdown += `
94
+
95
+ ### Using Presets
96
+
97
+ \`\`\`json
98
+ {
99
+ "dateRange": {
100
+ "preset": "LAST_7_DAYS"
101
+ }
102
+ }
103
+ \`\`\`
104
+
105
+ ### Using Custom Dates
106
+
107
+ \`\`\`json
108
+ {
109
+ "dateRange": {
110
+ "startDate": "2025-01-01",
111
+ "endDate": "2025-01-31"
112
+ }
113
+ }
114
+ \`\`\`
115
+
116
+ ---
117
+
118
+ ## Best Practices
119
+
120
+ 1. **Use STANDARD for most queries** - It supports the widest range of filters and metrics
121
+ 2. **Match metrics to report type** - Some metrics are only available in specific report types
122
+ 3. **Use preset date ranges when possible** - Faster processing than custom dates
123
+ 4. **Consider data freshness** - CURRENT_DAY data may be incomplete; PREVIOUS_DAY is safer for accurate reporting
124
+
125
+ ---
126
+
127
+ ## Compatible Metrics by Report Type
128
+
129
+ Each report type supports a specific set of metrics. Using incompatible metrics will result in an API error.
130
+
131
+ ### STANDARD Report Metrics (${getMetricsForReportType("STANDARD").length} metrics)
132
+ Most general metrics are available. See \`metric-types://all\` for the full list.
133
+
134
+ ### YOUTUBE Report Metrics (${getMetricsForReportType("YOUTUBE").length} metrics)
135
+ Includes TrueView-specific metrics:
136
+ \`\`\`
137
+ ${getMetricsForReportType("YOUTUBE")
138
+ .filter((m) => m.includes("TRUEVIEW"))
139
+ .slice(0, 10)
140
+ .join("\n")}
141
+ ${getMetricsForReportType("YOUTUBE").filter((m) => m.includes("TRUEVIEW")).length > 10 ? "... and more" : ""}
142
+ \`\`\`
143
+
144
+ ### REACH/UNIQUE_REACH_AUDIENCE Report Metrics (${getMetricsForReportType("REACH").length} metrics)
145
+ \`\`\`
146
+ ${getMetricsForReportType("REACH").join("\n")}
147
+ \`\`\`
148
+
149
+ ### GRP Report Metrics (${getMetricsForReportType("GRP").length} metrics)
150
+ Includes GRP-specific metrics. See \`metric-types://all\` for details.
151
+
152
+ ### FLOODLIGHT Report Metrics (${getMetricsForReportType("FLOODLIGHT").length} metrics)
153
+ Includes Floodlight conversion metrics. See \`metric-types://all\` for details.
154
+
155
+ ---
156
+
157
+ ## Compatible Filters by Report Type
158
+
159
+ ### STANDARD Report Filters (${getFiltersForReportType("STANDARD").length} filters)
160
+ Most general filters are available. See \`filter-types://all\` for the full list.
161
+
162
+ ### YOUTUBE Report Filters (${getFiltersForReportType("YOUTUBE").length} filters)
163
+ Includes TrueView-specific filters:
164
+ \`\`\`
165
+ ${getFiltersForReportType("YOUTUBE")
166
+ .filter((f) => f.includes("TRUEVIEW"))
167
+ .slice(0, 10)
168
+ .join("\n")}
169
+ ${getFiltersForReportType("YOUTUBE").filter((f) => f.includes("TRUEVIEW")).length > 10 ? "... and more" : ""}
170
+ \`\`\`
171
+
172
+ ### GRP Report Filters (${getFiltersForReportType("GRP").length} filters)
173
+ Includes Nielsen-specific filters:
174
+ \`\`\`
175
+ ${getFiltersForReportType("GRP")
176
+ .filter((f) => f.includes("NIELSEN"))
177
+ .join("\n") || "See filter-types://all for details"}
178
+ \`\`\`
179
+
180
+ ---
181
+
182
+ ## Additional Resources
183
+
184
+ For complete lists, fetch these MCP Resources:
185
+ - \`metric-types://all\` - All metrics with report type compatibility
186
+ - \`filter-types://all\` - All filters with report type compatibility
187
+ - \`compatibility-rules://all\` - Detailed compatibility rules and warnings
188
+ `;
189
+ return markdown;
190
+ }
191
+ export const reportTypesResource = {
192
+ uri: "report-types://all",
193
+ name: "Bid Manager Report Types",
194
+ description: "Complete reference of all available Bid Manager API report types and date range presets",
195
+ mimeType: "text/markdown",
196
+ getContent: () => formatReportTypesMarkdown(),
197
+ };
198
+ //# sourceMappingURL=report-types.resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-types.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/report-types.resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./definitions/index.js";
2
+ export type { Resource, ResourceTemplate } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/resources/index.ts"],"names":[],"mappings":"AAOA,cAAc,wBAAwB,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from "./definitions/index.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp-server/resources/index.ts"],"names":[],"mappings":"AAOA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface Resource {
2
+ uri: string;
3
+ name: string;
4
+ description: string;
5
+ mimeType: string;
6
+ getContent: () => string;
7
+ }
8
+ export interface ResourceTemplate {
9
+ uriTemplate: string;
10
+ name: string;
11
+ description: string;
12
+ mimeType: string;
13
+ getContent: (params: Record<string, string>) => string;
14
+ parseUri: (uri: string) => Record<string, string> | null;
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/resources/types.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,QAAQ;IAEvB,GAAG,EAAE,MAAM,CAAC;IAEZ,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,MAAM,MAAM,CAAC;CAC1B;AAKD,MAAM,WAAW,gBAAgB;IAE/B,WAAW,EAAE,MAAM,CAAC;IAEpB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,MAAM,CAAC;IAEpB,QAAQ,EAAE,MAAM,CAAC;IAEjB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;IAEvD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC1D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mcp-server/resources/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Logger } from "pino";
3
+ export declare function createMcpServer(logger: Logger, sessionId?: string, gcsBucket?: string): Promise<McpServer>;
4
+ export declare function runStdioServer(server: McpServer, logger: Logger): Promise<void>;
5
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp-server/server.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkBpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAiBnC,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC,CAyHpB;AAKD,wBAAsB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKrF"}
@@ -0,0 +1,115 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { allTools } from "./tools/index.js";
4
+ import { allResources } from "./resources/index.js";
5
+ import { promptRegistry } from "./prompts/index.js";
6
+ import { createOperationContext } from "@cesteral/shared";
7
+ import { sessionServiceStore } from "../services/session-services.js";
8
+ import { registerRunCustomQueryAsyncTool } from "./tools/definitions/run-custom-query-async.tool.js";
9
+ import { extractZodShape, registerToolsFromDefinitions, registerPromptsFromDefinitions, registerStaticResourcesFromDefinitions, InteractionLogger, isConformanceFixturesEnabled, } from "@cesteral/shared";
10
+ import packageJson from "../../package.json" with { type: "json" };
11
+ const DBM_PACKAGE_NAME = "dbm-mcp";
12
+ const DBM_PLATFORM = "dv360-reporting";
13
+ const dbmWorkflowIdByToolName = {
14
+ dbm_get_campaign_delivery: "mcp.troubleshoot.delivery",
15
+ dbm_get_performance_metrics: "mcp.troubleshoot.delivery",
16
+ dbm_get_historical_metrics: "mcp.troubleshoot.delivery",
17
+ dbm_get_pacing_status: "mcp.troubleshoot.delivery",
18
+ dbm_run_custom_query: "mcp.execute.dbm_custom_query",
19
+ };
20
+ export async function createMcpServer(logger, sessionId, gcsBucket) {
21
+ const server = new McpServer({
22
+ name: "dbm-mcp",
23
+ version: packageJson.version,
24
+ description: "DV360 reporting and metrics via Bid Manager API v2. Provides read-only access to campaign delivery, performance, pacing, and historical data.",
25
+ }, {
26
+ capabilities: {
27
+ logging: {},
28
+ },
29
+ instructions: "DV360 reporting server. Provides read-only access to campaign delivery metrics, performance data, pacing, and historical trends via Bid Manager API v2. " +
30
+ "Start with dbm_get_campaign_delivery or dbm_get_pacing_status. Use dbm_run_custom_query for advanced Bid Manager reports. " +
31
+ "See MCP Resources for metric/filter references and query examples.",
32
+ });
33
+ const interactionLogger = new InteractionLogger({
34
+ serverName: DBM_PACKAGE_NAME,
35
+ logger,
36
+ gcsBucket,
37
+ });
38
+ registerToolsFromDefinitions({
39
+ server,
40
+ tools: allTools,
41
+ logger,
42
+ sessionId,
43
+ transformSchema: (schema) => extractZodShape(schema),
44
+ createRequestContext: (params) => createOperationContext({
45
+ operation: params.operation,
46
+ additionalContext: params.additionalContext,
47
+ }),
48
+ defaultTextFormat: "compact",
49
+ packageName: DBM_PACKAGE_NAME,
50
+ platform: DBM_PLATFORM,
51
+ workflowIdByToolName: dbmWorkflowIdByToolName,
52
+ interactionLogger,
53
+ authContextResolver: sessionId
54
+ ? () => sessionServiceStore.getAuthContext(sessionId)
55
+ : undefined,
56
+ });
57
+ registerStaticResourcesFromDefinitions({
58
+ server,
59
+ resources: allResources,
60
+ logger,
61
+ });
62
+ if (isConformanceFixturesEnabled()) {
63
+ const { conformanceResources, conformanceResourceTemplate, conformancePrompts } = await import("@cesteral/shared");
64
+ const { ResourceTemplate: McpResourceTemplate } = await import("@modelcontextprotocol/sdk/server/mcp.js");
65
+ registerStaticResourcesFromDefinitions({
66
+ server,
67
+ resources: conformanceResources,
68
+ logger,
69
+ });
70
+ const template = new McpResourceTemplate(conformanceResourceTemplate.uriTemplate, {
71
+ list: undefined,
72
+ });
73
+ server.registerResource("conformance_template", template, {
74
+ description: conformanceResourceTemplate.description,
75
+ mimeType: conformanceResourceTemplate.mimeType,
76
+ }, async (uri, variables) => {
77
+ const id = variables.id || "unknown";
78
+ const content = conformanceResourceTemplate.getContent(id);
79
+ return {
80
+ contents: [
81
+ {
82
+ uri: uri.href,
83
+ mimeType: conformanceResourceTemplate.mimeType,
84
+ text: content,
85
+ },
86
+ ],
87
+ };
88
+ });
89
+ registerPromptsFromDefinitions({
90
+ server: server,
91
+ prompts: conformancePrompts,
92
+ logger,
93
+ });
94
+ }
95
+ const allPrompts = Array.from(promptRegistry.values()).map((def) => ({
96
+ name: def.prompt.name,
97
+ description: def.prompt.description ?? "",
98
+ arguments: def.prompt.arguments,
99
+ generateMessage: def.generateMessage,
100
+ }));
101
+ registerPromptsFromDefinitions({
102
+ server: server,
103
+ prompts: allPrompts,
104
+ logger,
105
+ });
106
+ registerRunCustomQueryAsyncTool(server, logger, sessionId);
107
+ return server;
108
+ }
109
+ export async function runStdioServer(server, logger) {
110
+ logger.info("Starting MCP server with stdio transport");
111
+ const transport = new StdioServerTransport();
112
+ await server.connect(transport);
113
+ logger.info("MCP server connected via stdio");
114
+ }
115
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp-server/server.ts"],"names":[],"mappings":"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"}