@@ -22,6 +22,7 @@ type mcpTool struct {
2222 tool mcp.Tool
2323 mcpConfig config.MCPConfig
2424 permissions permission.Service
25+ workingDir string
2526}
2627
2728type MCPClient interface {
@@ -98,7 +99,7 @@ func (b *mcpTool) Run(ctx context.Context, params tools.ToolCall) (tools.ToolRes
9899 p := b.permissions.Request(
99100 permission.CreatePermissionRequest{
100101 SessionID: sessionID,
101− Path: config.Get().WorkingDir(),
102+ Path: b.workingDir,
102103 ToolName: b.Info().Name,
103104 Action: "execute",
104105 Description: permissionDescription,
@@ -143,18 +144,19 @@ func (b *mcpTool) Run(ctx context.Context, params tools.ToolCall) (tools.ToolRes
143144 return tools.NewTextErrorResponse("invalid mcp type"), nil
144145}
145146
146−func NewMcpTool(name string, tool mcp.Tool, permissions permission.Service, mcpConfig config.MCPConfig) tools.BaseTool {
147+func NewMcpTool(name string, tool mcp.Tool, permissions permission.Service, mcpConfig config.MCPConfig, workingDir string) tools.BaseTool {
147148 return &mcpTool{
148149 mcpName: name,
149150 tool: tool,
150151 mcpConfig: mcpConfig,
151152 permissions: permissions,
153+ workingDir: workingDir,
152154 }
153155}
154156
155157var mcpTools []tools.BaseTool
156158
157−func getTools(ctx context.Context, name string, m config.MCPConfig, permissions permission.Service, c MCPClient) []tools.BaseTool {
159+func getTools(ctx context.Context, name string, m config.MCPConfig, permissions permission.Service, c MCPClient, workingDir string) []tools.BaseTool {
158160 var stdioTools []tools.BaseTool
159161 initRequest := mcp.InitializeRequest{}
160162 initRequest.Params.ProtocolVersion = mcp.LATEST_PROTOCOL_VERSION
@@ -175,17 +177,17 @@ func getTools(ctx context.Context, name string, m config.MCPConfig, permissions
175177 return stdioTools
176178 }
177179 for _, t := range tools.Tools {
178− stdioTools = append(stdioTools, NewMcpTool(name, t, permissions, m))
180+ stdioTools = append(stdioTools, NewMcpTool(name, t, permissions, m, workingDir))
179181 }
180182 defer c.Close()
181183 return stdioTools
182184}
183185
184−func GetMcpTools(ctx context.Context, permissions permission.Service) []tools.BaseTool {
186+func GetMcpTools(ctx context.Context, permissions permission.Service, cfg *config.Config) []tools.BaseTool {
185187 if len(mcpTools) > 0 {
186188 return mcpTools
187189 }
188− for name, m := range config.Get().MCP {
190+ for name, m := range cfg.MCP {
189191 switch m.Type {
190192 case config.MCPStdio:
191193 c, err := client.NewStdioMCPClient(
@@ -198,7 +200,7 @@ func GetMcpTools(ctx context.Context, permissions permission.Service) []tools.Ba
198200 continue
199201 }
200202
201− mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c)...)
203+ mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c, cfg.WorkingDir())...)
202204 case config.MCPHttp:
203205 c, err := client.NewStreamableHttpClient(
204206 m.URL,
@@ -208,7 +210,7 @@ func GetMcpTools(ctx context.Context, permissions permission.Service) []tools.Ba
208210 slog.Error("error creating mcp client", "error", err)
209211 continue
210212 }
211− mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c)...)
213+ mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c, cfg.WorkingDir())...)
212214 case config.MCPSse:
213215 c, err := client.NewSSEMCPClient(
214216 m.URL,
@@ -218,7 +220,7 @@ func GetMcpTools(ctx context.Context, permissions permission.Service) []tools.Ba
218220 slog.Error("error creating mcp client", "error", err)
219221 continue
220222 }
221− mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c)...)
223+ mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c, cfg.WorkingDir())...)
222224 }
223225 }
224226