get_party_coordinated_expenditures
Retrieve party coordinated expenditures from Federal Election Commission data to analyze campaign finance activities by filtering committee, candidate, date range, and amount parameters.
Instructions
Get party coordinated expenditures
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| committee_id | No | Optional: FEC committee ID | |
| candidate_id | No | Optional: FEC candidate ID | |
| min_date | No | Optional: Minimum expenditure date (YYYY-MM-DD) | |
| max_date | No | Optional: Maximum expenditure date (YYYY-MM-DD) | |
| min_amount | No | Optional: Minimum expenditure amount | |
| max_amount | No | Optional: Maximum expenditure amount | |
| sort | No | Optional: Sort by expenditure amount |
Implementation Reference
- src/server.ts:730-761 (handler)The main handler function for the 'get_party_coordinated_expenditures' tool. Validates input with Zod schema matching the registered inputSchema, consumes rate limit token, fetches data from OpenFEC API endpoint '/schedules/schedule_f' with provided filters and sorting, paginates to 20 results, and returns the JSON response as text content.private async handleGetPartyCoordinatedExpenditures(args: any) { const schema = z.object({ committee_id: z.string().optional(), candidate_id: z.string().optional(), min_date: z.string().optional(), max_date: z.string().optional(), min_amount: z.number().optional(), max_amount: z.number().optional(), sort: z.enum(['asc', 'desc']).optional() }); const params = schema.parse(args); this.rateLimiter.consumeToken(); const response = await this.axiosInstance.get('/schedules/schedule_f', { params: { ...params, sort_hide_null: true, sort: params.sort === 'desc' ? '-expenditure_amount' : 'expenditure_amount', per_page: 20 } }); return { content: [ { type: 'text', text: JSON.stringify(response.data, null, 2), }, ], }; }
- src/server.ts:313-350 (registration)Registration of the tool in the ListTools handler response array, including name, description, and detailed inputSchema for parameters like committee_id, candidate_id, date ranges, amount filters, and sort order.{ name: 'get_party_coordinated_expenditures', description: 'Get party coordinated expenditures', inputSchema: { type: 'object', properties: { committee_id: { type: 'string', description: 'Optional: FEC committee ID' }, candidate_id: { type: 'string', description: 'Optional: FEC candidate ID' }, min_date: { type: 'string', description: 'Optional: Minimum expenditure date (YYYY-MM-DD)' }, max_date: { type: 'string', description: 'Optional: Maximum expenditure date (YYYY-MM-DD)' }, min_amount: { type: 'number', description: 'Optional: Minimum expenditure amount' }, max_amount: { type: 'number', description: 'Optional: Maximum expenditure amount' }, sort: { type: 'string', enum: ['asc', 'desc'], description: 'Optional: Sort by expenditure amount' } } } },
- src/server.ts:463-464 (registration)Dispatch/registration in the CallToolRequestSchema switch statement that routes calls to the specific handler method.case 'get_party_coordinated_expenditures': return await this.handleGetPartyCoordinatedExpenditures(request.params.arguments);
- src/server.ts:731-739 (schema)Zod schema for input validation inside the handler, mirroring the registered inputSchema.const schema = z.object({ committee_id: z.string().optional(), candidate_id: z.string().optional(), min_date: z.string().optional(), max_date: z.string().optional(), min_amount: z.number().optional(), max_amount: z.number().optional(), sort: z.enum(['asc', 'desc']).optional() });