Fix: Disable logging in stdio mode to prevent MCP protocol errors

- Detect stdio mode and set logger to 'silent' level
- stdout must be reserved exclusively for JSON-RPC MCP messages
- Prevents 'Unexpected token' JSON parsing errors in Claude Code
- Only log when using HTTP transport mode

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
root
2025-10-09 06:55:19 +02:00
parent 2d6a5cda8f
commit 4908b422b4

View File

@@ -1,9 +1,12 @@
import pino from 'pino'; import pino from 'pino';
import { config } from '../config'; import { config } from '../config';
// Detect if running in stdio mode (stdout must be reserved for MCP protocol)
const isStdioMode = !process.env.MCP_TRANSPORT || process.env.MCP_TRANSPORT === 'stdio';
export const logger = pino({ export const logger = pino({
level: config.mcp.logLevel, level: isStdioMode ? 'silent' : config.mcp.logLevel,
transport: { transport: isStdioMode ? undefined : {
target: 'pino-pretty', target: 'pino-pretty',
options: { options: {
colorize: true, colorize: true,
@@ -11,6 +14,10 @@ export const logger = pino({
ignore: 'pid,hostname', ignore: 'pid,hostname',
}, },
}, },
// In stdio mode, send any logs to stderr instead of stdout
...(isStdioMode && {
browser: { write: () => {} },
}),
}); });
export function createLogger(name: string): pino.Logger { export function createLogger(name: string): pino.Logger {