First release.
Added
- 40 tools over the Instantly.ai v2 API: campaign and account analytics,
leads and lead lists, campaign creation/control, the Unibox, sender
accounts, the blocklist, and webhooks. Full catalogue in
docs/tools.md. - The
confirmgate: every create/update/launch/pause/move/delete tool
takesconfirm: bool = False. Without it, the tool returns a
plain-language preview and makes zero HTTP calls. - An autonomy policy (
manual/assisted/autonomous) layered on
top: risk tiers per tool (READ / LOW_WRITE / HIGH_WRITE), an always-on
hard-block list (delete_lead,delete_webhook,pause_account,
remove_from_blocklist) that never runs withoutconfirm=trueregardless
of level, per-call and rolling-24h volume caps, optional campaign
allow/deny lists, and an append-onlyaudit.logwith secrets redacted.
Enforced in code — seedocs/autonomy.md. - Two transports: local stdio (the default — no hosting, no public URL,
no token) or hosted HTTP/SSE via one env var. - Inbound auth for HTTP transports, enforced by
auth.py: a bearer token
checked in constant time, exposed as a single-user OAuth authorization
server (oauth.py) so MCP clients that require dynamic client registration
can connect. The server refuses to start on an HTTP transport without a
working token and ahttps://PUBLIC_URL— see
docs/hosting.md. - A
Dockerfile(non-root, reads$PORT) and a Render blueprint
(render.yaml) for hosted deployment. - Endpoint behavior verified against the live Instantly v2 API, with every
place the real API differed from the obvious reading documented in
docs/api-notes.md. - A fully mocked test suite — never touches the live API.