get_campaign_report
Retrieve detailed analytics and performance data for a specific Mailchimp email campaign to track metrics and optimize marketing strategies.
Instructions
Get detailed report for a specific campaign
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| campaign_id | Yes | The campaign ID |
Implementation Reference
- src/services/mailchimp.ts:249-253 (handler)Core handler function in MailchimpService that executes the API request to fetch the campaign report using makeRequest to `/reports/${campaignId}`.async getCampaignReport( campaignId: string ): Promise<MailchimpCampaignReport> { return await this.makeRequest(`/reports/${campaignId}`); }
- src/tools/index.ts:297-310 (registration)Tool registration in getToolDefinitions array, including name, description, and input schema.{ name: "get_campaign_report", description: "Get detailed report for a specific campaign", inputSchema: { type: "object", properties: { campaign_id: { type: "string", description: "The campaign ID", }, }, required: ["campaign_id"], }, },
- src/tools/index.ts:883-892 (handler)MCP tool dispatch handler in handleToolCall switch that invokes the service method and formats the JSON response.case "get_campaign_report": const campaignReport = await service.getCampaignReport(args.campaign_id); return { content: [ { type: "text", text: JSON.stringify(campaignReport, null, 2), }, ], };
- src/types/index.ts:532-650 (schema)TypeScript interface defining the structure of the MailchimpCampaignReport, used as output type for the tool.export interface MailchimpCampaignReport { id: string; campaign_title: string; type: string; list_id: string; list_is_active: boolean; list_name: string; subject_line: string; preview_text?: string; emails_sent: number; abuse_reports: number; unsubscribed: number; send_time: string; rss_last_send?: string; bounces: { hard_bounces: number; soft_bounces: number; syntax_errors: number; }; forwards: { forwards_count: number; forwards_opens: number; }; opens: { opens_total: number; unique_opens: number; open_rate: number; last_open: string; }; clicks: { clicks_total: number; unique_clicks: number; unique_subscriber_clicks: number; click_rate: number; last_click: string; }; facebook_likes: { recipient_likes: number; unique_likes: number; facebook_likes: number; }; industry_stats: { type: string; open_rate: number; click_rate: number; bounce_rate: number; unopen_rate: number; unsub_rate: number; abuse_rate: number; }; list_stats: { sub_rate: number; unsub_rate: number; open_rate: number; click_rate: number; }; ab_split?: { a: { bounces: number; abuse_reports: number; unsubs: number; recipient_clicks: number; forwards: number; opens: number; last_open: string; unique_opens: number; }; b: { bounces: number; abuse_reports: number; unsubs: number; recipient_clicks: number; forwards: number; opens: number; last_open: string; unique_opens: number; }; }; timewarp?: Array<{ gmt_offset: number; opens: number; last_open: string; unique_opens: number; clicks: number; last_click: string; unique_clicks: number; bounces: number; }>; timeseries?: Array<{ timestamp: string; emails_sent: number; unique_opens: number; recipients_clicks: number; }>; share_report: { share_url: string; share_password: string; }; ecommerce?: { total_orders: number; total_spent: number; total_revenue: number; currency_code: string; }; delivery_status: { enabled: boolean; can_cancel: boolean; status: string; emails_sent: number; emails_canceled: number; }; _links?: Array<{ rel: string; href: string; method: string; targetSchema?: string; schema?: string; }>; }
- src/index.ts:42-46 (registration)MCP server registration for listing tools, which exposes getToolDefinitions including get_campaign_report.server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: getToolDefinitions(mailchimpService), }; });