CLI and MCP server
The API has always been the foundation. It now has two siblings.
The CLI puts everything you could do by clicking into a shell script, a runbook, or a
CI job: outsend trace prints a message’s full lifecycle with the provider’s own response
on every event, outsend events tail follows the log live, and outsend doctor checks the
things that actually break sending — DNS propagation, duplicated SPF records, key scope,
reputation state, webhook health. Every command takes --json.
The MCP server gives agents the same surface, with one rule enforced throughout: every
tool returns the evidence behind its answer, and the uncertainty it could not resolve.
Reading and diagnosing are unbounded. Changing things is not — propose_remediation
produces a plan a human reads, and apply_remediation needs that human to approve it, with
the approval recorded against the plan id.
outsend explain and explain_failures are the same code: give them a set of failures and
they return provider concentration, the likely signal, the evidence supporting it, and what
they could not determine.
Both are part of the open core, and both take OUTSEND_BASE_URL — point them at your own
self-hosted instance and they behave identically.
Docs: CLI · MCP server