UNPKG

asset-price-mcp

Version:

An MCP-compatible service that provides real-time asset prices including precious metals, cryptocurrencies, and more

49 lines (48 loc) 1.47 kB
import nodeFetch from 'node-fetch'; import { z } from 'zod'; // @ts-ignore const fetchToUse = globalThis.fetch || nodeFetch; const DEFAULT_USER_AGENT = "asset-price-tracker/1.0"; const DEFAULT_TIMEOUT = 10000; export async function fetchWithTimeout(url, options = {}, timeout = DEFAULT_TIMEOUT) { const controller = new AbortController(); const id = setTimeout(() => controller.abort(), timeout); try { const response = await fetchToUse(url, { ...options, headers: { "User-Agent": DEFAULT_USER_AGENT, "Accept": "application/json", ...options.headers, }, signal: controller.signal }); return response; } finally { clearTimeout(id); } } export async function fetchJson(url, schema) { try { const response = await fetchWithTimeout(url); if (!response.ok) { console.warn(`HTTP error! status: ${response.status}, url: ${url}`); return null; } const data = await response.json(); if (schema) { return schema.parse(data); } return data; } catch (error) { if (error instanceof z.ZodError) { console.error(`Schema validation failed for ${url}:`, error.errors); } else { console.error(`API request failed for ${url}:`, error.message); } return null; } }