diff --git a/.changeset/add-mcp-debug-logging.md b/.changeset/add-mcp-debug-logging.md new file mode 100644 index 00000000..b2479476 --- /dev/null +++ b/.changeset/add-mcp-debug-logging.md @@ -0,0 +1,6 @@ +--- +"@perstack/runtime": patch +--- + +Add debug logging for MCP skill startup time + diff --git a/assets/image-c3bc156b-e84b-43b8-ac80-4f97a44fcaee.png b/assets/image-c3bc156b-e84b-43b8-ac80-4f97a44fcaee.png deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/runtime/src/skill-manager/mcp.ts b/packages/runtime/src/skill-manager/mcp.ts index 932f7c81..b18d6abb 100644 --- a/packages/runtime/src/skill-manager/mcp.ts +++ b/packages/runtime/src/skill-manager/mcp.ts @@ -72,9 +72,21 @@ export class McpSkillManager extends BaseSkillManager { } env[envName] = this._env[envName] } + const startTime = Date.now() + console.log(`[MCP] Starting skill ${skill.name}...`) const { command, args } = this._getCommandArgs(skill) - const transport = new StdioClientTransport({ command, args, env, stderr: "ignore" }) + const transport = new StdioClientTransport({ command, args, env, stderr: "pipe" }) + if (transport.stderr) { + transport.stderr.on("data", (chunk: Buffer) => { + console.log(`[MCP:${skill.name}:stderr] ${chunk.toString().trim()}`) + }) + } + const connectStartTime = Date.now() await this._mcpClient!.connect(transport) + const connectTime = Date.now() + console.log( + `[MCP] Skill ${skill.name} connected in ${connectTime - connectStartTime}ms (total: ${connectTime - startTime}ms)`, + ) if (this._eventListener) { const serverInfo = this._mcpClient!.getServerVersion() const event = createRuntimeEvent("skillConnected", this._runId, {