{"schema_version":"2026-03-26","name":"uarpie","title":"Uarpie","description":"Hosting for software people build with AI. One command puts an app online at a private address with a database, storage, scheduled jobs, email and sign-in. No account is needed before the first deploy.","version":"0.1.0","documentation":"https://uarpie.app/ai","website":"https://uarpie.app","packages":[{"registry":"npm","identifier":"uarpie","version":"latest","transport":{"type":"stdio"},"runtime_hint":"npx","runtime_arguments":["-y","uarpie","mcp"]}],"tools":[{"name":"deploy","title":"Deploy the app","description":"Put the app in a directory online. Detects the framework, database, secrets and jobs without asking, builds it and makes it live at a private URL. Use this whenever the person's app should go live or an update should be published. On the first deploy the result includes bind_url: give that exact link to the person; the first device to open it owns the app and it expires in 60 minutes. On failure the result is { ok: false, code, fix, file } — apply `fix` (edit `file` when given) and call deploy again.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"status","title":"App status","description":"Where the app is, which version is live, whether an update is in progress, this month's usage and spend, and the current bind link if the app has not been opened yet. Read-only; call freely.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"logs","title":"App activity","description":"Recent activity lines from the app's runtime. Use to diagnose a blank page or an error a person reports. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"doctor","title":"Diagnose the app","description":"Diagnose a running app: whether it is failing, the most recent crash with its stack trace, the file in the app's own code where it starts, which version introduced it, and a `fix` to carry out. Use this first whenever a person says their app is broken, blank, erroring or slow — before `logs`, which returns raw lines you would have to interpret yourself. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"versions","title":"Version history","description":"Version history: every deploy of the app, newest first, with status, who ran it, whether the database schema changed, and whether the source is still stored. Use before rollback or clone to pick a version. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"deployment_log","title":"Deploy trace","description":"The trace of one deploy: build output and step events. Use when a deploy failed and the error's fix is not enough, or the person asks what happened. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"rollback","title":"Go back to a version","description":"Go back to a previous version. Code-only by default and instant. If the target predates a database schema change, the result carries a SCHEMA_DRIFT warning; only set with_data after the owner has agreed to lose writes made since that version's snapshot.","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":false}},{"name":"set_secret","title":"Set a secret","description":"Set one setting/secret the app needs (an env var). Creates a config-only deployment; no rebuild. Values are encrypted and never shown again. Replaces an existing value with the same key.","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"desktop_app","title":"Desktop app","description":"Make a desktop (Windows, Mac or Linux) version of the app: returns a 30-minute download link to a folder the person unzips and double-clicks, plus notes to pass on — above all that the first launch shows an 'unknown publisher' warning because the app is not yet signed. The platform chooses the shape: an app with a database or a server becomes a window onto the online app, updated by every deploy. The app must have a live version.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"busy_hours","title":"Busy hours","description":"Keep copies of the app awake so the first visitors after a quiet spell are not slow: `always` copies around the clock, and windows with more copies on given days between two times in a timezone (for a site whose busy moments are known, like a channel that posts on Saturdays at six). THIS COSTS MONEY BY EXISTING and the result carries the monthly estimate — show it to the person and get a yes before setting anything other than zero. Paid plans only. Call with no settings to read the current ones. Setting `always: 0` and no windows turns it off.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"share","title":"Invite someone","description":"Invite a person by email to open the app. Email only. The app must be claimed first (ACCOUNT_REQUIRED otherwise: tell the person to open their link and choose 'keep this app').","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"add_domain","title":"Add a domain","description":"Attach a custom domain the person already owns. Returns the two DNS records they must add at their DNS provider (routing and certificate); the certificate is issued and the domain switched on automatically once they appear. If they do not own a domain yet, buy_domain buys one and points it at the app with no DNS step at all.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"buy_domain","title":"Buy a domain (costs money)","description":"Buy a domain for the app and point it at the app — the person never touches DNS. THIS SPENDS THE PERSON'S MONEY, so it is two calls. First call with just `domain` (e.g. tegasfootball.com; a bare word is tried with .com, .app, .co, .org and .io): the result is a quote with a price for the first year, the yearly renewal, the `terms`, a `confirmation` sentence and a `quote_id` good for 15 minutes — or DOMAIN_UNAVAILABLE with alternatives when the name is taken. Read the confirmation sentence and the terms to the person, collect the registrant details the registry requires (name, email, phone, postal address, country), and only after they say yes call again with `quote_id`, `contact` and `confirm: true`. The platform refuses any other combination, so never send confirm without a yes and never guess a price. The order then registers, points and switches the domain on by itself, usually within minutes; poll it with the `order_id` returned. Paid plans only; the app must be kept. The domain is the person's, held on their behalf, and they can take it elsewhere any time.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"estimate","title":"Monthly estimate","description":"What the app is likely to cost per month at its current usage, with the breakdown. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"list_projects","title":"List apps","description":"All apps the signed-in account owns or can open, with their addresses and states. Needs a signed-in account (see login). Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"login","title":"Sign in on this computer","description":"Sign this computer into the person's account so their apps can be listed, cloned and deployed from here. Returns a short code and a link: show both to the person and ask them to open the link and approve. Then call login_wait. Needed once per computer.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}},{"name":"login_wait","title":"Wait for approval","description":"Wait (up to ~2 minutes per call) for the person to approve the sign-in started by login. Call again while the result is still pending.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"api_keys","title":"API keys","description":"The API keys an `api` or `mobile` project has, without their secrets. Use it to show the person which keys exist, when each was last used, and which to revoke. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"create_api_key","title":"Create an API key","description":"Make a new API key for an `api` or `mobile` project. The full key is returned once and cannot be retrieved again: put it straight into the client that needs it (or hand it to the person) and never log it. Existing keys keep working.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"revoke_api_key","title":"Revoke an API key","description":"Stop an API key working. Anything still using it starts being refused immediately, so confirm with the person which key they mean first.","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"estimate_release","title":"Price a store release","description":"What it would cost to put a phone app in the App Store or Google Play, with a breakdown and a quote you must pass to `release`. Read-only and free. `ready: false` means no developer account is connected yet, so show the person both the price and that missing step. `mode: handback` prices a build that is handed back to the person as a file to upload themselves (no developer account needed); see build_app.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"release","title":"Release to a store (costs money)","description":"Send a phone app to the App Store or Google Play. THIS SPENDS THE PERSON'S MONEY. Call estimate_release first, tell the person the exact amount it returned, wait for them to agree, and only then call this with that quote_id and the identical confirm_cents. The platform refuses any other combination, so never guess the number and never call this to 'find out' the price. After it succeeds a person at Apple or Google reviews the app, usually for a day or more, and nobody can make that faster.","annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}},{"name":"build_app","title":"Build the phone app for me","description":"Build the phone app and hand the file back to the person to upload to the store themselves, with a step-by-step guide (guide_url). Needs no developer account from them. Android builds cost nothing and start straight away; an iPhone build costs money, so for `ios` this returns a quote instead — tell the person the amount, get a yes, then call release with mode handback, that quote_id and confirm_cents. iPhone builds are not available yet and the result says so. Paid plans only; the app must be a phone app with a live version. Poll with releases; when status is `ready`, give the person artifact.download_url (30 minutes) and guide_url.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}},{"name":"releases","title":"Store releases","description":"Store releases for an app, newest first: which store, how far along, what it cost, and where to watch the review. Read-only.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"store_accounts","title":"Connected developer accounts","description":"Which developer accounts are connected, and whether either has a problem. Read-only. There is deliberately no tool for connecting one: that means handling an Apple signing key or a Google service account, which a person should paste into the dashboard themselves rather than into a chat.","annotations":{"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"clone","title":"Clone an app here","description":"Put an app's source on this computer from the platform, so work can continue here without git: downloads the live version (or a chosen one), unpacks it into a directory and writes deploy.json. Needs a signed-in account. After cloning, edits are published with deploy from that directory.","annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}}]}