Opik MCP Server

Official
  • tests
import { describe, test, expect } from '@jest/globals'; import { opikCapabilities, getEnabledCapabilities, getCapabilitiesDescription, } from '../src/utils/capabilities.js'; describe('Capabilities Module Tests', () => { // Test the opikCapabilities object structure test('opikCapabilities should have the correct structure', () => { // Check main sections expect(opikCapabilities).toHaveProperty('prompts'); expect(opikCapabilities).toHaveProperty('projects'); expect(opikCapabilities).toHaveProperty('traces'); expect(opikCapabilities).toHaveProperty('metrics'); expect(opikCapabilities).toHaveProperty('general'); // Check prompts section expect(opikCapabilities.prompts).toHaveProperty('available'); expect(opikCapabilities.prompts).toHaveProperty('features'); expect(opikCapabilities.prompts).toHaveProperty('limitations'); expect(opikCapabilities.prompts).toHaveProperty('examples'); expect(opikCapabilities.prompts).toHaveProperty('versionControl'); expect(opikCapabilities.prompts).toHaveProperty('templateFormat'); expect(opikCapabilities.prompts).toHaveProperty('schema'); expect(Array.isArray(opikCapabilities.prompts.features)).toBe(true); expect(Array.isArray(opikCapabilities.prompts.limitations)).toBe(true); expect(Array.isArray(opikCapabilities.prompts.examples)).toBe(true); // Check projects section expect(opikCapabilities.projects).toHaveProperty('available'); expect(opikCapabilities.projects).toHaveProperty('features'); expect(opikCapabilities.projects).toHaveProperty('limitations'); expect(opikCapabilities.projects).toHaveProperty('examples'); expect(opikCapabilities.projects).toHaveProperty('hierarchySupport'); expect(opikCapabilities.projects).toHaveProperty('sharingSupport'); expect(opikCapabilities.projects).toHaveProperty('schema'); expect(Array.isArray(opikCapabilities.projects.features)).toBe(true); expect(Array.isArray(opikCapabilities.projects.limitations)).toBe(true); expect(Array.isArray(opikCapabilities.projects.examples)).toBe(true); // Check traces section expect(opikCapabilities.traces).toHaveProperty('available'); expect(opikCapabilities.traces).toHaveProperty('features'); expect(opikCapabilities.traces).toHaveProperty('limitations'); expect(opikCapabilities.traces).toHaveProperty('examples'); expect(opikCapabilities.traces).toHaveProperty('dataRetention'); expect(opikCapabilities.traces).toHaveProperty('searchCapabilities'); expect(opikCapabilities.traces).toHaveProperty('filterOptions'); expect(opikCapabilities.traces).toHaveProperty('schema'); expect(Array.isArray(opikCapabilities.traces.features)).toBe(true); expect(Array.isArray(opikCapabilities.traces.limitations)).toBe(true); expect(Array.isArray(opikCapabilities.traces.examples)).toBe(true); expect(Array.isArray(opikCapabilities.traces.searchCapabilities)).toBe(true); expect(Array.isArray(opikCapabilities.traces.filterOptions)).toBe(true); // Check metrics section expect(opikCapabilities.metrics).toHaveProperty('available'); expect(opikCapabilities.metrics).toHaveProperty('features'); expect(opikCapabilities.metrics).toHaveProperty('limitations'); expect(opikCapabilities.metrics).toHaveProperty('examples'); expect(opikCapabilities.metrics).toHaveProperty('availableMetrics'); expect(opikCapabilities.metrics).toHaveProperty('customMetricsSupport'); expect(opikCapabilities.metrics).toHaveProperty('visualizationSupport'); expect(opikCapabilities.metrics).toHaveProperty('schema'); expect(Array.isArray(opikCapabilities.metrics.features)).toBe(true); expect(Array.isArray(opikCapabilities.metrics.limitations)).toBe(true); expect(Array.isArray(opikCapabilities.metrics.examples)).toBe(true); expect(Array.isArray(opikCapabilities.metrics.availableMetrics)).toBe(true); // Check general section expect(opikCapabilities.general).toHaveProperty('apiVersion'); expect(opikCapabilities.general).toHaveProperty('authentication'); expect(opikCapabilities.general).toHaveProperty('rateLimit'); expect(opikCapabilities.general).toHaveProperty('supportedFormats'); expect(Array.isArray(opikCapabilities.general.supportedFormats)).toBe(true); }); // Test getEnabledCapabilities function test('getEnabledCapabilities should filter based on config', () => { // Test with all features enabled const fullConfig = { mcpEnablePromptTools: true, mcpEnableProjectTools: true, mcpEnableTraceTools: true, mcpEnableMetricTools: true, }; const fullCapabilities = getEnabledCapabilities(fullConfig); expect(fullCapabilities.prompts?.available).toBe(true); expect(fullCapabilities.projects?.available).toBe(true); expect(fullCapabilities.traces?.available).toBe(true); expect(fullCapabilities.metrics?.available).toBe(true); // Test with some features disabled const partialConfig = { mcpEnablePromptTools: true, mcpEnableProjectTools: false, mcpEnableTraceTools: true, mcpEnableMetricTools: false, }; const partialCapabilities = getEnabledCapabilities(partialConfig); expect(partialCapabilities.prompts?.available).toBe(true); expect(partialCapabilities.projects?.available).toBe(false); expect(partialCapabilities.traces?.available).toBe(true); expect(partialCapabilities.metrics?.available).toBe(false); // Test with all features disabled const noConfig = { mcpEnablePromptTools: false, mcpEnableProjectTools: false, mcpEnableTraceTools: false, mcpEnableMetricTools: false, }; const noCapabilities = getEnabledCapabilities(noConfig); expect(noCapabilities.prompts?.available).toBe(false); expect(noCapabilities.projects?.available).toBe(false); expect(noCapabilities.traces?.available).toBe(false); expect(noCapabilities.metrics?.available).toBe(false); }); // Test getCapabilitiesDescription function test('getCapabilitiesDescription should generate a description string', () => { // Test with all features enabled const fullConfig = { mcpEnablePromptTools: true, mcpEnableProjectTools: true, mcpEnableTraceTools: true, mcpEnableMetricTools: true, }; const description = getCapabilitiesDescription(fullConfig); // Check that the description is a non-empty string expect(typeof description).toBe('string'); expect(description.length).toBeGreaterThan(0); // Check that it contains sections for each capability expect(description).toContain('General:'); expect(description).toContain('Prompts:'); expect(description).toContain('Projects:'); expect(description).toContain('Traces:'); expect(description).toContain('Metrics:'); // Check that it contains features and limitations expect(description).toContain('Features:'); expect(description).toContain('Limitations:'); // Test with all features disabled const noConfig = { mcpEnablePromptTools: false, mcpEnableProjectTools: false, mcpEnableTraceTools: false, mcpEnableMetricTools: false, }; const emptyDescription = getCapabilitiesDescription(noConfig); // Check that it still contains General section expect(emptyDescription).toContain('General:'); // Check that it shows features as not available expect(emptyDescription).toContain('Prompts: Not available'); expect(emptyDescription).toContain('Projects: Not available'); expect(emptyDescription).toContain('Traces: Not available'); expect(emptyDescription).toContain('Metrics: Not available'); }); });