ComposioHQ/composio · error · ValidationError

Invalid tool list parameters, atleast one of the following p

Error message

Invalid tool list parameters, atleast one of the following parameters is required: tools, toolkits, search, authConfigIds

What it means

ValidationError thrown when the tool-list query has none of the required selector fields: tools, toolkits, search, or authConfigIds. Listing tools without any filter would fetch everything, so the SDK requires at least one to be explicitly present.

Source

Thrown at ts/packages/core/src/models/Tools.ts:524

      'toolkits' in queryParams.data &&
      !('tools' in queryParams.data) &&
      !('tags' in queryParams.data) &&
      !('search' in queryParams.data) &&
      // if the user provides a limit, do not apply the important flag
      !('limit' in queryParams.data) &&
      queryParams.data.important !== false;

    const effectiveImportant =
      'important' in queryParams.data ? queryParams.data.important : shouldAutoApplyImportant;

    // check if the query params contains atleast one of the following: tools, toolkits, search, authConfigIds
    if (!(
      'tools' in queryParams.data ||
      'toolkits' in queryParams.data ||
      'search' in queryParams.data ||
      'authConfigIds' in queryParams.data
    )) {
      throw new ValidationError(
        'Invalid tool list parameters, atleast one of the following parameters is required: tools, toolkits, search, authConfigIds'
      );
    }

    // if tools are provided, set the limit to 9999 so that all tools are fetched
    let limit = 'limit' in queryParams.data ? queryParams.data.limit : undefined;
    if ('tools' in queryParams.data) {
      limit = 9999;
    }

    const filters: ComposioToolListParams = {
      ...('tools' in queryParams.data ? { tool_slugs: queryParams.data.tools?.join(',') } : {}),
      ...('toolkits' in queryParams.data
        ? { toolkit_slug: queryParams.data.toolkits?.join(',') }
        : {}),
      ...(limit ? { limit } : {}),
      ...('tags' in queryParams.data ? { tags: queryParams.data.tags } : {}),
      ...('scopes' in queryParams.data ? { scopes: queryParams.data.scopes } : {}),

View on GitHub (pinned to 64b1b85502)

Solutions

  1. Add at least one of tools, toolkits, search, or authConfigIds
  2. If you want broad discovery, use search: '' or a wildcard toolkit list deliberately
  3. Guard dynamic query builders to fall back to a default filter

Example fix

// before
composio.tools.get({ limit: 10 })
// after
composio.tools.get({ toolkits: ['github'], limit: 10 })
Defensive patterns

Strategy: validation

Validate before calling

const hasSelector = (q: object) => ['tools','toolkits','search','authConfigIds'].some(k => k in q);
if (!hasSelector(query)) query.toolkits = ['github']; // sane default

Type guard

const hasSelector = (q: object): boolean => ['tools','toolkits','search','authConfigIds'].some(k => k in q);

Try / catch

try { await composio.tools.get(query); } catch (e) { if (e instanceof ValidationError && /atleast one/.test(e.message)) query.search = ''; else throw e; }

Prevention

When it happens

Trigger: Calling composio.tools.get({}) or getRawComposioTools({ limit: 10 }) — limit alone (or any other non-selector field) does not satisfy the requirement.

Common situations: Building filters conditionally so all selector keys end up omitted, passing { limit } thinking it's enough, spreading an empty options object.

Understand the failure class

Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.

Related errors


AI-assisted analysis of ComposioHQ/composio@64b1b85502 (2026-08-28). Data as JSON: /api/errors/c36e4b044f4a84a9. Report an issue: GitHub.