Skip to main content
Glama

Tradovate MCP Server

const { describe, test, expect, beforeEach, afterEach, afterAll } = require('@jest/globals'); const EventEmitter = require('events'); // Simple mock WebSocket implementation class MockWebSocket extends EventEmitter { constructor(url) { super(); this.url = url; this.readyState = 1; // Already OPEN this.sent = []; } send(data) { this.sent.push(data); return true; } close() { this.readyState = 3; // CLOSED this.emit('close', { code: 1000, reason: 'Normal closure' }); } } // Mock logger const mockLogger = { info: jest.fn(), error: jest.fn(), warn: jest.fn() }; // Mock auth const mockAuth = { getAccessToken: jest.fn().mockResolvedValue({ accessToken: 'mock-token', expiresAt: Date.now() + 3600000 }) }; // Custom implementation of socket.js to avoid timing issues // This simplifies the socket implementation for testing const TradovateSocketMock = jest.fn().mockImplementation(() => { let connected = false; let mockWebSocket = null; return { isConnected: () => connected, connect: (url, token) => { mockWebSocket = new MockWebSocket(url); mockLogger.info(`Connecting to Tradovate WebSocket at ${url}`); connected = true; return Promise.resolve(); }, close: () => { mockLogger.info(`Closing WebSocket connection...`); connected = false; mockWebSocket = null; } }; }); // Mock the socket module directly without using the real implementation jest.mock('../src/socket.js', () => ({ TradovateSocket: TradovateSocketMock })); // Mock dependencies jest.mock('../src/logger.js', () => mockLogger); jest.mock('../src/auth.js', () => mockAuth); describe('Socket Basic Tests', () => { let socket; beforeEach(() => { jest.clearAllMocks(); // Create a new instance for each test socket = new TradovateSocketMock({ debugLabel: 'test' }); }); afterEach(() => { jest.clearAllMocks(); }); test('should initialize with default properties', () => { expect(socket).toBeDefined(); expect(socket.isConnected()).toBe(false); }); test('should connect successfully', async () => { await socket.connect('wss://test.com', 'test-token'); expect(socket.isConnected()).toBe(true); expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining('Connecting to Tradovate WebSocket')); }); test('should close the connection', async () => { // First connect await socket.connect('wss://test.com', 'test-token'); expect(socket.isConnected()).toBe(true); // Now test close socket.close(); expect(socket.isConnected()).toBe(false); expect(mockLogger.info).toHaveBeenCalledWith(expect.stringContaining('Closing WebSocket')); }); });

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

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