Skip to main content
Glama
agilesix
by agilesix
get-spending-over-time.ts2.57 kB
/** * Get Spending Over Time Tool * Analyze spending trends over time */ import { z } from 'zod'; import type { USASpendingClient } from '../clients/usaspending'; import { buildAwardFilters } from '../builders/filter-builder'; import type { GetSpendingOverTimeParams } from '../types/tool-params'; export function registerGetSpendingOverTimeTool(server: any, client: USASpendingClient) { server.tool( "get_spending_over_time", "Analyze spending trends over time for transaction activity. Returns time-series data grouped by fiscal year, quarter, or month. NOTE: Analyzes transaction activity (when money was obligated), not original award dates.", { keywords: z.array(z.string()).optional().describe("Keywords to search in award descriptions"), recipientName: z.string().optional().describe("Contractor/recipient name to filter by"), agencyName: z.string().optional().describe("Awarding agency name"), naicsCodes: z.array(z.string()).optional().describe("NAICS codes to filter by"), pscCodes: z.array(z.string()).optional().describe("Product Service Codes to filter by"), activityStartDate: z.string().optional().describe("Start date in YYYY-MM-DD format for transaction activity period"), activityEndDate: z.string().optional().describe("End date in YYYY-MM-DD format for transaction activity period"), group: z.enum(['fiscal_year', 'quarter', 'month']).optional().describe("How to group the time series data (default: fiscal_year)"), }, async (params: GetSpendingOverTimeParams) => { try { // Build filters using centralized filter builder const filters = buildAwardFilters({ keywords: params.keywords, recipientName: params.recipientName, agencyName: params.agencyName, naicsCodes: params.naicsCodes, pscCodes: params.pscCodes, activityStartDate: params.activityStartDate, activityEndDate: params.activityEndDate, }); const result = await client.getSpendingOverTime({ filters, group: params.group || 'fiscal_year', }); return { content: [ { type: "text", text: JSON.stringify( { summary: `Spending trends grouped by ${params.group || 'fiscal_year'}`, group_by: params.group || 'fiscal_year', results: result.results || [], }, null, 2 ), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : "Unknown error"}`, }, ], }; } } ); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/agilesix/usaspending-mcp-nextjs'

If you have feedback or need assistance with the MCP directory API, please join our Discord server