// Code generated by `go generate`. DO NOT EDIT. // source: server/internal/gen/request_handler.go.tmpl
package server import ( ) // HandleMessage processes an incoming JSON-RPC message and returns an appropriate response func ( *MCPServer) ( context.Context, json.RawMessage, ) mcp.JSONRPCMessage { // Add server to context = context.WithValue(, serverKey{}, ) var *requestError var struct { string `json:"jsonrpc"` mcp.MCPMethod `json:"method"` any `json:"id,omitempty"` any `json:"result,omitempty"` } if := json.Unmarshal(, &); != nil { return createErrorResponse( nil, mcp.PARSE_ERROR, "Failed to parse message", ) } // Check for valid JSONRPC version if . != mcp.JSONRPC_VERSION { return createErrorResponse( ., mcp.INVALID_REQUEST, "Invalid JSON-RPC version", ) } if . == nil { var mcp.JSONRPCNotification if := json.Unmarshal(, &); != nil { return createErrorResponse( nil, mcp.PARSE_ERROR, "Failed to parse notification", ) } .handleNotification(, ) return nil // Return nil for notifications } if . != nil { // this is a response to a request sent by the server (e.g. from a ping // sent due to WithKeepAlive option) return nil } := .hooks.onRequestInitialization(, ., ) if != nil { return createErrorResponse( ., mcp.INVALID_REQUEST, .Error(), ) } // Get request header from ctx := .Value(requestHeader) , := .(http.Header) if == nil || ! { = make(http.Header) } // Wrap context with cancel for in-flight request cancellation (MCP spec: notifications/cancelled) , := context.WithCancel() defer () // Store cancel func so notifications/cancelled can cancel this request. // Use session-scoped keys to prevent cross-session request ID collisions. if . != nil { := inflightKey(, .) .inflightCancels.Store(, ) defer .inflightCancels.Delete() } switch . { case mcp.MethodInitialize: var mcp.InitializeRequest var *mcp.InitializeResult if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeInitialize(, ., &) , = .handleInitialize(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterInitialize(, ., &, ) return createResponse(., *) case mcp.MethodPing: var mcp.PingRequest var *mcp.EmptyResult if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforePing(, ., &) , = .handlePing(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterPing(, ., &, ) return createResponse(., *) case mcp.MethodSetLogLevel: var mcp.SetLevelRequest var *mcp.EmptyResult if .capabilities.logging == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("logging %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeSetLevel(, ., &) , = .handleSetLevel(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterSetLevel(, ., &, ) return createResponse(., *) case mcp.MethodResourcesList: var mcp.ListResourcesRequest var *mcp.ListResourcesResult if .capabilities.resources == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("resources %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeListResources(, ., &) , = .handleListResources(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterListResources(, ., &, ) return createResponse(., *) case mcp.MethodResourcesTemplatesList: var mcp.ListResourceTemplatesRequest var *mcp.ListResourceTemplatesResult if .capabilities.resources == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("resources %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeListResourceTemplates(, ., &) , = .handleListResourceTemplates(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterListResourceTemplates(, ., &, ) return createResponse(., *) case mcp.MethodResourcesRead: var mcp.ReadResourceRequest var *mcp.ReadResourceResult if .capabilities.resources == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("resources %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeReadResource(, ., &) , = .handleReadResource(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterReadResource(, ., &, ) return createResponse(., *) case mcp.MethodPromptsList: var mcp.ListPromptsRequest var *mcp.ListPromptsResult if .capabilities.prompts == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("prompts %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeListPrompts(, ., &) , = .handleListPrompts(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterListPrompts(, ., &, ) return createResponse(., *) case mcp.MethodPromptsGet: var mcp.GetPromptRequest var *mcp.GetPromptResult if .capabilities.prompts == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("prompts %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeGetPrompt(, ., &) , = .handleGetPrompt(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterGetPrompt(, ., &, ) return createResponse(., *) case mcp.MethodToolsList: var mcp.ListToolsRequest var *mcp.ListToolsResult if .capabilities.tools == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("tools %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeListTools(, ., &) , = .handleListTools(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterListTools(, ., &, ) return createResponse(., *) case mcp.MethodToolsCall: var mcp.CallToolRequest var any if .capabilities.tools == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("tools %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeCallTool(, ., &) , = .handleToolCall(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterCallTool(, ., &, ) return createResponse(., ) case mcp.MethodTasksGet: var mcp.GetTaskRequest var *mcp.GetTaskResult if .capabilities.tasks == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("tasks %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeGetTask(, ., &) , = .handleGetTask(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterGetTask(, ., &, ) return createResponse(., *) case mcp.MethodTasksList: var mcp.ListTasksRequest var *mcp.ListTasksResult if .capabilities.tasks == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("tasks %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeListTasks(, ., &) , = .handleListTasks(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterListTasks(, ., &, ) return createResponse(., *) case mcp.MethodTasksResult: var mcp.TaskResultRequest var *mcp.TaskResultResult if .capabilities.tasks == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("tasks %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeTaskResult(, ., &) , = .handleTaskResult(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterTaskResult(, ., &, ) return createResponse(., *) case mcp.MethodTasksCancel: var mcp.CancelTaskRequest var *mcp.CancelTaskResult if .capabilities.tasks == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("tasks %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeCancelTask(, ., &) , = .handleCancelTask(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterCancelTask(, ., &, ) return createResponse(., *) case mcp.MethodCompletionComplete: var mcp.CompleteRequest var *mcp.CompleteResult if .capabilities.completions == nil { = &requestError{ id: ., code: mcp.METHOD_NOT_FOUND, err: fmt.Errorf("completions %w", ErrUnsupported), } } else if := json.Unmarshal(, &); != nil { = &requestError{ id: ., code: mcp.INVALID_REQUEST, err: &UnparsableMessageError{message: , err: , method: .}, } } else { .Header = .hooks.beforeComplete(, ., &) , = .handleComplete(, ., ) } if != nil { .hooks.onError(, ., ., &, ) return .ToJSONRPCError() } .hooks.afterComplete(, ., &, ) return createResponse(., *) default: return createErrorResponse( ., mcp.METHOD_NOT_FOUND, fmt.Sprintf("Method %s not found", .), ) } }