manage_app
InactiveTool of io.github.butterbase-ai/mcp
Manage app lifecycle: list, delete, pause/resume, get config, update access mode, secure, update CORS, clone, find templates, and migrate regions. Actions: - "list": List all backend apps with basic metadata (no app_id needed) - "delete": Delete an app and ALL its resources permanently (IRREVERSIBLE) - "pause": Pause or resume all data-plane traffic for an app (kill-switch) - "get_config": Get detailed configuration for an app including CORS, storage settings, and metadata - "set_visibility": Toggle the app's template visibility between "public" and "private" - "update_access_mode": Toggle an app's access mode between "public" and "authenticated" - "secure": Lock down an app: sets access_mode to "authenticated" and optionally enables RLS user isolation - "update_cors": Update CORS allowed origins to control which frontend domains can access your API - "preview_clone_env_vars": Preview which env vars a source app's functions need before cloning. Returns { functions: [{ fn_name, keys, conventions }] }. Call this before clone to decide what to supply via env_var_values or auto_mint_api_key. - "clone": Create a clone of a public app. Returns { job_id, pending_env_vars }. The dest app is a fresh empty-DB app owned by the caller. Source must be public and have a repo snapshot. Supply env_var_values and/or auto_mint_api_key to pre-fill function env vars; pending_env_vars lists keys still needing values. - "get_clone_job": Look up the status of a previously-started clone job. Returns { status, dest_app_id?, error_message? }. - "find_templates": Search public templates by name, region, sort order, and pagination. Returns paginated list of public app templates. - "set_clone_webhook": Set or clear a webhook that fires when someone clones this app. Pass webhook_url + webhook_secret to configure, or clear_webhook: true to remove. - "link_substrate": Link this app to the caller's substrate. Once linked, the app's deployed functions receive ctx.substrate and its actions/entities flow into the caller's substrate ledger. - "unlink_substrate": Unlink this app from substrate. ctx.substrate stops being injected; in-flight actions are unaffected. - "set_substrate_autopropagate": Toggle per-event auto-mirroring of app activity into the linked owner's substrate. Currently supports 'users' (signup / email-verified / user-deleted). Requires the app to already be linked via 'link_substrate'. - "move": Migrate an app to a different region. Returns migration_id + initial status "queued". - "move_status": Get the current status of an in-progress migration. - "teardown_source_replica": After a completed move, decommission the retained source-region replica. Parameters by action: list: { action: "list" } delete: { action: "delete", app_id } pause: { action: "pause", app_id, paused, reason? } get_config: { action: "get_config", app_id } set_visibility: { action: "set_visibility", app_id, visibility, listed? } update_access_mode: { action: "update_access_mode", app_id, access_mode } secure: { action: "secure", app_id, tables? } update_cors: { action: "update_cors", app_id, allowed_origins } preview_clone_env_vars: { action: "preview_clone_env_vars", source_app_id } clone: { action: "clone", source_app_id, name?, region?, env_var_values?, auto_mint_api_key? } get_clone_job: { action: "get_clone_job", job_id } find_templates: { action: "find_templates", q?, region?, sort?, limit?, offset? } set_clone_webhook: { action: "set_clone_webhook", app_id, webhook_url, webhook_secret } or { action: "set_clone_webhook", app_id, clear_webhook: true } link_substrate: { action: "link_substrate", app_id } unlink_substrate: { action: "unlink_substrate", app_id } set_substrate_autopropagate: { action: "set_substrate_autopropagate", app_id, users? } move: { action: "move", app_id, dest_region } move_status: { action: "move_status", app_id, migration_id } teardown_source_replica: { action: "teardown_source_replica", migration_id } Common errors: - RESOURCE_NOT_FOUND: App doesn't exist, verify app_id with action: "list" - AUTH_INVALID_API_KEY: Check your API key is set correctly
Parameters schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"action"
],
"properties": {
"q": {
"type": "string",
"description": "Optional for \"find_templates\". Search query to filter templates by name."
},
"name": {
"type": "string",
"description": "Optional for \"clone\". A name for the new app; defaults to `Clone of <source_app_id>`."
},
"sort": {
"enum": [
"recent",
"popular"
],
"type": "string",
"description": "Optional for \"find_templates\". Sort order: \"recent\" or \"popular\". Defaults to \"recent\"."
},
"limit": {
"type": "integer",
"description": "Optional for \"find_templates\". Max results per page (default 20)."
},
"users": {
"type": "boolean",
"description": "Optional for \"set_substrate_autopropagate\". true to mirror user signup / email-verified / user-deleted events into the substrate; false to disable. At least one toggle key must be provided."
},
"action": {
"enum": [
"list",
"delete",
"pause",
"get_config",
"update_access_mode",
"secure",
"update_cors",
"set_visibility",
"preview_clone_env_vars",
"clone",
"get_clone_job",
"find_templates",
"set_clone_webhook",
"link_substrate",
"unlink_substrate",
"set_substrate_autopropagate",
"move",
"move_status",
"teardown_source_replica"
],
"type": "string",
"description": "The action to perform"
},
"app_id": {
"type": "string",
"description": "The app ID (e.g. app_abc123def456). Required for all actions except \"list\"."
},
"job_id": {
"type": "string",
"description": "Required for \"get_clone_job\"."
},
"listed": {
"type": "boolean",
"description": "Optional for \"set_visibility\". When false and visibility=public, app is clonable by direct ID but not in /v1/templates."
},
"offset": {
"type": "integer",
"description": "Optional for \"find_templates\". Pagination offset (default 0)."
},
"paused": {
"type": "boolean",
"description": "Required for \"pause\". true to pause; false to resume."
},
"reason": {
"type": "string",
"maxLength": 500,
"description": "Optional for \"pause\". Human-readable reason; surfaced in 503 responses while paused."
},
"region": {
"type": "string",
"description": "Optional for \"clone\". The region for the new app; defaults to the source app's region."
},
"tables": {
"type": "array",
"items": {
"type": "object",
"required": [
"table_name",
"user_column"
],
"properties": {
"table_name": {
"type": "string",
"description": "Table name to enable user isolation on"
},
"user_column": {
"type": "string",
"description": "Column storing the user ID (e.g. \"user_id\", \"author_id\")"
},
"public_read_column": {
"type": "string",
"description": "Optional boolean column (e.g. \"is_published\"). Creates SELECT policies so all users can read rows where this column is true."
}
},
"additionalProperties": false
},
"description": "Optional for \"secure\". Tables to enable RLS user isolation on. Omit to only toggle access_mode."
},
"visibility": {
"enum": [
"private",
"public"
],
"type": "string",
"description": "Required for \"set_visibility\". Template visibility."
},
"access_mode": {
"enum": [
"public",
"authenticated"
],
"type": "string",
"description": "Required for \"update_access_mode\". \"public\" allows anonymous access, \"authenticated\" requires end-user JWT or API key."
},
"dest_region": {
"type": "string",
"description": "Required for \"move\". Target region slug (e.g. \"us-west-2\")."
},
"webhook_url": {
"type": "string",
"format": "uri",
"description": "Required for \"set_clone_webhook\" (unless clear_webhook is true). HTTPS URL to receive clone event POST requests."
},
"migration_id": {
"type": "string",
"description": "Required for \"move_status\" and \"teardown_source_replica\". The migration ID returned by action: \"move\"."
},
"clear_webhook": {
"type": "boolean",
"description": "Optional for \"set_clone_webhook\". Pass true to remove the clone webhook instead of setting one."
},
"source_app_id": {
"type": "string",
"description": "Required for \"clone\" and \"preview_clone_env_vars\". The id of the public app to clone."
},
"env_var_values": {
"type": "object",
"description": "Optional for \"clone\". Per-function env var values: { fn_name: { KEY: \"value\" } }. Use preview_clone_env_vars to see what keys the source needs.",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"webhook_secret": {
"type": "string",
"maxLength": 256,
"minLength": 16,
"description": "Required for \"set_clone_webhook\" (unless clear_webhook is true). Secret used to sign the HMAC-SHA256 webhook payload (16–256 characters)."
},
"allowed_origins": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"minItems": 1,
"description": "Required for \"update_cors\". Array of allowed origin URLs (e.g. [\"http://localhost:3000\", \"https://myapp.com\"])"
},
"auto_mint_api_key": {
"type": "array",
"items": {
"type": "object",
"required": [
"fn_name",
"key"
],
"properties": {
"key": {
"type": "string"
},
"fn_name": {
"type": "string"
}
},
"additionalProperties": false
},
"description": "Optional for \"clone\". Keys to auto-mint a scoped bb_sk_* into, typically [{ fn_name: \"agent-chat\", key: \"BUTTERBASE_API_KEY\" }]."
}
},
"additionalProperties": false
}No endpoints wrapped at confidence ≥ 0.50.
Parent server
io.github.butterbase-ai/mcp
https://github.com/butterbase-ai/butterbase-oss
1/7 registries