`workflow_list` supports filtering by `category` (substring) and `tags` (AND match), but has no way to search by keyword across workflow names or descriptions. Callers looking for a workflow by approximate name or topic must retrieve the full library and filter client-side.
Proposal
Add an optional `query` string parameter to `workflow_list` that does a case-insensitive substring match against both `name` and `description`. A workflow matches if either field contains the query string. Combined with the existing `category` and `tags` params, this completes the practical filter surface for library discovery.
Proposed behavior
New input field on the existing `workflow_list` tool:
```ts
query: z.string().optional().describe(
'Case-insensitive substring filter applied to workflow name and description. A workflow matches if either field contains the query string.'
)
```
Filtering logic (applied before category/tags filters):
```ts
if (query?.trim()) {
const q = query.toLowerCase();
if (!wf.name.toLowerCase().includes(q) && !wf.description.toLowerCase().includes(q)) continue;
}
```
Scope
src/mcp-server/tools/definitions/workflow-list.tool.ts — add query input field and handler filtering logic
- No service changes required; filtering is in-memory over the existing index
Out of scope
- Full-text search across step content (params, action descriptions)
- Fuzzy/phonetic matching
- A dedicated search tool — the filter belongs on `workflow_list` to keep the surface minimal
`workflow_list` supports filtering by `category` (substring) and `tags` (AND match), but has no way to search by keyword across workflow names or descriptions. Callers looking for a workflow by approximate name or topic must retrieve the full library and filter client-side.
Proposal
Add an optional `query` string parameter to `workflow_list` that does a case-insensitive substring match against both `name` and `description`. A workflow matches if either field contains the query string. Combined with the existing `category` and `tags` params, this completes the practical filter surface for library discovery.
Proposed behavior
New input field on the existing `workflow_list` tool:
```ts
query: z.string().optional().describe(
'Case-insensitive substring filter applied to workflow name and description. A workflow matches if either field contains the query string.'
)
```
Filtering logic (applied before category/tags filters):
```ts
if (query?.trim()) {
const q = query.toLowerCase();
if (!wf.name.toLowerCase().includes(q) && !wf.description.toLowerCase().includes(q)) continue;
}
```
Scope
src/mcp-server/tools/definitions/workflow-list.tool.ts— addqueryinput field and handler filtering logicOut of scope