Skip to content

Commit

Permalink
Merge branch 'main' into issue-67-client-read-resource
Browse files Browse the repository at this point in the history
  • Loading branch information
rvoh-emccaleb authored Jan 27, 2025
2 parents fb5f533 + ff9812b commit e74fd6a
Showing 1 changed file with 4 additions and 47 deletions.
51 changes: 4 additions & 47 deletions transport/http/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,14 @@ import (
"encoding/json"
"fmt"
"net/http"
"sync"

"github.com/metoro-io/mcp-golang/transport"
)

// HTTPTransport implements a stateless HTTP transport for MCP
type HTTPTransport struct {
*baseTransport
server *http.Server
endpoint string
messageHandler func(ctx context.Context, message *transport.BaseJsonRpcMessage)
errorHandler func(error)
closeHandler func()
mu sync.RWMutex
addr string
responseMap map[int64]chan *transport.BaseJsonRpcMessage
server *http.Server
endpoint string
addr string
}

// NewHTTPTransport creates a new HTTP transport that listens on the specified endpoint
Expand All @@ -29,7 +21,6 @@ func NewHTTPTransport(endpoint string) *HTTPTransport {
baseTransport: newBaseTransport(),
endpoint: endpoint,
addr: ":8080", // Default port
responseMap: make(map[int64]chan *transport.BaseJsonRpcMessage),
}
}

Expand All @@ -52,49 +43,15 @@ func (t *HTTPTransport) Start(ctx context.Context) error {
return t.server.ListenAndServe()
}

// Send implements Transport.Send
func (t *HTTPTransport) Send(ctx context.Context, message *transport.BaseJsonRpcMessage) error {
key := message.JsonRpcResponse.Id
responseChannel := t.responseMap[int64(key)]
if responseChannel == nil {
return fmt.Errorf("no response channel found for key: %d", key)
}
responseChannel <- message
return nil
}

// Close implements Transport.Close
func (t *HTTPTransport) Close() error {
if t.server != nil {
if err := t.server.Close(); err != nil {
return err
}
}
if t.closeHandler != nil {
t.closeHandler()
}
return nil
}

// SetCloseHandler implements Transport.SetCloseHandler
func (t *HTTPTransport) SetCloseHandler(handler func()) {
t.mu.Lock()
defer t.mu.Unlock()
t.closeHandler = handler
}

// SetErrorHandler implements Transport.SetErrorHandler
func (t *HTTPTransport) SetErrorHandler(handler func(error)) {
t.mu.Lock()
defer t.mu.Unlock()
t.errorHandler = handler
}

// SetMessageHandler implements Transport.SetMessageHandler
func (t *HTTPTransport) SetMessageHandler(handler func(ctx context.Context, message *transport.BaseJsonRpcMessage)) {
t.mu.Lock()
defer t.mu.Unlock()
t.messageHandler = handler
return t.baseTransport.Close()
}

func (t *HTTPTransport) handleRequest(w http.ResponseWriter, r *http.Request) {
Expand Down

0 comments on commit e74fd6a

Please sign in to comment.