Second Opinion MCP Server

// API Keys if (!process.env.GEMINI_API_KEY) { throw new Error('GEMINI_API_KEY environment variable is required'); } if (!process.env.PERPLEXITY_API_KEY) { throw new Error('PERPLEXITY_API_KEY environment variable is required'); } export const GEMINI_API_KEY = process.env.GEMINI_API_KEY; export const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY; // Stack Exchange API Configuration export const STACK_EXCHANGE_CONFIG = { site: 'stackoverflow', pageSize: 3, filters: { // Default filter that includes basic fields question: 'default', // Default filter that includes basic fields answer: 'default', }, timeout: 10000, // 10 seconds } as const; // API Endpoints export const API_ENDPOINTS = { perplexity: 'https://api.perplexity.ai/chat/completions', stackExchange: { base: 'https://api.stackexchange.com/2.3', search: '/search/advanced', answers: '/answers', }, gemini: 'https://generativelanguage.googleapis.com/v1beta', } as const; // Language Map for File Extensions export type FileExtension = '.js' | '.ts' | '.jsx' | '.tsx' | '.py' | '.rb' | '.java' | '.go' | '.rs' | '.cpp' | '.c' | '.cs' | '.php' | '.swift' | '.kt' | '.scala' | '.html' | '.css' | '.scss' | '.sql'; export const LANGUAGE_MAP: Record<FileExtension, string> = { '.js': 'JavaScript', '.ts': 'TypeScript', '.jsx': 'React/JavaScript', '.tsx': 'React/TypeScript', '.py': 'Python', '.rb': 'Ruby', '.java': 'Java', '.go': 'Go', '.rs': 'Rust', '.cpp': 'C++', '.c': 'C', '.cs': 'C#', '.php': 'PHP', '.swift': 'Swift', '.kt': 'Kotlin', '.scala': 'Scala', '.html': 'HTML', '.css': 'CSS', '.scss': 'SCSS', '.sql': 'SQL', };