Uses: Python · TypeScript · CLI
Discover both sides
Slugs differ per connector, so resolve them once and reuse. (Discovery is shown in the CLI - it’s a one-time setup step; the same lookups areclient.tools.get(...) / client.tools.get_one(...) in the SDKs.)
The sync
- Partial failure is the normal case. One bad record shouldn’t abort the run - collect failures, finish the batch, then exit non-zero so your scheduler notices.
- Keep
history_idfor every failure. It’s how you or support reconstruct exactly what was sent. - Retries are yours. Neither SDK retries automatically, by design - see errors & pagination.
Large source sets
If the read tool reportssupports_top_offset, page it rather than pulling everything into memory. (The flag means top and offset together - a tool can support SelectTop alone, capping results without paging; check the input_schema for which of SelectTop / SelectOffset it takes. Salesforce, for instance, takes top but not offset.)
Scheduling it
GitHub Actions
From the CLI alone
For a simple one-way push, you may not need Python at all:Related
- Debug a failed tool call - reading
executionInfowhen the CRM rejects a record - Run Engini in CI/CD - exit codes, secrets, and pipeline patterns
- Scripted automation - the minimal version of this pattern