From 264dcc072c8a142f2e4ce5061eb5e311ef4ed15c Mon Sep 17 00:00:00 2001 From: Shawn Morreau Date: Fri, 21 Nov 2025 14:08:36 -0500 Subject: [PATCH] remove stdout interception logic --- mcp/arkConfig.ts | 2 +- mcp/server.ts | 56 ------------------------------------------------ 2 files changed, 1 insertion(+), 57 deletions(-) diff --git a/mcp/arkConfig.ts b/mcp/arkConfig.ts index c9cfb15..8128d85 100644 --- a/mcp/arkConfig.ts +++ b/mcp/arkConfig.ts @@ -2,6 +2,6 @@ import { configure } from "arktype/config"; configure({ toJsonSchema: { - // dialect: null, + dialect: null, }, }); diff --git a/mcp/server.ts b/mcp/server.ts index 9917252..cfa8ab8 100644 --- a/mcp/server.ts +++ b/mcp/server.ts @@ -37,60 +37,4 @@ addTools(server, [ GetCheckSuiteLogsTool, ]); -// intercept stdout to remove $schema fields from JSON-RPC messages -// FastMCP uses stdout for JSON-RPC communication, so we intercept here -const originalStdoutWrite = process.stdout.write.bind(process.stdout); -process.stdout.write = function (chunk: any, encoding?: any, cb?: any): boolean { - if (typeof chunk === "string" || Buffer.isBuffer(chunk)) { - try { - const text = typeof chunk === "string" ? chunk : chunk.toString("utf-8"); - // MCP uses JSON-RPC over stdio, messages are JSON objects on single lines - const lines = text.split("\n"); - const modifiedLines = lines.map((line) => { - const trimmed = line.trim(); - // only process lines that look like JSON-RPC messages - if (trimmed.startsWith("{") && trimmed.includes('"jsonrpc"')) { - try { - const parsed = JSON.parse(trimmed); - // recursively remove $schema fields from the message - const cleaned = removeSchemaFields(parsed); - return JSON.stringify(cleaned) + "\n"; - } catch { - // if parsing fails, return original line - return line + (line.endsWith("\n") ? "" : "\n"); - } - } - return line + (line.endsWith("\n") ? "" : "\n"); - }); - const result = modifiedLines.join(""); - return originalStdoutWrite(result, encoding, cb); - } catch { - // if anything fails, just pass through - } - } - return originalStdoutWrite(chunk, encoding, cb); -}; - -// recursively remove $schema fields from JSON objects -function removeSchemaFields(obj: any): any { - if (obj === null || typeof obj !== "object") { - return obj; - } - - if (Array.isArray(obj)) { - return obj.map(removeSchemaFields); - } - - const result: any = {}; - for (const [key, value] of Object.entries(obj)) { - // skip $schema fields - if (key === "$schema") { - continue; - } - result[key] = removeSchemaFields(value); - } - - return result; -} - server.start();