App Builder Tools
Tools for creating and managing app builder 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) |
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 |
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 |
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) |
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_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 - added after email/password/name |
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_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 |
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_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 |
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_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. |
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" |
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 only have a read/view operation — no create/update/delete. |
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 only have an execute operation. |
Example Call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appBuilder_setBackendFunctionAccessRules",
"arguments": {
"functionId": "example",
"accessRules": {}
}
}
}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. |
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. The oldString must match exactly (including whitespace/indentation). If not unique, either provide more surrounding context or use replaceAll=true.
Input Schema
id | stringrequired | Page ID from listPages |
oldString | stringrequired | The exact text to find and replace. 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. The oldString must match exactly (including whitespace/indentation). If not unique, provide more context or use replaceAll=true.
Input Schema
id | stringrequired | Component ID from listComponents |
oldString | stringrequired | The exact text to find and replace. 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_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_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 coding guide for writing App Builder pages. Call this BEFORE writing any page code to understand available globals and patterns.
Input Schema
topic | string | Topic: "all", "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_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 object with execute operation |
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. Params: projectId (required). Returns array with id, name, description, code, 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_createBackendFunctionCreate a new backend function. Server-side JavaScript that runs in isolated V8 sandbox with access to tables, files, external APIs via ctx object. Params: - projectId: Project ID (required) - name: Function name (required, unique within project, used in SDK: functions.call("name", params)) - description: What the function does - code: JavaScript function body (required). Has access to: params (user input), ctx.tables (getRows, getRow, createRow, updateRow, deleteRow, searchRows, getRowCount, listTables, getTableSchema, upsertRow, bulkUpdateRows, bulkDeleteRows), ctx.service.tables (same but bypasses access rules), ctx.files (list, getUrl, getUploadUrl, upload, delete), ctx.fetch (external HTTP with {{ENV_VAR}} placeholders), ctx.env.get(key), ctx.user (caller info) - accessRules: { execute: [{ type: "public" | "authenticated" | "has_role", role?: "admin" }] }. No rules = deny (owner only). - timeout: Execution timeout in ms (1000-30000, default 10000) Example code: const order = await ctx.tables.createRow("Orders", { item: params.item, total: params.qty * params.price }); const charge = await ctx.fetch("https://api.stripe.com/v1/charges", { method: "POST", headers: { "Authorization": "Bearer {{STRIPE_KEY}}" }, body: JSON.stringify({ amount: order.total * 100 }) }); return { orderId: order.id, charged: true }; SDK usage in published app: await functions.call("processOrder", { item: "Widget", qty: 3, price: 9.99 })
Input Schema
projectId | stringrequired | |
name | stringrequired | |
description | string | |
code | string | |
accessRules | object | |
timeout | number |
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-30000), isActive (boolean).
Input Schema
projectId | stringrequired | |
functionId | stringrequired | |
name | string | |
description | string | |
code | string | |
accessRules | object | |
timeout | number | |
isActive | boolean |
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 permanently. 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": {}
}
}
}