Features
- Added
contact_bulk_update — apply a partial patch to many contacts by ID list (max 500 per call). Returns {matched, updated, skipped, errors}.
- Added
contact_bulk_update_by_filter — apply a partial patch to every contact matching a segment filter (stage, company, tag, q); pages internally.
- Tag semantics are agent-friendly:
add_tags / remove_tags merge without clobbering, or set_tags overwrites the whole list.
- Partial patch fields:
company, stage, notes, source, plus tags. Omitted fields are left unchanged.
Usage
{"name":"contact_bulk_update","arguments":{"ids":[1,5,9],"patch":{"stage":"qualified","add_tags":["vip"]}}}
{"name":"contact_bulk_update_by_filter","arguments":{"segment":{"stage":"proposal"},"patch":{"add_tags":["q3-push"]}}}
Notes
- Both tools are synchronous (pure DB, no provider rate limits). Invalid stage, empty patch, or >500 ids return
invalid_input. Missing contacts are skipped and reported in errors.
Verification
make check
staticcheck ./...