Skip to main content
Glama
by Disturbing
client.test.ts3.04 kB
import { env, createExecutionContext, waitOnExecutionContext } from 'cloudflare:test'; import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { WorkerSSEClientTransport } from '@xava-labs/test-utils'; import { WorkerWebSocketClientTransport } from '@xava-labs/test-utils'; describe('MCP Client Connection Tests', () => { const baseUrl = 'http://localhost'; const wsBaseUrl = 'ws://localhost'; // Define transport configurations const transportConfigs = [ { name: 'SSE', createTransport: (ctx: ExecutionContext) => { const url = new URL(`${baseUrl}/sse`); return new WorkerSSEClientTransport(url, ctx); } }, { name: 'WebSocket', createTransport: (ctx: ExecutionContext) => { const url = new URL(`${wsBaseUrl}/ws`); return new WorkerWebSocketClientTransport(url, ctx); } } ]; // Parameterized tests for each transport type describe.each(transportConfigs)('$name Transport', (transportConfig) => { let client: Client; let ctx: ExecutionContext; beforeEach(async () => { console.log(`--------- ${transportConfig.name} TEST STARTING ---------`); ctx = createExecutionContext(); // Create a new client client = new Client({ name: 'test-client', version: '1.0.0' }); console.log(`Created MCP Client for ${transportConfig.name} testing`); }); afterEach(async () => { console.log(`--------- ${transportConfig.name} TEST ENDING ---------`); try { await client.close(); console.log(`${transportConfig.name} client closed successfully`); } catch (err) { console.warn(`Error closing ${transportConfig.name} client:`, err); } }); it('should successfully connect to the mcp server', async () => { console.log(`Testing ${transportConfig.name} transport connection`); const transport = transportConfig.createTransport(ctx); await client.connect(transport); await waitOnExecutionContext(ctx); console.log(`${transportConfig.name} client connection test passed!`); }); it('should return server version matching the implementation', async () => { console.log(`Testing ${transportConfig.name} server version`); const transport = transportConfig.createTransport(ctx); await client.connect(transport); const serverInfo = await client.getServerVersion(); // Verify that serverInfo is defined expect(serverInfo).not.toBeUndefined(); if (serverInfo) { // Expected values from TestHonoServer's getImplementation method expect(serverInfo.name).toBe('ExampleMcpServer'); expect(serverInfo.version).toBe('1.0.0'); } await waitOnExecutionContext(ctx); console.log(`${transportConfig.name} server version test passed!`); }); }); });

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/Disturbing/mcp-live-code'

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