From 92d82597692004a84f23664e399a19df764d7950 Mon Sep 17 00:00:00 2001 From: Deepesh Date: Thu, 2 Apr 2026 01:51:20 +0530 Subject: [PATCH] Minor Contribution: improve error handling, logger portability, and server initialization patterns --- typescript/packages/cli/src/commands/init.ts | 6 +++--- typescript/packages/core/src/core/logger.ts | 3 ++- typescript/packages/core/src/core/server.ts | 7 ++++--- typescript/packages/core/src/core/tool.ts | 5 +++-- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/typescript/packages/cli/src/commands/init.ts b/typescript/packages/cli/src/commands/init.ts index 3e32db6..4556c27 100644 --- a/typescript/packages/cli/src/commands/init.ts +++ b/typescript/packages/cli/src/commands/init.ts @@ -352,7 +352,7 @@ async function createProjectFromScratch( fs.writeJSONSync(path.join(targetDir, 'tsconfig.json'), tsconfig, { spaces: 2 }); fs.mkdirSync(path.join(targetDir, 'src'), { recursive: true }); - const indexTs = `import { createServer, createTool, z } from '@nitrostack/core'; + const indexTs = `import { createServer, Tool, z } from '@nitrostack/core'; const server = createServer({ name: '${projectName}', @@ -361,7 +361,7 @@ const server = createServer({ }); server.tool( - createTool({ + new Tool({ name: 'hello', description: 'Say hello to someone', inputSchema: z.object({ @@ -409,7 +409,7 @@ npm run build npm start \`\`\` -Built with [NitroStack](https://nitrostack.dev) ⚡ +Built with [NitroStack](https://nitrostack.ai) ⚡ `; fs.writeFileSync(path.join(targetDir, 'README.md'), readme); diff --git a/typescript/packages/core/src/core/logger.ts b/typescript/packages/core/src/core/logger.ts index 3a56623..b9b239b 100644 --- a/typescript/packages/core/src/core/logger.ts +++ b/typescript/packages/core/src/core/logger.ts @@ -1,4 +1,5 @@ import winston from 'winston'; +import os from 'os'; import { Logger, LogMeta } from './types.js'; import { EventEmitterTransport } from './events/log-emitter.js'; @@ -53,7 +54,7 @@ export function createLogger(options: { // Silent logger - logs nowhere (better than crashing) transports.push( new winston.transports.File({ - filename: '/dev/null', // Discard logs + filename: os.devNull, // Cross-platform: works on Windows, macOS, Linux silent: true, }) ); diff --git a/typescript/packages/core/src/core/server.ts b/typescript/packages/core/src/core/server.ts index c8ed459..32db8e2 100644 --- a/typescript/packages/core/src/core/server.ts +++ b/typescript/packages/core/src/core/server.ts @@ -25,7 +25,7 @@ import { ResourceTemplateDefinition, } from './types.js'; import { createLogger } from './logger.js'; -import { ToolExecutionError, ValidationError, ResourceNotFoundError } from './errors.js'; +import { ToolExecutionError, ValidationError, ResourceNotFoundError, PromptNotFoundError } from './errors.js'; import { v4 as uuidv4 } from 'uuid'; import { isModule, getModuleMetadata } from './module.js'; import { buildController } from './builders.js'; @@ -773,6 +773,7 @@ export class NitroStackServer { mimeType: resource.mimeType || 'application/json', text: JSON.stringify(content.data, null, 2), }; + break; default: // Fallback: if content doesn't match ResourceContent shape, treat as JSON responseContent = { @@ -853,7 +854,7 @@ export class NitroStackServer { const prompt = this.prompts.get(name); if (!prompt) { - throw new Error(`Prompt not found: ${name}`); + throw new PromptNotFoundError(name); } const context = this.createContext(); @@ -914,7 +915,7 @@ export class NitroStackServer { // Use explicit transport if set, otherwise infer from NODE_ENV const transportType = explicitTransport || (isDevelopment ? 'stdio' : 'dual'); this._transportType = transportType; - console.error(`[DEBUG] NitroStackServer.start(): NODE_ENV=${process.env.NODE_ENV}, MCP_TRANSPORT_TYPE=${explicitTransport}, transportType=${transportType}`); + this.logger.debug(`NitroStackServer.start(): NODE_ENV=${process.env.NODE_ENV}, MCP_TRANSPORT_TYPE=${explicitTransport}, transportType=${transportType}`); // Call onModuleInit for all modules for (const moduleClass of this.modules) { diff --git a/typescript/packages/core/src/core/tool.ts b/typescript/packages/core/src/core/tool.ts index 4499e90..c668f3e 100644 --- a/typescript/packages/core/src/core/tool.ts +++ b/typescript/packages/core/src/core/tool.ts @@ -280,8 +280,9 @@ export class Tool { $refStrategy: 'none', target: 'jsonSchema7', }) as JsonSchema; - } catch (error) { - console.error('Error converting Zod schema:', error); + } catch (_error) { + // Silently fall back to permissive schema — console output is + // disabled in MCP servers as it breaks the JSON-RPC stdio protocol. return { type: 'object', properties: {}, additionalProperties: true }; } }