def main_composite(kind, toolkits=None, name=None):
    """Wrap a main composite invocation as a `Topology`.
  
    Provides a bridge between an SPL application (main composite)
    and a `Topology`. Create a `Topology` that contains just
    the invocation of the main composite defined by `kind`.

    The returned `Topology` may be used like any other topology
    instance including job configuration, tester or even addition
    of SPL operator invocations or functional transformations.

    .. note:: Since a main composite by definition has no input
        or output ports any functionality added to the topology cannot
        interact directly with its invocation.

    Args:
        kind(str): Kind of the main composite operator invocation.
        toolkits(list[str]): Optional list of toolkits the main composite depends on.
        name(str): Invocation name for the main composite.

    Returns:
        tuple: tuple containing:

        - **Topology**: Topology with main composite invocation.
        - **Invoke**: Invocation of the main composite

    .. versionadded: 1.11
    """
    if '::' in kind:
        ns, name = kind.rsplit('::', 1)
        ns += '._spl'
    else:
        raise ValueError('Main composite requires a namespace qualified name: ' + str(kind))
    topo = streamsx.topology.topology.Topology(name=name, namespace=ns)
    if toolkits:
        for tk_path in toolkits:
            streamsx.spl.toolkit.add_toolkit(topo, tk_path)
    return topo, Invoke(topo, kind, name=name)