mcp-omnisearch
by spences10
Verified
- src
- config
// Environment variable configuration for the MCP Omnisearch server
// Search provider API keys
export const TAVILY_API_KEY = process.env.TAVILY_API_KEY;
export const BRAVE_API_KEY = process.env.BRAVE_API_KEY;
export const KAGI_API_KEY = process.env.KAGI_API_KEY;
// AI provider API keys
export const PERPLEXITY_API_KEY = process.env.PERPLEXITY_API_KEY;
// Content processing API keys
export const JINA_AI_API_KEY = process.env.JINA_AI_API_KEY;
// Provider configuration
export const config = {
search: {
tavily: {
api_key: TAVILY_API_KEY,
base_url: 'https://api.tavily.com',
timeout: 30000, // 30 seconds
},
brave: {
api_key: BRAVE_API_KEY,
base_url: 'https://api.search.brave.com/res/v1',
timeout: 10000, // 10 seconds
},
kagi: {
api_key: KAGI_API_KEY,
base_url: 'https://kagi.com/api/v0',
timeout: 20000, // 20 seconds
},
},
ai_response: {
perplexity: {
api_key: PERPLEXITY_API_KEY,
base_url: 'https://api.perplexity.ai',
timeout: 60000, // 60 seconds
},
kagi_fastgpt: {
api_key: KAGI_API_KEY,
base_url: 'https://kagi.com/api/v0/fastgpt',
timeout: 30000, // 30 seconds
},
},
processing: {
jina_reader: {
api_key: JINA_AI_API_KEY,
base_url: 'https://api.jina.ai/v1/reader',
timeout: 30000, // 30 seconds
},
kagi_summarizer: {
api_key: KAGI_API_KEY,
base_url: 'https://kagi.com/api/v0/summarize',
timeout: 30000, // 30 seconds
},
},
enhancement: {
kagi_enrichment: {
api_key: KAGI_API_KEY,
base_url: 'https://kagi.com/api/v0/enrich',
timeout: 20000, // 20 seconds
},
jina_grounding: {
api_key: JINA_AI_API_KEY,
base_url: 'https://api.jina.ai/v1/ground',
timeout: 20000, // 20 seconds
},
},
};
// Validate required environment variables
export const validate_config = () => {
const missing_keys: string[] = [];
const available_keys: string[] = [];
// Check search provider keys
if (!TAVILY_API_KEY) missing_keys.push('TAVILY_API_KEY');
else available_keys.push('TAVILY_API_KEY');
if (!BRAVE_API_KEY) missing_keys.push('BRAVE_API_KEY');
else available_keys.push('BRAVE_API_KEY');
if (!KAGI_API_KEY) missing_keys.push('KAGI_API_KEY');
else available_keys.push('KAGI_API_KEY');
if (!PERPLEXITY_API_KEY) missing_keys.push('PERPLEXITY_API_KEY');
else available_keys.push('PERPLEXITY_API_KEY');
if (!JINA_AI_API_KEY) missing_keys.push('JINA_AI_API_KEY');
else available_keys.push('JINA_AI_API_KEY');
// Log available keys
if (available_keys.length > 0) {
console.error(`Found API keys for: ${available_keys.join(', ')}`);
} else {
console.error(
'Warning: No API keys found. No providers will be available.',
);
}
// Log missing keys as informational
if (missing_keys.length > 0) {
console.warn(
`Missing API keys for: ${missing_keys.join(
', ',
)}. Some providers will not be available.`,
);
}
};