get_latest_rates
Fetch real-time exchange rates for specified currencies using the Frankfurter API. Input a base currency and optional symbols to retrieve up-to-date conversion data.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | Base currency code (default: EUR) | |
| symbols | No | Comma-separated currency codes to limit results (e.g., USD,GBP,JPY) |
Input Schema (JSON Schema)
{
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"base": {
"description": "Base currency code (default: EUR)",
"maxLength": 3,
"minLength": 3,
"type": "string"
},
"symbols": {
"description": "Comma-separated currency codes to limit results (e.g., USD,GBP,JPY)",
"type": "string"
}
},
"type": "object"
}
Implementation Reference
- src/tools/get_latest_rates.ts:29-73 (handler)The main handler function that implements the get_latest_rates tool logic: fetches latest exchange rates from Frankfurter API based on base currency and symbols, handles errors, and returns JSON-formatted response.export async function getLatestRates( input: GetLatestRatesInput, ): Promise<ToolResponse> { const { base, symbols } = input; try { const params = new URLSearchParams(); if (base) params.append("base", base.toUpperCase()); if (symbols) params.append("symbols", symbols.toUpperCase()); const url = `${FRANKFURTER_API_BASE}/latest${params.toString() ? `?${params.toString()}` : ""}`; const response = await fetch(url); if (!response.ok) { return { content: [ { type: "text", text: `Error: Unable to fetch exchange rates. Status: ${response.status}`, }, ], }; } const data = (await response.json()) as ExchangeRateResponse; return { content: [ { type: "text", text: JSON.stringify(data), }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error: Failed to fetch exchange rates - ${error instanceof Error ? error.message : "Unknown error"}`, }, ], }; } }
- src/tools/get_latest_rates.ts:8-20 (schema)Zod schema defining the input parameters for the get_latest_rates tool: optional base (3-letter currency code) and symbols (comma-separated codes).export const getLatestRatesSchema = { base: z .string() .length(3) .optional() .describe("Base currency code (default: EUR)"), symbols: z .string() .optional() .describe( "Comma-separated currency codes to limit results (e.g., USD,GBP,JPY)", ), };
- src/index.ts:29-31 (registration)Registration of the get_latest_rates tool with the MCP server using the schema and delegating to the handler function.this.server.tool("get_latest_rates", getLatestRatesSchema, async (input) => getLatestRates(input), );