UNPKG

mcp-use

Version:

Opinionated MCP Framework for TypeScript (@modelcontextprotocol/sdk compatible) - Build MCP Agents, Clients and Servers with support for ChatGPT Apps, Code Mode, OAuth, Notifications, Sampling, Observability and more.

136 lines (133 loc) 3.27 kB
import { __name } from "./chunk-3GQAWCBQ.js"; // src/react/rpc-logger.ts var RpcLogStore = class { static { __name(this, "RpcLogStore"); } logs = []; listeners = /* @__PURE__ */ new Set(); maxLogs = 1e3; publish(entry) { console.log( "[RPC Logger] Publishing log:", entry.direction, entry.serverId, entry.message?.method ); this.logs.push(entry); if (this.logs.length > this.maxLogs) { this.logs = this.logs.slice(-this.maxLogs); } console.log( "[RPC Logger] Total logs:", this.logs.length, "Listeners:", this.listeners.size ); this.listeners.forEach((listener) => { try { listener(entry); } catch (err) { console.error("[RPC Logger] Listener error:", err); } }); } subscribe(listener) { this.listeners.add(listener); return () => this.listeners.delete(listener); } getLogsForServer(serverId) { return this.logs.filter((log) => log.serverId === serverId); } getAllLogs() { return [...this.logs]; } clear(serverId) { if (serverId) { this.logs = this.logs.filter((log) => log.serverId !== serverId); } else { this.logs = []; } } }; var rpcLogStore = new RpcLogStore(); function getRpcLogs(serverId) { return rpcLogStore.getLogsForServer(serverId); } __name(getRpcLogs, "getRpcLogs"); function getAllRpcLogs() { return rpcLogStore.getAllLogs(); } __name(getAllRpcLogs, "getAllRpcLogs"); function subscribeToRpcLogs(listener) { return rpcLogStore.subscribe(listener); } __name(subscribeToRpcLogs, "subscribeToRpcLogs"); function clearRpcLogs(serverId) { rpcLogStore.clear(serverId); } __name(clearRpcLogs, "clearRpcLogs"); function wrapTransportForLogging(transport, serverId) { class LoggingTransport { constructor(inner) { this.inner = inner; this.inner.onmessage = (message, extra) => { rpcLogStore.publish({ serverId, direction: "receive", timestamp: (/* @__PURE__ */ new Date()).toISOString(), message }); this.onmessage?.(message, extra); }; this.inner.onclose = () => { this.onclose?.(); }; this.inner.onerror = (error) => { this.onerror?.(error); }; } static { __name(this, "LoggingTransport"); } onclose; onerror; onmessage; async start() { if (typeof this.inner.start === "function") { await this.inner.start(); } } async send(message, options) { rpcLogStore.publish({ serverId, direction: "send", timestamp: (/* @__PURE__ */ new Date()).toISOString(), message }); await this.inner.send(message, options); } async close() { await this.inner.close(); } get sessionId() { return this.inner.sessionId; } setProtocolVersion(version) { if (typeof this.inner.setProtocolVersion === "function") { this.inner.setProtocolVersion(version); } } } return new LoggingTransport(transport); } __name(wrapTransportForLogging, "wrapTransportForLogging"); export { getRpcLogs, getAllRpcLogs, subscribeToRpcLogs, clearRpcLogs, wrapTransportForLogging };