diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 1be391b0d..e9238a1e2 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,7 +1,7 @@ blank_issues_enabled: true contact_links: - name: Ask a Question - url: https://github.com/mark3labs/mcp-go/discussions/categories/q-a + url: https://github.com/rickey17/mcp-go/discussions/categories/q-a about: Ask any question about the project. - name: Join the Community url: https://discord.gg/RqSS2NQVsY diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 042f3c33b..b17541b3b 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -[contact@mark3labs.com](mailto:contact@mark3labs.com). +[contact@rickey17.com](mailto:contact@rickey17.com). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d980370e0..8e2520331 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,4 +39,4 @@ go version ``` 5. Submit a pull request to the main branch. -Feel free to reach out if you have any questions or need help either by [opening an issue](https://github.com/mark3labs/mcp-go/issues) or by reaching out in the [Discord channel](https://discord.gg/RqSS2NQVsY). +Feel free to reach out if you have any questions or need help either by [opening an issue](https://github.com/rickey17/mcp-go/issues) or by reaching out in the [Discord channel](https://discord.gg/RqSS2NQVsY). diff --git a/README.md b/README.md index f047c3f47..0a028ba7f 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@
MCP Go Logo -[![Build](https://github.com/mark3labs/mcp-go/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/mark3labs/mcp-go/actions/workflows/ci.yml) -[![Go Report Card](https://goreportcard.com/badge/github.com/mark3labs/mcp-go?cache)](https://goreportcard.com/report/github.com/mark3labs/mcp-go) -[![GoDoc](https://pkg.go.dev/badge/github.com/mark3labs/mcp-go.svg)](https://pkg.go.dev/github.com/mark3labs/mcp-go) +[![Build](https://github.com/rickey17/mcp-go/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/rickey17/mcp-go/actions/workflows/ci.yml) +[![Go Report Card](https://goreportcard.com/badge/github.com/rickey17/mcp-go?cache)](https://goreportcard.com/report/github.com/rickey17/mcp-go) +[![GoDoc](https://pkg.go.dev/badge/github.com/rickey17/mcp-go.svg)](https://pkg.go.dev/github.com/rickey17/mcp-go) A Go implementation of the Model Context Protocol (MCP), enabling seamless integration between LLM applications and external data sources and tools. @@ -26,8 +26,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -106,7 +106,7 @@ MCP Go handles all the complex protocol details and server management, so you ca ## Installation ```bash -go get github.com/mark3labs/mcp-go +go get github.com/rickey17/mcp-go ``` ## Quickstart @@ -120,8 +120,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/SECURITY.md b/SECURITY.md index 342a2abd5..a6c785c24 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -4,4 +4,4 @@ Thank you for helping us improve the security of the project. Your contributions ## Reporting a Vulnerability -If you discover a security vulnerability within this project, please email the maintainers at [contact@mark3labs.com](mailto:contact@mark3labs.com). +If you discover a security vulnerability within this project, please email the maintainers at [contact@rickey17.com](mailto:contact@rickey17.com). diff --git a/client/client.go b/client/client.go index cda7665ef..083c2b16f 100644 --- a/client/client.go +++ b/client/client.go @@ -9,8 +9,8 @@ import ( "sync" "sync/atomic" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) // Client implements the MCP client. diff --git a/client/http.go b/client/http.go index d001a1e63..6115ed16f 100644 --- a/client/http.go +++ b/client/http.go @@ -3,7 +3,7 @@ package client import ( "fmt" - "github.com/mark3labs/mcp-go/client/transport" + "github.com/rickey17/mcp-go/client/transport" ) // NewStreamableHttpClient is a convenience method that creates a new streamable-http-based MCP client diff --git a/client/http_test.go b/client/http_test.go index 514004857..917d775b0 100644 --- a/client/http_test.go +++ b/client/http_test.go @@ -8,9 +8,9 @@ import ( "time" "github.com/google/uuid" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func TestHTTPClient(t *testing.T) { diff --git a/client/inprocess.go b/client/inprocess.go index 62d28794d..9cafd686d 100644 --- a/client/inprocess.go +++ b/client/inprocess.go @@ -3,9 +3,9 @@ package client import ( "context" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // NewInProcessClient connect directly to a mcp server object in the same process diff --git a/client/inprocess_sampling_test.go b/client/inprocess_sampling_test.go index 087109e43..4ae7d60e4 100644 --- a/client/inprocess_sampling_test.go +++ b/client/inprocess_sampling_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // MockSamplingHandler implements SamplingHandler for testing diff --git a/client/inprocess_test.go b/client/inprocess_test.go index 7b150e81e..c220dc182 100644 --- a/client/inprocess_test.go +++ b/client/inprocess_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func TestInProcessMCPClient(t *testing.T) { diff --git a/client/interface.go b/client/interface.go index 233ca495a..749fb614f 100644 --- a/client/interface.go +++ b/client/interface.go @@ -4,7 +4,7 @@ package client import ( "context" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // MCPClient represents an MCP client interface diff --git a/client/oauth.go b/client/oauth.go index d6e3ceb99..782d9c811 100644 --- a/client/oauth.go +++ b/client/oauth.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" - "github.com/mark3labs/mcp-go/client/transport" + "github.com/rickey17/mcp-go/client/transport" ) // OAuthConfig is a convenience type that wraps transport.OAuthConfig diff --git a/client/oauth_test.go b/client/oauth_test.go index 4504a0727..f939bdc28 100644 --- a/client/oauth_test.go +++ b/client/oauth_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/client/transport" + "github.com/rickey17/mcp-go/client/transport" ) func TestNewOAuthStreamableHttpClient(t *testing.T) { diff --git a/client/protocol_negotiation_test.go b/client/protocol_negotiation_test.go index 022b7fc6d..90c3d365b 100644 --- a/client/protocol_negotiation_test.go +++ b/client/protocol_negotiation_test.go @@ -7,8 +7,8 @@ import ( "strings" "testing" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) // mockProtocolTransport implements transport.Interface for testing protocol negotiation diff --git a/client/sampling.go b/client/sampling.go index 245e2c1f7..94a086b03 100644 --- a/client/sampling.go +++ b/client/sampling.go @@ -3,7 +3,7 @@ package client import ( "context" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // SamplingHandler defines the interface for handling sampling requests from servers. diff --git a/client/sampling_test.go b/client/sampling_test.go index 60f533221..be258f838 100644 --- a/client/sampling_test.go +++ b/client/sampling_test.go @@ -5,8 +5,8 @@ import ( "encoding/json" "testing" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) // mockSamplingHandler implements SamplingHandler for testing diff --git a/client/sse.go b/client/sse.go index 07512a9be..13be17125 100644 --- a/client/sse.go +++ b/client/sse.go @@ -5,7 +5,7 @@ import ( "net/http" "net/url" - "github.com/mark3labs/mcp-go/client/transport" + "github.com/rickey17/mcp-go/client/transport" ) func WithHeaders(headers map[string]string) transport.ClientOption { diff --git a/client/sse_test.go b/client/sse_test.go index f38c31b17..7035fffb8 100644 --- a/client/sse_test.go +++ b/client/sse_test.go @@ -6,10 +6,10 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/client/transport" + "github.com/rickey17/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) type contextKey string diff --git a/client/stdio.go b/client/stdio.go index 199ec14c3..98e14febf 100644 --- a/client/stdio.go +++ b/client/stdio.go @@ -5,7 +5,7 @@ import ( "fmt" "io" - "github.com/mark3labs/mcp-go/client/transport" + "github.com/rickey17/mcp-go/client/transport" ) // NewStdioMCPClient creates a new stdio-based MCP client that communicates with a subprocess. diff --git a/client/stdio_test.go b/client/stdio_test.go index 7eb6dd38a..84ced5b4a 100644 --- a/client/stdio_test.go +++ b/client/stdio_test.go @@ -14,8 +14,8 @@ import ( "github.com/stretchr/testify/require" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) func compileTestServer(outputPath string) error { diff --git a/client/transport/inprocess.go b/client/transport/inprocess.go index 59c70940b..32911f102 100644 --- a/client/transport/inprocess.go +++ b/client/transport/inprocess.go @@ -6,8 +6,8 @@ import ( "fmt" "sync" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) type InProcessTransport struct { diff --git a/client/transport/interface.go b/client/transport/interface.go index e6feeb742..d867282e9 100644 --- a/client/transport/interface.go +++ b/client/transport/interface.go @@ -4,7 +4,7 @@ import ( "context" "encoding/json" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // HTTPHeaderFunc is a function that extracts header entries from the given context diff --git a/client/transport/sse.go b/client/transport/sse.go index 70a391905..0f4d4b25f 100644 --- a/client/transport/sse.go +++ b/client/transport/sse.go @@ -15,8 +15,8 @@ import ( "sync/atomic" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/util" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/util" ) // SSE implements the transport layer of the MCP protocol using Server-Sent Events (SSE). @@ -36,12 +36,12 @@ type SSE struct { headerFunc HTTPHeaderFunc logger util.Logger - started atomic.Bool - closed atomic.Bool - cancelSSEStream context.CancelFunc - protocolVersion atomic.Value // string - onConnectionLost func(error) - connectionLostMu sync.RWMutex + started atomic.Bool + closed atomic.Bool + cancelSSEStream context.CancelFunc + protocolVersion atomic.Value // string + onConnectionLost func(error) + connectionLostMu sync.RWMutex // OAuth support oauthHandler *OAuthHandler @@ -220,7 +220,7 @@ func (c *SSE) readSSE(reader io.ReadCloser) { c.connectionLostMu.RLock() handler := c.onConnectionLost c.connectionLostMu.RUnlock() - + if handler != nil { // This is not actually an error - HTTP2 idle timeout disconnection handler(err) diff --git a/client/transport/sse_test.go b/client/transport/sse_test.go index 31c70887f..3270e6f7c 100644 --- a/client/transport/sse_test.go +++ b/client/transport/sse_test.go @@ -13,7 +13,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" "github.com/stretchr/testify/require" ) diff --git a/client/transport/stdio.go b/client/transport/stdio.go index f3a95f4b0..b9f0ae993 100644 --- a/client/transport/stdio.go +++ b/client/transport/stdio.go @@ -11,8 +11,8 @@ import ( "os/exec" "sync" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/util" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/util" ) // Stdio implements the transport layer of the MCP protocol using stdio communication. diff --git a/client/transport/stdio_test.go b/client/transport/stdio_test.go index 18aa932e8..ec0f12b82 100644 --- a/client/transport/stdio_test.go +++ b/client/transport/stdio_test.go @@ -16,7 +16,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" "github.com/stretchr/testify/require" ) diff --git a/client/transport/streamable_http.go b/client/transport/streamable_http.go index 268aeb342..7ac13c101 100644 --- a/client/transport/streamable_http.go +++ b/client/transport/streamable_http.go @@ -16,8 +16,8 @@ import ( "sync/atomic" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/util" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/util" ) type StreamableHTTPCOption func(*StreamableHTTP) @@ -605,7 +605,7 @@ func (c *StreamableHTTP) listenForever(ctx context.Context) { connectCtx, cancel := context.WithTimeout(ctx, 10*time.Second) err := c.createGETConnectionToServer(connectCtx) cancel() - + if errors.Is(err, ErrGetMethodNotAllowed) { // server does not support listening c.logger.Errorf("server does not support listening") @@ -621,7 +621,7 @@ func (c *StreamableHTTP) listenForever(ctx context.Context) { if err != nil { c.logger.Errorf("failed to listen to server. retry in 1 second: %v", err) } - + // Use context-aware sleep select { case <-time.After(retryInterval): @@ -704,15 +704,15 @@ func (c *StreamableHTTP) handleIncomingRequest(ctx context.Context, request JSON // Create a new context with timeout for request handling, respecting parent context requestCtx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() - + response, err := handler(requestCtx, request) if err != nil { c.logger.Errorf("error handling request %s: %v", request.Method, err) - + // Determine appropriate JSON-RPC error code based on error type var errorCode int var errorMessage string - + // Check for specific sampling-related errors if errors.Is(err, context.Canceled) { errorCode = -32800 // Request cancelled @@ -731,7 +731,7 @@ func (c *StreamableHTTP) handleIncomingRequest(ctx context.Context, request JSON errorMessage = err.Error() } } - + // Send error response errorResponse := &JSONRPCResponse{ JSONRPC: "2.0", diff --git a/client/transport/streamable_http_oauth_test.go b/client/transport/streamable_http_oauth_test.go index 8b992ddeb..62aee4f96 100644 --- a/client/transport/streamable_http_oauth_test.go +++ b/client/transport/streamable_http_oauth_test.go @@ -9,7 +9,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) func TestStreamableHTTP_WithOAuth(t *testing.T) { diff --git a/client/transport/streamable_http_sampling_test.go b/client/transport/streamable_http_sampling_test.go index edba61eac..e9d805a75 100644 --- a/client/transport/streamable_http_sampling_test.go +++ b/client/transport/streamable_http_sampling_test.go @@ -11,32 +11,32 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // TestStreamableHTTP_SamplingFlow tests the complete sampling flow with HTTP transport func TestStreamableHTTP_SamplingFlow(t *testing.T) { - // Create simple test server + // Create simple test server server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Just respond OK to any requests w.WriteHeader(http.StatusOK) })) defer server.Close() - + // Create HTTP client transport client, err := NewStreamableHTTP(server.URL) if err != nil { t.Fatalf("Failed to create client: %v", err) } defer client.Close() - + // Set up sampling request handler var handledRequest *JSONRPCRequest handlerCalled := make(chan struct{}) client.SetRequestHandler(func(ctx context.Context, request JSONRPCRequest) (*JSONRPCResponse, error) { handledRequest = &request close(handlerCalled) - + // Simulate sampling handler response result := map[string]any{ "role": "assistant", @@ -47,25 +47,25 @@ func TestStreamableHTTP_SamplingFlow(t *testing.T) { "model": "test-model", "stopReason": "stop_sequence", } - + resultBytes, _ := json.Marshal(result) - + return &JSONRPCResponse{ JSONRPC: "2.0", ID: request.ID, Result: resultBytes, }, nil }) - + // Start the client ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() - + err = client.Start(ctx) if err != nil { t.Fatalf("Failed to start client: %v", err) } - + // Test direct request handling (simulating a sampling request) samplingRequest := JSONRPCRequest{ JSONRPC: "2.0", @@ -83,10 +83,10 @@ func TestStreamableHTTP_SamplingFlow(t *testing.T) { }, }, } - + // Directly test request handling client.handleIncomingRequest(ctx, samplingRequest) - + // Wait for handler to be called select { case <-handlerCalled: @@ -94,12 +94,12 @@ func TestStreamableHTTP_SamplingFlow(t *testing.T) { case <-time.After(1 * time.Second): t.Fatal("Handler was not called within timeout") } - + // Verify the request was handled if handledRequest == nil { t.Fatal("Sampling request was not handled") } - + if handledRequest.Method != string(mcp.MethodSamplingCreateMessage) { t.Errorf("Expected method %s, got %s", mcp.MethodSamplingCreateMessage, handledRequest.Method) } @@ -109,7 +109,7 @@ func TestStreamableHTTP_SamplingFlow(t *testing.T) { func TestStreamableHTTP_SamplingErrorHandling(t *testing.T) { var errorHandled sync.WaitGroup errorHandled.Add(1) - + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { var body map[string]any @@ -118,7 +118,7 @@ func TestStreamableHTTP_SamplingErrorHandling(t *testing.T) { w.WriteHeader(http.StatusOK) return } - + // Check if this is an error response if errorField, ok := body["error"]; ok { errorMap := errorField.(map[string]any) @@ -132,25 +132,25 @@ func TestStreamableHTTP_SamplingErrorHandling(t *testing.T) { w.WriteHeader(http.StatusOK) })) defer server.Close() - + client, err := NewStreamableHTTP(server.URL) if err != nil { t.Fatalf("Failed to create client: %v", err) } defer client.Close() - + // Set up request handler that returns an error client.SetRequestHandler(func(ctx context.Context, request JSONRPCRequest) (*JSONRPCResponse, error) { return nil, fmt.Errorf("sampling failed") }) - + // Start the client ctx := context.Background() err = client.Start(ctx) if err != nil { t.Fatalf("Failed to start client: %v", err) } - + // Simulate incoming sampling request samplingRequest := JSONRPCRequest{ JSONRPC: "2.0", @@ -158,10 +158,10 @@ func TestStreamableHTTP_SamplingErrorHandling(t *testing.T) { Method: string(mcp.MethodSamplingCreateMessage), Params: map[string]any{}, } - + // This should trigger error handling client.handleIncomingRequest(ctx, samplingRequest) - + // Wait for error to be handled errorHandled.Wait() } @@ -170,7 +170,7 @@ func TestStreamableHTTP_SamplingErrorHandling(t *testing.T) { func TestStreamableHTTP_NoSamplingHandler(t *testing.T) { var errorReceived bool errorReceivedChan := make(chan struct{}) - + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { var body map[string]any @@ -179,12 +179,12 @@ func TestStreamableHTTP_NoSamplingHandler(t *testing.T) { w.WriteHeader(http.StatusOK) return } - + // Check if this is an error response with method not found if errorField, ok := body["error"]; ok { errorMap := errorField.(map[string]any) if code, ok := errorMap["code"].(float64); ok && code == -32601 { - if message, ok := errorMap["message"].(string); ok && + if message, ok := errorMap["message"].(string); ok && strings.Contains(message, "no handler configured") { errorReceived = true close(errorReceivedChan) @@ -195,21 +195,21 @@ func TestStreamableHTTP_NoSamplingHandler(t *testing.T) { w.WriteHeader(http.StatusOK) })) defer server.Close() - + client, err := NewStreamableHTTP(server.URL) if err != nil { t.Fatalf("Failed to create client: %v", err) } defer client.Close() - + // Don't set any request handler - + ctx := context.Background() err = client.Start(ctx) if err != nil { t.Fatalf("Failed to start client: %v", err) } - + // Simulate incoming sampling request samplingRequest := JSONRPCRequest{ JSONRPC: "2.0", @@ -217,10 +217,10 @@ func TestStreamableHTTP_NoSamplingHandler(t *testing.T) { Method: string(mcp.MethodSamplingCreateMessage), Params: map[string]any{}, } - + // This should trigger "method not found" error client.handleIncomingRequest(ctx, samplingRequest) - + // Wait for error to be received select { case <-errorReceivedChan: @@ -228,7 +228,7 @@ func TestStreamableHTTP_NoSamplingHandler(t *testing.T) { case <-time.After(1 * time.Second): t.Fatal("Method not found error was not received within timeout") } - + if !errorReceived { t.Error("Expected method not found error, but didn't receive it") } @@ -241,13 +241,13 @@ func TestStreamableHTTP_BidirectionalInterface(t *testing.T) { t.Fatalf("Failed to create client: %v", err) } defer client.Close() - + // Verify it implements BidirectionalInterface _, ok := any(client).(BidirectionalInterface) if !ok { t.Error("StreamableHTTP should implement BidirectionalInterface") } - + // Test SetRequestHandler handlerSet := false handlerSetChan := make(chan struct{}) @@ -256,7 +256,7 @@ func TestStreamableHTTP_BidirectionalInterface(t *testing.T) { close(handlerSetChan) return nil, nil }) - + // Verify handler was set by triggering it ctx := context.Background() client.handleIncomingRequest(ctx, JSONRPCRequest{ @@ -264,7 +264,7 @@ func TestStreamableHTTP_BidirectionalInterface(t *testing.T) { ID: mcp.NewRequestId(1), Method: "test", }) - + // Wait for handler to be called select { case <-handlerSetChan: @@ -272,7 +272,7 @@ func TestStreamableHTTP_BidirectionalInterface(t *testing.T) { case <-time.After(1 * time.Second): t.Fatal("Handler was not called within timeout") } - + if !handlerSet { t.Error("Request handler was not properly set or called") } @@ -315,16 +315,16 @@ func TestStreamableHTTP_ConcurrentSamplingRequests(t *testing.T) { // Track which requests have been received and their completion order var requestOrder []int var orderMutex sync.Mutex - + // Set up request handler that simulates different processing times client.SetRequestHandler(func(ctx context.Context, request JSONRPCRequest) (*JSONRPCResponse, error) { // Extract request ID to determine processing time requestIDValue := request.ID.Value() - + var delay time.Duration var responseText string var requestNum int - + // First request (ID 1) takes longer, second request (ID 2) completes faster if requestIDValue == int64(1) { delay = 100 * time.Millisecond @@ -341,7 +341,7 @@ func TestStreamableHTTP_ConcurrentSamplingRequests(t *testing.T) { // Simulate processing time time.Sleep(delay) - + // Record completion order orderMutex.Lock() requestOrder = append(requestOrder, requestNum) @@ -428,7 +428,7 @@ func TestStreamableHTTP_ConcurrentSamplingRequests(t *testing.T) { // Verify completion order: request 2 should complete first orderMutex.Lock() defer orderMutex.Unlock() - + if len(requestOrder) != 2 { t.Fatalf("Expected 2 completed requests, got %d", len(requestOrder)) } @@ -493,4 +493,4 @@ func TestStreamableHTTP_ConcurrentSamplingRequests(t *testing.T) { } } } -} \ No newline at end of file +} diff --git a/client/transport/streamable_http_test.go b/client/transport/streamable_http_test.go index 5208cb9c3..d056d2e37 100644 --- a/client/transport/streamable_http_test.go +++ b/client/transport/streamable_http_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // startMockStreamableHTTPServer starts a test HTTP server that implements diff --git a/examples/custom_context/main.go b/examples/custom_context/main.go index e41ab8db7..4f3476cab 100644 --- a/examples/custom_context/main.go +++ b/examples/custom_context/main.go @@ -10,8 +10,8 @@ import ( "net/http" "os" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // authKey is a custom context key for storing the auth token. diff --git a/examples/dynamic_path/main.go b/examples/dynamic_path/main.go index 80d96789a..c25f2d0ad 100644 --- a/examples/dynamic_path/main.go +++ b/examples/dynamic_path/main.go @@ -7,8 +7,8 @@ import ( "log" "net/http" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/examples/everything/main.go b/examples/everything/main.go index 620f5936a..4380a62a3 100644 --- a/examples/everything/main.go +++ b/examples/everything/main.go @@ -9,8 +9,8 @@ import ( "strconv" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) type ToolName string diff --git a/examples/filesystem_stdio_client/main.go b/examples/filesystem_stdio_client/main.go index 3dcd89fa7..513b6f51d 100644 --- a/examples/filesystem_stdio_client/main.go +++ b/examples/filesystem_stdio_client/main.go @@ -7,8 +7,8 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) func main() { diff --git a/examples/in_process/main.go b/examples/in_process/main.go index d01a5e808..49862b450 100644 --- a/examples/in_process/main.go +++ b/examples/in_process/main.go @@ -6,9 +6,9 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // handleDummyTool is a simple tool that returns "foo bar" diff --git a/examples/inprocess_sampling/main.go b/examples/inprocess_sampling/main.go index a50ee6434..3d6258cbf 100644 --- a/examples/inprocess_sampling/main.go +++ b/examples/inprocess_sampling/main.go @@ -5,9 +5,9 @@ import ( "fmt" "log" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // MockSamplingHandler implements client.SamplingHandler for demonstration diff --git a/examples/oauth_client/main.go b/examples/oauth_client/main.go index 639d8cb7a..1c9b7a8d8 100644 --- a/examples/oauth_client/main.go +++ b/examples/oauth_client/main.go @@ -9,8 +9,8 @@ import ( "os/exec" "runtime" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) const ( diff --git a/examples/sampling_client/main.go b/examples/sampling_client/main.go index 093b59817..8a7b6e754 100644 --- a/examples/sampling_client/main.go +++ b/examples/sampling_client/main.go @@ -8,9 +8,9 @@ import ( "os/signal" "syscall" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) // MockSamplingHandler implements the SamplingHandler interface for demonstration. @@ -95,7 +95,7 @@ func main() { // Setup graceful shutdown sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) - + // Create a context that cancels on signal ctx, cancel := context.WithCancel(ctx) go func() { @@ -103,7 +103,7 @@ func main() { log.Println("Received shutdown signal, closing client...") cancel() }() - + // Move defer after error checking defer func() { if err := mcpClient.Close(); err != nil { diff --git a/examples/sampling_http_client/main.go b/examples/sampling_http_client/main.go index 98817e6f8..09f7964fe 100644 --- a/examples/sampling_http_client/main.go +++ b/examples/sampling_http_client/main.go @@ -8,9 +8,9 @@ import ( "os/signal" "syscall" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) // MockSamplingHandler implements client.SamplingHandler for demonstration. @@ -63,7 +63,7 @@ func main() { log.Fatalf("Failed to create HTTP transport: %v", err) } defer httpTransport.Close() - + // Create client with sampling support mcpClient := client.NewClient( httpTransport, @@ -81,7 +81,7 @@ func main() { initRequest := mcp.InitializeRequest{ Params: mcp.InitializeParams{ ProtocolVersion: mcp.LATEST_PROTOCOL_VERSION, - Capabilities: mcp.ClientCapabilities{ + Capabilities: mcp.ClientCapabilities{ // Sampling capability will be automatically added by the client }, ClientInfo: mcp.Implementation{ @@ -90,7 +90,7 @@ func main() { }, }, } - + _, err = mcpClient.Initialize(ctx, initRequest) if err != nil { log.Fatalf("Failed to initialize MCP session: %v", err) @@ -102,7 +102,7 @@ func main() { // In a real application, you would keep the client running to handle sampling requests // For this example, we'll just demonstrate that it's working - + // Keep the client running (in a real app, you'd have your main application logic here) sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM) @@ -113,4 +113,4 @@ func main() { case <-sigChan: log.Println("Received shutdown signal") } -} \ No newline at end of file +} diff --git a/examples/sampling_http_server/main.go b/examples/sampling_http_server/main.go index 95a2bf29b..a01cbb691 100644 --- a/examples/sampling_http_server/main.go +++ b/examples/sampling_http_server/main.go @@ -6,8 +6,8 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -147,4 +147,4 @@ func main() { if err := httpServer.Start(":8080"); err != nil { log.Fatalf("Server failed to start: %v", err) } -} \ No newline at end of file +} diff --git a/examples/sampling_server/main.go b/examples/sampling_server/main.go index ea887c588..9ccd843a4 100644 --- a/examples/sampling_server/main.go +++ b/examples/sampling_server/main.go @@ -6,8 +6,8 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/examples/simple_client/main.go b/examples/simple_client/main.go index c0f48593a..2de135da6 100644 --- a/examples/simple_client/main.go +++ b/examples/simple_client/main.go @@ -9,9 +9,9 @@ import ( "os" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) func main() { diff --git a/examples/structured_input_and_output/main.go b/examples/structured_input_and_output/main.go index f932def08..9271e0bde 100644 --- a/examples/structured_input_and_output/main.go +++ b/examples/structured_input_and_output/main.go @@ -5,8 +5,8 @@ import ( "fmt" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // Note: The jsonschema_description tag is added to the JSON schema as description diff --git a/examples/typed_tools/main.go b/examples/typed_tools/main.go index f9bd3c21e..7d7578c9f 100644 --- a/examples/typed_tools/main.go +++ b/examples/typed_tools/main.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // Define a struct for our typed arguments diff --git a/go.mod b/go.mod index 5c8974549..e275c8a57 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/mark3labs/mcp-go +module github.com/rickey17/mcp-go go 1.23 diff --git a/mcp/tools.go b/mcp/tools.go index 3f3674923..ce3aa52e6 100644 --- a/mcp/tools.go +++ b/mcp/tools.go @@ -492,9 +492,7 @@ func (r CallToolResult) MarshalJSON() ([]byte, error) { } // Marshal IsError if true - if r.IsError { - m["isError"] = r.IsError - } + m["isError"] = r.IsError return json.Marshal(m) } diff --git a/mcptest/mcptest.go b/mcptest/mcptest.go index df85753f2..4cd3c47d2 100644 --- a/mcptest/mcptest.go +++ b/mcptest/mcptest.go @@ -10,10 +10,10 @@ import ( "sync" "testing" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // Server encapsulates an MCP server and manages resources like pipes and context. diff --git a/mcptest/mcptest_test.go b/mcptest/mcptest_test.go index 3e4be38e3..46120e567 100644 --- a/mcptest/mcptest_test.go +++ b/mcptest/mcptest_test.go @@ -6,9 +6,9 @@ import ( "strings" "testing" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/mcptest" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcptest" + "github.com/rickey17/mcp-go/server" ) func TestServerWithTool(t *testing.T) { diff --git a/server/hooks.go b/server/hooks.go index 4baa1c4e0..5bd6e112f 100644 --- a/server/hooks.go +++ b/server/hooks.go @@ -5,7 +5,7 @@ package server import ( "context" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // OnRegisterSessionHookFunc is a hook that will be called when a new session is registered. diff --git a/server/inprocess_session.go b/server/inprocess_session.go index daaf28a5c..97491d0a4 100644 --- a/server/inprocess_session.go +++ b/server/inprocess_session.go @@ -7,7 +7,7 @@ import ( "sync/atomic" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // SamplingHandler defines the interface for handling sampling requests from servers. diff --git a/server/internal/gen/hooks.go.tmpl b/server/internal/gen/hooks.go.tmpl index 64274bacc..1cbd9cabb 100644 --- a/server/internal/gen/hooks.go.tmpl +++ b/server/internal/gen/hooks.go.tmpl @@ -8,7 +8,7 @@ import ( "errors" "fmt" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // OnRegisterSessionHookFunc is a hook that will be called when a new session is registered. diff --git a/server/internal/gen/request_handler.go.tmpl b/server/internal/gen/request_handler.go.tmpl index 70600f3d8..b7f960ac6 100644 --- a/server/internal/gen/request_handler.go.tmpl +++ b/server/internal/gen/request_handler.go.tmpl @@ -8,7 +8,7 @@ import ( "errors" "fmt" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // HandleMessage processes an incoming JSON-RPC message and returns an appropriate response diff --git a/server/request_handler.go b/server/request_handler.go index b9175dc4e..583550a51 100644 --- a/server/request_handler.go +++ b/server/request_handler.go @@ -8,7 +8,7 @@ import ( "fmt" "net/http" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // HandleMessage processes an incoming JSON-RPC message and returns an appropriate response diff --git a/server/resource_test.go b/server/resource_test.go index 05a3b2793..14017eb44 100644 --- a/server/resource_test.go +++ b/server/resource_test.go @@ -5,7 +5,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/server/sampling.go b/server/sampling.go index 4423ccf5f..1ce7f477a 100644 --- a/server/sampling.go +++ b/server/sampling.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // EnableSampling enables sampling capabilities for the server. @@ -12,7 +12,7 @@ import ( func (s *MCPServer) EnableSampling() { s.capabilitiesMu.Lock() defer s.capabilitiesMu.Unlock() - + enabled := true s.capabilities.sampling = &enabled } diff --git a/server/sampling_test.go b/server/sampling_test.go index fbecdd70d..cda1aad05 100644 --- a/server/sampling_test.go +++ b/server/sampling_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) func TestMCPServer_RequestSampling_NoSession(t *testing.T) { @@ -116,7 +116,7 @@ func TestMCPServer_RequestSampling_Success(t *testing.T) { func TestMCPServer_EnableSampling_SetsCapability(t *testing.T) { server := NewMCPServer("test", "1.0.0") - + // Verify sampling capability is not set initially ctx := context.Background() initRequest := mcp.InitializeRequest{ @@ -129,25 +129,25 @@ func TestMCPServer_EnableSampling_SetsCapability(t *testing.T) { Capabilities: mcp.ClientCapabilities{}, }, } - + result, err := server.handleInitialize(ctx, 1, initRequest) if err != nil { t.Fatalf("unexpected error: %v", err) } - + if result.Capabilities.Sampling != nil { t.Error("sampling capability should not be set before EnableSampling() is called") } - + // Enable sampling server.EnableSampling() - + // Verify sampling capability is now set result, err = server.handleInitialize(ctx, 2, initRequest) if err != nil { t.Fatalf("unexpected error after EnableSampling(): %v", err) } - + if result.Capabilities.Sampling == nil { t.Error("sampling capability should be set after EnableSampling() is called") } diff --git a/server/server.go b/server/server.go index 366bf6611..0d5e0177c 100644 --- a/server/server.go +++ b/server/server.go @@ -10,7 +10,7 @@ import ( "sort" "sync" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // resourceEntry holds both a resource and its handler diff --git a/server/server_race_test.go b/server/server_race_test.go index 4e0be43a8..cbf2ef9d2 100644 --- a/server/server_race_test.go +++ b/server/server_race_test.go @@ -7,7 +7,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/server/server_test.go b/server/server_test.go index c4d6d4c00..69ecf8c04 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/server/session.go b/server/session.go index 11ee8a2f1..2dc75b5ba 100644 --- a/server/session.go +++ b/server/session.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // ClientSession represents an active session that can be used by MCPServer to interact with client. diff --git a/server/session_test.go b/server/session_test.go index 04334487b..35620efc9 100644 --- a/server/session_test.go +++ b/server/session_test.go @@ -12,7 +12,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // sessionTestClient implements the basic ClientSession interface for testing diff --git a/server/sse.go b/server/sse.go index 9c9766cf3..64d0cd209 100644 --- a/server/sse.go +++ b/server/sse.go @@ -16,7 +16,7 @@ import ( "github.com/google/uuid" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // sseSession represents an active SSE connection. diff --git a/server/sse_test.go b/server/sse_test.go index de8e29d33..069e8159b 100644 --- a/server/sse_test.go +++ b/server/sse_test.go @@ -15,7 +15,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" "github.com/stretchr/testify/require" ) diff --git a/server/stdio.go b/server/stdio.go index 8c270e18b..df5ebdd6b 100644 --- a/server/stdio.go +++ b/server/stdio.go @@ -13,7 +13,7 @@ import ( "sync/atomic" "syscall" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // StdioContextFunc is a function that takes an existing context and returns diff --git a/server/stdio_test.go b/server/stdio_test.go index 8fb542a80..a35ecf230 100644 --- a/server/stdio_test.go +++ b/server/stdio_test.go @@ -12,7 +12,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) func TestStdioServer(t *testing.T) { diff --git a/server/streamable_http.go b/server/streamable_http.go index 24ec1c95a..8e1183715 100644 --- a/server/streamable_http.go +++ b/server/streamable_http.go @@ -14,8 +14,8 @@ import ( "time" "github.com/google/uuid" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/util" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/util" ) // StreamableHTTPOption defines a function type for configuring StreamableHTTPServer @@ -237,9 +237,9 @@ func (s *StreamableHTTPServer) handlePost(w http.ResponseWriter, r *http.Request } // Check if this is a sampling response (has result/error but no method) - isSamplingResponse := jsonMessage.Method == "" && jsonMessage.ID != nil && + isSamplingResponse := jsonMessage.Method == "" && jsonMessage.ID != nil && (jsonMessage.Result != nil || jsonMessage.Error != nil) - + isInitializeRequest := jsonMessage.Method == mcp.MethodInitialize // Handle sampling responses separately @@ -390,7 +390,7 @@ func (s *StreamableHTTPServer) handleGet(w http.ResponseWriter, r *http.Request) return } defer s.server.UnregisterSession(r.Context(), sessionID) - + // Register session for sampling response delivery s.activeSessions.Store(sessionID, session) defer s.activeSessions.Delete(sessionID) @@ -743,18 +743,18 @@ type streamableHttpSession struct { logLevels *sessionLogLevelsStore // Sampling support for bidirectional communication - samplingRequestChan chan samplingRequestItem // server -> client sampling requests - samplingRequests sync.Map // requestID -> pending sampling request context - requestIDCounter atomic.Int64 // for generating unique request IDs + samplingRequestChan chan samplingRequestItem // server -> client sampling requests + samplingRequests sync.Map // requestID -> pending sampling request context + requestIDCounter atomic.Int64 // for generating unique request IDs } func newStreamableHttpSession(sessionID string, toolStore *sessionToolsStore, levels *sessionLogLevelsStore) *streamableHttpSession { s := &streamableHttpSession{ - sessionID: sessionID, - notificationChannel: make(chan mcp.JSONRPCNotification, 100), - tools: toolStore, - logLevels: levels, - samplingRequestChan: make(chan samplingRequestItem, 10), + sessionID: sessionID, + notificationChannel: make(chan mcp.JSONRPCNotification, 100), + tools: toolStore, + logLevels: levels, + samplingRequestChan: make(chan samplingRequestItem, 10), } return s } @@ -810,21 +810,21 @@ var _ SessionWithStreamableHTTPConfig = (*streamableHttpSession)(nil) func (s *streamableHttpSession) RequestSampling(ctx context.Context, request mcp.CreateMessageRequest) (*mcp.CreateMessageResult, error) { // Generate unique request ID requestID := s.requestIDCounter.Add(1) - + // Create response channel for this specific request responseChan := make(chan samplingResponseItem, 1) - + // Create the sampling request item samplingRequest := samplingRequestItem{ requestID: requestID, request: request, response: responseChan, } - + // Store the pending request s.samplingRequests.Store(requestID, responseChan) defer s.samplingRequests.Delete(requestID) - + // Send the sampling request via the channel (non-blocking) select { case s.samplingRequestChan <- samplingRequest: @@ -834,7 +834,7 @@ func (s *streamableHttpSession) RequestSampling(ctx context.Context, request mcp default: return nil, fmt.Errorf("sampling request queue is full - server overloaded") } - + // Wait for response or context cancellation select { case response := <-responseChan: diff --git a/server/streamable_http_sampling_test.go b/server/streamable_http_sampling_test.go index 4cf57838c..ceecdc8f0 100644 --- a/server/streamable_http_sampling_test.go +++ b/server/streamable_http_sampling_test.go @@ -10,7 +10,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) // TestStreamableHTTPServer_SamplingBasic tests basic sampling session functionality @@ -213,4 +213,4 @@ func TestStreamableHTTPServer_SamplingQueueFull(t *testing.T) { if !strings.Contains(err.Error(), "queue is full") { t.Errorf("Expected queue full error, got: %v", err) } -} \ No newline at end of file +} diff --git a/server/streamable_http_test.go b/server/streamable_http_test.go index 105fd18ce..ffcdeb80a 100644 --- a/server/streamable_http_test.go +++ b/server/streamable_http_test.go @@ -14,7 +14,7 @@ import ( "testing" "time" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) type jsonRPCResponse struct { diff --git a/testdata/mockstdio_server.go b/testdata/mockstdio_server.go index 30bf0c001..7abde9aa2 100644 --- a/testdata/mockstdio_server.go +++ b/testdata/mockstdio_server.go @@ -7,7 +7,7 @@ import ( "log/slog" "os" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/mcp" ) type JSONRPCRequest struct { diff --git a/www/docs/pages/clients/advanced-sampling.mdx b/www/docs/pages/clients/advanced-sampling.mdx index 81a4cc9aa..fd1e78138 100644 --- a/www/docs/pages/clients/advanced-sampling.mdx +++ b/www/docs/pages/clients/advanced-sampling.mdx @@ -17,9 +17,9 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) type MySamplingHandler struct { @@ -103,8 +103,8 @@ import ( "strings" "os" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) type MockSamplingHandler struct{} @@ -493,5 +493,5 @@ SSE and StreamableHTTP transports do not support sampling due to their one-way o - Learn about [server-side sampling implementation](/servers/advanced-sampling) - Explore [client operations](/clients/operations) -- Check out the [sampling examples](https://github.com/mark3labs/mcp-go/tree/main/examples/sampling_client) +- Check out the [sampling examples](https://github.com/rickey17/mcp-go/tree/main/examples/sampling_client) - See [in-process transport documentation](/transports/inprocess) for embedded scenarios \ No newline at end of file diff --git a/www/docs/pages/clients/basics.mdx b/www/docs/pages/clients/basics.mdx index 30eb5623d..68325ddbd 100644 --- a/www/docs/pages/clients/basics.mdx +++ b/www/docs/pages/clients/basics.mdx @@ -37,8 +37,8 @@ import ( "sync" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) func createStdioClient() (client.Client, error) { diff --git a/www/docs/pages/clients/index.mdx b/www/docs/pages/clients/index.mdx index fbfa19346..87266cde9 100644 --- a/www/docs/pages/clients/index.mdx +++ b/www/docs/pages/clients/index.mdx @@ -24,8 +24,8 @@ import ( "fmt" "log" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) func main() { @@ -179,8 +179,8 @@ import ( "sync" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) type MCPClientManager struct { diff --git a/www/docs/pages/clients/operations.mdx b/www/docs/pages/clients/operations.mdx index 8734486d1..af7bda0b8 100644 --- a/www/docs/pages/clients/operations.mdx +++ b/www/docs/pages/clients/operations.mdx @@ -21,8 +21,8 @@ import ( "sync" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) func listResources(ctx context.Context, c client.Client) error { @@ -925,7 +925,7 @@ Consider implementing sampling when your client: ### Basic Implementation ```go -import "github.com/mark3labs/mcp-go/client" +import "github.com/rickey17/mcp-go/client" // Implement the SamplingHandler interface type MySamplingHandler struct { diff --git a/www/docs/pages/clients/transports.mdx b/www/docs/pages/clients/transports.mdx index 1a2e6ddcf..bd3fbd9b5 100644 --- a/www/docs/pages/clients/transports.mdx +++ b/www/docs/pages/clients/transports.mdx @@ -33,9 +33,9 @@ import ( "sync" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func createStdioClient() { diff --git a/www/docs/pages/getting-started.mdx b/www/docs/pages/getting-started.mdx index 9a130e48b..1a49fe1fe 100644 --- a/www/docs/pages/getting-started.mdx +++ b/www/docs/pages/getting-started.mdx @@ -27,7 +27,7 @@ MCP-Go is designed to make building MCP servers in Go fast, simple, and complete Add MCP-Go to your Go project: ```bash -go get github.com/mark3labs/mcp-go +go get github.com/rickey17/mcp-go ``` MCP-Go makes it easy to build Model Context Protocol (MCP) servers in Go. This guide will help you create your first MCP server in just a few minutes. @@ -43,8 +43,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -155,6 +155,6 @@ MCP-Go supports multiple transport methods: ## Need Help? -- Check out the [examples](https://github.com/mark3labs/mcp-go/tree/main/examples) for more complex use cases +- Check out the [examples](https://github.com/rickey17/mcp-go/tree/main/examples) for more complex use cases - Join the discussion on [Discord](https://discord.gg/RqSS2NQVsY) -- Read the full documentation in the [README](https://github.com/mark3labs/mcp-go/blob/main/README.md) \ No newline at end of file +- Read the full documentation in the [README](https://github.com/rickey17/mcp-go/blob/main/README.md) \ No newline at end of file diff --git a/www/docs/pages/index.mdx b/www/docs/pages/index.mdx index 3e3049f0c..063e93899 100644 --- a/www/docs/pages/index.mdx +++ b/www/docs/pages/index.mdx @@ -12,6 +12,6 @@ import { HomePage } from 'vocs/components' Get started - GitHub + GitHub \ No newline at end of file diff --git a/www/docs/pages/quick-start.mdx b/www/docs/pages/quick-start.mdx index d805c0f3a..79b7d65c8 100644 --- a/www/docs/pages/quick-start.mdx +++ b/www/docs/pages/quick-start.mdx @@ -13,8 +13,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -74,7 +74,7 @@ Save this as `hello-server/main.go` and run: ```bash cd hello-server go mod init hello-server -go get github.com/mark3labs/mcp-go +go get github.com/rickey17/mcp-go go run main.go ``` @@ -131,9 +131,9 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) func main() { @@ -218,9 +218,9 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/client/transport" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/client/transport" + "github.com/rickey17/mcp-go/mcp" ) func main() { diff --git a/www/docs/pages/servers/advanced-sampling.mdx b/www/docs/pages/servers/advanced-sampling.mdx index 1bc05eb6e..06fbdea40 100644 --- a/www/docs/pages/servers/advanced-sampling.mdx +++ b/www/docs/pages/servers/advanced-sampling.mdx @@ -15,8 +15,8 @@ package main import ( "context" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -248,8 +248,8 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -395,5 +395,5 @@ For these transports, consider implementing LLM integration directly in your too - Learn about [client-side sampling implementation](/clients/advanced-sampling) - Explore [advanced server features](/servers/advanced) -- Check out the [sampling examples](https://github.com/mark3labs/mcp-go/tree/main/examples/sampling_server) +- Check out the [sampling examples](https://github.com/rickey17/mcp-go/tree/main/examples/sampling_server) - See [in-process sampling documentation](/transports/inprocess#sampling-support) for embedded scenarios \ No newline at end of file diff --git a/www/docs/pages/servers/advanced.mdx b/www/docs/pages/servers/advanced.mdx index 990599b05..c8ca70e6a 100644 --- a/www/docs/pages/servers/advanced.mdx +++ b/www/docs/pages/servers/advanced.mdx @@ -17,8 +17,8 @@ import ( "fmt" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // Define input and output types @@ -830,8 +830,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/www/docs/pages/servers/basics.mdx b/www/docs/pages/servers/basics.mdx index 7b33f33ce..84ab3cd37 100644 --- a/www/docs/pages/servers/basics.mdx +++ b/www/docs/pages/servers/basics.mdx @@ -12,7 +12,7 @@ The foundation of any MCP server is the `NewMCPServer()` function. This creates package main import ( - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/www/docs/pages/servers/index.mdx b/www/docs/pages/servers/index.mdx index d0983d13a..bc41299ba 100644 --- a/www/docs/pages/servers/index.mdx +++ b/www/docs/pages/servers/index.mdx @@ -27,8 +27,8 @@ import ( "fmt" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) var start time.Time diff --git a/www/docs/pages/servers/prompts.mdx b/www/docs/pages/servers/prompts.mdx index f1801b548..40948954e 100644 --- a/www/docs/pages/servers/prompts.mdx +++ b/www/docs/pages/servers/prompts.mdx @@ -32,8 +32,8 @@ import ( "context" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/www/docs/pages/servers/resources.mdx b/www/docs/pages/servers/resources.mdx index 5950f2b25..4f8034d46 100644 --- a/www/docs/pages/servers/resources.mdx +++ b/www/docs/pages/servers/resources.mdx @@ -174,8 +174,8 @@ import ( "encoding/json" "fmt" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // Database table resource diff --git a/www/docs/pages/transports/http.mdx b/www/docs/pages/transports/http.mdx index 9d7e308bc..2a264e75c 100644 --- a/www/docs/pages/transports/http.mdx +++ b/www/docs/pages/transports/http.mdx @@ -36,8 +36,8 @@ import ( "strings" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/www/docs/pages/transports/index.mdx b/www/docs/pages/transports/index.mdx index e8ec5eae4..47db6017c 100644 --- a/www/docs/pages/transports/index.mdx +++ b/www/docs/pages/transports/index.mdx @@ -33,9 +33,9 @@ import ( "log" "os" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" - "github.com/mark3labs/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" + "github.com/rickey17/mcp-go/client" ) func main() { diff --git a/www/docs/pages/transports/inprocess.mdx b/www/docs/pages/transports/inprocess.mdx index e4b2c29b7..71cbe6029 100644 --- a/www/docs/pages/transports/inprocess.mdx +++ b/www/docs/pages/transports/inprocess.mdx @@ -29,9 +29,9 @@ import ( "fmt" "log" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" - "github.com/mark3labs/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" + "github.com/rickey17/mcp-go/client" ) func main() { @@ -285,9 +285,9 @@ import ( "fmt" "log" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) // MockSamplingHandler implements client.SamplingHandler for demonstration diff --git a/www/docs/pages/transports/sse.mdx b/www/docs/pages/transports/sse.mdx index 81fabba43..1f0876d53 100644 --- a/www/docs/pages/transports/sse.mdx +++ b/www/docs/pages/transports/sse.mdx @@ -32,8 +32,8 @@ import ( "log" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { diff --git a/www/docs/pages/transports/stdio.mdx b/www/docs/pages/transports/stdio.mdx index 3f609690f..1e9dd4732 100644 --- a/www/docs/pages/transports/stdio.mdx +++ b/www/docs/pages/transports/stdio.mdx @@ -33,8 +33,8 @@ import ( "path/filepath" "strings" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -199,8 +199,8 @@ import ( "syscall" "time" - "github.com/mark3labs/mcp-go/mcp" - "github.com/mark3labs/mcp-go/server" + "github.com/rickey17/mcp-go/mcp" + "github.com/rickey17/mcp-go/server" ) func main() { @@ -316,8 +316,8 @@ import ( "time" - "github.com/mark3labs/mcp-go/client" - "github.com/mark3labs/mcp-go/mcp" + "github.com/rickey17/mcp-go/client" + "github.com/rickey17/mcp-go/mcp" ) func main() { diff --git a/www/vocs.config.ts b/www/vocs.config.ts index dc745b385..23d0cc28f 100644 --- a/www/vocs.config.ts +++ b/www/vocs.config.ts @@ -118,7 +118,7 @@ export default defineConfig({ socials: [ { icon: 'github', - link: 'https://github.com/mark3labs/mcp-go', + link: 'https://github.com/rickey17/mcp-go', }, ], })