About otakit
otakit is an open-source over-the-air update framework for Capacitor apps that delivers web bundle updates without app store review. It includes a console, a CLI and a Capacitor plugin, and can run as a managed service or on self-hosted infrastructure. It is aimed at mobile developers who need to ship Capacitor updates quickly.
Key features
- 01Over-the-air updates for Capacitor apps
- 02CLI upload and release publishing
- 03Pre-release check for safe over-the-air delivery
- 04Automatic rollback when confirmation times out
- 05Self-hostable console and storage stack
- 06MCP server and Agent Skill support
Use cases
- 01Shipping a web-layer fix to a Capacitor app without store review
- 02Publishing an update to a staging channel first
- 03Letting Claude Code or Codex prepare a release that waits for approval
MCP support
The project provides an MCP server and an OtaKit Agent Skill that let Claude Code, Codex or VS Code read a Capacitor project, upload builds, and wait for user approval before release.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://console.otakit.app/mcpclaude mcp add --transport http otakit-otakit https://console.otakit.app/mcp{"mcpServers":{"otakit-otakit":{"type":"http","url":"https://console.otakit.app/mcp"}}}Open in Cursor{"servers":{"otakit-otakit":{"type":"http","url":"https://console.otakit.app/mcp"}}}Open in VS Code{"mcpServers":{"otakit-otakit":{"type":"http","url":"https://console.otakit.app/mcp"}}}{"mcpServers":{"otakit-otakit":{"serverUrl":"https://console.otakit.app/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEOtaKit
Fully open-source, self-hostable over-the-air update framework for Capacitor apps. Release updates directly to your Capacitor app without app store reviews.
Try it for free: OtaKit.app
Self-hosting
OtaKit is hosted-first — the managed service at otakit.app runs everything for you — but the entire platform is in this repo and can run on your own infrastructure. The minimal stack is the console (a standard Next.js app), Postgres, and an S3-compatible bucket behind a CDN.
Full step-by-step guide: otakit.app/docs/self-host
How it works
- Create an app in the dashboard.
- Copy its
appIdintocapacitor.config.*. - Build the app's web assets.
- Run
otakit upload --releaseto upload the bundle and publish a release. - The server writes the bundle and manifest to object storage behind the CDN.
- On the next app launch or resume, the plugin fetches the manifest from the CDN, compares it to the current bundle, and downloads the new version if available.
- If
notifyAppReady()is called within the timeout, the new bundle is confirmed. Otherwise the plugin rolls back to the previous bundle automatically.
MCP & Agent Skills
Ask Claude Code, Codex, or VS Code to ship an update and it reads your Capacitor project, checks whether the change is safe to send over the air, uploads the build, and stops for your approval before anything reaches a device.
One command from your project directory:
npx -y @otakit/cli@latest connect
It detects your client, signs you in if needed, and prints the console, organization, project, and
app it resolved — plus the exact file it will write — before writing anything. --dry-run shows
the plan and writes nothing.
Claude Code has a plugin that ships the server and the OtaKit Agent Skill together:
npx -y @otakit/cli@latest login
claude plugin marketplace add OtaKit/otakit
claude plugin install otakit@otakit
See the MCP and Agent Skills guide for Codex, Claude Code, remote OAuth, permissions, workflows, and self-hosting.
Core concepts
- App — the Capacitor app identified by its
appId - Bundle — one uploaded web build zip with a version, hash, and size
- Release — a promotion of a bundle to a channel, which publishes a manifest to the CDN
- Channel — an optional release track such as
staging - Runtime version — an optional native compatibility lane configured in the plugin
Packages
packages/capacitor-plugin— the runtime that lives inside the mobile apppackages/cli— CLI for uploading bundles and creating releasespackages/mcp-core— shared MCP contracts, tool catalog, and server registrationpackages/site— public site, docs, contact, legal pagespackages/console— dashboard, API, auth, billing, and Prisma schemapackages/ingest— Cloudflare Worker for device event ingestiontinybird/— Tinybird datasources and pipes for event analytics
packages/
capacitor-plugin/ Capacitor OTA plugin
cli/ Upload + release CLI
mcp-core/ Shared MCP contracts and tool catalog
ingest/ Cloudflare Worker event ingest service
site/ Next.js public site + docs
console/ Next.js dashboard + API + auth + billing
tinybird/ Tinybird event analytics project
examples/
demo-app/ Demo Capacitor app wired to the local plugin
Package docs
packages/capacitor-plugin/README.mdpackages/cli/README.mdpackages/ingest/README.mdpackages/site/README.mdpackages/console/README.mdtinybird/README.md
Local development
- Node.js 20.9+, pnpm 9+
- The console app (
packages/console) requires Postgres and R2-compatible storage. Seepackages/console/.env.example. - Device event analytics optionally require the ingest service (
packages/ingest) and a Tinybird workspace. - See each package README for setup details.
pnpm install
pnpm dev # starts the console app in dev mode
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.