Back to MCP Overview

App Builder Tools

Tools for creating and managing app builder projects, pages, and components.

96 tools

Available Tools

appBuilder_listProjects

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

Example Call

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

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

Input Schema

idstringrequired

Project ID from listProjects

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

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

Create a new app builder project

Input Schema

namestringrequired

Project name

descriptionstring

Optional project description

colorstring

Hex color code (default: #3B82F6)

projectTypestring

Project type: web or mobile app

bundleIdentifierstring

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

appDisplayNamestring

Mobile app display name for App Store / Play Store

Example Call

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

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

Input Schema

idstringrequired

Project ID from listProjects

namestring

New project name

descriptionstring

New description

colorstring

New hex color code

logostring

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

faviconstring

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

showSerenitesBrandingboolean

Show "Powered by Serenities AI" branding on published app

dependenciesobject

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

aiKnowledgestring

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

marketplaceEnabledboolean

Enable marketplace listing for this app

marketplaceThumbnailstring

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

marketplaceCoverstring

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

marketplaceDescriptionstring

Extended description for marketplace listing

appDisplayNamestring

Mobile app display name for App Store / Play Store

bundleIdentifierstring

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

appVersionstring

Mobile app version (e.g. 1.0.0)

buildNumberinteger

Mobile app build number

appIconstring

URL to app icon image (1024x1024 PNG)

splashScreenstring

URL to splash screen image (1284x2778 PNG)

orientationstring

Mobile app orientation lock

mobilePermissionsarray

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

Example Call

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

Update project authentication settings

Input Schema

idstringrequired

Project ID

authEnabledboolean

Enable authentication for this app

authAllowSignupboolean

Allow new users to sign up

authRequireEmailboolean

Require email verification

authAllowSocialboolean

Allow social login (Google, GitHub)

authPathsobject

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

authCustomFieldsarray

Custom signup form fields - 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_bundleDeps

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

Input Schema

idstringrequired

Project ID

Example Call

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

List environment variables for a project

Input Schema

projectIdstringrequired

Project ID

Example Call

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

Create a new environment variable

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Variable name (e.g., OPENAI_API_KEY)

valuestringrequired

Variable value

descriptionstring

Optional description

isSecretboolean

If true, value is masked in UI

Example Call

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

Update an environment variable

Input Schema

idstringrequired

Environment variable ID

valuestring

New value (only if changing)

descriptionstring

New description

isSecretboolean

Update secret flag

Example Call

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

Delete an environment variable

Input Schema

idstringrequired

Environment variable ID to delete

Example Call

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

Update custom domain settings

Input Schema

idstringrequired

Project ID

customDomainstring

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

Example Call

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

Get users who signed up to this published app

Input Schema

projectIdstringrequired

Project ID

limitnumber
offsetnumber

Example Call

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

Delete a user from this published app

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID to delete

Example Call

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

Manually create a user for this published app

Input Schema

projectIdstringrequired

Project ID

emailstringrequired

User email

namestring

User name

passwordstringrequired

User password (min 8 chars)

rolestring

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

roleIdsarray

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

sendWelcomeEmailboolean

Send welcome email with credentials

customFieldsobject

Custom field values keyed by field ID

Example Call

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

Reset password for an app user

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID

newPasswordstringrequired

New password (min 8 chars)

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID

rolestringrequired

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

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID

userIdstringrequired

App user ID

namestring

User name

emailstring

User email

rolestring

User role

isBannedboolean

Ban/unban user

customFieldsobject

Custom field values matching authCustomFields

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID

Example Call

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

Create a new role on a project.

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Role name

colorstring

Hex color for UI badges

Example Call

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

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

Input Schema

roleIdstringrequired

Role ID from listProjectRoles

namestring

New role name

colorstring

New hex color (null clears)

Example Call

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

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

Input Schema

roleIdstringrequired

Role ID to delete

Example Call

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

Grant a role to an app user. Idempotent.

Input Schema

userIdstringrequired

App user ID

roleIdstringrequired

Role ID

Example Call

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

Remove a role from an app user. Idempotent.

Input Schema

userIdstringrequired

App user ID

roleIdstringrequired

Role ID

Example Call

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

Get all roles assigned to an app user.

Input Schema

userIdstringrequired

App user ID

Example Call

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

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

Input Schema

projectIdstringrequired

Project to migrate

Example Call

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

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

Input Schema

idstringrequired

Project ID to delete

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

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

pathstringrequired

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

titlestring

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

descriptionstring

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

isHomePageboolean

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

isProtectedboolean

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

commitMessagestring

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

Example Call

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

Create a new component in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

Component name

descriptionstring

Optional component description

typestring

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

isGlobalboolean

Whether component is globally accessible

commitMessagestring

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

Example Call

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

List all pages in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

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

Get page details including content

Input Schema

idstringrequired

Page ID from listPages

Example Call

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

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

Input Schema

idstringrequired

Page ID from listPages

offsetnumber

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

limitnumber

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

Example Call

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

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

Input Schema

idstringrequired

Component ID from listComponents

offsetnumber

Line number to start from (1-indexed)

limitnumber

Number of lines to read

Example Call

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

Get the access rules JSON for a single page.

Input Schema

pageIdstringrequired

Page ID from listPages

Example Call

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

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

Input Schema

pageIdstringrequired

Page ID from listPages

accessRulesobjectrequired

Pages 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_getBackendFunctionAccessRules

Get the access rules JSON for a single backend function.

Input Schema

functionIdstringrequired

Backend function ID from listBackendFunctions

Example Call

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

Set access rules on a backend function.

Input Schema

functionIdstringrequired

Backend function ID from listBackendFunctions

accessRulesobjectrequired

Backend functions only have an execute operation.

Example Call

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

Update page properties and content

Input Schema

idstringrequired

Page ID from listPages

namestring

New page name

pathstring

New URL path

contentstring

Page content (React component code or JSON)

layoutstring

Layout template name

isHomePageboolean

Set as home page

sortOrdernumber

Sort order for navigation

titlestring

Page title for SEO

descriptionstring

Page description for SEO

isDraftboolean

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

isProtectedboolean

Require authentication to access

requiredRolestring

Required role to access (null = any authenticated user)

redirectIfUnauthstring

Redirect path for unauthenticated users

commitMessagestring

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

Example Call

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

Edit page content by replacing specific text. The oldString must match exactly (including whitespace/indentation). If not unique, either provide more surrounding context or use replaceAll=true.

Input Schema

idstringrequired

Page ID from listPages

oldStringstringrequired

The exact text to find and replace. Must be unique in the file unless using replaceAll.

newStringstringrequired

The replacement text (must be different from oldString)

replaceAllboolean

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

commitMessagestring

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

Example Call

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

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

Input Schema

idstringrequired

Page ID from listPages

patternstringrequired

Text or regex pattern to search for

contextLinesnumber

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

maxMatchesnumber

Maximum number of matches to return (default: 5)

Example Call

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

Delete a page from the project

Input Schema

idstringrequired

Page ID to delete

commitMessagestring

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

Example Call

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

Create a new email template in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

namestringrequired

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

slugstringrequired

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

subjectstring

Default email subject line

descriptionstring

Template description

contentstring

Initial HTML content for the template

variablesarray

Template variables

commitMessagestring

Git commit message

Example Call

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

List all email templates in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

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

Get an email template with full content

Input Schema

idstringrequired

Email template ID

Example Call

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

Get email template content with line numbers for AI editing

Input Schema

idstringrequired

Email template ID

Example Call

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

Update an email template

Input Schema

idstringrequired

Email template ID

namestring

Template display name

slugstring

Template slug

subjectstring

Default subject line

descriptionstring

Template description

contentstring

Full HTML email template content

variablesarray

Template variables with source metadata

commitMessagestring

Git commit message

Example Call

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

Replace specific text in an email template (string replacement)

Input Schema

idstringrequired

Email template ID

oldStringstringrequired

Exact string to find in the template content

newStringstringrequired

Replacement string

replaceAllboolean

Replace all occurrences

commitMessagestring

Git commit message

Example Call

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

Search for text in an email template

Input Schema

idstringrequired

Email template ID

patternstringrequired

Search pattern (plain text or regex)

Example Call

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

Delete an email template

Input Schema

idstringrequired

Email template ID

commitMessagestring

Git commit message

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID

Example Call

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

List all components in a project

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

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

Get component details including content

Input Schema

idstringrequired

Component ID from listComponents

Example Call

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

Update component properties and code

Input Schema

idstringrequired

Component ID from listComponents

namestring

New component name

descriptionstring

Component description

contentstring

Component code (React/TSX)

typestring

Component type

isGlobalboolean

Whether globally accessible

commitMessagestring

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

Example Call

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

Edit component content by replacing specific text. The oldString must match exactly (including whitespace/indentation). If not unique, provide more context or use replaceAll=true.

Input Schema

idstringrequired

Component ID from listComponents

oldStringstringrequired

The exact text to find and replace. Must be unique unless using replaceAll.

newStringstringrequired

The replacement text (must be different from oldString)

replaceAllboolean

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

commitMessagestring

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

Example Call

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

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

Input Schema

idstringrequired

Component ID from listComponents

patternstringrequired

Text or regex pattern to search for

contextLinesnumber

Lines to show before/after match

maxMatchesnumber

Maximum matches to return

Example Call

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

Delete a component from the project

Input Schema

idstringrequired

Component ID to delete

commitMessagestring

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

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID from listProjects

Example Call

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

Create a trigger to execute a flow when an event occurs

Input Schema

projectIdstringrequired

Project ID from listProjects

eventstringrequired

Event type

flowIdstringrequired

Flow ID to execute when event fires

targetPageIdstring

Page ID for page-specific events

targetElementIdstring

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

Example Call

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

Update trigger settings

Input Schema

idstringrequired

Trigger ID from listTriggers

flowIdstring

New Flow ID

isActiveboolean

Enable/disable trigger

orderIndexnumber

Execution order

Example Call

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

Delete a trigger

Input Schema

idstringrequired

Trigger ID to delete

Example Call

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

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

Input Schema

idstringrequired

Project ID to publish

Example Call

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

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

Input Schema

idstringrequired

Project ID to unpublish

Example Call

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

Verify custom domain ownership via DNS TXT record lookup

Input Schema

idstringrequired

Project ID

Example Call

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

Get coding guide for writing App Builder pages. Call this BEFORE writing any page code to understand available globals and patterns.

Input Schema

topicstring

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_getStripeConnection

Get Stripe connection status for a project

Input Schema

projectIdstringrequired

Project ID

Example Call

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

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

Input Schema

projectIdstringrequired

Project ID

modestringrequired

Which mode to update

secretKeystring

Stripe Secret Key (sk_test_xxx or sk_live_xxx)

webhookSecretstring

Stripe Webhook Secret (whsec_xxx)

Example Call

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

Switch between test and live Stripe mode

Input Schema

projectIdstringrequired

Project ID

modestringrequired

Mode to switch to

Example Call

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

Sync products and prices from Stripe account

Input Schema

projectIdstringrequired

Project ID

Example Call

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

List synced Stripe products

Input Schema

projectIdstringrequired

Project ID

modestring

Filter by mode (default: current mode)

Example Call

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

Remove Stripe connection for test or live mode

Input Schema

projectIdstringrequired

Project ID

modestringrequired

Which mode to disconnect

Example Call

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

Create a new product with price in Stripe

Input Schema

projectIdstringrequired

Project ID

namestringrequired

Product name

descriptionstring

Product description

amountintegerrequired

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

currencystring

Currency code (default: usd)

intervalstring

Billing interval for subscriptions

intervalCountinteger

Number of intervals between billings

Example Call

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

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

Input Schema

projectIdstringrequired

Example Call

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

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

Input Schema

projectIdstringrequired
repoOwnerstring
repoNamestring
createNewboolean
newRepoNamestring

Example Call

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

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

Input Schema

projectIdstringrequired

Example Call

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

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

Input Schema

projectIdstringrequired
allowAiCommitboolean
allowAiPullboolean
allowAiPushboolean
allowAiCreateBranchboolean

Example Call

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

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

Input Schema

projectIdstringrequired

Example Call

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

Pull latest changes from GitHub remote

Input Schema

projectIdstringrequired

Example Call

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

Push commits to GitHub remote

Input Schema

projectIdstringrequired

Example Call

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

Create a new commit with current source files

Input Schema

projectIdstringrequired
messagestringrequired

Commit message

Example Call

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

Create a new branch from current HEAD

Input Schema

projectIdstringrequired
namestringrequired

New branch name

Example Call

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

Switch to an existing branch

Input Schema

projectIdstringrequired
namestringrequired

Branch name to switch to

Example Call

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

Merge one branch into another

Input Schema

projectIdstringrequired
fromstringrequired

Source branch to merge from

tostringrequired

Target branch to merge into

Example Call

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

Get commit history

Input Schema

projectIdstringrequired
limitnumber

Maximum number of commits to return

Example Call

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

Restore project to a previous commit

Input Schema

projectIdstringrequired
shastringrequired

Commit SHA to rollback to

Example Call

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

Get current Git status

Input Schema

projectIdstringrequired

Example Call

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

Create a new GitHub repository

Input Schema

projectIdstringrequired
namestringrequired

Repository name

isPrivateboolean

Whether the repo should be private

Example Call

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

List all branches in the repository

Input Schema

projectIdstringrequired

Example Call

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

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

Input Schema

projectIdstringrequired
urlstringrequired
methodstring
headersobject
bodyany
timeoutnumber

Example Call

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

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

Input Schema

projectIdstringrequired
accessRulesobjectrequired

Access rules object with execute operation

Example Call

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

Get the current server proxy access rules for a project.

Input Schema

projectIdstringrequired

Example Call

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

List all backend functions for a project. Params: projectId (required). Returns array with id, name, description, code, accessRules, timeout, isActive.

Input Schema

projectIdstringrequired

Example Call

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

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

Input Schema

projectIdstringrequired
functionIdstringrequired

Example Call

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

Create 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

projectIdstringrequired
namestringrequired
descriptionstring
codestring
accessRulesobject
timeoutnumber

Example Call

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

Update a backend function. Only provided fields are updated. Params: projectId (required), functionId (required), name, description, code, accessRules, timeout (1000-30000), isActive (boolean).

Input Schema

projectIdstringrequired
functionIdstringrequired
namestring
descriptionstring
codestring
accessRulesobject
timeoutnumber
isActiveboolean

Example Call

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

Delete a backend function permanently. Params: projectId (required), functionId (required).

Input Schema

projectIdstringrequired
functionIdstringrequired

Example Call

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

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

Input Schema

projectIdstringrequired
functionNamestringrequired
paramsobject

Example Call

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