import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { apiRequest, formatResponse, textContent } from "../api-client.js";
interface DailyMetrics {
title: string;
value?: string | null;
data: { label: string; value: number }[];
}
const metricTypes = [
"gross_spend",
"net_spend",
"impressions",
"clicks",
"installs",
"revenue",
"purchase",
"all_purchase",
"retained",
"tutorial",
"registration",
"level",
"open",
"all_event_a",
"all_event_b",
"first_event_a",
"first_event_b",
"margin",
] as const;
export function registerMetricsTools(server: McpServer) {
// Get daily metrics
server.tool(
"get_daily_metrics",
"Get aggregated daily metrics as a time-series suitable for charting. Returns data for the specified metric over a date range.",
{
metric: z.enum(metricTypes).optional().describe("Metric to retrieve (default: gross_spend)"),
start_date: z.string().optional().describe("Start date in YYYY-MM-DD format (default: beginning of previous month)"),
end_date: z.string().optional().describe("End date in YYYY-MM-DD format (default: yesterday)"),
platform: z.string().optional().describe("Filter by platform string in campaign name"),
client_id: z.number().optional().describe("Filter by client ID"),
partner_id: z.number().optional().describe("Filter by partner ID"),
campaign_id: z.number().optional().describe("Filter by campaign ID"),
click_url_id: z.number().optional().describe("Filter by click URL ID"),
mobile_app_id: z.number().optional().describe("Filter by mobile app ID"),
},
async (params) => {
const response = await apiRequest<DailyMetrics>("/daily_metrics.json", params);
if (response.error) {
return textContent(`Error: ${response.error}`);
}
return textContent(formatResponse(response));
}
);
}