Build a web app
build_appUse this when the person wants something people use: upload a photo, generate or transform pictures with AI, accounts or sign-in, saved data, a tool, a calculator, a game, bookings, a dashboard. Pass their request as they said it; never turn it into a landing page. An app that makes pictures with AI asks for the owner's own image-AI key; it never fakes results. Pass the customer's brief in the customer's own words; do not add features the customer did not ask for (no invented sign-up, accounts, subscriptions or payments). When it is built Pugi checks it for security issues, and publish waits for that check. An app that needs a server or a database moves onto Pugi's servers on its own; the person stays in this chat. In hosts that render the build card (MCP Apps or ChatGPT widget), the card tracks progress automatically: do not poll job_status. In hosts without a build card (Claude Code or API), call job_status with the job_id until the job is finished, stopped or failed. Do not use for a simple website (use build_site) or to change an app already built here (use edit).
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"brief": "<brief>",
"idempotency_key": "<idempotency_key>"
},
"name": "build_app"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| pick | No | Console gallery starter slug. | |
| brief | Yes | The app to build, in the customer's own words. | |
| theme | No | Console theme slug. | |
| locale | No | Site language (legacy alias for site_language). | |
| logo_id | No | Selected logo_id returned by make_logo. | |
| max_usd | No | The most this build may cost in USD (default 5). | |
| language | No | The language the person is writing in, as a BCP 47 tag such as "ru". | |
| without_logo | No | True only when the person said this site should not use the logo they picked. | |
| brief_version | No | With brief_confirmed: the version of the summary the person agreed to, as returned with that summary. | |
| site_language | No | Language for the app content; independent of the chat card language. | |
| brandHandoffId | No | BrandHandoff from logo.pugi.io. | |
| brief_confirmed | No | True only after the person has seen the summary and agreed. In a chat, without it nothing starts and the summary comes back. | |
| idempotency_key | Yes | A unique string naming this build. Reuse it only to retry the same call; it is never charged twice. |