@@ -36,7 +36,7 @@ type MCPClient interface {
3636}
3737
3838func (b *mcpTool) Name() string {
39− return fmt.Sprintf("%s_%s", b.mcpName, b.tool.Name)
39+ return fmt.Sprintf("mcp_%s_%s", b.mcpName, b.tool.Name)
4040}
4141
4242func (b *mcpTool) Info() tools.ToolInfo {
@@ -45,7 +45,7 @@ func (b *mcpTool) Info() tools.ToolInfo {
4545 required = make([]string, 0)
4646 }
4747 return tools.ToolInfo{
48− Name: fmt.Sprintf("%s_%s", b.mcpName, b.tool.Name),
48+ Name: fmt.Sprintf("mcp_%s_%s", b.mcpName, b.tool.Name),
4949 Description: b.tool.Description,
5050 Parameters: b.tool.InputSchema.Properties,
5151 Required: required,
@@ -107,14 +107,14 @@ func (b *mcpTool) Run(ctx context.Context, params tools.ToolCall) (tools.ToolRes
107107 },
108108 )
109109 if !p {
110− return tools.NewTextErrorResponse("permission denied"), nil
110+ return tools.ToolResponse{}, permission.ErrorPermissionDenied
111111 }
112112
113113 switch b.mcpConfig.Type {
114114 case config.MCPStdio:
115115 c, err := client.NewStdioMCPClient(
116116 b.mcpConfig.Command,
117− b.mcpConfig.Env,
117+ b.mcpConfig.ResolvedEnv(),
118118 b.mcpConfig.Args...,
119119 )
120120 if err != nil {
@@ -124,7 +124,7 @@ func (b *mcpTool) Run(ctx context.Context, params tools.ToolCall) (tools.ToolRes
124124 case config.MCPHttp:
125125 c, err := client.NewStreamableHttpClient(
126126 b.mcpConfig.URL,
127− transport.WithHTTPHeaders(b.mcpConfig.Headers),
127+ transport.WithHTTPHeaders(b.mcpConfig.ResolvedHeaders()),
128128 )
129129 if err != nil {
130130 return tools.NewTextErrorResponse(err.Error()), nil
@@ -133,7 +133,7 @@ func (b *mcpTool) Run(ctx context.Context, params tools.ToolCall) (tools.ToolRes
133133 case config.MCPSse:
134134 c, err := client.NewSSEMCPClient(
135135 b.mcpConfig.URL,
136− client.WithHeaders(b.mcpConfig.Headers),
136+ client.WithHeaders(b.mcpConfig.ResolvedHeaders()),
137137 )
138138 if err != nil {
139139 return tools.NewTextErrorResponse(err.Error()), nil
@@ -192,11 +192,12 @@ func GetMcpTools(ctx context.Context, permissions permission.Service, cfg *confi
192192 slog.Debug("skipping disabled mcp", "name", name)
193193 continue
194194 }
195+
195196 switch m.Type {
196197 case config.MCPStdio:
197198 c, err := client.NewStdioMCPClient(
198199 m.Command,
199− m.Env,
200+ m.ResolvedEnv(),
200201 m.Args...,
201202 )
202203 if err != nil {
@@ -206,9 +207,10 @@ func GetMcpTools(ctx context.Context, permissions permission.Service, cfg *confi
206207
207208 mcpTools = append(mcpTools, getTools(ctx, name, m, permissions, c, cfg.WorkingDir())...)
208209 case config.MCPHttp:
210+ slog.Info("creating mcp client", "name", name, "url", m.URL, "headers", m.ResolvedHeaders())
209211 c, err := client.NewStreamableHttpClient(
210212 m.URL,
211− transport.WithHTTPHeaders(m.Headers),
213+ transport.WithHTTPHeaders(m.ResolvedHeaders()),
212214 )
213215 if err != nil {
214216 slog.Error("error creating mcp client", "error", err)
@@ -218,7 +220,7 @@ func GetMcpTools(ctx context.Context, permissions permission.Service, cfg *confi
218220 case config.MCPSse:
219221 c, err := client.NewSSEMCPClient(
220222 m.URL,
221− client.WithHeaders(m.Headers),
223+ client.WithHeaders(m.ResolvedHeaders()),
222224 )
223225 if err != nil {
224226 slog.Error("error creating mcp client", "error", err)