diff --git a/src/features/skill-mcp-manager/stdio-client.ts b/src/features/skill-mcp-manager/stdio-client.ts index a7be4c39b..6a9212d3b 100644 --- a/src/features/skill-mcp-manager/stdio-client.ts +++ b/src/features/skill-mcp-manager/stdio-client.ts @@ -60,6 +60,7 @@ export async function createStdioClient(params: SkillMcpClientConnectionParams): args, env: mergedEnv, stderr: "ignore", + ...(info.directory ? { cwd: info.directory } : {}), }) const client: McpClient = stdioClientDependencies.createClient( diff --git a/src/features/skill-mcp-manager/types.ts b/src/features/skill-mcp-manager/types.ts index bf7d71d15..7f287abc4 100644 --- a/src/features/skill-mcp-manager/types.ts +++ b/src/features/skill-mcp-manager/types.ts @@ -24,6 +24,7 @@ export interface SkillMcpClientInfo { skillName: string sessionID: string scope?: SkillScope | "local" + directory?: string } export interface SkillMcpServerContext { diff --git a/src/tools/skill-mcp/tools.test.ts b/src/tools/skill-mcp/tools.test.ts index 825ea57af..07ef60993 100644 --- a/src/tools/skill-mcp/tools.test.ts +++ b/src/tools/skill-mcp/tools.test.ts @@ -192,6 +192,32 @@ describe("skill_mcp tool", () => { {}, ) }) + + it("passes toolContext.directory to the manager", async () => { + // given + loadedSkills = [ + createMockSkillWithMcp("test-skill", { + "test-server": { command: "echo", args: ["test"] }, + }), + ] + const callToolSpy = spyOn(manager, "callTool").mockResolvedValue({ content: [] } as never) + const tool = createSkillMcpTool({ + manager, + getLoadedSkills: () => loadedSkills, + getSessionID: () => "session-1", + }) + + // when + await tool.execute({ mcp_name: "test-server", tool_name: "some-tool" }, mockContext) + + // then + expect(callToolSpy).toHaveBeenCalledWith( + expect.objectContaining({ directory: "/test" }), + expect.any(Object), + "some-tool", + {}, + ) + }) }) }) diff --git a/src/tools/skill-mcp/tools.ts b/src/tools/skill-mcp/tools.ts index 2e1876575..615a036a7 100644 --- a/src/tools/skill-mcp/tools.ts +++ b/src/tools/skill-mcp/tools.ts @@ -167,6 +167,7 @@ export function createSkillMcpTool(options: SkillMcpToolOptions): ToolDefinition skillName: found.skill.name, sessionID, scope: found.skill.scope, + directory: toolContext.directory, } const context: SkillMcpServerContext = {