Skip to main content
Glama
JagjeevanAK

OpenFoodFacts-mcp

by JagjeevanAK
transports.test.ts5.08 kB
/// <reference types="vitest/globals" /> import { describe, it, expect, vi, beforeEach } from 'vitest'; import { setupStdioTransport, setupHttpTransport } from '../../src/transport/transports'; import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import express from 'express'; import cors from 'cors'; import bodyParser from 'body-parser'; // Mock dependencies vi.mock('@modelcontextprotocol/sdk/server', () => ({ Server: vi.fn().mockImplementation((config) => ({ setStdioTransport: vi.fn().mockResolvedValue(undefined), connect: vi.fn().mockResolvedValue(undefined) })) })); vi.mock('express', () => { const mockApp = { use: vi.fn().mockReturnThis(), get: vi.fn().mockReturnThis(), post: vi.fn().mockReturnThis(), listen: vi.fn().mockImplementation((port, callback) => { if (callback) callback(); return { close: vi.fn() }; }) }; return vi.fn(() => mockApp); }); vi.mock('cors', () => vi.fn().mockReturnValue('corsMiddleware')); vi.mock('body-parser', () => ({ json: vi.fn().mockReturnValue('jsonMiddleware') })); vi.mock('fs/promises', () => ({ readFile: vi.fn().mockResolvedValue(Buffer.from('{"key": "value"}')) })); describe('Transport Setup', () => { let mockServer: any; let mockApp: any; beforeEach(() => { vi.resetAllMocks(); mockServer = new Server({ name: 'test-server', version: '1.0.0' }); mockApp = express(); }); describe('setupStdioTransport', () => { it('should set up stdio transport for the server', async () => { await setupStdioTransport(mockServer); expect(mockServer.setStdioTransport).toHaveBeenCalled(); expect(mockServer.connect).toHaveBeenCalled(); }); }); describe('setupHttpTransport', () => { const originalEnv = process.env; beforeEach(() => { process.env = { ...originalEnv }; // Default port if not set in env process.env.PORT = '3000'; }); afterEach(() => { process.env = originalEnv; }); it('should set up HTTP transport with correct middleware', async () => { await setupHttpTransport(mockServer, mockApp); // Verify middleware was set up expect(mockApp.use).toHaveBeenCalledWith('corsMiddleware'); expect(mockApp.use).toHaveBeenCalledWith('jsonMiddleware'); expect(cors).toHaveBeenCalled(); expect(bodyParser.json).toHaveBeenCalled(); }); it('should set up a health check endpoint', async () => { await setupHttpTransport(mockServer, mockApp); // Verify health check endpoint was set up expect(mockApp.get).toHaveBeenCalledWith( '/health', expect.any(Function) ); // Get the health check handler const healthHandler = mockApp.get.mock.calls.find( call => call[0] === '/health' )[1]; // Create mock response object to test handler const mockRes = { status: vi.fn().mockReturnThis(), json: vi.fn() }; // Call the health check handler healthHandler({}, mockRes); // Verify response expect(mockRes.status).toHaveBeenCalledWith(200); expect(mockRes.json).toHaveBeenCalledWith({ status: 'ok' }); }); it('should listen on the port specified in environment variables', async () => { process.env.PORT = '8080'; await setupHttpTransport(mockServer, mockApp); expect(mockApp.listen).toHaveBeenCalledWith( 8080, expect.any(Function) ); }); it('should use default port 3000 if PORT env var is not set', async () => { delete process.env.PORT; await setupHttpTransport(mockServer, mockApp); expect(mockApp.listen).toHaveBeenCalledWith( 3000, expect.any(Function) ); }); it('should set up an MCP endpoint that forwards to the server', async () => { await setupHttpTransport(mockServer, mockApp); // Verify MCP endpoint was set up expect(mockApp.post).toHaveBeenCalledWith( '/mcp', expect.any(Function) ); // Get the MCP handler const mcpHandler = mockApp.post.mock.calls.find( call => call[0] === '/mcp' )[1]; // Create mock request and response objects const mockReq = { body: { method: 'test-method', params: {} } }; const mockRes = { json: vi.fn() }; // Mock the server connection's handleRequest method const mockConnection = { handleRequest: vi.fn().mockResolvedValue({ result: 'test-result' }) }; mockServer.connect.mockResolvedValue(mockConnection); // Connect the server to get the connection await mockServer.connect(); // Call the MCP handler await mcpHandler(mockReq, mockRes); // Verify handleRequest was called with correct params expect(mockConnection.handleRequest).toHaveBeenCalledWith( mockReq.body.method, mockReq.body.params ); // Verify response was sent expect(mockRes.json).toHaveBeenCalledWith({ result: 'test-result' }); }); }); });

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/JagjeevanAK/OpenFoodFacts-MCP'

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