Skip to main content
Glama
transport.ts2.65 kB
import { EventEmitter } from 'node:events'; import { Transport as SdkTransport } from '@modelcontextprotocol/sdk/shared/transport.js'; import { JSONRPCMessage } from '../../types/mcp.js'; /** * Transport events */ export enum TransportEvent { /** Transport received a message */ MESSAGE = 'message', /** Transport encountered an error */ ERROR = 'error', /** Transport closed */ CLOSE = 'close', /** Transport started */ START = 'start', } /** * Base transport interface for communication with MCP servers */ export interface Transport { /** * Start the transport */ start(): Promise<void>; /** * Stop the transport */ stop(): Promise<void>; /** * Send a message to the transport * * @param message - Message to send */ send(message: JSONRPCMessage): Promise<void>; /** * Check if the transport is running */ isRunning(): boolean; /** * Add an event listener * * @param type - Event type * @param handler - Event handler */ on(type: 'message', handler: (message: JSONRPCMessage) => void): void; on(type: 'error', handler: (error: Error) => void): void; on(type: 'close', handler: (code?: number) => void): void; on(type: string, handler: (...args: any[]) => void): void; /** * Remove an event listener * * @param type - Event type * @param handler - Event handler */ removeListener(type: 'message', handler: (message: JSONRPCMessage) => void): void; removeListener(type: 'error', handler: (error: Error) => void): void; removeListener(type: 'close', handler: (code?: number) => void): void; removeListener(type: string, handler: (...args: any[]) => void): void; /** * Close the transport */ close(): Promise<void>; } /** * Abstract base class for transport implementations */ export abstract class BaseTransport extends EventEmitter implements Transport { protected running: boolean = false; /** * Start the transport */ abstract start(): Promise<void>; /** * Stop the transport */ abstract stop(): Promise<void>; /** * Send a message to the transport * * @param message - Message to send */ abstract send(message: JSONRPCMessage): Promise<void>; /** * Check if the transport is running * * @returns True if the transport is running */ isRunning(): boolean { return this.running; } /** * Close the transport */ async close(): Promise<void> { await this.stop(); } // The base class inherits the EventEmitter implementation of on/removeListener // which satisfies the interface, so we don't need explicit implementations here }

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/metcalfc/atrax'

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