The widget toolbox available in customize mode filters available widgets based on the user's permissions to installed widgets and the widgets' required contexts.  For example, a Blog - Post widget is only available in the toolbox when the current page's URL identifies a blog post.

Available contexts are defined by IScriptedContentFragmentContextProvider-based plugins.  The full name of this type is: Telligent.Evolution.Extensibility.UI.Version1.IScriptedContentFragmentContextProvider and it exists within the Telligent.Evolution.ScriptedContentFragments assembly.  In addition to the base IPlugin members, it adds the following:

IEnumerable<Telligent.Evolution.Extensibility.UI.Version1.ContextItem> GetSupportedContextItems()

This method should return all contexts managed by this context provider.  Each ContextItem is defined using a Name and an Id.  The Name is shown in the widget editing user interface and the Id is used internally to identify this context.  

bool HasContextItem(System.Web.UI.Page page, Guid contextItemId)

This method should return true if the provided context identifier exists on the provided page.  For unrecognized context identifiers, the provider should always return false.  For recognized context identifiers, the provider should only return true if a recognized and valid object described by the context exists on the page.  

For example, for a context named "Blog Post" which identifies that a widget requires that a blog post exist on the current page, the associated context provider should only return true if a valid blog post is defined on the query string of the current page's URL or can otherwise be loaded on the current page.