Skip to main content
Percher is still being built and account creation is paused — get notified when it opens.

MCP tools for AI assistants

All 53 MCP tools

Ask your agent
Connect Percher to my AI assistant.Read the guide at percher.app/docs/mcp-tools
Show me what my assistant can do with Percher.Read the guide at percher.app/docs/mcp-tools
How it works, with exact details

Percher includes an MCP (Model Context Protocol) server so AI assistants like Claude Code, Cursor, and Windsurf can deploy and manage your apps directly.

Setup

// Claude Code: ~/.claude/mcp.json
// Cursor: .cursor/mcp.json
{
  "mcpServers": {
    "percher": {
      "command": "npx",
      "args": ["-y", "@percher/mcp"]
    }
  }
}

All tools (53)

Families shown as name { action } are a single tool with an action parameter.

percher_publishPublish (primary tool)Any deploy intent. Handles login, config, build, deploy, and error diagnosis in one call. Use this. MCP defaults waitForLive=false so it returns within seconds with a queued deployId.
percher_wait_for_deployShort-poll a queued deployArgs: app, deployId, timeoutSeconds (default 30, max 720). Resumes the async publish flow. Returns live/failed/replaced/still_running with recovery.nextAction pre-filled.
percher_wait_for_authShort-poll a pending loginArgs: deviceCode, publishArgs. Used when percher_publish returns auth_pending — resumes packaging + deploy after the browser login finishes.
percher_initGenerate percher.tomlDetects framework, runtime, port. Rarely needed — percher_publish auto-generates the config.
percher_appstore_kitApp-store starter filesWrites a PWA manifest + service worker, capacitor.config.ts, and assetlinks.json / apple-app-site-association templates into the project for taking the app to the App Store / Play Store. Starter files only — skips existing files unless force.
percher_loginAuthenticateReturns a browser login URL, or accepts a token directly. Rarely needed — percher_publish handles auth.
percher_redeployRedeploy a specific deployArgs: app, deployId. Replays an existing deploy without re-uploading source.
percher_reproduceReproduce a deploy locallyArgs: app, deployId. Downloads the source bundle and re-runs the build for debugging.
percher_rollbackRoll back to a versionArgs: app, commitSha. Redeploys exact code from that version.
percher_versionsDeployment historyArgs: app. Returns commit SHAs and timestamps.
percher_analyticsVisitor analyticsArgs: app, days (1-90, default 7). Unique visitors, sessions, bounce rate, top pages, traffic sources, entry pages, countries, device/browser/OS. Cookie-free, measured server-side from access logs.
percher_diffDiff two deploy versionsArgs: app, base, head (default: live vs previous reached-live). Returns changed files; owner-only inline patch.
percher_cache_resetReset build cacheArgs: app. Bumps the cache generation so the next deploy does a one-time cold dependency install.
percher_doctorRecovery hubHealth checks (auth, API, container, route, PocketBase) plus failure diagnosis and 'what next?'. Returns recovery.nextAction. Call this whenever another tool's recovery says run_doctor, and for crash analysis (mode='runtime').
percher_unsuspendResume a suspended appLifts auto-suspension after the failure-loop cooldown. Fix the cause first.
percher_deploysList recent deploysArgs: app. Returns id, status, createdAt, errorMessage.
percher_deploys_inspectInspect a specific deployArgs: app, id (or latestFailed). Returns full status + buildLog. Use after a failed publish.
percher_logsView app logsArgs: app (name or id), lines (default 50), follow (boolean). Runtime logs, not build logs.
percher_app_insightsCost + reliability suggestionsReturns idle / memory-pressure / overprovisioned / deploy-regression. Each carries an actionHint the AI follows up with.
percher_app_topologyDependency snapshotSingle-app node graph (Caddy route, custom domains, container, PocketBase, volume, KV, webhooks) plus the platform-managed band (deploy history, metrics, security scan, backups) for AI introspection.
percher_app_resourcesCPU + RAM time-seriesPer-app metrics for a requested window. Timestamps zipped with cpuPct / memory arrays.
percher_capabilitiesDiscover instance capabilitiesAvailable runtimes, feature flags (anonymous deploys, preview branch, inspect links), plan limits + current usage. Call at session start instead of guessing from errors.
percher_inspect_linkPublic read-only inspect linkCreate (default) or revoke a sanitized shareable status link for an app — live status + recent deploys, no login, no logs/env.
percher_whoamiCurrent user infoShows email and token status.
percher_openGet app URLReturns the public URL for the app (browser open is a no-op in MCP).
percher_env_setSet env variablesArgs: app, vars (object of key-value pairs).
percher_env_unsetRemove env variableArgs: app, key.
percher_env_listList env variablesArgs: app. Values are masked.
percher_dataDatabase statusRead-only view of PocketBase collections, stats, and admin link.
percher_data_exportExport PocketBase dataArgs: app. Downloads data.db + auxiliary.db + storage/ as a .tar.gz.
percher_exportExport an app bundleArgs: app. Source + percher.toml + env keys + custom domains + deploy history (+ PocketBase data) as a .tar.gz.
percher_reset_superuserReset PocketBase adminGenerates a new superuser password and injects POCKETBASE_ADMIN_* env vars.
percher_backupsList backupsArgs: app (optional). Returns backup_id, timestamp, size, sha256, components — no GPG decrypt.
percher_restoreRestore from a backupArgs: app, source ('latest' | 'YYYY-MM-DD' | id), components, dryRun. Per-app + per-component.
percher_domain { action }Custom domainsaction: add | verify | list | remove. Args: app, domain. add returns DNS records; verify activates; list shows status; remove detaches.
percher_github { action }GitHub auto-deployaction: connect | setup_webhook. Args: app, repoUrl, branch, autoPreviews. connect clones + deploys + returns webhook setup; setup_webhook rotates the secret. Public repos only.
percher_forgejo { action }Forgejo / Gitea auto-deployaction: connect | setup_webhook. Same flow as percher_github, for self-hosted Forgejo or Gitea.
percher_set_preview_branchPin a preview branchArgs: branch, app. Auto-deploys a branch to a stable {app}-preview.percher.run; pass branch: null to clear.
percher_webhook { action }Account-level webhookaction: add | list | remove. Args: url. One URL per account; signed JSON for deploy.failed / deploy.succeeded / app.crashed / app.unhealthy / app.recovered / domain.expiring. add returns signingSecret once.
percher_hook { action }Deploy hooks (trigger URLs)action: create | list | revoke. Args: app, name, id. create returns the secret hook URL ONCE — POSTing it rebuilds the app (CMS publish buttons, cron, CI). 6/min per hook. Local MCP only.
percher_share { action }Manage collaboratorsOwner-only. action: list | invite | set_role | revoke. Args: app, email, role, shareId. Email invites; viewer = read-only, admin = deploy + config.
percher_invites { action }My incoming invitesaction: list | accept | decline. Args: shareId. Account-wide; accept is idempotent (alreadyAccepted).
percher_transfer { action }Ownership transfer (sender)Owner-only. action: initiate | cancel | list (defaults to initiate). Args: app, email, transferId. The recipient must explicitly accept.
percher_transfers { action }Incoming transfers (recipient)action: incoming | accept | decline. Args: transferId. Atomic ownership flip after plan-limit, terms, account-active, and app-state checks.
percher_importImport from Vercel/NetlifyParses vercel.json / netlify.toml and writes a percher.toml.
percher_supabase { action }Supabase migration helperaction: inspect | migrate_schema | rewrite_client | status. inspect reads the schema (read-only); migrate_schema writes a PocketBase schema + pb_migrate.js data-import script to disk; rewrite_client converts Supabase SDK calls to PocketBase, scaffolds a pb client + imports, and keeps both SDKs while the app is hybrid (apply=true writes in place, originals backed up); status is a local scoreboard of what's still on Supabase vs PocketBase (no token). Args: projectRef, token, outputDir, rootDir, apply, scaffoldClient, build.
percher_create_from_templateScaffold new app30 starters incl. node, python (FastAPI), static, nextjs, sveltekit, astro, remix, nuxt, vite-react, vite-vue, hono, express, fastify, flask, django, eleventy, hugo, and more.
percher_claim_appClaim an anonymous appArgs: app, claimToken. Claims an account-less deploy into your account, lifting the anonymous restrictions and expiry.
percher_renameRename appChanges subdomain. Once per 30 days; old name reserved 60 days.
percher_delete_appPermanently delete appRequires confirm: true. Removes container, DB, domains, env, history.
percher_account_deletion_previewPreview account deletionPure read. Returns canDelete, ownedAppCount, and blockers.
percher_account_deleteDelete account (GDPR)Fail-closed: rejected if the account has any blockers (owned apps, accepted collaborators, …).
percher_billing { action }Billing (Polar)action: upgrade | portal. Args: plan (starter/maker/max). upgrade returns a checkout URL; portal manages an existing subscription. User confirms in browser.