CherryHQ/cherry-studio · warning · Error
Invalid arguments for brave_local_search
Error message
Invalid arguments for brave_local_search
What it means
Thrown when isBraveLocalSearchArgs(args) returns false before running brave_local_search. The guard (braveSearch.ts:148) is identical to the web-search guard: args must be a non-null object with a string 'query' property.
Source
Thrown at src/main/ai/mcp/servers/braveSearch.ts:343
throw new Error('No arguments provided')
}
switch (name) {
case 'brave_web_search': {
if (!isBraveWebSearchArgs(args)) {
throw new Error('Invalid arguments for brave_web_search')
}
const { query, count = 10 } = args
const results = await performWebSearch(this.apiKey, query, count)
return {
content: [{ type: 'text', text: results }],
isError: false
}
}
case 'brave_local_search': {
if (!isBraveLocalSearchArgs(args)) {
throw new Error('Invalid arguments for brave_local_search')
}
const { query, count = 5 } = args
const results = await performLocalSearch(this.apiKey, query, count)
return {
content: [{ type: 'text', text: results }],
isError: false
}
}
default:
return {
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
isError: true
}
}
} catch (error) {
return {
content: [View on GitHub (pinned to 726446b54c)
Solutions
- Include a string 'query' such as {query: 'coffee near Central Park'}.
- Validate the args shape against the tool inputSchema (required: ['query']) before calling.
- Use the same isBraveLocalSearchArgs guard client-side in tests.
Example fix
// before
tool.call('brave_local_search', { count: 5 })
// after
tool.call('brave_local_search', { query: 'coffee near Central Park', count: 5 }) Defensive patterns
Strategy: type-guard
Validate before calling
function validateLocalSearchArgs(args) {
if (typeof args.query !== 'string' || !args.query.trim()) {
throw new Error('brave_local_search requires a non-empty string "query"')
}
} Type guard
function isBraveLocalSearchArgs(a): a is { query: string; count?: number } {
return typeof a === 'object' && a !== null && typeof a.query === 'string' && a.query.trim().length > 0
} Try / catch
if (!isBraveLocalSearchArgs(args)) {
return { content: [{ type: 'text', text: 'Invalid args: string "query" required' }], isError: true }
} Prevention
- Include a non-empty string query for local search.
- Use place-oriented phrasing (e.g. 'pizza near Central Park').
- Validate against inputSchema before calling.
When it happens
Trigger: CallTool for brave_local_search where args.query is missing or not a string; or args is not an object.
Common situations: LLM sends {count: 5} without a query; uses a non-string query; or addresses the parameter by a different name.
Related errors
- Invalid arguments for brave_web_search
- No arguments provided
- Unknown chat type: ${type}
- Invalid command: command must be a non-empty string
- Invalid command: command cannot be empty
AI-assisted analysis of CherryHQ/cherry-studio@726446b54c (2026-08-12).
Data as JSON: /api/errors/3d21bd79ebd70aec.
Report an issue: GitHub.