UNPKG

@juspay/neurolink

Version:

Universal AI Development Platform with working MCP integration, multi-provider support, and professional CLI. Built-in tools operational, 58+ external MCP servers discoverable. Connect to filesystem, GitHub, database operations, and more. Build, test, and

232 lines (231 loc) 9.73 kB
/** * NeuroLink AI Core Server * Wraps existing AI provider functionality as MCP tools for orchestration * Integrates AIProviderFactory with Factory-First MCP architecture */ import { z } from "zod"; import { createMCPServer } from "../../factory.js"; import { getBestProvider, getAvailableProviders, } from "../../../utils/providerUtils.js"; import { logger } from "../../../utils/logger.js"; /** * AI Core Server - Central hub for AI provider management * Provides provider selection and status checking functionality */ export const aiCoreServer = createMCPServer({ id: "neurolink-ai-core", title: "NeuroLink AI Core", description: "Core AI provider management with automatic fallback and status monitoring", category: "aiProviders", version: "1.2.0", capabilities: [ "provider-selection", "automatic-fallback", "multi-provider-support", "provider-status-monitoring", ], }); /** * Provider Selection Input Schema */ const ProviderSelectionSchema = z.object({ preferred: z.string().optional(), requirements: z .object({ multimodal: z.boolean().optional(), streaming: z.boolean().optional(), maxTokens: z.number().optional(), costEfficient: z.boolean().optional(), }) .optional(), }); /** * Register Provider Selection Tool * Intelligent provider selection based on requirements and availability */ aiCoreServer.registerTool({ name: "select-provider", description: "Select the best available AI provider based on requirements and availability", category: "provider-management", inputSchema: ProviderSelectionSchema, isImplemented: true, execute: async (params, context) => { const startTime = Date.now(); try { const typedParams = params; logger.debug(`[AI-Core] Selecting provider with requirements:`, typedParams.requirements); // Use existing provider selection logic const availableProviders = getAvailableProviders(); const selectedProvider = await getBestProvider(typedParams.preferred); // Get provider capabilities const getProviderCapabilities = (provider) => ({ multimodal: provider === "openai" || provider === "vertex" || provider === "google-ai", streaming: provider === "openai" || provider === "anthropic" || provider === "azure" || provider === "mistral", maxTokens: provider === "anthropic" ? 100000 : provider === "huggingface" ? 2048 : 4000, costEfficient: provider === "google-ai" || provider === "vertex" || provider === "huggingface" || provider === "ollama", localExecution: provider === "ollama", openSource: provider === "huggingface" || provider === "ollama", }); const capabilities = getProviderCapabilities(selectedProvider); const executionTime = Date.now() - startTime; logger.debug(`[AI-Core] Selected provider: ${selectedProvider} in ${executionTime}ms`); return { success: true, data: { provider: selectedProvider, available: availableProviders, capabilities, reason: typedParams.preferred ? `Preferred provider ${typedParams.preferred} selected` : "Best available provider selected", selectedAt: new Date().toISOString(), }, usage: { executionTime, }, metadata: { toolName: "select-provider", serverId: "neurolink-ai-core", sessionId: context.sessionId, timestamp: Date.now(), executionTime, }, }; } catch (error) { const executionTime = Date.now() - startTime; const errorMessage = error instanceof Error ? error.message : String(error); logger.debug(`[AI-Core] Provider selection failed: ${errorMessage}`); return { success: false, error: errorMessage, metadata: { toolName: "select-provider", serverId: "neurolink-ai-core", sessionId: context.sessionId, timestamp: Date.now(), executionTime, }, }; } }, }); /** * Register Provider Status Tool * Check health and availability of AI providers */ aiCoreServer.registerTool({ name: "check-provider-status", description: "Check the health and availability status of AI providers", category: "provider-management", inputSchema: z.object({ provider: z.string().optional(), includeCapabilities: z.boolean().default(true), }), isImplemented: true, execute: async (params, context) => { const startTime = Date.now(); try { const typedParams = params; logger.debug(`[AI-Core] Checking provider status for: ${typedParams.provider || "all providers"}`); const availableProviders = getAvailableProviders(); const providerStatuses = []; const providersToCheck = typedParams.provider ? [typedParams.provider] : availableProviders; for (const provider of providersToCheck) { try { // Quick health check (can be enhanced with actual API calls) const isAvailable = availableProviders.includes(provider); providerStatuses.push({ provider, status: isAvailable ? "available" : "unavailable", capabilities: typedParams.includeCapabilities ? { textGeneration: true, multimodal: provider === "openai" || provider === "vertex" || provider === "google-ai", streaming: provider === "openai" || provider === "anthropic" || provider === "azure" || provider === "mistral", maxTokens: provider === "anthropic" ? 100000 : provider === "huggingface" ? 2048 : 4000, localExecution: provider === "ollama", openSource: provider === "huggingface" || provider === "ollama", } : undefined, lastChecked: new Date().toISOString(), }); } catch (error) { providerStatuses.push({ provider, status: "error", error: error instanceof Error ? error.message : String(error), lastChecked: new Date().toISOString(), }); } } const executionTime = Date.now() - startTime; logger.debug(`[AI-Core] Provider status check completed in ${executionTime}ms`); return { success: true, data: { providers: providerStatuses, summary: { total: providerStatuses.length, available: providerStatuses.filter((p) => p.status === "available") .length, unavailable: providerStatuses.filter((p) => p.status === "unavailable").length, errors: providerStatuses.filter((p) => p.status === "error").length, }, checkedAt: new Date().toISOString(), }, usage: { executionTime, }, metadata: { toolName: "check-provider-status", serverId: "neurolink-ai-core", sessionId: context.sessionId, timestamp: Date.now(), executionTime, }, }; } catch (error) { const executionTime = Date.now() - startTime; const errorMessage = error instanceof Error ? error.message : String(error); logger.debug(`[AI-Core] Provider status check failed: ${errorMessage}`); return { success: false, error: errorMessage, metadata: { toolName: "check-provider-status", serverId: "neurolink-ai-core", sessionId: context.sessionId, timestamp: Date.now(), executionTime, }, }; } }, }); // Log successful server creation logger.debug("[AI-Core] NeuroLink AI Core Server v1.2.0 created with provider management tools:", Object.keys(aiCoreServer.tools));