Skip to main content
Glama

MCP Avantage

by MissionSquad

economicIndicators_realGDP

Access US Real GDP data for economic analysis. Choose between annual or quarterly intervals and retrieve results in JSON or CSV format using MCP Avantage.

Instructions

Retrieves US Real Gross Domestic Product (GDP) data.

Input Schema

NameRequiredDescriptionDefault
datatypeNoData format for the response.json
intervalNoTime interval.annual

Input Schema (JSON Schema)

{ "additionalProperties": false, "description": "Parameters for fetching Real GDP data.", "properties": { "datatype": { "default": "json", "description": "Data format for the response.", "enum": [ "json", "csv" ], "type": "string" }, "interval": { "default": "annual", "description": "Time interval.", "enum": [ "annual", "quarterly" ], "type": "string" } }, "type": "object" }

Implementation Reference

  • src/index.ts:551-565 (registration)
    Registers the MCP tool 'economicIndicators_realGDP' with name, description, Zod input schema, and inline execute handler that calls the shared executeAvantageTool helper with the specific AVantage library method.
    server.addTool({ name: "economicIndicators_realGDP", description: "Retrieves US Real Gross Domestic Product (GDP) data.", parameters: schemas.EconomicIndicatorsRealGDPParamsSchema, execute: ( args, context // Let type be inferred ) => executeAvantageTool( "economicIndicators_realGDP", args, context, (av, params) => av.economicIndicators.realGDP(params) ), });
  • Core handler logic shared across all tools: resolves API key, manages AVantage client instances via resource manager, invokes the library method (av.economicIndicators.realGDP(params) for this tool), processes response, handles errors, and returns JSON data.
    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}` ); } }
  • Zod schema for tool input validation: optional 'interval' (annual or quarterly, defaults to annual) and 'datatype' (json or csv, defaults to json).
    export const EconomicIndicatorsRealGDPParamsSchema = z.object({ interval: z.enum(['annual', 'quarterly']).default('annual').optional().describe('Time interval.'), datatype: DatatypeSchema.default('json').optional(), }).describe('Parameters for fetching Real GDP data.')
  • JSDoc comment documenting the executeAvantageTool helper function's purpose and parameters.
    /** * A generic function to execute an Avantage library method within an MCP tool. * Handles API key resolution, AVantage instance management via ResourceManager, * calling the library method, and handling the response/errors. * * @param toolName The name of the MCP tool (for logging). * @param args Validated tool arguments. * @param context MCP execution context containing extraArgs and requestId. * @param avantageMethod A function that takes the AVantage instance and args, and calls the appropriate library method. * @returns The stringified data from the Avantage library call. * @throws {UserError} If authentication fails or the library call returns an error. */

Other Tools

Related Tools

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/MissionSquad/mcp-avantage'

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