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
- Add at least one of tools, toolkits, search, or authConfigIds
- If you want broad discovery, use search: '' or a wildcard toolkit list deliberately
- 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 building queries conditionally, always set a fallback selector
- Remember limit alone is not a valid selector
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
- Invalid tool list parameters. You should not use tools and t
- Invalid tool list parameters
- experimental_subAgent() target must be "claude", "codex", or
- Invalid Composio CLI release tag: ${releaseTag}
- Invalid
AI-assisted analysis of ComposioHQ/composio@64b1b85502 (2026-08-28).
Data as JSON: /api/errors/c36e4b044f4a84a9.
Report an issue: GitHub.