Back to MCP Overview

Sites Tools

Tools for creating and managing site projects, pages, and components.

146 tools

Available Tools

appBuilder_listProjects

List all app builder projects. Returns array with id, name, description, linkedBaseId, page count, component count.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listProjects",
    "arguments": {}
  }
}
appBuilder_getProject

Get a project with its pages, components, linkedBase, and triggers

Input Schema

idstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getProject",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_getAccessOverview

Aggregated access-control snapshot for the central Access Control page.

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getAccessOverview",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createProject

Create a new app builder project

Input Schema

namestringrequired

Project name

descriptionstring

Optional project description

colorstring

Hex color code (default: #3B82F6)

brandKitany

Brand kit (colors/typography/tokens) to seed the project design system

projectTypestring

Project type: web or mobile app

bundleIdentifierstring

Mobile app bundle identifier (e.g. com.example.myapp)

appDisplayNamestring

Mobile app display name for App Store / Play Store

isDevSiteboolean

Partner dev site: visitor-locked test site that does not consume plan quota (partners only)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createProject",
    "arguments": {
          "name": "example",
          "description": "example",
          "color": "example"
    }
  }
}
appBuilder_updateProject

Update project settings including branding, dependencies, marketplace, and mobile config

Input Schema

idstringrequired

Project ID from listProjects

namestring

New project name

descriptionstring

New description

colorstring

New hex color code

logostring

URL or path to logo image (recommended: 200x50px PNG or SVG)

faviconstring

URL or path to favicon image (recommended: 32x32px PNG or ICO)

showSerenitesBrandingboolean

Show "Powered by Serenities AI" branding on published app

dependenciesobject

NPM packages to bundle. Example: {"framer-motion": "^10.0.0", "chart.js": "^4.4.0"}. Packages are installed via Bun and bundled by Vite for production. Tailwind CSS is included by default.

aiKnowledgestring

AI project knowledge - persistent instructions for AI including project goals, coding style, and constraints

brandKitobject

Brand kit - design tokens and identity (colors, typography, logo, voice, style) the AI applies when generating UI

marketplaceEnabledboolean

Enable marketplace listing for this app

marketplaceThumbnailstring

Thumbnail image URL or path for marketplace listing (recommended: 400x300px)

marketplaceCoverstring

Cover/banner image URL or path for marketplace detail page (recommended: 1200x400px)

marketplaceDescriptionstring

Extended description for marketplace listing

appDisplayNamestring

Mobile app display name for App Store / Play Store

bundleIdentifierstring

Mobile app bundle identifier (e.g. com.example.myapp)

appVersionstring

Mobile app version (e.g. 1.0.0)

buildNumberinteger

Mobile app build number

appIconstring

URL to app icon image (1024x1024 PNG)

pwaEnabledboolean

Make the published app an installable PWA (add-to-home-screen, full-screen, offline shell, auto-update). Default on.

splashScreenstring

URL to splash screen image (1284x2778 PNG)

orientationstring

Mobile app orientation lock

mobilePermissionsarray

Mobile permissions: camera, location, notifications, media-library, contacts, biometrics, file-system

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateProject",
    "arguments": {
          "id": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_setPageActive

Activate or deactivate a page. Slot rule: exactly ONE active page per URL path — activating a page automatically deactivates any sibling page holding the same path (e.g. switching which "/" home page variant is live). Params: projectId, pageId, active (boolean).

Input Schema

projectIdstringrequired

Project ID from listProjects

pageIdstringrequired
activebooleanrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setPageActive",
    "arguments": {
          "projectId": "example",
          "pageId": "example",
          "active": true
    }
  }
}
appBuilder_updateProjectAuth

Update project authentication settings

Input Schema

idstringrequired

Project ID

authEnabledboolean

Enable authentication for this app

authAllowSignupboolean

Allow new users to sign up

authRequireEmailboolean

Require email verification

authAllowSocialboolean

Allow social login (Google, GitHub)

authPathsobject

Custom auth paths object. Keys: login, signup, forgotPassword, resetPassword, verifyEmail, afterLogin, afterLogout, accessDenied, or any custom paths. Values: the URL path (e.g., "/signin", "/register")

authCustomFieldsarray

Custom signup form fields. MERGED by field name into the existing list (upsert): pass only the fields you want to add or change — omitted fields are preserved, not dropped. Pass null to clear ALL fields. To delete specific fields, use removeCustomFields.

removeCustomFieldsarray

Field names to remove from authCustomFields. Does not delete values already stored on user profiles, only stops the field being declared.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateProjectAuth",
    "arguments": {
          "id": "example",
          "authEnabled": true,
          "authAllowSignup": true
    }
  }
}
appBuilder_bundleDeps

Bundle npm dependencies for a project. Call this after adding/changing dependencies to ensure they are bundled and ready for preview.

Input Schema

idstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_bundleDeps",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_updateSubdomain

Update the published subdomain for an app

Input Schema

idstringrequired

Project ID

subdomainstringrequired

New subdomain (without .serenitiesai.app)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateSubdomain",
    "arguments": {
          "id": "example",
          "subdomain": "example"
    }
  }
}
appBuilder_listEnvVars

List environment variables for a project

Input Schema

projectIdstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listEnvVars",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createEnvVar

Create a new environment variable

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Variable name (e.g., OPENAI_API_KEY)

valuestringrequired

Variable value

descriptionstring

Optional description

isSecretboolean

If true, value is masked in UI

installScopeIdstring

Scope this variable to an installed plugin (listingId) — the plugin sees it, nothing else does.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createEnvVar",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "value": "example"
    }
  }
}
appBuilder_updateEnvVar

Update an environment variable

Input Schema

idstringrequired

Environment variable ID

valuestring

New value (only if changing)

descriptionstring

New description

isSecretboolean

Update secret flag

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateEnvVar",
    "arguments": {
          "id": "example",
          "value": "example",
          "description": "example"
    }
  }
}
appBuilder_deleteEnvVar

Delete an environment variable

Input Schema

idstringrequired

Environment variable ID to delete

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteEnvVar",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_updateCustomDomain

Update custom domain settings

Input Schema

idstringrequired

Project ID

customDomainstring

Custom domain (e.g., myapp.com)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateCustomDomain",
    "arguments": {
          "id": "example",
          "customDomain": "example"
    }
  }
}
appBuilder_getAppUsers

Get users who signed up to this published app

Input Schema

projectIdstringrequired

Project ID

limitnumber
offsetnumber

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getAppUsers",
    "arguments": {
          "projectId": "example",
          "limit": 0,
          "offset": 0
    }
  }
}
appBuilder_deleteAppUser

Delete a user from this published app

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID to delete

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteAppUser",
    "arguments": {
          "projectId": "example",
          "userId": "example"
    }
  }
}
appBuilder_getEntitlements

List an app user's entitlements with live status — what paid access they hold right now

Input Schema

projectIdstringrequired

Project ID

appUserIdstringrequired

App user ID (from getAppUsers)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getEntitlements",
    "arguments": {
          "projectId": "example",
          "appUserId": "example"
    }
  }
}
appBuilder_grantEntitlement

Grant (or re-activate) paid access to an app user — e.g. a free month, a comp, or after an offline payment

Input Schema

projectIdstringrequired

Project ID

appUserIdstringrequired

App user ID

keystringrequired

Entitlement key, e.g. "member"

expiresAtstring

ISO date when access ends; omit for lifetime

graceUntilstring

ISO date grace period ends (access continues past expiry until then)

sourceobject

Audit context, e.g. { reason: "support comp" }

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_grantEntitlement",
    "arguments": {
          "projectId": "example",
          "appUserId": "example",
          "key": "example"
    }
  }
}
appBuilder_extendEntitlement

Extend an existing entitlement's expiry (renewal)

Input Schema

projectIdstringrequired

Project ID

appUserIdstringrequired

App user ID

keystringrequired

Entitlement key

expiresAtstringrequired

New ISO expiry date (required — use grantEntitlement for lifetime)

graceUntilstring

ISO date grace period ends

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_extendEntitlement",
    "arguments": {
          "projectId": "example",
          "appUserId": "example",
          "key": "example"
    }
  }
}
appBuilder_suspendEntitlement

Suspend an entitlement (e.g. missed installment) — access ends when any grace runs out

Input Schema

projectIdstringrequired

Project ID

appUserIdstringrequired

App user ID

keystringrequired

Entitlement key

graceUntilstring

ISO date until which access continues despite suspension (grace)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_suspendEntitlement",
    "arguments": {
          "projectId": "example",
          "appUserId": "example",
          "key": "example"
    }
  }
}
appBuilder_revokeEntitlement

Revoke an entitlement immediately (refund/abuse) — access ends now, audit trail kept

Input Schema

projectIdstringrequired

Project ID

appUserIdstringrequired

App user ID

keystringrequired

Entitlement key

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_revokeEntitlement",
    "arguments": {
          "projectId": "example",
          "appUserId": "example",
          "key": "example"
    }
  }
}
appBuilder_updateManualPayments

Configure the manual/cash payment method — members pay outside the platform, the owner verifies and approves

Input Schema

projectIdstringrequired

Project ID

enabledboolean

Turn the manual/cash payment method on or off

instructionsstring

Shown to members at checkout: bank details, wallet handle, where to pay

qrUrlstring

Legacy single QR image URL (kept as a one-method fallback). Prefer methods.

methodsarray

Labelled QR/wallet methods shown to members. Supersedes qrUrl. Pass [] or null to clear.

notifyEmailboolean

Email the owner on submit and the member on approve/reject

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateManualPayments",
    "arguments": {
          "projectId": "example",
          "enabled": true,
          "instructions": "example"
    }
  }
}
appBuilder_listManualPayments

The manual-payment approval queue: members' offline payments awaiting the owner's verification

Input Schema

projectIdstringrequired

Project ID

statusstring

Filter — default "pending" (the approval queue)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listManualPayments",
    "arguments": {
          "projectId": "example",
          "status": "example"
    }
  }
}
appBuilder_approveManualPayment

Approve a member's manual payment — marks it succeeded and grants the offer's entitlement per its access terms

Input Schema

projectIdstringrequired

Project ID

paymentIdstringrequired

Manual payment id (from listManualPayments)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_approveManualPayment",
    "arguments": {
          "projectId": "example",
          "paymentId": "example"
    }
  }
}
appBuilder_rejectManualPayment

Reject a member's manual payment claim (not received / wrong amount). No entitlement is granted

Input Schema

projectIdstringrequired

Project ID

paymentIdstringrequired

Manual payment id

reasonstring

Optional reason kept on the record

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_rejectManualPayment",
    "arguments": {
          "projectId": "example",
          "paymentId": "example",
          "reason": "example"
    }
  }
}
appBuilder_createAppUser

Manually create a user for this published app

Input Schema

projectIdstringrequired

Project ID

emailstringrequired

User email

namestring

User name

passwordstringrequired

User password (min 8 chars)

rolestring

Legacy user/admin enum (kept for backward compat during the role-migration).

roleIdsarray

New-format role assignments. Each ID must be an AppBuilderRole for this project. Granted atomically with user creation.

sendWelcomeEmailboolean

Send welcome email with credentials

customFieldsobject

Custom field values keyed by field ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createAppUser",
    "arguments": {
          "projectId": "example",
          "email": "example",
          "name": "example"
    }
  }
}
appBuilder_resetAppUserPassword

Reset password for an app user

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID

newPasswordstringrequired

New password (min 8 chars)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_resetAppUserPassword",
    "arguments": {
          "projectId": "example",
          "userId": "example",
          "newPassword": "example"
    }
  }
}
appBuilder_updateAppUserRole

LEGACY: set the platform-level user/admin classification. For has_role rules in access control, use assignRoleToAppUser / unassignRoleFromAppUser with roleIds from listProjectRoles.

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID

rolestringrequired

LEGACY platform-level classification (user|admin). Retained for backward compat during the role-migration window. For access-control roles, use assignRoleToAppUser with a roleId from listProjectRoles.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateAppUserRole",
    "arguments": {
          "projectId": "example",
          "userId": "example",
          "role": "example"
    }
  }
}
appBuilder_updateAppUser

Update an app user record (name, email, role, banned status, custom fields)

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID

namestring

User name

emailstring

User email

rolestring

User role

isBannedboolean

Ban/unban user

customFieldsobject

Custom field values matching authCustomFields

profileDataobject

Alias of customFields — custom field values matching authCustomFields, merged into existing profileData

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateAppUser",
    "arguments": {
          "projectId": "example",
          "userId": "example",
          "name": "example"
    }
  }
}
appBuilder_listProjectRoles

List all role definitions for a project. Auto-seeds reserved + legacy roles.

Input Schema

projectIdstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listProjectRoles",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createProjectRole

Create a new role on a project.

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Role name

colorstring

Hex color for UI badges

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createProjectRole",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "color": "example"
    }
  }
}
appBuilder_updateProjectRole

Update a role on a project. The reserved app-super-admin role cannot be renamed.

Input Schema

roleIdstringrequired

Role ID from listProjectRoles

namestring

New role name

colorstring

New hex color (null clears)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateProjectRole",
    "arguments": {
          "roleId": "example",
          "name": "example",
          "color": "example"
    }
  }
}
appBuilder_deleteProjectRole

Delete a role and all its assignments. The reserved app-super-admin role cannot be deleted.

Input Schema

roleIdstringrequired

Role ID to delete

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteProjectRole",
    "arguments": {
          "roleId": "example"
    }
  }
}
appBuilder_listAccessPolicies

List reusable access policies for a project.

Input Schema

projectIdstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listAccessPolicies",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createAccessPolicy

Create a reusable access policy. Reference it from a resource rule via { policy: <id> }.

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Unique policy name

descriptionstring
colorstring
conditionanyrequired

The access Condition this policy represents (leaf, group, or legacy array).

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createAccessPolicy",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_updateAccessPolicy

Update a reusable access policy. Editing the condition updates every resource that references it.

Input Schema

policyIdstringrequired
namestring
descriptionstring
colorstring
conditionany

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateAccessPolicy",
    "arguments": {
          "policyId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_deleteAccessPolicy

Delete a reusable access policy. Resources still referencing it will DENY (fail-closed) until updated.

Input Schema

policyIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteAccessPolicy",
    "arguments": {
          "policyId": "example"
    }
  }
}
appBuilder_assignRoleToAppUser

Grant a role to an app user. Idempotent.

Input Schema

userIdstringrequired

App user ID

roleIdstringrequired

Role ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_assignRoleToAppUser",
    "arguments": {
          "userId": "example",
          "roleId": "example"
    }
  }
}
appBuilder_unassignRoleFromAppUser

Remove a role from an app user. Idempotent.

Input Schema

userIdstringrequired

App user ID

roleIdstringrequired

Role ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_unassignRoleFromAppUser",
    "arguments": {
          "userId": "example",
          "roleId": "example"
    }
  }
}
appBuilder_getAppUserRoles

Get all roles assigned to an app user.

Input Schema

userIdstringrequired

App user ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getAppUserRoles",
    "arguments": {
          "userId": "example"
    }
  }
}
appBuilder_migrateProjectToRoleSystem

Idempotent one-shot migration of legacy role data into the new AppBuilderRole model.

Input Schema

projectIdstringrequired

Project to migrate

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_migrateProjectToRoleSystem",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_deleteProject

Delete a project, its linked Base, and all pages/components

Input Schema

idstringrequired

Project ID to delete

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteProject",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_createPage

Create a new page in a project. Set SEO title + description here for any public page so it ships indexable from day one — no follow-up updatePage call needed.

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

Page name (e.g., "About", "Contact")

pathstringrequired

URL path (e.g., "/about", "/contact")

titlestring

SEO page title — 50-60 characters. Keyword-led, action-oriented. Example: "Pricing – Plans for Teams of Any Size". Leave empty for protected/auth pages and /404.

descriptionstring

SEO meta description — 150-160 characters. Action-oriented, includes value prop + key features. Example: "Compare Free, Pro, and Enterprise plans. Start free, upgrade for unlimited tasks, or pick Enterprise for SSO and SLA support."

isHomePageboolean

Set as the project home page (path "/"). Only one page can be home; setting this unsets any existing home.

isProtectedboolean

Require authentication to access. Use for dashboards, settings, user-only content. Skip SEO meta on protected pages.

contentstring

Page content (React component code). Pages without content are skipped by publish — set it here or via updatePage before publishing.

commitMessagestring

Git commit message describing what was created and why. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createPage",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "path": "example"
    }
  }
}
appBuilder_createComponent

Create a new component in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

Component name

descriptionstring

Optional component description

typestring

Component type: "custom", "layout", "ui", or "data"

contentstring

Component code (React/TSX). Set it here or via updateComponent — pages importing an empty component fail to build.

isGlobalboolean

Whether component is globally accessible

commitMessagestring

Git commit message describing what was created and why. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createComponent",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_listPages

List all pages in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listPages",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_getPage

Get page details including content

Input Schema

idstringrequired

Page ID from listPages

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getPage",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_readPage

Read page content with line numbers. Use offset/limit to read specific sections of large files.

Input Schema

idstringrequired

Page ID from listPages

offsetnumber

Line number to start from (1-indexed). If not specified, starts from line 1.

limitnumber

Number of lines to read. If not specified, reads entire file.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_readPage",
    "arguments": {
          "id": "example",
          "offset": 0,
          "limit": 0
    }
  }
}
appBuilder_readComponent

Read component content with line numbers. Use offset/limit for large files.

Input Schema

idstringrequired

Component ID from listComponents

offsetnumber

Line number to start from (1-indexed)

limitnumber

Number of lines to read

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_readComponent",
    "arguments": {
          "id": "example",
          "offset": 0,
          "limit": 0
    }
  }
}
appBuilder_getPageAccessRules

Get the access rules JSON for a single page.

Input Schema

pageIdstringrequired

Page ID from listPages

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getPageAccessRules",
    "arguments": {
          "pageId": "example"
    }
  }
}
appBuilder_setPageAccessRules

Set access rules on a page and sync legacy isProtected/requiredRole for Worker compatibility.

Input Schema

pageIdstringrequired

Page ID from listPages

accessRulesobjectrequired

Pages have a single read/view operation. `read` is a Condition: a rule, a legacy flat array (OR), or an { all | any | not } group with operators. `function` rules are NOT allowed (the edge guard cannot run them).

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setPageAccessRules",
    "arguments": {
          "pageId": "example",
          "accessRules": {}
    }
  }
}
appBuilder_getBackendFunctionAccessRules

Get the access rules JSON for a single backend function.

Input Schema

functionIdstringrequired

Backend function ID from listBackendFunctions

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getBackendFunctionAccessRules",
    "arguments": {
          "functionId": "example"
    }
  }
}
appBuilder_setBackendFunctionAccessRules

Set access rules on a backend function.

Input Schema

functionIdstringrequired

Backend function ID from listBackendFunctions

accessRulesobjectrequired

Backend functions have a single execute operation. `execute` is a Condition: a rule, a legacy flat array (OR), or an { all | any | not } group with operators and the custom `function` rule.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setBackendFunctionAccessRules",
    "arguments": {
          "functionId": "example",
          "accessRules": {}
    }
  }
}
appBuilder_getEmailAccessRules

Get who may send email from the published app (client-side email.send). Email is DENY-BY-DEFAULT for non-owners.

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getEmailAccessRules",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_setEmailAccessRules

Set who may send email from the published app via the client-side email API. Server-side ctx.email.send() in backend functions is NOT affected (it runs as the project). Enforced at /api/email/send.

Input Schema

projectIdstringrequired

Project ID from listProjects

accessRulesobjectrequired

{ send: Condition } — same rule shapes as other resources (authenticated/has_role/user_property/policy refs or {all|any|not} groups). Empty/missing send = only the owner may send. NOTE: sending spends the owner's email quota under the owner's sender identity — open it narrowly (e.g. a staff role), not { type: "public" }.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setEmailAccessRules",
    "arguments": {
          "projectId": "example",
          "accessRules": {}
    }
  }
}
appBuilder_verifyBuild

Fast whole-project verification: per-file syntax/export/undefined-JSX checks, unresolved component imports, npm imports missing from project dependencies, and non-PascalCase component names (breaks publish). Call AFTER finishing edits and fix every reported error BEFORE telling the user the work is done. Warnings are advisory. Static check — publish still runs the full bundler.

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_verifyBuild",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_updatePage

Update page properties and content

Input Schema

idstringrequired

Page ID from listPages

namestring

New page name

pathstring

New URL path

contentstring

Page content (React component code or JSON)

layoutstring

Layout template name

isHomePageboolean

Set as home page

sortOrdernumber

Sort order for navigation

titlestring

Page title for SEO

descriptionstring

Page description for SEO

isDraftboolean

Draft mode - page exists in builder but is not included when publishing

isProtectedboolean

Require authentication to access

requiredRolestring

Required role to access (null = any authenticated user)

redirectIfUnauthstring

Redirect path for unauthenticated users

commitMessagestring

Git commit message describing what changed and why. Always provide a meaningful message.

baseContentHashstring

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updatePage",
    "arguments": {
          "id": "example",
          "name": "example",
          "path": "example"
    }
  }
}
appBuilder_editPage

Edit page content by replacing specific text. Exact-match only — a near-miss fails and the error shows the file's actual nearby text to copy. If oldString is not unique, provide more surrounding context or use replaceAll=true.

Input Schema

idstringrequired

Page ID from listPages

oldStringstringrequired

Exact text to find — matched byte-for-byte (whitespace/indentation included), NO fuzzy matching. Copy from readPage output WITHOUT the line-number prefixes, and do not add escaping the file does not contain (no \" or \n unless literally in the file). Must be unique in the file unless using replaceAll.

newStringstringrequired

The replacement text (must be different from oldString)

replaceAllboolean

Replace all occurrences. If false (default), oldString must be unique in the file.

commitMessagestring

Git commit message describing what changed and why. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_editPage",
    "arguments": {
          "id": "example",
          "oldString": "example",
          "newString": "example"
    }
  }
}
appBuilder_searchPage

Search page content for specific text/patterns. Returns matching lines with context. More efficient than getPage for finding specific code.

Input Schema

idstringrequired

Page ID from listPages

patternstringrequired

Text or regex pattern to search for

contextLinesnumber

Number of lines to show before and after each match (default: 3)

maxMatchesnumber

Maximum number of matches to return (default: 5)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_searchPage",
    "arguments": {
          "id": "example",
          "pattern": "example",
          "contextLines": 0
    }
  }
}
appBuilder_deletePage

Delete a page from the project

Input Schema

idstringrequired

Page ID to delete

commitMessagestring

Git commit message explaining why the page was deleted. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deletePage",
    "arguments": {
          "id": "example",
          "commitMessage": "example"
    }
  }
}
appBuilder_createEmailTemplate

Create a new email template in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

Template display name (e.g., "Welcome Email")

slugstringrequired

Template slug used in email.send({ template: "slug" })

subjectstring

Default email subject line

descriptionstring

Template description

contentstring

Initial HTML content for the template

variablesarray

Template variables

commitMessagestring

Git commit message

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createEmailTemplate",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "slug": "example"
    }
  }
}
appBuilder_listEmailTemplates

List all email templates in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listEmailTemplates",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_getEmailTemplate

Get an email template with full content

Input Schema

idstringrequired

Email template ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getEmailTemplate",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_readEmailTemplate

Get email template content with line numbers for AI editing

Input Schema

idstringrequired

Email template ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_readEmailTemplate",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_updateEmailTemplate

Update an email template

Input Schema

idstringrequired

Email template ID

namestring

Template display name

slugstring

Template slug

subjectstring

Default subject line

descriptionstring

Template description

contentstring

Full HTML email template content

variablesarray

Template variables with source metadata

commitMessagestring

Git commit message

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateEmailTemplate",
    "arguments": {
          "id": "example",
          "name": "example",
          "slug": "example"
    }
  }
}
appBuilder_editEmailTemplate

Replace specific text in an email template (string replacement)

Input Schema

idstringrequired

Email template ID

oldStringstringrequired

Exact string to find in the template content

newStringstringrequired

Replacement string

replaceAllboolean

Replace all occurrences

commitMessagestring

Git commit message

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_editEmailTemplate",
    "arguments": {
          "id": "example",
          "oldString": "example",
          "newString": "example"
    }
  }
}
appBuilder_searchEmailTemplate

Search for text in an email template

Input Schema

idstringrequired

Email template ID

patternstringrequired

Search pattern (plain text or regex)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_searchEmailTemplate",
    "arguments": {
          "id": "example",
          "pattern": "example"
    }
  }
}
appBuilder_deleteEmailTemplate

Delete an email template

Input Schema

idstringrequired

Email template ID

commitMessagestring

Git commit message

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteEmailTemplate",
    "arguments": {
          "id": "example",
          "commitMessage": "example"
    }
  }
}
appBuilder_getEmailUsage

Get email usage stats for the current month — both marketing/transactional and auth quotas

Input Schema

projectIdstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getEmailUsage",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_listComponents

List all components in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listComponents",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_getComponent

Get component details including content

Input Schema

idstringrequired

Component ID from listComponents

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getComponent",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_updateComponent

Update component properties and code

Input Schema

idstringrequired

Component ID from listComponents

namestring

New component name

descriptionstring

Component description

contentstring

Component code (React/TSX)

typestring

Component type

isGlobalboolean

Whether globally accessible

commitMessagestring

Git commit message describing what changed and why. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateComponent",
    "arguments": {
          "id": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_editComponent

Edit component content by replacing specific text. Exact-match only — a near-miss fails and the error shows the file's actual nearby text to copy. If oldString is not unique, provide more context or use replaceAll=true.

Input Schema

idstringrequired

Component ID from listComponents

oldStringstringrequired

Exact text to find — matched byte-for-byte (whitespace/indentation included), NO fuzzy matching. Copy from readComponent output WITHOUT the line-number prefixes, and do not add escaping the file does not contain (no \" or \n unless literally in the file). Must be unique unless using replaceAll.

newStringstringrequired

The replacement text (must be different from oldString)

replaceAllboolean

Replace all occurrences. If false (default), oldString must be unique.

commitMessagestring

Git commit message describing what changed and why. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_editComponent",
    "arguments": {
          "id": "example",
          "oldString": "example",
          "newString": "example"
    }
  }
}
appBuilder_searchComponent

Search component content for specific text/patterns. Returns matching lines with context.

Input Schema

idstringrequired

Component ID from listComponents

patternstringrequired

Text or regex pattern to search for

contextLinesnumber

Lines to show before/after match

maxMatchesnumber

Maximum matches to return

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_searchComponent",
    "arguments": {
          "id": "example",
          "pattern": "example",
          "contextLines": 0
    }
  }
}
appBuilder_deleteComponent

Delete a component from the project

Input Schema

idstringrequired

Component ID to delete

commitMessagestring

Git commit message explaining why the component was deleted. Always provide a meaningful message.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteComponent",
    "arguments": {
          "id": "example",
          "commitMessage": "example"
    }
  }
}
appBuilder_listSnapshots

List built-in version-history checkpoints for a project (paginated)

Input Schema

projectIdstringrequired
limitinteger
cursorstring

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listSnapshots",
    "arguments": {
          "projectId": "example",
          "limit": {},
          "cursor": "example"
    }
  }
}
appBuilder_getSnapshotContent

Resolve a checkpoint's page/component content for preview

Input Schema

projectIdstringrequired
snapshotIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getSnapshotContent",
    "arguments": {
          "projectId": "example",
          "snapshotId": "example"
    }
  }
}
appBuilder_restoreSnapshot

Restore the project to a previous version. Reversible — captures the current state first.

Input Schema

projectIdstringrequired
snapshotIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_restoreSnapshot",
    "arguments": {
          "projectId": "example",
          "snapshotId": "example"
    }
  }
}
appBuilder_revertSnapshotChange

Undo only the change a version/message made, keeping later changes (skips files later edited).

Input Schema

projectIdstringrequired
snapshotIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_revertSnapshotChange",
    "arguments": {
          "projectId": "example",
          "snapshotId": "example"
    }
  }
}
appBuilder_listOffers

List ALL offers (active + inactive) with full terms.

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listOffers",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createOffer

Create a PRODUCT (a sellable thing: membership tier, course, pass, download). Buying it grants its entitlement; gate pages/tables/channels with has_entitlement rules. Tiers = multiple products with different entitlementKeys.

Input Schema

projectIdstringrequired

Project ID from listProjects

keystringrequired

Stable id used by pages: payments.checkout(key). Lowercase, e.g. "pro"

namestringrequired

Display name, e.g. "Pro Membership"

descriptionstring
amountintegerrequired

Price in MINOR units (1900 = $19.00). 0 = free (trial offers)

currencystring

ISO code, default usd

paymentTermany

How it is paid. Default one_time. recurring {every:1,interval:"month"} = monthly; {every:3,interval:"month"} = quarterly; trialDays = free trial before the first charge (card checkout)

accessTermany

How long access lasts. Default lifetime. while_subscribed pairs with recurring payment

entitlementKeystring

Entitlement granted on payment (default = the product key). Gate content with { type: "has_entitlement", key }

imageUrlstring

Product image URL shown on pricing/product cards

featuresarray

Selling-point bullets, e.g. ["All courses", "Weekly live calls", "Private lounge"]

isActiveboolean

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createOffer",
    "arguments": {
          "projectId": "example",
          "key": "example",
          "name": "example"
    }
  }
}
appBuilder_updateOffer

Update an offer. Term changes affect FUTURE purchases only — existing members keep what they bought (grandfathering).

Input Schema

projectIdstringrequired
keystringrequired

Offer key from listOffers

namestring
descriptionstring
amountinteger
currencystring
paymentTermany
accessTermany
entitlementKeystring
imageUrlstring
featuresarray
isActiveboolean

false = stop selling (existing entitlements unaffected)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateOffer",
    "arguments": {
          "projectId": "example",
          "key": "example",
          "name": "example"
    }
  }
}
appBuilder_deleteOffer

Delete an offer permanently. Prefer updateOffer isActive:false — deletion breaks pages referencing the key. Existing entitlements are never touched.

Input Schema

projectIdstringrequired
keystringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteOffer",
    "arguments": {
          "projectId": "example",
          "key": "example"
    }
  }
}
appBuilder_listCoupons

List discount coupons with redemption counts

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listCoupons",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createCoupon

Create a discount coupon. Multiple coupons can be active at once. Redemptions count only on PAID checkouts. The redeemed code lands in the entitlement source — usable for affiliate attribution.

Input Schema

projectIdstringrequired
codestringrequired

The code members type (stored UPPERCASE), e.g. LAUNCH20

percentOffinteger

Percent discount 1-100 (use EITHER this or amountOff)

amountOffinteger

Fixed discount in MINOR units (500 = $5 off)

offerKeysarray

Restrict to these offer keys (omit = all offers)

maxRedemptionsinteger

Total successful uses allowed (omit = unlimited)

expiresAtstring

ISO date after which the code stops working

isActiveboolean

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createCoupon",
    "arguments": {
          "projectId": "example",
          "code": "example",
          "percentOff": {}
    }
  }
}
appBuilder_updateCoupon

Update a coupon (isActive:false kills it instantly; past redemptions unaffected).

Input Schema

projectIdstringrequired
codestringrequired

Coupon code from listCoupons

percentOffinteger
amountOffinteger
offerKeysarray
maxRedemptionsinteger
expiresAtstring
isActiveboolean

false = disable the code immediately

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateCoupon",
    "arguments": {
          "projectId": "example",
          "code": "example",
          "percentOff": {}
    }
  }
}
appBuilder_deleteCoupon

Delete a coupon permanently.

Input Schema

projectIdstringrequired
codestringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteCoupon",
    "arguments": {
          "projectId": "example",
          "code": "example"
    }
  }
}
appBuilder_listCampaigns

List email campaigns with status + send stats

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listCampaigns",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createCampaign

Create a DRAFT email campaign. The audience is dynamic: an access-rule condition evaluated against live member data at send time.

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

Internal name, e.g. "July newsletter"

subjectstringrequired
htmlstringrequired

Email body HTML (an unsubscribe footer is added automatically)

textstring
audienceRulesany

Access Control condition selecting recipients — SAME schema as page/table rules. Examples: [{"type":"has_entitlement","key":"pro"}] = paying Pro members; [{"type":"has_role","roleId":"..."}]; omit = ALL members.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createCampaign",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "subject": "example"
    }
  }
}
appBuilder_updateCampaign

Update a DRAFT campaign (sent/sending campaigns are immutable).

Input Schema

projectIdstringrequired
idstringrequired

Campaign ID from listCampaigns

namestring
subjectstring
htmlstring
textstring
audienceRulesany

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateCampaign",
    "arguments": {
          "projectId": "example",
          "id": "example",
          "name": "example"
    }
  }
}
appBuilder_deleteCampaign

Delete a campaign (any status; stops future batches).

Input Schema

projectIdstringrequired
idstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteCampaign",
    "arguments": {
          "projectId": "example",
          "id": "example"
    }
  }
}
appBuilder_previewCampaignAudience

Resolve the campaign audience NOW: recipient count, sample, suppressed count, and quota headroom. Always preview before sendCampaign.

Input Schema

projectIdstringrequired
idstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_previewCampaignAudience",
    "arguments": {
          "projectId": "example",
          "id": "example"
    }
  }
}
appBuilder_sendCampaign

Send a draft campaign to its resolved audience. Draws from the combined marketing+transactional monthly quota; signup/password emails are a separate bucket and unaffected.

Input Schema

projectIdstringrequired
idstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_sendCampaign",
    "arguments": {
          "projectId": "example",
          "id": "example"
    }
  }
}
appBuilder_listSuppressions

List unsubscribed/suppressed email addresses (marketing only)

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listSuppressions",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_removeSuppression

Remove an address from the suppression list (only when the person explicitly re-opted-in).

Input Schema

projectIdstringrequired
emailstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_removeSuppression",
    "arguments": {
          "projectId": "example",
          "email": "example"
    }
  }
}
appBuilder_getChannelAccessRules

List realtime channel access rules (pattern -> rules). Channels with no matching pattern allow any signed-in member.

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getChannelAccessRules",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_setChannelAccessRules

Set access rules for a realtime channel pattern (upserts by pattern). Same rule engine as every other resource.

Input Schema

projectIdstringrequired

Project ID from listProjects

patternstringrequired

Channel pattern: exact ("announcements"), wildcard ("chat:*"), or dynamic with {self} = subscriber id ("support:{self}", "user:{self}:*")

accessRulesobjectrequired

Channels have a single `subscribe` operation. Same Condition schema as pages/tables/files: rules, flat arrays (OR), { all | any | not } groups. Example: { subscribe: [{ type: "has_entitlement", key: "pro" }] }

descriptionstring
sortOrderinteger

First matching pattern wins (ascending)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setChannelAccessRules",
    "arguments": {
          "projectId": "example",
          "pattern": "example",
          "accessRules": {}
    }
  }
}
appBuilder_deleteChannelAccessRules

Remove access rules for a channel pattern.

Input Schema

projectIdstringrequired

Project ID from listProjects

patternstringrequired

Channel pattern to remove rules for (channel reverts to the any-member default)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteChannelAccessRules",
    "arguments": {
          "projectId": "example",
          "pattern": "example"
    }
  }
}
appBuilder_setRealtimeGuestAccess

Enable/disable anonymous guest realtime sessions (support-widget chat for non-logged-in visitors).

Input Schema

projectIdstringrequired

Project ID from listProjects

enabledbooleanrequired

Allow anonymous visitors to open guest realtime sessions (scoped to their own guest:{id}:* channels)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setRealtimeGuestAccess",
    "arguments": {
          "projectId": "example",
          "enabled": true
    }
  }
}
appBuilder_listSchedules

List scheduled backend-function runs (crons) for a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listSchedules",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createSchedule

Schedule a backend function to run on a cron — drip, digests, reminders, sweeps

Input Schema

projectIdstringrequired

Project ID from listProjects

functionNamestringrequired

Backend function to run (name from listBackendFunctions)

cronExpressionstringrequired

Cron expression, e.g. "0 9 * * 1" = Mondays 9am

timezonestring

IANA timezone (default UTC)

namestring

Display name, e.g. "Weekly digest"

paramsobject

Extra params passed to the function

isActiveboolean

Start enabled (default true)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createSchedule",
    "arguments": {
          "projectId": "example",
          "functionName": "example",
          "cronExpression": "example"
    }
  }
}
appBuilder_updateSchedule

Update a schedule (fields omitted stay unchanged); isActive toggles it

Input Schema

projectIdstringrequired

Project ID from listProjects

idstringrequired

Schedule ID from listSchedules

functionNamestring
cronExpressionstring
timezonestring
namestring
paramsobject
isActiveboolean

Enable/disable the schedule

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateSchedule",
    "arguments": {
          "projectId": "example",
          "id": "example",
          "functionName": "example"
    }
  }
}
appBuilder_deleteSchedule

Delete a schedule permanently (stop recurring runs)

Input Schema

projectIdstringrequired

Project ID from listProjects

idstringrequired

Schedule ID from listSchedules

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteSchedule",
    "arguments": {
          "projectId": "example",
          "id": "example"
    }
  }
}
appBuilder_listTriggers

List all triggers (event-flow mappings) in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listTriggers",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_createTrigger

Create a trigger to execute a flow when an event occurs

Input Schema

projectIdstringrequired

Project ID from listProjects

eventstringrequired

Event type

flowIdstringrequired

Flow ID to execute when event fires

targetPageIdstring

Page ID for page-specific events

targetElementIdstring

Element ID for element-specific events (button clicks, form submits)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createTrigger",
    "arguments": {
          "projectId": "example",
          "event": "example",
          "flowId": "example"
    }
  }
}
appBuilder_updateTrigger

Update trigger settings

Input Schema

idstringrequired

Trigger ID from listTriggers

flowIdstring

New Flow ID

isActiveboolean

Enable/disable trigger

orderIndexnumber

Execution order

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateTrigger",
    "arguments": {
          "id": "example",
          "flowId": "example",
          "isActive": true
    }
  }
}
appBuilder_deleteTrigger

Delete a trigger

Input Schema

idstringrequired

Trigger ID to delete

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteTrigger",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_publish

Publish an app to production. Builds all pages and deploys for serving.

Input Schema

idstringrequired

Project ID to publish

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_publish",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_unpublish

Unpublish an app (marks as unpublished but keeps deployed files)

Input Schema

idstringrequired

Project ID to unpublish

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_unpublish",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_getCustomDomainStatus

Get custom domain verification status and DNS instructions

Input Schema

idstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getCustomDomainStatus",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_verifyCustomDomain

Verify custom domain ownership via DNS TXT record lookup

Input Schema

idstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_verifyCustomDomain",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_getCodeGuide

Get docs for a SPECIFIC App Builder topic. Pass the topic you need (payments, auth, email, sdk, …). The SDK basics are already in your system prompt, so call this only when you need depth on a specific area — and pass a topic, not "all" (which returns just an index).

Input Schema

topicstring

Pick the SPECIFIC topic you need (e.g. "payments", "auth", "email", "sdk", "styling"). "all" returns only a short index of topics, NOT full docs — request a specific topic for details. Topics: "sdk", "globals", "hooks", "navigation", "libraries", "styling", "components", "examples", "errors", "mcp", "access", "auth", "payments", "saas", "functions", "email".

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getCodeGuide",
    "arguments": {
          "topic": "example"
    }
  }
}
appBuilder_removeCustomDomain

Remove custom domain from a project

Input Schema

idstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_removeCustomDomain",
    "arguments": {
          "id": "example"
    }
  }
}
appBuilder_getStripeConnection

Get Stripe connection status for a project

Input Schema

projectIdstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getStripeConnection",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_updateStripeConnection

Save Stripe API key and/or webhook secret for test or live mode

Input Schema

projectIdstringrequired

Project ID

modestringrequired

Which mode to update

secretKeystring

Stripe Secret Key (sk_test_xxx or sk_live_xxx)

webhookSecretstring

Stripe Webhook Secret (whsec_xxx)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateStripeConnection",
    "arguments": {
          "projectId": "example",
          "mode": "example",
          "secretKey": "example"
    }
  }
}
appBuilder_toggleStripeMode

Switch between test and live Stripe mode

Input Schema

projectIdstringrequired

Project ID

modestringrequired

Mode to switch to

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_toggleStripeMode",
    "arguments": {
          "projectId": "example",
          "mode": "example"
    }
  }
}
appBuilder_syncStripeProducts

Sync products and prices from Stripe account

Input Schema

projectIdstringrequired

Project ID

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_syncStripeProducts",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_listStripeProducts

List synced Stripe products

Input Schema

projectIdstringrequired

Project ID

modestring

Filter by mode (default: current mode)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listStripeProducts",
    "arguments": {
          "projectId": "example",
          "mode": "example"
    }
  }
}
appBuilder_disconnectStripe

Remove Stripe connection for test or live mode

Input Schema

projectIdstringrequired

Project ID

modestringrequired

Which mode to disconnect

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_disconnectStripe",
    "arguments": {
          "projectId": "example",
          "mode": "example"
    }
  }
}
appBuilder_createStripeProduct

Create a new product with price in Stripe

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Product name

descriptionstring

Product description

amountintegerrequired

Price amount in cents (e.g., 999 = $9.99)

currencystring

Currency code (default: usd)

intervalstring

Billing interval for subscriptions

intervalCountinteger

Number of intervals between billings

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createStripeProduct",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_getGitConnection

Get Git connection status. Param "projectId". Returns: connected, repoOwner, repoName, branch, lastCommitSha, AI permission flags.

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getGitConnection",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_connectGitHub

Connect a GitHub repository. Params: projectId (required), repoOwner (GitHub username or org), repoName (repo name), OR createNew (true) with newRepoName to create a new repo.

Input Schema

projectIdstringrequired
repoOwnerstring
repoNamestring
createNewboolean
newRepoNamestring

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_connectGitHub",
    "arguments": {
          "projectId": "example",
          "repoOwner": "example",
          "repoName": "example"
    }
  }
}
appBuilder_disconnectGitHub

Disconnect GitHub from project. Param "projectId". Clears all Git settings and token.

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_disconnectGitHub",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_updateGitPermissions

Update AI Git permissions. Params: projectId (required), plus any of: - allowAiCommit: boolean - Allow AI to commit changes - allowAiPull: boolean - Allow AI to pull from remote - allowAiPush: boolean - Allow AI to push to remote - allowAiCreateBranch: boolean - Allow AI to create branches/repos

Input Schema

projectIdstringrequired
allowAiCommitboolean
allowAiPullboolean
allowAiPushboolean
allowAiCreateBranchboolean

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateGitPermissions",
    "arguments": {
          "projectId": "example",
          "allowAiCommit": true,
          "allowAiPull": true
    }
  }
}
appBuilder_listGitHubRepos

List user GitHub repos for selection. Param "projectId". Returns array of {fullName, name, owner, private, defaultBranch}.

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listGitHubRepos",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_gitPull

Pull latest changes from GitHub remote

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitPull",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_gitPush

Push commits to GitHub remote

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitPush",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_gitCommit

Create a new commit with current source files

Input Schema

projectIdstringrequired
messagestringrequired

Commit message

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitCommit",
    "arguments": {
          "projectId": "example",
          "message": "example"
    }
  }
}
appBuilder_gitCreateBranch

Create a new branch from current HEAD

Input Schema

projectIdstringrequired
namestringrequired

New branch name

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitCreateBranch",
    "arguments": {
          "projectId": "example",
          "name": "example"
    }
  }
}
appBuilder_gitSwitchBranch

Switch to an existing branch

Input Schema

projectIdstringrequired
namestringrequired

Branch name to switch to

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitSwitchBranch",
    "arguments": {
          "projectId": "example",
          "name": "example"
    }
  }
}
appBuilder_gitMerge

Merge one branch into another

Input Schema

projectIdstringrequired
fromstringrequired

Source branch to merge from

tostringrequired

Target branch to merge into

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitMerge",
    "arguments": {
          "projectId": "example",
          "from": "example",
          "to": "example"
    }
  }
}
appBuilder_gitListCommits

Get commit history

Input Schema

projectIdstringrequired
limitnumber

Maximum number of commits to return

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitListCommits",
    "arguments": {
          "projectId": "example",
          "limit": 0
    }
  }
}
appBuilder_gitRollback

Restore project to a previous commit

Input Schema

projectIdstringrequired
shastringrequired

Commit SHA to rollback to

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitRollback",
    "arguments": {
          "projectId": "example",
          "sha": "example"
    }
  }
}
appBuilder_gitStatus

Get current Git status

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitStatus",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_gitCreateRepo

Create a new GitHub repository

Input Schema

projectIdstringrequired
namestringrequired

Repository name

isPrivateboolean

Whether the repo should be private

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitCreateRepo",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "isPrivate": true
    }
  }
}
appBuilder_gitListBranches

List all branches in the repository

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_gitListBranches",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_serverProxy

Make an HTTP request through server-side proxy with env var placeholder resolution.

Input Schema

projectIdstringrequired
urlstringrequired
methodstring
headersobject
bodyany
timeoutnumber

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_serverProxy",
    "arguments": {
          "projectId": "example",
          "url": "example",
          "method": "example"
    }
  }
}
appBuilder_setServerProxyAccessRules

Set access rules for server proxy on a project. Controls who can use serverFetch in published apps. No rules = deny (only app owner). Set execute rules to allow app users.

Input Schema

projectIdstringrequired
accessRulesobjectrequired

Access rules with a single execute operation. `execute` is a Condition: a rule, a legacy flat array (OR), or an { all | any | not } group with operators and the custom `function` rule.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_setServerProxyAccessRules",
    "arguments": {
          "projectId": "example",
          "accessRules": {}
    }
  }
}
appBuilder_getServerProxyAccessRules

Get the current server proxy access rules for a project.

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getServerProxyAccessRules",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_listBackendFunctions

List all backend functions for a project — includes BOTH code functions AND data functions (kind: "data" vs "code" in each row). Params: projectId (required). Returns array with id, name, kind, description, code, definition, accessRules, timeout, isActive.

Input Schema

projectIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_listBackendFunctions",
    "arguments": {
          "projectId": "example"
    }
  }
}
appBuilder_getBackendFunction

Get a single backend function. Params: projectId (required), functionId (required). Returns full function with code.

Input Schema

projectIdstringrequired
functionIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_getBackendFunction",
    "arguments": {
          "projectId": "example",
          "functionId": "example"
    }
  }
}
appBuilder_createDataFunction

Create a DATA function: a named declarative data operation — no code, no sandbox, entity-call speed. Callable from pages (as the member) AND headlessly by automations/agents (as system). Prefer these over backend functions for plain create/read/update/delete.

Input Schema

projectIdstringrequired
namestringrequired

Function name pages/automations call, e.g. "addContact"

descriptionstring
definitionobjectrequired

One owner-locked declarative operation on one table. Callers can only fill the declared placeholders — they cannot change the table, operation, or widen filters.

runAsstring

member (default) = caller's own row permissions. service = elevated (the declarative ctx.service) — use for public forms writing protected tables; combine with tight execute rules.

accessRulesobject

Who may call it. REQUIRED in practice — no rules = nobody can execute (secure by default). Public contact form: { execute: [{ type: "public" }] } with runAs "service".

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createDataFunction",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_updateDataFunction

Update a data function (definition is re-validated; kind cannot change here — recreate to convert).

Input Schema

projectIdstringrequired
functionIdstringrequired

Function id from listBackendFunctions

descriptionstring
definitionobject

One owner-locked declarative operation on one table. Callers can only fill the declared placeholders — they cannot change the table, operation, or widen filters.

runAsstring
accessRulesobject

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateDataFunction",
    "arguments": {
          "projectId": "example",
          "functionId": "example",
          "description": "example"
    }
  }
}
appBuilder_createBackendFunction

Create a server-side backend function (sandboxed JS with the ctx API) for secrets, elevated data access, external APIs, or heavy logic. For plain create/read/update/delete of table rows prefer createDataFunction. Read getCodeGuide topic "functions" first for the ctx API, patterns, and a worked example.

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

Function name pages call via functions.invoke("name", params)

descriptionstring

What the function does (shown in the Config panel)

codestring

Sandboxed JS: export default async function(params, ctx) { ... }. ctx gives tables/service.tables/fetch/files/email/env/user — call getCodeGuide topic "functions" for the full ctx API and examples BEFORE writing code.

accessRulesobject

Who may call it from the published app: { execute: [...] }. No rules = nobody can execute (secure by default).

timeoutnumber

Execution timeout in ms (default 10000, max 300000 = 5 min). Extend ONLY for slow work like LLM calls or big imports — long agentic jobs should be turn-based, not one long execution.

maxRetriesinteger

Retries when run by an automation on failure. 0 = run once (default). Set > 0 ONLY if this function is idempotent (safe to re-run).

toolSpecobject

Structured MCP-tool schema authored WITH the code (one artifact): { inputSchema, outputSchema?, returns?, sideEffects? } as JSON Schema. A function with a schema is marked as an MCP tool (its interface is shown + AI-readable); omit it for a plain internal helper.

exposedboolean

true = a public METHOD of this site (catalog-listed, connectable). false (default) = internal helper.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_createBackendFunction",
    "arguments": {
          "projectId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
appBuilder_updateBackendFunction

Update a backend function. Only provided fields are updated. Params: projectId (required), functionId (required), name, description, code, accessRules, timeout (1000-300000), isActive (boolean), maxRetries (0 = run once (default); > 0 only if idempotent — used when an automation runs it), toolSpec (structured MCP-tool schema { inputSchema, outputSchema?, returns?, sideEffects? } — update it TOGETHER with the code so they stay in sync; pass null to remove the schema).

Input Schema

projectIdstringrequired
functionIdstringrequired
namestring
descriptionstring
codestring
accessRulesobject
timeoutnumber
maxRetriesinteger

Retries when run by an automation on failure. 0 = run once. Set > 0 only if idempotent.

isActiveboolean
toolSpecobject

Structured MCP-tool schema { inputSchema, outputSchema?, returns?, sideEffects? } authored WITH the code. Pass null to remove the schema (function becomes a plain internal helper).

exposedboolean

Expose/hide as a public method of this site.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_updateBackendFunction",
    "arguments": {
          "projectId": "example",
          "functionId": "example",
          "name": "example"
    }
  }
}
appBuilder_deleteBackendFunction

Delete a backend function OR data function permanently (both live in the same registry — check kind from listBackendFunctions). Params: projectId (required), functionId (required).

Input Schema

projectIdstringrequired
functionIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_deleteBackendFunction",
    "arguments": {
          "projectId": "example",
          "functionId": "example"
    }
  }
}
appBuilder_invokeBackendFunction

Execute/invoke a backend function and return the result. Use this to test functions after creating them. Params: - projectId: Project ID (required) - functionName: The function name (required, NOT the function ID) - params: Optional object of key-value parameters to pass to the function Returns: { success: true, data: <function return value>, executionTime: <ms> } or throws error with the function's error message. Example: invokeBackendFunction({ projectId: "abc", functionName: "getTaskStats", params: {} })

Input Schema

projectIdstringrequired
functionNamestringrequired
paramsobject

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "appBuilder_invokeBackendFunction",
    "arguments": {
          "projectId": "example",
          "functionName": "example",
          "params": {}
    }
  }
}
Sites MCP Tools - Serenities