getting started · function → agent-callable tool · ~3 minutes

Five steps.
The last one is
an agent calling your code.

Linux or macOS, x86_64 or aarch64. The only runtime dependency is the language you choose — Bun for TS, node, python3, a compiled Rust binary, or nothing at all for WASM.

adopt in 3 lines · agent hookup included
curl -fsSL https://riz.dev/install | sh
riz init typescript-http my-app && cd my-app
riz --dev
# second shell:
curl localhost:3000/hello
claude mcp add riz --transport http http://localhost:3000/_riz/mcp
01 · shellpick one
# installer (release binaries)
$ curl -fsSL https://riz.dev/install | sh

# or from source (Rust toolchain)
$ cargo install --git https://github.com/24X7/riz

# or: github.com/24X7/riz/releases
02 · shell
$ riz init typescript-http my-app
$ cd my-app

# see all templates:
$ riz init --list
03 · shell
$ riz --dev

# http API + MCP server are both live:
#   http://localhost:3000/hello
#   http://localhost:3000/_riz/mcp
04 · shell
$ curl localhost:3000/hello
{"message":"hello, world", "functionName":"hello", …}

# health · metrics · function registry
$ curl localhost:3000/_riz/health
$ curl localhost:3000/_riz/metrics
05 · shell
$ claude mcp add riz --transport http \
    http://localhost:3000/_riz/mcp

$ riz mcp inspect
 server riz 0.1 · protocol 2025-11-25
 1 tool: hello  (typed params, SSE open)

# in your agent: "call the hello tool"

Install the binary

One static binary, no Docker. The installer drops riz on your PATH; or build from source with cargo; or grab a release artifact directly.

Scaffold a working project

Official templates — typescript-http, nodejs-http, python-http, rust-http, go-http, wasm-http (a wasm32-wasip1 handler in the WASI sandbox), WebSocket variants for TS/Python/Rust, a full-stack typescript-todo (API + React/Vite client), and ai-chat (React chat UI + a server-side agent loop through the LLM gateway — boots offline). Each boots first try. Templates always load from a git location, never embedded — so riz init owner/repo[/subdir] works for your own too.

Boot it

riz run is headless (JSON logs, production-shaped). riz --dev adds the live terminal dashboard — requests, logs, and P50–P99 percentiles as you work. Edit the handler, save, the next request hits the new code.

Hit it like API Gateway

Same payloads AWS sends — path params, query strings, headers, cookies, binary bodies. If your handler ran on Lambda, it runs here; if it runs here, it'll run on Lambda.

Point an agent at it

This is the step other runtimes don't have. Your function is already a typed MCP tool — wire up a client and ask it to call your API. Verify the whole surface first with riz mcp inspect.

Go further: add an [agent] block and the binary itself becomes a delegable A2A agent that reasons with your functions — test it with riz a2a send, mesh it with other riz instances via [agent.peers]. The agent layer →

Something off? riz doctor is the first command to run — it validates your riz.toml, checks runtime binaries are on PATH, confirms handler files exist, probes the port, and pings the MCP endpoint if riz is already up.
go deeper

Three paths from here.