Typed tools
An async fn with #[carmy::tool] becomes a tool. JSON Schemas for its input and
output are derived from your types, so agents discover it without reading docs.
$ cargo install carmy-cli$ carmy new shop && cd shop$ cargo run # HTTP$ cargo run -- mcp # the same tools over MCPTyped tools
An async fn with #[carmy::tool] becomes a tool. JSON Schemas for its input and
output are derived from your types, so agents discover it without reading docs.
Explicit effects
Every tool declares none, read, write, external_write or destructive.
Destructive tools require a trusted confirmation before they run.
Safe retries
Agents retry after timeouts. A repeated request_id replays the recorded result.
The side effect never runs twice.
Errors for machines
Errors carry a stable code, a category, recoverable, retryable, retry_after and a
suggested_action, not just “Something went wrong”.
Streaming and cancellation
A runtime event stream (served as SSE over HTTP), execution deadlines, and cancellation propagated from client disconnects and MCP.
One runtime, many transports
HTTP and MCP are thin adapters over the same runtime and the same tool code. The core knows nothing about either.