MCP App Store

Overview

Buildy is a hosted runtime for personal web apps that users and their agents can share. An agent creates an app, Buildy gives it a URL, backend, and key-value storage, and the user keeps using the same app and data across ChatGPT, Claude, and other agents.

Tools

create_app

ChatGPT
Create a new interactive web app and render it inline. Use this to build a new app from a request. If module reuses a manifest.id the caller already owns, the new app replaces the existing app module, UI, and styles in place; use update_app to edit a known app ID by UUID. Apps persist state through a backend env.storage (Workers KV) binding and call backend operations from the frontend via window.buildy.api. The module, ui, and description parameter docs carry the authoring rules; the buildy:app-guide prompt has the full guide and a canonical example.

create_app

ChatGPT
Create a new interactive web app and render it inline. Use this to build a new app from a request. This tool call is synchronous: when it returns, the app is already live at the URL in the response. There is no Buildy process to wait for, no deployment queue, and no polling step — success means the app is immediately accessible. If module reuses a manifest.id the caller already owns, the new app replaces the existing app module, UI, and styles in place; use update_app to edit a known app ID by UUID. Apps persist state through a backend env.storage (Workers KV) binding and call backend operations from the frontend via window.buildy.api. The module, ui, and description parameter docs carry the authoring rules; the buildy:app-guide prompt has the full guide and a canonical example. If a request needs something Buildy can't do yet (AI calls, external integrations, a native app, scheduled jobs, SQL, notifications, view-only sharing), don't fake it — build the closest local-state version and log the gap with submit_feedback; the buildy:app-guide prompt lists each case and what to build instead. The buildy:design-guide prompt documents Buildy's default visual style for generated ui (single accent, warm neutrals, real type hierarchy; no gradients or decorative emoji) — a default that yields to any user-requested aesthetic. When telling the user where to open or share the app, always give them shareUrl from the result — never the url field, which is machine-only and embeds a write-capable access token.

delete_app

ChatGPT
Permanently delete a Buildy app the caller owns, optionally also purging its stored data. Use this to remove an app the caller no longer wants. Deletion is irreversible and requires confirmation: the host is asked to show a confirmation prompt, and when it cannot, the call fails closed until re-invoked with confirm: true.

delete_app

ChatGPT
Permanently delete a Buildy app the caller owns, optionally also purging its stored data. Use this to remove an app the caller no longer wants. Deletion is irreversible and requires confirmation: the host is asked to show a confirmation prompt, and when it cannot, the call fails closed until re-invoked with confirm: true.

get_app

ChatGPT
Fetch an existing app by ID and render it inline. Use this to open, re-render, or continue working with an app the caller already has. Returns the live embedded UI plus its callable API operations, which another agent can invoke with query_app (read-only) or mutate_app (writes) to query or update saved app data. Unlike list_apps, which returns only names and URLs, get_app renders the app; call list_apps first to find the ID.

get_app

ChatGPT
Fetch an existing app by ID and render it inline. Use this to open, re-render, or continue working with an app the caller already has. Returns the live embedded UI plus its callable API operations, which another agent can invoke with query_app (read-only) or mutate_app (writes) to query or update saved app data. Unlike list_apps, which returns metadata including IDs and URLs, get_app renders the app; call list_apps first to find the ID. When telling the user where to open or share the app, always give them shareUrl from the result — never the url field, which is machine-only and embeds a write-capable access token.

get_app_source

ChatGPT
Return an app's raw persisted source (module, frontend ui script, and styles) plus its current version for optimistic-concurrency edits. Use this when you need the source to inspect, debug, or edit an app the caller owns.

get_app_source

ChatGPT
Return an app's raw persisted source (module, frontend ui script, and styles) plus its current version for optimistic-concurrency edits. Use this when you need the source to inspect, debug, or edit an app the caller owns.

list_app_shares

ChatGPT
Use this to see who an app is shared with: lists every outstanding invitation and active grant, labeled by status (pending = invited, no access yet; accepted = active grantee; invited = email-only invite, no Buildy account yet) and by role (collaborator = read + write; end-user = run + write data, not edit source; viewer = read only).

list_app_shares

ChatGPT
Use this to see who an app is shared with: lists every outstanding invitation and active grant, labeled by status (pending = invited, no access yet; accepted = active grantee; invited = email-only invite, no Buildy account yet) and by role (collaborator = read + write; end-user = run + write data, not edit source; viewer = read only).

list_apps

ChatGPT
List the caller's Buildy apps. Use this to find an app's id before fetching, editing, or calling it. Returns per app: id, displayName, description (a search-friendly summary), url, lastUpdatedAt (ISO-8601 of the last write), claimed (always true for now — exposed for forward-compat), and capabilities (imports + exports). The description disambiguates apps with similar display names; capabilities.exports lists each app's callable operations, exposing the cross-app integration surface without N+1 get_app_source calls. Paginate with cursor from a prior call's nextCursor line. Apps with description: null predate descriptions and have not yet been backfilled.

list_apps

ChatGPT
List the caller's Buildy apps — owned ones plus apps shared with them (accepted invites, marked [shared with you]; a read-only share also reads (view-only)). Use this to find an app's id before fetching, editing, or calling it. Returns per app: id, role (owner | collaborator | end-user | viewer | team-admin | team-member), displayName, description (a search-friendly summary), url (machine API base), shareUrl (the link to give the user), lastUpdatedAt (ISO-8601 of the last write), claimed (always true for now — exposed for forward-compat), and capabilities (imports + exports). A collaborator can edit and run a shared app; an end-user can run it and write its data but cannot edit the app source; a viewer can only open and read it. The description disambiguates apps with similar display names; capabilities.exports lists each app's callable operations, exposing the cross-app integration surface without N+1 get_app_source calls. Paginate with cursor from a prior call's nextCursor line. Apps with description: null predate descriptions and have not yet been backfilled. When telling the user where to open or share an app, always give them shareUrl — never construct links for humans from the url field.

list_feedback

ChatGPT
List feedback rows for the caller's apps. Use this to review feedback previously recorded for an app. When app_id is set, returns rows for that one app (owner-checked); when omitted, returns rows across every app the caller owns. Paginate with cursor from a prior call's cursor field. Newest rows come first.

list_feedback

ChatGPT
List feedback rows for the caller's apps. Use this to review feedback previously recorded for an app. When app_id is set, returns rows for that one app (owner-checked); when omitted, returns rows across every app the caller owns. Paginate with cursor from a prior call's cursor field. Newest rows come first.

mutate_app

ChatGPT
Run a mutating backend operation on a Buildy app and return its result, without editing code. Use this for operations that change state — including operations whose read/write safety can't be determined. For read-only operations, use query_app. If you don't know an operation's name or which tool it needs, call get_app — each operation lists its tool.

mutate_app

ChatGPT
Run a mutating backend operation on a Buildy app and return its result, without editing code. Use this for operations that change state — including operations whose read/write safety can't be determined. For read-only operations, use query_app. If you don't know an operation's name or which tool it needs, call get_app — each operation lists its tool.

query_app

ChatGPT
Run a read-only backend operation on a Buildy app and return its result, without editing code. Use this for operations that only read state. For operations that change state, use mutate_app. If you don't know an operation's name or which tool it needs, call get_app — each operation lists its tool.

query_app

ChatGPT
Run a read-only backend operation on a Buildy app and return its result, without editing code. Use this for operations that only read state. For operations that change state, use mutate_app. If you don't know an operation's name or which tool it needs, call get_app — each operation lists its tool.

rename_app

ChatGPT
Change a Buildy app's URL slug — the human-readable, URL-safe name, distinct from its title/displayName and from its machine manifest id. Use this to give an app a different public URL. Titles and slugs are independent: editing the title with update_app does not change the slug; this tool does. Renaming changes the public URL, and the old URL keeps working by redirecting to the new one. Slug rules: lowercase letters, digits, and hyphens; 2-48 chars; may start with a letter or digit; no leading, trailing, or consecutive hyphens.

rename_app

ChatGPT
Change a Buildy app's URL slug — the human-readable, URL-safe name, distinct from its title/displayName and from its machine manifest id. Use this to give an app a different public URL. Titles and slugs are independent: editing the title with update_app does not change the slug; this tool does. Renaming changes the public URL, and the old URL keeps working by redirecting to the new one. Slug rules: lowercase letters, digits, and hyphens; 2-48 chars; may start with a letter or digit; no leading, trailing, or consecutive hyphens. When telling the user where to open or share the renamed app, always give them shareUrl from the result — never the url field, which is machine-only and embeds a write-capable access token.

set_handle

ChatGPT
Change the signed-in user's handle (their username) — the first segment of their friendly app URLs (https://app.buildy.so/<handle>/<app-name>), so changing it changes the prefix of every app URL they share. Use this to give the current user a different handle. The old handle keeps working by redirecting to the new one, so links already shared stay valid. Acts on the current signed-in user only and takes no user id. Handle rules: lowercase letters, digits, and hyphens; 3-32 chars; must start with a letter; no leading, trailing, or consecutive hyphens; some words are reserved. Rate-limited to 3 changes per rolling 30 days.

set_handle

ChatGPT
Change the signed-in user's handle (their username) — the first segment of their friendly app URLs (https://app.buildy.so/<handle>/<app-name>), so changing it changes the prefix of every app URL they share. Use this to give the current user a different handle. The old handle keeps working by redirecting to the new one, so links already shared stay valid. Acts on the current signed-in user only and takes no user id. Handle rules: lowercase letters, digits, and hyphens; 3-32 chars; must start with a letter; no leading, trailing, or consecutive hyphens; some words are reserved. Rate-limited to 3 changes per rolling 30 days.

set_public

ChatGPT
Make a Buildy app PUBLIC: anyone who opens its URL can use it with no login and read AND write its SHARED data. Use this for a totally-open surface (a poll, an RSVP list, a guestbook) where requiring sign-in or per-person invites is not worth it. WARNING — this is a shared, unauthenticated write surface: every anonymous visitor reads and writes the SAME data pool with no per-visitor isolation, so anyone with the URL can overwrite or wipe the data. Surface the returned message verbatim so the user understands that before sharing. For per-person access that keeps an audit trail and write control, share with the end-user role instead (it requires login). Idempotent: calling on an already-public app returns the same URL without re-firing analytics. Owner-only; anonymous apps must be claimed first.

set_public

ChatGPT
Make a Buildy app PUBLIC: anyone who opens its URL can use it with no login and read AND write its SHARED data. Use this for a totally-open surface (a poll, an RSVP list, a guestbook) where requiring sign-in or per-person invites is not worth it. WARNING — this is a shared, unauthenticated write surface: every anonymous visitor reads and writes the SAME data pool with no per-visitor isolation, so anyone with the URL can overwrite or wipe the data. Surface the returned message verbatim so the user understands that before sharing. For per-person access that keeps an audit trail and write control, share with the end-user role instead (it requires login). Idempotent: calling on an already-public app returns the same URL without re-firing analytics. Owner-only; anonymous apps must be claimed first.

set_remixable

ChatGPT
Mark a Buildy app as remixable. Use this to let anyone who opens the app's URL get their own brand-new editable copy, while the original is never mutated by visitors. Each remix is an independent app the visitor can keep and later claim by signing up. Idempotent: calling on an already-remixable app returns the same URL without re-firing analytics. Anonymous apps cannot be made remixable; the app must be claimed first.

set_remixable

ChatGPT
Mark a Buildy app as remixable. Use this to let anyone who opens the app's URL get their own brand-new editable copy, while the original is never mutated by visitors. Each remix is an independent app the visitor can keep and later claim by signing up. Idempotent: calling on an already-remixable app returns the same URL without re-firing analytics. Anonymous apps cannot be made remixable; the app must be claimed first.

set_starter_prompt

ChatGPT
Set or clear an app's authored starter prompt — the text prefilled in the chat host when a visitor clicks "Open in Claude" or "Open in ChatGPT" on the app, replacing the generic "I'm using a Buildy app at <url>" body. Use this to frame a shared/remixable app's intended use for visitors. Pass starter_prompt: null (or an empty string) to clear and revert to the generic default. Owner-only; anonymous apps must be claimed first. Idempotent (re-setting the same value is a no-op). Length cap: 2000 characters.

set_starter_prompt

ChatGPT
Set or clear an app's authored starter prompt — a short getting-started instruction prefilled in the chat host when a visitor clicks "Open in Claude" or "Open in ChatGPT" on the app, replacing the generic "I'm using a Buildy app" body. Use this to frame a shared/remixable app's intended first action for visitors. Write a generic instruction — do NOT embed the app's URL: the app name, description, and URL (and, for unclaimed apps, an access token) are appended automatically at render time, so a hardcoded URL would point every remixer at the template instead of their own copy. Pass starter_prompt: null (or an empty string) to clear and revert to the generic default. Owner-only; anonymous apps must be claimed first. Idempotent (re-setting the same value is a no-op). Length cap: 2000 characters.

share_app

ChatGPT
Invite someone (by Buildy handle or email) to one of your apps, OR change the role of someone you already invited. Use this when the user wants to give a specific person access to an app, or to change what an existing collaborator/end-user/viewer can do. Creates a PENDING invitation: the invitee gets no access and sees nothing in their workspace until they accept. Pick a role: collaborator (default) can open, edit, and run the app (shared state, same data); end-user can open the app and write its data (record entries, save state) but cannot edit the app source; viewer can only open and use the read-only surface — viewers cannot edit, run mutating ops, or change anything. If the grantee already has a share, calling this again WITH a role changes their role in place (status updated, no new invitation, no second email) — this is how you flip a collaborator to an end-user and back; re-sharing WITHOUT a role leaves the existing role untouched. No share role can ever share, delete, or transfer the app. The invitee does NOT need a Buildy account first — inviting an email with no account stores a pending invitation and emails them a sign-up link; it activates once they register and verify that email (an unknown handle still errors, since there is no address to reach). Revoke anytime with unshare_app.

share_app

ChatGPT
Invite someone (by Buildy handle or email) to one of your apps, OR change the role of someone you already invited. Use this when the user wants to give a specific person access to an app, or to change what an existing collaborator/end-user/viewer can do. Creates a PENDING invitation: the invitee gets no access and sees nothing in their workspace until they accept. Pick a role: collaborator (default) can open, edit, and run the app (shared state, same data); end-user can open the app and write its data (record entries, save state) but cannot edit the app source; viewer can only open and use the read-only surface — viewers cannot edit, run mutating ops, or change anything. If the grantee already has a share, calling this again WITH a role changes their role in place (status updated, no new invitation, no second email) — this is how you flip a collaborator to an end-user and back; re-sharing WITHOUT a role leaves the existing role untouched. No share role can ever share, delete, or transfer the app. The invitee does NOT need a Buildy account first — inviting an email with no account stores a pending invitation and emails them a sign-up link; it activates once they register and verify that email (an unknown handle still errors, since there is no address to reach). Revoke anytime with unshare_app.

submit_feedback

ChatGPT
Record agent-authored feedback about a Buildy app. Use this to log observed bugs, suggested enhancements, caught crash reports, or qualitative notes. Source is server-enforced to "agent" — agents cannot impersonate user or auto-crash sources. The caller must own the app.

submit_feedback

ChatGPT
Record agent-authored feedback about a Buildy app. Use this to log observed bugs, suggested enhancements, caught crash reports, or qualitative notes. Source is server-enforced to "agent" — agents cannot impersonate user or auto-crash sources. The caller must own the app.

unset_public

ChatGPT
Make a public Buildy app PRIVATE again. Use this to close anonymous access: visitors can no longer open the app without logging in (the URL requires login). Data already written by anonymous visitors is retained. Idempotent: calling on an already-private app is a no-op.

unset_public

ChatGPT
Make a public Buildy app PRIVATE again. Use this to close anonymous access: visitors can no longer open the app without logging in (the URL requires login). Data already written by anonymous visitors is retained. Idempotent: calling on an already-private app is a no-op.

unset_remixable

ChatGPT
Stop allowing remixes of a Buildy app. Use this to turn off auto-forking for new visitors; existing remixes survive untouched. Idempotent: calling on an already-non-remixable app is a no-op.

unset_remixable

ChatGPT
Stop allowing remixes of a Buildy app. Use this to turn off auto-forking for new visitors; existing remixes survive untouched. Idempotent: calling on an already-non-remixable app is a no-op.

unshare_app

ChatGPT
Revoke another user's access to one of your apps — removes a pending invitation or an accepted collaborator grant. Use this when the user wants to withdraw an invitation or remove a collaborator. Takes effect immediately for new requests. Idempotent: revoking a grant that does not exist is a no-op.

unshare_app

ChatGPT
Revoke another user's access to one of your apps — removes a pending invitation or an accepted collaborator grant. Use this when the user wants to withdraw an invitation or remove a collaborator. Takes effect immediately for new requests. Idempotent: revoking a grant that does not exist is a no-op.

update_app

ChatGPT
Update an existing Buildy app and render the fresh version inline. Use this to edit an app the caller already owns, identified by UUID. Two mutually exclusive input shapes: (A) full-source — pass module/ui/styles to replace those buckets, following the same authoring rules as create_app (documented on those parameters and in the buildy:app-guide prompt); (B) edits[] — exact-string find/replace operations plus the expected_version from your last read, much cheaper for small changes. If the app's behavior changed materially (new operation, new data tracked, new use-case), also pass an updated description so list_apps stays accurate; backfill one if an older app has none.

update_app

ChatGPT
Update an existing Buildy app and render the fresh version inline. Use this to edit an app the caller already owns, identified by UUID. This tool call is synchronous: when it returns, the updated app is already live — no process to wait for, no deployment queue. Two mutually exclusive input shapes: (A) full-source — pass module/ui/styles to replace those buckets, following the same authoring rules as create_app (documented on those parameters and in the buildy:app-guide prompt); (B) edits[] — exact-string find/replace operations plus the expected_version from your last read, much cheaper for small changes. If the app's behavior changed materially (new operation, new data tracked, new use-case), also pass an updated description so list_apps stays accurate; backfill one if an older app has none. When telling the user where to open or share the app, always give them shareUrl from the result — never the url field, which is machine-only and embeds a write-capable access token.

upload_asset

ChatGPT
UPLOAD A STATIC ASSET TO AN APP so app code stays small and the app reads it back same-origin. Use this when an app needs a large or static file — an image, PDF, audio clip, or a dataset bigger than a few KB — that would otherwise be inlined into module/ui and blow the 256 KiB source cap. Provide EXACTLY ONE of: text (UTF-8 dataset/JSON/CSV — no encoding needed), sourceUrl (a remote image/PDF the SERVER fetches; never paste binary), or dataBase64 (tiny inline binary only, <64 KiB). The app reads the asset via window.buildy.assets.getUrl(key) (for <img>/<a>) or env.assets.get(key) in its backend (the app must declare buildy:storage/blob@1.0 in manifest.capabilities.imports to use env.assets). Caps: 10 MiB/asset, 50 assets/app, 100 MiB/app.

upload_asset

ChatGPT
UPLOAD A STATIC ASSET TO AN APP so app code stays small and the app reads it back same-origin. Use this when an app needs a large or static file — an image, PDF, audio clip, or a dataset bigger than a few KB — that would otherwise be inlined into module/ui and blow the 256 KiB source cap. Provide EXACTLY ONE of: sourceUrl (PREFERRED for any binary — the SERVER fetches the remote file, follows redirects, and the bytes never transit this tool call), text (UTF-8 dataset/JSON/CSV — no encoding needed), or dataBase64 (LAST RESORT, tiny binaries only: large base64 arguments can stall inside some MCP clients before ever reaching the server, so keep it under ~16 KB and use sourceUrl for anything bigger). The app reads the asset via window.buildy.assets.getUrl(key) (for <img>/<a>) or env.assets.get(key) in its backend (the app must declare buildy:storage/blob@1.0 in manifest.capabilities.imports to use env.assets). Caps: 10 MiB/asset, 50 assets/app, 100 MiB/app.

Capabilities

WritesInteractive

Example Prompts

Click any prompt to copy it.

App Stats

42

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily