Salty exposes four interfaces over the same workspace data: REST API, MCP server, CLI, and signed webhooks. They share auth, rate limits, usage caps, idempotency, and audit logging — but they’re built for different callers. This page tells you which one to use when.
TL;DR — which surface for which caller
Detailed comparison
Decision tree
Is the caller a human, an AI agent, or another machine?- Human (you) at the terminal → CLI.
salty loginonce, thensalty people list,salty keys create,salty logs tail. Stays out of the way. - AI agent connected via Claude Desktop, Cursor, or ChatGPT → MCP. Drop the config snippet, restart, done. The agent gets server-level instructions automatically.
- Your own application code (a backend service, a script, a worker) → REST. Use the TypeScript SDK for ergonomics, or curl/Postman for one-offs.
- External system reacting to state changes → Webhooks. Register an endpoint with
POST /webhook-endpoints(REST) orsalty webhooks add(CLI), verify signatures, react.
Common workflows by surface
Why is the MCP surface smaller? More tools = larger context window pollution = worse agent performance. Deletion, task creation, webhook registration, custom-object definition, and usage queries are all admin-ish operations a human should drive. The 15 MCP tools are the agent’s day-to-day write surface; everything else goes through REST or CLI where a human can review.
Latency profile
All four surfaces hit the same Postgres in the same region — so end-to-end latency depends on which middleware chain runs:
Per-plan rate-limit ceilings are validated under load with k6.
Mixing surfaces
A typical solopreneur stack might look like:Related
- REST API → Introduction — conventions, errors, pagination
- MCP → Introduction — 15 tools, OAuth flow
- MCP → Agent guide — the operating manual auto-loaded on initialize
- CLI → Introduction —
salty loginand every command - Webhooks — signature verification, retry schedule, meta-events