alphaIntelligence_topGainersLosers
Track the top N gainers, losers, and most actively traded US tickers using comprehensive financial data from the Alpha Vantage API via MCP Avantage server.
Instructions
Retrieves the top N gainers, losers, and most actively traded US tickers.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/index.ts:138-153 (registration)Registration of the MCP tool 'alphaIntelligence_topGainersLosers' using server.addTool, including name, description, empty parameter schema, and execute handler.server.addTool({ name: "alphaIntelligence_topGainersLosers", description: "Retrieves the top N gainers, losers, and most actively traded US tickers.", parameters: z.object({}), // No parameters needed execute: ( args, context // Let type be inferred ) => executeAvantageTool( "alphaIntelligence_topGainersLosers", args, context, (av) => av.alphaIntelligence.topGainersLosers() ), });
- src/index.ts:143-152 (handler)The tool's execute handler function, which delegates to the generic executeAvantageTool helper and specifies the AVantage library call av.alphaIntelligence.topGainersLosers().execute: ( args, context // Let type be inferred ) => executeAvantageTool( "alphaIntelligence_topGainersLosers", args, context, (av) => av.alphaIntelligence.topGainersLosers() ),
- src/index.ts:142-142 (schema)Inline Zod schema defining empty input parameters (no arguments required).parameters: z.object({}), // No parameters needed
- src/index.ts:38-115 (helper)Generic helper function shared across all tools for executing AVantage library methods, managing API keys, caching AVantage instances, calling the library, and handling responses/errors.async function executeAvantageTool<TArgs, TResult>( toolName: string, args: TArgs, context: Context<Record<string, unknown> | undefined>, // Use the imported Context type directly avantageMethod: ( av: AVantage, args: TArgs ) => Promise<{ error?: boolean; reason?: string; data?: TResult }> ): Promise<string> { logger.info(`Executing '${toolName}' tool for request ID: ${context}`); logger.debug(`Args for ${toolName}: ${JSON.stringify(args)}`); // --- Authentication & Resource Management --- // Access extraArgs safely - it might be null or undefined const extraArgsApiKey = context.extraArgs?.apiKey as string | undefined; const apiKey = extraArgsApiKey || config.apiKey; if (!apiKey) { logger.error(`'${toolName}' failed: Alpha Vantage API key missing.`); throw new UserError(apiKeyErrorMessage); } logger.debug( `Using AV API key (source: ${extraArgsApiKey ? "extraArgs" : "environment"}) for ${toolName}` ); try { // Get or create AVantage instance managed by ResourceManager const av = await resourceManager.getResource<AVantage>( apiKey, // Cache key is the resolved API key "avantage_client", // Type identifier for logging async (key) => { // Factory Function logger.info( `Creating new AVantage instance for key ending ...${key.slice(-4)}` ); // AVantage library reads AV_PREMIUM from process.env internally return new AVantage(key); }, async (avInstance) => { // Cleanup Function (no-op needed for AVantage) logger.debug(`Destroying AVantage instance (no-op)`); } ); // --- Library Call --- const result = await avantageMethod(av, args); // --- Response Handling --- if (result.error) { logger.warn( `'${toolName}' failed. Reason from avantage: ${result.reason}` ); throw new UserError(result.reason || `Tool '${toolName}' failed.`); } if (result.data === undefined || result.data === null) { logger.warn(`'${toolName}' completed successfully but returned no data.`); return "null"; // Return string "null" for empty data } logger.info(`'${toolName}' completed successfully.`); // Stringify the data part of the response return JSON.stringify(result.data); } catch (error: any) { logger.error( `Error during execution of '${toolName}': ${error.message}`, error ); // If it's already a UserError, rethrow it if (error instanceof UserError) { throw error; } // Otherwise, wrap it in a UserError throw new UserError( `An unexpected error occurred while executing tool '${toolName}': ${error.message}` ); } }