Apps
Clawnify apps are full web apps — internal tools, CRMs, dashboards, client portals — that your agent builds and deploys for you. Describe what you want in natural language and the agent generates the app, provisions its database and storage, and ships it to a live URL at <slug>.apps.clawnify.com.
Every app is also a typed API: its procedures become tools your agent — and any MCP client connected to mcp.clawnify.com — can call directly. So an app is both something people use in the browser and something agents drive programmatically.
Two ways to create an app
- Natural language (App Builder). Ask your agent — “build me a CRM for tracking deals” — and it scaffolds, deploys, and iterates on the app for you.
- From a project (CLI). Deploy an existing TypeScript project yourself with
clawnify deploy.
Deploying from the CLI
clawnify init my-app
cd my-app
# Edit src/api.ts to add procedures
clawnify deploy
See CLI → Install for the full setup.
How procedures surface to the agent
Once your app deploys, its procedures become tools the agent (and any connected MCP client) can call. Two shapes, depending on procedure count.
Small apps (≤ 5 procedures) — direct tools
Every procedure shows up as <app_slug>.<procedure_name> in the gateway’s tools/list. The agent calls them like first-class tools.
quotes.createQuote
quotes.listQuotes
quotes.markPaid
Larger apps (> 5 procedures) — via clawnify_execute
The agent finds them via clawnify_docs_search and calls them as code through clawnify_execute:
import { client } from "@clawnify/sdk";
const result = await client.quotes.createQuote({ customer_id: "...", items: [...] });
This keeps the agent’s tool list small and lets it chain multiple procedure calls in one round trip.
You can override per-app in your clawnify.json manifest:
{
"api": {
"exposure_mode": "auto" | "code-only" | "direct-only"
}
}
| Mode | Behavior |
|---|---|
auto (default) | Direct tools if ≤ 5 procedures, otherwise code-mode-only. |
code-only | Always reached via clawnify_execute, regardless of count. |
direct-only | Every procedure projects as a direct tool, regardless of count. |
Identity headers
Every authenticated call into your app carries identity headers your app can read:
| Header | Value |
|---|---|
X-Clawnify-User-Id | The user the call was made on behalf of. |
X-Clawnify-Org-Id | The org. |
X-Clawnify-Caller | agent, user, or system. |
X-Clawnify-Server-Id | Set when the call came from an agent’s runtime. |
These are platform-injected and trusted. Use them for authorization in your app’s procedures without rolling your own auth.
Per-app README
Each app gets an auto-generated README that the agent reads on demand via clawnify_docs_search to learn what the app does and how to call its procedures.
The README is derived from your clawnify.json + JSDoc on your procedures. You control it by writing good descriptions; no separate doc files needed.