1package client
 2
 3import (
 4	"fmt"
 5	"net/http"
 6	"net/url"
 7
 8	"github.com/mark3labs/mcp-go/client/transport"
 9)
10
11func WithHeaders(headers map[string]string) transport.ClientOption {
12	return transport.WithHeaders(headers)
13}
14
15func WithHeaderFunc(headerFunc transport.HTTPHeaderFunc) transport.ClientOption {
16	return transport.WithHeaderFunc(headerFunc)
17}
18
19func WithHTTPClient(httpClient *http.Client) transport.ClientOption {
20	return transport.WithHTTPClient(httpClient)
21}
22
23// NewSSEMCPClient creates a new SSE-based MCP client with the given base URL.
24// Returns an error if the URL is invalid.
25func NewSSEMCPClient(baseURL string, options ...transport.ClientOption) (*Client, error) {
26
27	sseTransport, err := transport.NewSSE(baseURL, options...)
28	if err != nil {
29		return nil, fmt.Errorf("failed to create SSE transport: %w", err)
30	}
31
32	return NewClient(sseTransport), nil
33}
34
35// GetEndpoint returns the current endpoint URL for the SSE connection.
36//
37// Note: This method only works with SSE transport, or it will panic.
38func GetEndpoint(c *Client) *url.URL {
39	t := c.GetTransport()
40	sse := t.(*transport.SSE)
41	return sse.GetEndpoint()
42}