added auth to remote mcps

This commit is contained in:
Luxferre
2026-03-21 16:29:28 +02:00
parent d24150d2e9
commit c2bc527b30
3 changed files with 107 additions and 46 deletions
+28 -5
View File
@@ -5,6 +5,7 @@ import (
"fmt"
"github.com/mark3labs/mcp-go/client"
"github.com/mark3labs/mcp-go/client/transport"
"github.com/mark3labs/mcp-go/mcp"
)
@@ -22,12 +23,12 @@ func (w *mcpGoClientWrapper) CallTool(ctx context.Context, name string, args map
req := mcp.CallToolRequest{}
req.Params.Name = name
req.Params.Arguments = args
res, err := w.client.CallTool(ctx, req)
if err != nil {
return "", err
}
if res.IsError {
return "", fmt.Errorf("tool returned error")
}
@@ -71,9 +72,31 @@ var defaultMCPFactory MCPClientFactory = func(toolset string) (MCPClientInterfac
case "stdio":
c, err = client.NewStdioMCPClient(cfg.Command, cfg.Env, cfg.Args...)
case "sse":
c, err = client.NewSSEMCPClient(cfg.URL)
var opts []transport.ClientOption
headers := make(map[string]string)
if cfg.AuthToken != "" {
headers["Authorization"] = "Bearer " + cfg.AuthToken
}
for k, v := range cfg.Headers {
headers[k] = v
}
if len(headers) > 0 {
opts = append(opts, transport.WithHeaders(headers))
}
c, err = client.NewSSEMCPClient(cfg.URL, opts...)
case "http":
c, err = client.NewStreamableHttpClient(cfg.URL)
var opts []transport.StreamableHTTPCOption
headers := make(map[string]string)
if cfg.AuthToken != "" {
headers["Authorization"] = "Bearer " + cfg.AuthToken
}
for k, v := range cfg.Headers {
headers[k] = v
}
if len(headers) > 0 {
opts = append(opts, transport.WithHTTPHeaders(headers))
}
c, err = client.NewStreamableHttpClient(cfg.URL, opts...)
default:
return nil, fmt.Errorf("unsupported MCP transport: %s", cfg.Transport)
}
@@ -89,7 +112,7 @@ var defaultMCPFactory MCPClientFactory = func(toolset string) (MCPClientInterfac
Name: "Sidekick",
Version: "1.0.0",
}
_, err = c.Initialize(context.Background(), initReq)
if err != nil {
return nil, fmt.Errorf("failed to initialize MCP client: %w", err)