UNPKG

mcp-framework

Version:

Framework for building Model Context Protocol (MCP) servers in Typescript

70 lines (69 loc) 1.97 kB
import { StdioServerTransport as SDKStdioTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { DEFAULT_IMAGE_OPTIONS, hasImageContent, prepareImageForTransport } from "../utils/image-handler.js"; import { logger } from "../../core/Logger.js"; /** * StdioServerTransport */ export class StdioServerTransport { type = "stdio"; transport; running = false; imageOptions; constructor(imageOptions = {}) { this.transport = new SDKStdioTransport(); this.imageOptions = { ...DEFAULT_IMAGE_OPTIONS, ...imageOptions }; } async start() { await this.transport.start(); this.running = true; } async send(message) { try { if (hasImageContent(message)) { message = this.prepareMessageWithImage(message); } await this.transport.send(message); } catch (error) { logger.error(`Error sending message through stdio transport: ${error}`); throw error; } } prepareMessageWithImage(message) { if (!message.result?.content) { return message; } const processedContent = message.result.content.map((item) => { if (item.type === 'image') { return prepareImageForTransport(item, this.imageOptions); } return item; }); return { ...message, result: { ...message.result, content: processedContent } }; } async close() { await this.transport.close(); this.running = false; } isRunning() { return this.running; } set onclose(handler) { this.transport.onclose = handler; } set onerror(handler) { this.transport.onerror = handler; } set onmessage(handler) { this.transport.onmessage = handler; } }