'GET /api/tools: returns a list of tools defined by parameters::
parameters:
in_panel  - if true, tools are returned in panel structure,
including sections and labels
trackster - if true, only tools that are compatible with
Trackster are returned
q         - if present search on the given query will be performed
tool_id   - if present the given tool_id will be searched for
all installed versions'

@expose_api_anonymous_and_sessionless
def index(self, trans, **kwds):

    in_panel = util.string_as_bool(kwds.get('in_panel', 'True'))
    trackster = util.string_as_bool(kwds.get('trackster', 'False'))
    q = kwds.get('q', '')
    tool_id = kwds.get('tool_id', '')
    if q:
        hits = self._search(q)
        results = []
        if hits:
            for hit in hits:
                try:
                    tool = self._get_tool(hit, user=trans.user)
                    if tool:
                        results.append(tool.id)
                except exceptions.AuthenticationFailed:
                    pass
                except exceptions.ObjectNotFound:
                    pass
        return results
    if tool_id:
        detected_versions = self._detect(trans, tool_id)
        return detected_versions
    try:
        return self.app.toolbox.to_dict(trans, in_panel=in_panel, trackster=trackster)
    except Exception:
        raise exceptions.InternalServerError('Error:    Could    not    convert    toolbox    to    dictionary')
