Skip to main content
Glama
config.ts3.31 kB
/** * MCP Server Configuration * * Handles CLI flags, environment variables, and configuration file loading. */ export interface McpServerConfig { // Code generation codegenOutDir: string; // Budget (tracks provider costs, not RelayPlane fees - we're BYOK) maxDailyCostUsd: number; maxSingleCallCostUsd: number; maxCallsPerHour: number; // Execution defaultTimeoutMs: number; maxConcurrentRuns: number; // Providers providers: { openai?: { apiKey: string }; anthropic?: { apiKey: string }; google?: { apiKey: string }; xai?: { apiKey: string }; }; // Trace URL base traceUrlBase: string; } const DEFAULT_CONFIG: McpServerConfig = { codegenOutDir: './servers/relayplane', maxDailyCostUsd: 5.00, maxSingleCallCostUsd: 0.50, maxCallsPerHour: 100, defaultTimeoutMs: 30000, maxConcurrentRuns: 3, providers: {}, traceUrlBase: 'https://app.relayplane.com/runs', }; let currentConfig: McpServerConfig = { ...DEFAULT_CONFIG }; /** * Parse CLI arguments */ export function parseCliArgs(args: string[]): Partial<McpServerConfig> { const config: Partial<McpServerConfig> = {}; for (let i = 0; i < args.length; i++) { const arg = args[i]; if (arg === '--out-dir' && args[i + 1]) { config.codegenOutDir = args[++i]; } else if (arg === '--max-daily-cost' && args[i + 1]) { config.maxDailyCostUsd = parseFloat(args[++i]); } else if (arg === '--max-single-call-cost' && args[i + 1]) { config.maxSingleCallCostUsd = parseFloat(args[++i]); } else if (arg === '--max-calls-per-hour' && args[i + 1]) { config.maxCallsPerHour = parseInt(args[++i], 10); } else if (arg === '--timeout' && args[i + 1]) { config.defaultTimeoutMs = parseInt(args[++i], 10); } } return config; } /** * Load provider keys from environment variables */ export function loadProvidersFromEnv(): McpServerConfig['providers'] { const providers: McpServerConfig['providers'] = {}; if (process.env.OPENAI_API_KEY) { providers.openai = { apiKey: process.env.OPENAI_API_KEY }; } if (process.env.ANTHROPIC_API_KEY) { providers.anthropic = { apiKey: process.env.ANTHROPIC_API_KEY }; } if (process.env.GOOGLE_API_KEY) { providers.google = { apiKey: process.env.GOOGLE_API_KEY }; } if (process.env.XAI_API_KEY) { providers.xai = { apiKey: process.env.XAI_API_KEY }; } return providers; } /** * Initialize configuration from CLI args and environment */ export function initConfig(cliArgs: string[] = process.argv.slice(2)): McpServerConfig { const cliConfig = parseCliArgs(cliArgs); const providers = loadProvidersFromEnv(); currentConfig = { ...DEFAULT_CONFIG, ...cliConfig, providers: { ...DEFAULT_CONFIG.providers, ...providers }, }; return currentConfig; } /** * Get current configuration */ export function getConfig(): McpServerConfig { return currentConfig; } /** * Get provider API key */ export function getProviderKey(provider: string): string | undefined { const providers = currentConfig.providers as Record<string, { apiKey: string } | undefined>; return providers[provider]?.apiKey; } /** * Check if provider is configured */ export function isProviderConfigured(provider: string): boolean { return !!getProviderKey(provider); }

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/RelayPlane/mcp-server'

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