Sites Tools
Tools for creating and managing site projects, pages, and components.
Available Tools
appBuilder_listProjectsList 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_getProjectGet a project with its pages, components, linkedBase, and triggers
Input Schema
id | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getProject",
"arguments": {
"id": "example"
}
}
}appBuilder_getAccessOverviewAggregated access-control snapshot for the central Access Control page.
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getAccessOverview",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createProjectCreate a new app builder project
Input Schema
name | stringrequired | Project name |
description | string | Optional project description |
color | string | Hex color code (default: #3B82F6) |
brandKit | any | Brand kit (colors/typography/tokens) to seed the project design system |
projectType | string | Project type: web or mobile app |
bundleIdentifier | string | Mobile app bundle identifier (e.g. com.example.myapp) |
appDisplayName | string | Mobile app display name for App Store / Play Store |
isDevSite | boolean | 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_updateProjectUpdate project settings including branding, dependencies, marketplace, and mobile config
Input Schema
id | stringrequired | Project ID from listProjects |
name | string | New project name |
description | string | New description |
color | string | New hex color code |
logo | string | URL or path to logo image (recommended: 200x50px PNG or SVG) |
favicon | string | URL or path to favicon image (recommended: 32x32px PNG or ICO) |
showSerenitesBranding | boolean | Show "Powered by Serenities AI" branding on published app |
dependencies | object | 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. |
aiKnowledge | string | AI project knowledge - persistent instructions for AI including project goals, coding style, and constraints |
brandKit | object | Brand kit - design tokens and identity (colors, typography, logo, voice, style) the AI applies when generating UI |
marketplaceEnabled | boolean | Enable marketplace listing for this app |
marketplaceThumbnail | string | Thumbnail image URL or path for marketplace listing (recommended: 400x300px) |
marketplaceCover | string | Cover/banner image URL or path for marketplace detail page (recommended: 1200x400px) |
marketplaceDescription | string | Extended description for marketplace listing |
appDisplayName | string | Mobile app display name for App Store / Play Store |
bundleIdentifier | string | Mobile app bundle identifier (e.g. com.example.myapp) |
appVersion | string | Mobile app version (e.g. 1.0.0) |
buildNumber | integer | Mobile app build number |
appIcon | string | URL to app icon image (1024x1024 PNG) |
pwaEnabled | boolean | Make the published app an installable PWA (add-to-home-screen, full-screen, offline shell, auto-update). Default on. |
splashScreen | string | URL to splash screen image (1284x2778 PNG) |
orientation | string | Mobile app orientation lock |
mobilePermissions | array | 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_setPageActiveActivate 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
projectId | stringrequired | Project ID from listProjects |
pageId | stringrequired | |
active | booleanrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_setPageActive",
"arguments": {
"projectId": "example",
"pageId": "example",
"active": true
}
}
}appBuilder_updateProjectAuthUpdate project authentication settings
Input Schema
id | stringrequired | Project ID |
authEnabled | boolean | Enable authentication for this app |
authAllowSignup | boolean | Allow new users to sign up |
authRequireEmail | boolean | Require email verification |
authAllowSocial | boolean | Allow social login (Google, GitHub) |
authPaths | object | 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") |
authCustomFields | array | 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. |
removeCustomFields | array | 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_bundleDepsBundle npm dependencies for a project. Call this after adding/changing dependencies to ensure they are bundled and ready for preview.
Input Schema
id | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_bundleDeps",
"arguments": {
"id": "example"
}
}
}appBuilder_updateSubdomainUpdate the published subdomain for an app
Input Schema
id | stringrequired | Project ID |
subdomain | stringrequired | 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_listEnvVarsList environment variables for a project
Input Schema
projectId | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listEnvVars",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createEnvVarCreate a new environment variable
Input Schema
projectId | stringrequired | Project ID |
name | stringrequired | Variable name (e.g., OPENAI_API_KEY) |
value | stringrequired | Variable value |
description | string | Optional description |
isSecret | boolean | If true, value is masked in UI |
installScopeId | string | 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_updateEnvVarUpdate an environment variable
Input Schema
id | stringrequired | Environment variable ID |
value | string | New value (only if changing) |
description | string | New description |
isSecret | boolean | 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_deleteEnvVarDelete an environment variable
Input Schema
id | stringrequired | Environment variable ID to delete |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteEnvVar",
"arguments": {
"id": "example"
}
}
}appBuilder_updateCustomDomainUpdate custom domain settings
Input Schema
id | stringrequired | Project ID |
customDomain | string | 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_getAppUsersGet users who signed up to this published app
Input Schema
projectId | stringrequired | Project ID |
limit | number | |
offset | number |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getAppUsers",
"arguments": {
"projectId": "example",
"limit": 0,
"offset": 0
}
}
}appBuilder_deleteAppUserDelete a user from this published app
Input Schema
projectId | stringrequired | Project ID |
userId | stringrequired | 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_getEntitlementsList an app user's entitlements with live status — what paid access they hold right now
Input Schema
projectId | stringrequired | Project ID |
appUserId | stringrequired | 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_grantEntitlementGrant (or re-activate) paid access to an app user — e.g. a free month, a comp, or after an offline payment
Input Schema
projectId | stringrequired | Project ID |
appUserId | stringrequired | App user ID |
key | stringrequired | Entitlement key, e.g. "member" |
expiresAt | string | ISO date when access ends; omit for lifetime |
graceUntil | string | ISO date grace period ends (access continues past expiry until then) |
source | object | 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_extendEntitlementExtend an existing entitlement's expiry (renewal)
Input Schema
projectId | stringrequired | Project ID |
appUserId | stringrequired | App user ID |
key | stringrequired | Entitlement key |
expiresAt | stringrequired | New ISO expiry date (required — use grantEntitlement for lifetime) |
graceUntil | string | 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_suspendEntitlementSuspend an entitlement (e.g. missed installment) — access ends when any grace runs out
Input Schema
projectId | stringrequired | Project ID |
appUserId | stringrequired | App user ID |
key | stringrequired | Entitlement key |
graceUntil | string | 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_revokeEntitlementRevoke an entitlement immediately (refund/abuse) — access ends now, audit trail kept
Input Schema
projectId | stringrequired | Project ID |
appUserId | stringrequired | App user ID |
key | stringrequired | Entitlement key |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_revokeEntitlement",
"arguments": {
"projectId": "example",
"appUserId": "example",
"key": "example"
}
}
}appBuilder_updateManualPaymentsConfigure the manual/cash payment method — members pay outside the platform, the owner verifies and approves
Input Schema
projectId | stringrequired | Project ID |
enabled | boolean | Turn the manual/cash payment method on or off |
instructions | string | Shown to members at checkout: bank details, wallet handle, where to pay |
qrUrl | string | Legacy single QR image URL (kept as a one-method fallback). Prefer methods. |
methods | array | Labelled QR/wallet methods shown to members. Supersedes qrUrl. Pass [] or null to clear. |
notifyEmail | boolean | 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_listManualPaymentsThe manual-payment approval queue: members' offline payments awaiting the owner's verification
Input Schema
projectId | stringrequired | Project ID |
status | string | 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_approveManualPaymentApprove a member's manual payment — marks it succeeded and grants the offer's entitlement per its access terms
Input Schema
projectId | stringrequired | Project ID |
paymentId | stringrequired | 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_rejectManualPaymentReject a member's manual payment claim (not received / wrong amount). No entitlement is granted
Input Schema
projectId | stringrequired | Project ID |
paymentId | stringrequired | Manual payment id |
reason | string | 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_createAppUserManually create a user for this published app
Input Schema
projectId | stringrequired | Project ID |
email | stringrequired | User email |
name | string | User name |
password | stringrequired | User password (min 8 chars) |
role | string | Legacy user/admin enum (kept for backward compat during the role-migration). |
roleIds | array | New-format role assignments. Each ID must be an AppBuilderRole for this project. Granted atomically with user creation. |
sendWelcomeEmail | boolean | Send welcome email with credentials |
customFields | object | 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_resetAppUserPasswordReset password for an app user
Input Schema
projectId | stringrequired | Project ID |
userId | stringrequired | App user ID |
newPassword | stringrequired | 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_updateAppUserRoleLEGACY: set the platform-level user/admin classification. For has_role rules in access control, use assignRoleToAppUser / unassignRoleFromAppUser with roleIds from listProjectRoles.
Input Schema
projectId | stringrequired | Project ID |
userId | stringrequired | App user ID |
role | stringrequired | 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_updateAppUserUpdate an app user record (name, email, role, banned status, custom fields)
Input Schema
projectId | stringrequired | Project ID |
userId | stringrequired | App user ID |
name | string | User name |
email | string | User email |
role | string | User role |
isBanned | boolean | Ban/unban user |
customFields | object | Custom field values matching authCustomFields |
profileData | object | 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_listProjectRolesList all role definitions for a project. Auto-seeds reserved + legacy roles.
Input Schema
projectId | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listProjectRoles",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createProjectRoleCreate a new role on a project.
Input Schema
projectId | stringrequired | Project ID |
name | stringrequired | Role name |
color | string | 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_updateProjectRoleUpdate a role on a project. The reserved app-super-admin role cannot be renamed.
Input Schema
roleId | stringrequired | Role ID from listProjectRoles |
name | string | New role name |
color | string | 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_deleteProjectRoleDelete a role and all its assignments. The reserved app-super-admin role cannot be deleted.
Input Schema
roleId | stringrequired | Role ID to delete |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteProjectRole",
"arguments": {
"roleId": "example"
}
}
}appBuilder_listAccessPoliciesList reusable access policies for a project.
Input Schema
projectId | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listAccessPolicies",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createAccessPolicyCreate a reusable access policy. Reference it from a resource rule via { policy: <id> }.
Input Schema
projectId | stringrequired | Project ID |
name | stringrequired | Unique policy name |
description | string | |
color | string | |
condition | anyrequired | 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_updateAccessPolicyUpdate a reusable access policy. Editing the condition updates every resource that references it.
Input Schema
policyId | stringrequired | |
name | string | |
description | string | |
color | string | |
condition | any |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_updateAccessPolicy",
"arguments": {
"policyId": "example",
"name": "example",
"description": "example"
}
}
}appBuilder_deleteAccessPolicyDelete a reusable access policy. Resources still referencing it will DENY (fail-closed) until updated.
Input Schema
policyId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteAccessPolicy",
"arguments": {
"policyId": "example"
}
}
}appBuilder_assignRoleToAppUserGrant a role to an app user. Idempotent.
Input Schema
userId | stringrequired | App user ID |
roleId | stringrequired | Role ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_assignRoleToAppUser",
"arguments": {
"userId": "example",
"roleId": "example"
}
}
}appBuilder_unassignRoleFromAppUserRemove a role from an app user. Idempotent.
Input Schema
userId | stringrequired | App user ID |
roleId | stringrequired | Role ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_unassignRoleFromAppUser",
"arguments": {
"userId": "example",
"roleId": "example"
}
}
}appBuilder_getAppUserRolesGet all roles assigned to an app user.
Input Schema
userId | stringrequired | App user ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getAppUserRoles",
"arguments": {
"userId": "example"
}
}
}appBuilder_migrateProjectToRoleSystemIdempotent one-shot migration of legacy role data into the new AppBuilderRole model.
Input Schema
projectId | stringrequired | Project to migrate |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_migrateProjectToRoleSystem",
"arguments": {
"projectId": "example"
}
}
}appBuilder_deleteProjectDelete a project, its linked Base, and all pages/components
Input Schema
id | stringrequired | Project ID to delete |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteProject",
"arguments": {
"id": "example"
}
}
}appBuilder_createPageCreate 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
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Page name (e.g., "About", "Contact") |
path | stringrequired | URL path (e.g., "/about", "/contact") |
title | string | 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. |
description | string | 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." |
isHomePage | boolean | Set as the project home page (path "/"). Only one page can be home; setting this unsets any existing home. |
isProtected | boolean | Require authentication to access. Use for dashboards, settings, user-only content. Skip SEO meta on protected pages. |
content | string | Page content (React component code). Pages without content are skipped by publish — set it here or via updatePage before publishing. |
commitMessage | string | 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_createComponentCreate a new component in a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Component name |
description | string | Optional component description |
type | string | Component type: "custom", "layout", "ui", or "data" |
content | string | Component code (React/TSX). Set it here or via updateComponent — pages importing an empty component fail to build. |
isGlobal | boolean | Whether component is globally accessible |
commitMessage | string | 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_listPagesList all pages in a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listPages",
"arguments": {
"projectId": "example"
}
}
}appBuilder_getPageGet page details including content
Input Schema
id | stringrequired | Page ID from listPages |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getPage",
"arguments": {
"id": "example"
}
}
}appBuilder_readPageRead page content with line numbers. Use offset/limit to read specific sections of large files.
Input Schema
id | stringrequired | Page ID from listPages |
offset | number | Line number to start from (1-indexed). If not specified, starts from line 1. |
limit | number | 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_readComponentRead component content with line numbers. Use offset/limit for large files.
Input Schema
id | stringrequired | Component ID from listComponents |
offset | number | Line number to start from (1-indexed) |
limit | number | 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_getPageAccessRulesGet the access rules JSON for a single page.
Input Schema
pageId | stringrequired | Page ID from listPages |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getPageAccessRules",
"arguments": {
"pageId": "example"
}
}
}appBuilder_setPageAccessRulesSet access rules on a page and sync legacy isProtected/requiredRole for Worker compatibility.
Input Schema
pageId | stringrequired | Page ID from listPages |
accessRules | objectrequired | 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_getBackendFunctionAccessRulesGet the access rules JSON for a single backend function.
Input Schema
functionId | stringrequired | Backend function ID from listBackendFunctions |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getBackendFunctionAccessRules",
"arguments": {
"functionId": "example"
}
}
}appBuilder_setBackendFunctionAccessRulesSet access rules on a backend function.
Input Schema
functionId | stringrequired | Backend function ID from listBackendFunctions |
accessRules | objectrequired | 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_getEmailAccessRulesGet who may send email from the published app (client-side email.send). Email is DENY-BY-DEFAULT for non-owners.
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getEmailAccessRules",
"arguments": {
"projectId": "example"
}
}
}appBuilder_setEmailAccessRulesSet 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
projectId | stringrequired | Project ID from listProjects |
accessRules | objectrequired | { 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_verifyBuildFast 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
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_verifyBuild",
"arguments": {
"projectId": "example"
}
}
}appBuilder_updatePageUpdate page properties and content
Input Schema
id | stringrequired | Page ID from listPages |
name | string | New page name |
path | string | New URL path |
content | string | Page content (React component code or JSON) |
layout | string | Layout template name |
isHomePage | boolean | Set as home page |
sortOrder | number | Sort order for navigation |
title | string | Page title for SEO |
description | string | Page description for SEO |
isDraft | boolean | Draft mode - page exists in builder but is not included when publishing |
isProtected | boolean | Require authentication to access |
requiredRole | string | Required role to access (null = any authenticated user) |
redirectIfUnauth | string | Redirect path for unauthenticated users |
commitMessage | string | Git commit message describing what changed and why. Always provide a meaningful message. |
baseContentHash | string |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_updatePage",
"arguments": {
"id": "example",
"name": "example",
"path": "example"
}
}
}appBuilder_editPageEdit 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
id | stringrequired | Page ID from listPages |
oldString | stringrequired | 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. |
newString | stringrequired | The replacement text (must be different from oldString) |
replaceAll | boolean | Replace all occurrences. If false (default), oldString must be unique in the file. |
commitMessage | string | 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_searchPageSearch page content for specific text/patterns. Returns matching lines with context. More efficient than getPage for finding specific code.
Input Schema
id | stringrequired | Page ID from listPages |
pattern | stringrequired | Text or regex pattern to search for |
contextLines | number | Number of lines to show before and after each match (default: 3) |
maxMatches | number | 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_deletePageDelete a page from the project
Input Schema
id | stringrequired | Page ID to delete |
commitMessage | string | 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_createEmailTemplateCreate a new email template in a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Template display name (e.g., "Welcome Email") |
slug | stringrequired | Template slug used in email.send({ template: "slug" }) |
subject | string | Default email subject line |
description | string | Template description |
content | string | Initial HTML content for the template |
variables | array | Template variables |
commitMessage | string | 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_listEmailTemplatesList all email templates in a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listEmailTemplates",
"arguments": {
"projectId": "example"
}
}
}appBuilder_getEmailTemplateGet an email template with full content
Input Schema
id | stringrequired | Email template ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getEmailTemplate",
"arguments": {
"id": "example"
}
}
}appBuilder_readEmailTemplateGet email template content with line numbers for AI editing
Input Schema
id | stringrequired | Email template ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_readEmailTemplate",
"arguments": {
"id": "example"
}
}
}appBuilder_updateEmailTemplateUpdate an email template
Input Schema
id | stringrequired | Email template ID |
name | string | Template display name |
slug | string | Template slug |
subject | string | Default subject line |
description | string | Template description |
content | string | Full HTML email template content |
variables | array | Template variables with source metadata |
commitMessage | string | 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_editEmailTemplateReplace specific text in an email template (string replacement)
Input Schema
id | stringrequired | Email template ID |
oldString | stringrequired | Exact string to find in the template content |
newString | stringrequired | Replacement string |
replaceAll | boolean | Replace all occurrences |
commitMessage | string | 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_searchEmailTemplateSearch for text in an email template
Input Schema
id | stringrequired | Email template ID |
pattern | stringrequired | 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_deleteEmailTemplateDelete an email template
Input Schema
id | stringrequired | Email template ID |
commitMessage | string | Git commit message |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteEmailTemplate",
"arguments": {
"id": "example",
"commitMessage": "example"
}
}
}appBuilder_getEmailUsageGet email usage stats for the current month — both marketing/transactional and auth quotas
Input Schema
projectId | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getEmailUsage",
"arguments": {
"projectId": "example"
}
}
}appBuilder_listComponentsList all components in a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listComponents",
"arguments": {
"projectId": "example"
}
}
}appBuilder_getComponentGet component details including content
Input Schema
id | stringrequired | Component ID from listComponents |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getComponent",
"arguments": {
"id": "example"
}
}
}appBuilder_updateComponentUpdate component properties and code
Input Schema
id | stringrequired | Component ID from listComponents |
name | string | New component name |
description | string | Component description |
content | string | Component code (React/TSX) |
type | string | Component type |
isGlobal | boolean | Whether globally accessible |
commitMessage | string | 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_editComponentEdit 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
id | stringrequired | Component ID from listComponents |
oldString | stringrequired | 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. |
newString | stringrequired | The replacement text (must be different from oldString) |
replaceAll | boolean | Replace all occurrences. If false (default), oldString must be unique. |
commitMessage | string | 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_searchComponentSearch component content for specific text/patterns. Returns matching lines with context.
Input Schema
id | stringrequired | Component ID from listComponents |
pattern | stringrequired | Text or regex pattern to search for |
contextLines | number | Lines to show before/after match |
maxMatches | number | 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_deleteComponentDelete a component from the project
Input Schema
id | stringrequired | Component ID to delete |
commitMessage | string | 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_listSnapshotsList built-in version-history checkpoints for a project (paginated)
Input Schema
projectId | stringrequired | |
limit | integer | |
cursor | string |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listSnapshots",
"arguments": {
"projectId": "example",
"limit": {},
"cursor": "example"
}
}
}appBuilder_getSnapshotContentResolve a checkpoint's page/component content for preview
Input Schema
projectId | stringrequired | |
snapshotId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getSnapshotContent",
"arguments": {
"projectId": "example",
"snapshotId": "example"
}
}
}appBuilder_restoreSnapshotRestore the project to a previous version. Reversible — captures the current state first.
Input Schema
projectId | stringrequired | |
snapshotId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_restoreSnapshot",
"arguments": {
"projectId": "example",
"snapshotId": "example"
}
}
}appBuilder_revertSnapshotChangeUndo only the change a version/message made, keeping later changes (skips files later edited).
Input Schema
projectId | stringrequired | |
snapshotId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_revertSnapshotChange",
"arguments": {
"projectId": "example",
"snapshotId": "example"
}
}
}appBuilder_listOffersList ALL offers (active + inactive) with full terms.
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listOffers",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createOfferCreate 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
projectId | stringrequired | Project ID from listProjects |
key | stringrequired | Stable id used by pages: payments.checkout(key). Lowercase, e.g. "pro" |
name | stringrequired | Display name, e.g. "Pro Membership" |
description | string | |
amount | integerrequired | Price in MINOR units (1900 = $19.00). 0 = free (trial offers) |
currency | string | ISO code, default usd |
paymentTerm | any | 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) |
accessTerm | any | How long access lasts. Default lifetime. while_subscribed pairs with recurring payment |
entitlementKey | string | Entitlement granted on payment (default = the product key). Gate content with { type: "has_entitlement", key } |
imageUrl | string | Product image URL shown on pricing/product cards |
features | array | Selling-point bullets, e.g. ["All courses", "Weekly live calls", "Private lounge"] |
isActive | boolean |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_createOffer",
"arguments": {
"projectId": "example",
"key": "example",
"name": "example"
}
}
}appBuilder_updateOfferUpdate an offer. Term changes affect FUTURE purchases only — existing members keep what they bought (grandfathering).
Input Schema
projectId | stringrequired | |
key | stringrequired | Offer key from listOffers |
name | string | |
description | string | |
amount | integer | |
currency | string | |
paymentTerm | any | |
accessTerm | any | |
entitlementKey | string | |
imageUrl | string | |
features | array | |
isActive | boolean | 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_deleteOfferDelete an offer permanently. Prefer updateOffer isActive:false — deletion breaks pages referencing the key. Existing entitlements are never touched.
Input Schema
projectId | stringrequired | |
key | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteOffer",
"arguments": {
"projectId": "example",
"key": "example"
}
}
}appBuilder_listCouponsList discount coupons with redemption counts
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listCoupons",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createCouponCreate 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
projectId | stringrequired | |
code | stringrequired | The code members type (stored UPPERCASE), e.g. LAUNCH20 |
percentOff | integer | Percent discount 1-100 (use EITHER this or amountOff) |
amountOff | integer | Fixed discount in MINOR units (500 = $5 off) |
offerKeys | array | Restrict to these offer keys (omit = all offers) |
maxRedemptions | integer | Total successful uses allowed (omit = unlimited) |
expiresAt | string | ISO date after which the code stops working |
isActive | boolean |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_createCoupon",
"arguments": {
"projectId": "example",
"code": "example",
"percentOff": {}
}
}
}appBuilder_updateCouponUpdate a coupon (isActive:false kills it instantly; past redemptions unaffected).
Input Schema
projectId | stringrequired | |
code | stringrequired | Coupon code from listCoupons |
percentOff | integer | |
amountOff | integer | |
offerKeys | array | |
maxRedemptions | integer | |
expiresAt | string | |
isActive | boolean | 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_deleteCouponDelete a coupon permanently.
Input Schema
projectId | stringrequired | |
code | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteCoupon",
"arguments": {
"projectId": "example",
"code": "example"
}
}
}appBuilder_listCampaignsList email campaigns with status + send stats
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listCampaigns",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createCampaignCreate a DRAFT email campaign. The audience is dynamic: an access-rule condition evaluated against live member data at send time.
Input Schema
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Internal name, e.g. "July newsletter" |
subject | stringrequired | |
html | stringrequired | Email body HTML (an unsubscribe footer is added automatically) |
text | string | |
audienceRules | any | 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_updateCampaignUpdate a DRAFT campaign (sent/sending campaigns are immutable).
Input Schema
projectId | stringrequired | |
id | stringrequired | Campaign ID from listCampaigns |
name | string | |
subject | string | |
html | string | |
text | string | |
audienceRules | any |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_updateCampaign",
"arguments": {
"projectId": "example",
"id": "example",
"name": "example"
}
}
}appBuilder_deleteCampaignDelete a campaign (any status; stops future batches).
Input Schema
projectId | stringrequired | |
id | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteCampaign",
"arguments": {
"projectId": "example",
"id": "example"
}
}
}appBuilder_previewCampaignAudienceResolve the campaign audience NOW: recipient count, sample, suppressed count, and quota headroom. Always preview before sendCampaign.
Input Schema
projectId | stringrequired | |
id | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_previewCampaignAudience",
"arguments": {
"projectId": "example",
"id": "example"
}
}
}appBuilder_sendCampaignSend 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
projectId | stringrequired | |
id | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_sendCampaign",
"arguments": {
"projectId": "example",
"id": "example"
}
}
}appBuilder_listSuppressionsList unsubscribed/suppressed email addresses (marketing only)
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listSuppressions",
"arguments": {
"projectId": "example"
}
}
}appBuilder_removeSuppressionRemove an address from the suppression list (only when the person explicitly re-opted-in).
Input Schema
projectId | stringrequired | |
email | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_removeSuppression",
"arguments": {
"projectId": "example",
"email": "example"
}
}
}appBuilder_getChannelAccessRulesList realtime channel access rules (pattern -> rules). Channels with no matching pattern allow any signed-in member.
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getChannelAccessRules",
"arguments": {
"projectId": "example"
}
}
}appBuilder_setChannelAccessRulesSet access rules for a realtime channel pattern (upserts by pattern). Same rule engine as every other resource.
Input Schema
projectId | stringrequired | Project ID from listProjects |
pattern | stringrequired | Channel pattern: exact ("announcements"), wildcard ("chat:*"), or dynamic with {self} = subscriber id ("support:{self}", "user:{self}:*") |
accessRules | objectrequired | 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" }] } |
description | string | |
sortOrder | integer | 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_deleteChannelAccessRulesRemove access rules for a channel pattern.
Input Schema
projectId | stringrequired | Project ID from listProjects |
pattern | stringrequired | 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_setRealtimeGuestAccessEnable/disable anonymous guest realtime sessions (support-widget chat for non-logged-in visitors).
Input Schema
projectId | stringrequired | Project ID from listProjects |
enabled | booleanrequired | 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_listSchedulesList scheduled backend-function runs (crons) for a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listSchedules",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createScheduleSchedule a backend function to run on a cron — drip, digests, reminders, sweeps
Input Schema
projectId | stringrequired | Project ID from listProjects |
functionName | stringrequired | Backend function to run (name from listBackendFunctions) |
cronExpression | stringrequired | Cron expression, e.g. "0 9 * * 1" = Mondays 9am |
timezone | string | IANA timezone (default UTC) |
name | string | Display name, e.g. "Weekly digest" |
params | object | Extra params passed to the function |
isActive | boolean | 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_updateScheduleUpdate a schedule (fields omitted stay unchanged); isActive toggles it
Input Schema
projectId | stringrequired | Project ID from listProjects |
id | stringrequired | Schedule ID from listSchedules |
functionName | string | |
cronExpression | string | |
timezone | string | |
name | string | |
params | object | |
isActive | boolean | 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_deleteScheduleDelete a schedule permanently (stop recurring runs)
Input Schema
projectId | stringrequired | Project ID from listProjects |
id | stringrequired | Schedule ID from listSchedules |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteSchedule",
"arguments": {
"projectId": "example",
"id": "example"
}
}
}appBuilder_listTriggersList all triggers (event-flow mappings) in a project
Input Schema
projectId | stringrequired | Project ID from listProjects |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listTriggers",
"arguments": {
"projectId": "example"
}
}
}appBuilder_createTriggerCreate a trigger to execute a flow when an event occurs
Input Schema
projectId | stringrequired | Project ID from listProjects |
event | stringrequired | Event type |
flowId | stringrequired | Flow ID to execute when event fires |
targetPageId | string | Page ID for page-specific events |
targetElementId | string | 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_updateTriggerUpdate trigger settings
Input Schema
id | stringrequired | Trigger ID from listTriggers |
flowId | string | New Flow ID |
isActive | boolean | Enable/disable trigger |
orderIndex | number | Execution order |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_updateTrigger",
"arguments": {
"id": "example",
"flowId": "example",
"isActive": true
}
}
}appBuilder_deleteTriggerDelete a trigger
Input Schema
id | stringrequired | Trigger ID to delete |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteTrigger",
"arguments": {
"id": "example"
}
}
}appBuilder_publishPublish an app to production. Builds all pages and deploys for serving.
Input Schema
id | stringrequired | Project ID to publish |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_publish",
"arguments": {
"id": "example"
}
}
}appBuilder_unpublishUnpublish an app (marks as unpublished but keeps deployed files)
Input Schema
id | stringrequired | Project ID to unpublish |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_unpublish",
"arguments": {
"id": "example"
}
}
}appBuilder_getCustomDomainStatusGet custom domain verification status and DNS instructions
Input Schema
id | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getCustomDomainStatus",
"arguments": {
"id": "example"
}
}
}appBuilder_verifyCustomDomainVerify custom domain ownership via DNS TXT record lookup
Input Schema
id | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_verifyCustomDomain",
"arguments": {
"id": "example"
}
}
}appBuilder_getCodeGuideGet 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
topic | string | 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_removeCustomDomainRemove custom domain from a project
Input Schema
id | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_removeCustomDomain",
"arguments": {
"id": "example"
}
}
}appBuilder_getStripeConnectionGet Stripe connection status for a project
Input Schema
projectId | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getStripeConnection",
"arguments": {
"projectId": "example"
}
}
}appBuilder_updateStripeConnectionSave Stripe API key and/or webhook secret for test or live mode
Input Schema
projectId | stringrequired | Project ID |
mode | stringrequired | Which mode to update |
secretKey | string | Stripe Secret Key (sk_test_xxx or sk_live_xxx) |
webhookSecret | string | 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_toggleStripeModeSwitch between test and live Stripe mode
Input Schema
projectId | stringrequired | Project ID |
mode | stringrequired | Mode to switch to |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_toggleStripeMode",
"arguments": {
"projectId": "example",
"mode": "example"
}
}
}appBuilder_syncStripeProductsSync products and prices from Stripe account
Input Schema
projectId | stringrequired | Project ID |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_syncStripeProducts",
"arguments": {
"projectId": "example"
}
}
}appBuilder_listStripeProductsList synced Stripe products
Input Schema
projectId | stringrequired | Project ID |
mode | string | 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_disconnectStripeRemove Stripe connection for test or live mode
Input Schema
projectId | stringrequired | Project ID |
mode | stringrequired | Which mode to disconnect |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_disconnectStripe",
"arguments": {
"projectId": "example",
"mode": "example"
}
}
}appBuilder_createStripeProductCreate a new product with price in Stripe
Input Schema
projectId | stringrequired | Project ID |
name | stringrequired | Product name |
description | string | Product description |
amount | integerrequired | Price amount in cents (e.g., 999 = $9.99) |
currency | string | Currency code (default: usd) |
interval | string | Billing interval for subscriptions |
intervalCount | integer | 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_getGitConnectionGet Git connection status. Param "projectId". Returns: connected, repoOwner, repoName, branch, lastCommitSha, AI permission flags.
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getGitConnection",
"arguments": {
"projectId": "example"
}
}
}appBuilder_connectGitHubConnect 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
projectId | stringrequired | |
repoOwner | string | |
repoName | string | |
createNew | boolean | |
newRepoName | string |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_connectGitHub",
"arguments": {
"projectId": "example",
"repoOwner": "example",
"repoName": "example"
}
}
}appBuilder_disconnectGitHubDisconnect GitHub from project. Param "projectId". Clears all Git settings and token.
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_disconnectGitHub",
"arguments": {
"projectId": "example"
}
}
}appBuilder_updateGitPermissionsUpdate 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
projectId | stringrequired | |
allowAiCommit | boolean | |
allowAiPull | boolean | |
allowAiPush | boolean | |
allowAiCreateBranch | boolean |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_updateGitPermissions",
"arguments": {
"projectId": "example",
"allowAiCommit": true,
"allowAiPull": true
}
}
}appBuilder_listGitHubReposList user GitHub repos for selection. Param "projectId". Returns array of {fullName, name, owner, private, defaultBranch}.
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listGitHubRepos",
"arguments": {
"projectId": "example"
}
}
}appBuilder_gitPullPull latest changes from GitHub remote
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_gitPull",
"arguments": {
"projectId": "example"
}
}
}appBuilder_gitPushPush commits to GitHub remote
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_gitPush",
"arguments": {
"projectId": "example"
}
}
}appBuilder_gitCommitCreate a new commit with current source files
Input Schema
projectId | stringrequired | |
message | stringrequired | Commit message |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_gitCommit",
"arguments": {
"projectId": "example",
"message": "example"
}
}
}appBuilder_gitCreateBranchCreate a new branch from current HEAD
Input Schema
projectId | stringrequired | |
name | stringrequired | New branch name |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_gitCreateBranch",
"arguments": {
"projectId": "example",
"name": "example"
}
}
}appBuilder_gitSwitchBranchSwitch to an existing branch
Input Schema
projectId | stringrequired | |
name | stringrequired | 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_gitMergeMerge one branch into another
Input Schema
projectId | stringrequired | |
from | stringrequired | Source branch to merge from |
to | stringrequired | 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_gitListCommitsGet commit history
Input Schema
projectId | stringrequired | |
limit | number | 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_gitRollbackRestore project to a previous commit
Input Schema
projectId | stringrequired | |
sha | stringrequired | 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_gitStatusGet current Git status
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_gitStatus",
"arguments": {
"projectId": "example"
}
}
}appBuilder_gitCreateRepoCreate a new GitHub repository
Input Schema
projectId | stringrequired | |
name | stringrequired | Repository name |
isPrivate | boolean | 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_gitListBranchesList all branches in the repository
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_gitListBranches",
"arguments": {
"projectId": "example"
}
}
}appBuilder_serverProxyMake an HTTP request through server-side proxy with env var placeholder resolution.
Input Schema
projectId | stringrequired | |
url | stringrequired | |
method | string | |
headers | object | |
body | any | |
timeout | number |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_serverProxy",
"arguments": {
"projectId": "example",
"url": "example",
"method": "example"
}
}
}appBuilder_setServerProxyAccessRulesSet 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
projectId | stringrequired | |
accessRules | objectrequired | 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_getServerProxyAccessRulesGet the current server proxy access rules for a project.
Input Schema
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getServerProxyAccessRules",
"arguments": {
"projectId": "example"
}
}
}appBuilder_listBackendFunctionsList 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
projectId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_listBackendFunctions",
"arguments": {
"projectId": "example"
}
}
}appBuilder_getBackendFunctionGet a single backend function. Params: projectId (required), functionId (required). Returns full function with code.
Input Schema
projectId | stringrequired | |
functionId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_getBackendFunction",
"arguments": {
"projectId": "example",
"functionId": "example"
}
}
}appBuilder_createDataFunctionCreate 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
projectId | stringrequired | |
name | stringrequired | Function name pages/automations call, e.g. "addContact" |
description | string | |
definition | objectrequired | One owner-locked declarative operation on one table. Callers can only fill the declared placeholders — they cannot change the table, operation, or widen filters. |
runAs | string | 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. |
accessRules | object | 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_updateDataFunctionUpdate a data function (definition is re-validated; kind cannot change here — recreate to convert).
Input Schema
projectId | stringrequired | |
functionId | stringrequired | Function id from listBackendFunctions |
description | string | |
definition | object | One owner-locked declarative operation on one table. Callers can only fill the declared placeholders — they cannot change the table, operation, or widen filters. |
runAs | string | |
accessRules | object |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_updateDataFunction",
"arguments": {
"projectId": "example",
"functionId": "example",
"description": "example"
}
}
}appBuilder_createBackendFunctionCreate 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
projectId | stringrequired | Project ID from listProjects |
name | stringrequired | Function name pages call via functions.invoke("name", params) |
description | string | What the function does (shown in the Config panel) |
code | string | 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. |
accessRules | object | Who may call it from the published app: { execute: [...] }. No rules = nobody can execute (secure by default). |
timeout | number | 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. |
maxRetries | integer | Retries when run by an automation on failure. 0 = run once (default). Set > 0 ONLY if this function is idempotent (safe to re-run). |
toolSpec | object | 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. |
exposed | boolean | 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_updateBackendFunctionUpdate 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
projectId | stringrequired | |
functionId | stringrequired | |
name | string | |
description | string | |
code | string | |
accessRules | object | |
timeout | number | |
maxRetries | integer | Retries when run by an automation on failure. 0 = run once. Set > 0 only if idempotent. |
isActive | boolean | |
toolSpec | object | Structured MCP-tool schema { inputSchema, outputSchema?, returns?, sideEffects? } authored WITH the code. Pass null to remove the schema (function becomes a plain internal helper). |
exposed | boolean | 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_deleteBackendFunctionDelete a backend function OR data function permanently (both live in the same registry — check kind from listBackendFunctions). Params: projectId (required), functionId (required).
Input Schema
projectId | stringrequired | |
functionId | stringrequired |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_deleteBackendFunction",
"arguments": {
"projectId": "example",
"functionId": "example"
}
}
}appBuilder_invokeBackendFunctionExecute/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
projectId | stringrequired | |
functionName | stringrequired | |
params | object |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_invokeBackendFunction",
"arguments": {
"projectId": "example",
"functionName": "example",
"params": {}
}
}
}