Update Signal
update_signalEdit an existing signal IN PLACE — rename it, change what it watches, or change where it delivers — keeping its id, its fire history (trigger_count, last_triggered_at) and every inbox item and delivery already tied to it. Pass only the fields to change; omitted fields keep their stored value. channels REPLACES the whole delivery list (1–4, distinct type+target); a webhook entry that keeps its URL and omits hmac_secret keeps the stored secret. A soft-deleted signal is refused — restore_deleted first. Same tier rules as create_signal: price_move / fundamental_change / watchlist_restatement conditions need Pro+. Cap-neutral: an edit never takes a signal slot. Returns undo (call undo_change to put name, condition and channels back as they were; refused if the signal changed since).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New human-readable label. | |
| alert_id | Yes | The signal's `id` from `list_signals` / `create_signal`. | |
| channels | No | New delivery list (up to 4, each a distinct type+target). Replaces the stored list entirely; the first entry becomes `channel`. | |
| condition | No | New condition — the same discriminated union `create_signal` takes. Replaces the stored condition entirely. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| undo | Yes | How to put the record back as it was before this write: call `undo_change` with these args. Null when nothing changed or the change could not be recorded. | |
| _meta | Yes | Provenance envelope — data lineage for every MCP response | |
| signal | Yes | ||
| cron_indexed | Yes |