Kasy MCP
Ask in plain language. The assistant prepares the machine, creates the app, and turns features on without you typing in a terminal.
The Kasy MCP (kasy-mcp) is the main way to use the kit. Instead of typing kasy in a terminal, you talk to your assistant (Cursor, Claude Code, Claude Desktop…) and it calls the right tools.
Think of the MCP as a plug: AI on one side, the kasy CLI on the other. Under the hood it is the same tool (same license, same commands). Only how you talk to it changes.
Have not turned the MCP on yet? Start with Install Kasy. This page covers what it does and what each tool covers.
The idea
Today the MCP already covers the full day-to-day flow: prepare the machine, create a project, run and reset the app, add or remove a feature, update the kit, swap color/splash/icon, read the design system before building a screen, configure credentials (Apple, Facebook, iOS/Android signing, Codemagic, RevenueCat/Sentry/Mixpanel/AdMob...), publish to the stores (iOS and Android, locally or via Codemagic), configure a domain, and check/fix the project.
The product direction goes further: in a few weeks, the MCP should be able to do everything in the Kasy flow from chat, without you having to keep typing commands in a terminal. You ask; the assistant runs it.
The CLI in the terminal still exists. If you prefer typing kasy, use the installer. Both paths use the same kasy-cli under the hood.
What the MCP does (and what it does not)
| Does | Does not |
|---|---|
Run the real kasy-cli on your machine | Reimplement the CLI (zero duplicated logic) |
Diagnose and try to fix the environment (doctor + install) | Ask for sudo or wipe a disk (denylist) |
| Read the design system of the open project live | Invent a generic color/font/component |
Report a resolved issue so doctor can improve | Send name, email, license key, or a full path |
It runs locally (the installer runs kasy mcp setup for you). There is no Kasy-hosted server in the middle. The kasy-mcp package bundles kasy-cli for the assistant. Details in Install Kasy.
Tools
Each tool is a request the assistant can make. You do not call it by name: you speak in plain language and the model picks.
Prepare and fix the machine
| Tool | Under the hood | When to use |
|---|---|---|
prepare_machine | kasy doctor | "Prepare my machine for Kasy" |
run_setup_command | one shell command | The assistant installs what is missing (Homebrew, choco, apt, npm -g…) |
check_kasy_updates | npm check + running MCP session version | Before create_project: is there a new version? |
upgrade_kasy | npm install -g kasy-cli@latest kasy-mcp@latest | Installs the update (then restart the assistant app) |
Expected loop: prepare_machine → if something is missing, run_setup_command → check_kasy_updates → if needed, upgrade_kasy and restart the assistant app → prepare_machine again, until it passes. The assistant should not only diagnose and stop.
Create and manage the project
| Tool | Under the hood | When to use |
|---|---|---|
create_project | kasy new (Quick mode) | "Create a Kasy project with Firebase" |
create_project_status | (poll) | After create_project or timeout -32001: check if scaffolding finished |
configure_backend | kasy backend | Connect Firebase/Supabase after create_project with configureLater: true (or a project created with kasy new --configure-later) |
list_features | kasy features | See what exists before adding |
add_feature | kasy add <feature> | "Add drive to my project" (also works for revenuecat, ads, onboarding, sentry, kanban...) |
remove_feature | kasy remove <feature> | "Remove ads from my project" |
check_status | kasy status | Backend, features, and pending credentials |
check_project | kasy check | Push / config diagnostics (fix optional) |
configure_status | kasy configure --status | What still needs filling in (read-only) |
update_project | kasy update [feature] | "Update my project to the newest kit" |
deploy_backend | kasy deploy (background) | Firebase or Supabase deploy (can take several minutes) |
deploy_backend_status | (poll) | After deploy_backend or timeout -32001: check if deploy finished |
kanban | kasy kanban <action> | "What's left to do on this project?" / "Create a task to review checkout" |
create_project only covers the Quick (non-interactive) path. Before asking anything, the assistant should offer the choice between Quick (here, a few questions) and Advanced (step-by-step with every question, terminal-only via kasy new). It recommends Quick, but either way you can add or remove features later (kasy add/kasy remove, or add_feature/remove_feature in chat).
On Supabase/API, the assistant asks push only (no separate Google question; Google is ON by default): no push = no Firebase companion (Google in the scaffold; provider Enabled on Supabase Auth; credentials later via configure_google_login); with push = free Firebase companion project (FCM) and Google OAuth can be configured automatically in that step.
To avoid a giant numbered list in chat:
- Cursor / Claude Code: use AskQuestion, then call
create_projectwithdirectory,backend, region, and push filled in. Do not call without those fields in Cursor (MISSING_PREFS). - Claude Desktop and clients without a quiz:
create_projectwithuseElicitationForm: trueand missingdirectory/backendopens the MCP form.
Before create_project, confirm account alignment only if a Firebase project will be created (Firebase backend, or Supabase/API with push). The assistant should check with prepare_machine (kasy doctor warns if accounts differ). Different accounts usually break that path; fix with firebase login --reauth using the gcloud auth login account. Supabase/API without push does not need gcloud/Firebase.
After an update_project, if the kit overwrites a file you customized, the assistant should reconcile your change with the new code (not drop it silently).
kanban reads and edits the project's board (the same one the app's Kanban screen shows) without any new login: on Firebase it uses your own gcloud session, on Supabase it uses the linked project's service_role_key. Firebase and Supabase only, a custom API REST backend isn't supported (there's no generic admin credential to assume). See Kanban.
Run and reset the app
| Tool | Under the hood | When to use |
|---|---|---|
run_app | kasy run (background) | "Run the app" |
reload_app | dev bridge (/dev/reload or /dev/restart) | After Dart edits while kasy run --web is running (hot reload/restart) |
clear_web_storage | kasy clear-web | "Clear the browser" / test onboarding again on web |
stop_app | stops the mcp-run pid | "Stop the app" |
reset_app | kasy reset | Test onboarding/push from zero (simulator or web) |
When you ask to "run the app". The assistant should use a structured quiz (not a markdown list) for:
- Platform: iOS, Android, or web
- If web:
- Default: only return
http://localhost:5555 openBrowser=true: open in the system default browser (--open-browser)flutterChrome=true: isolated Flutter Chrome (--open)freshStorage=true: clear localStorage, sessionStorage, and IndexedDB on open (--fresh, includes Firebase Auth session). Combine withopenBrowserand device preview on an iOS/Android/iPad tab to test onboarding as a first visit
- Default: only return
If the app is already running: clear_web_storage or reset_app with platform=web.
Do not use run_kasy_command for kasy run. That tool waits for the process to exit and would kill the session.
Branding (Personalization)
| Tool | Under the hood | When to use |
|---|---|---|
set_primary_color | kasy color | "Change the primary color to #0553B1" |
set_icon | kasy icon --image | "Change the app icon" |
set_splash | kasy splash --light/--dark | "Change the splash logos" |
set_favicon | kasy favicon --image | "Change the favicon" |
Credentials and integrations
| Tool | Under the hood | When to use |
|---|---|---|
configure_apple_web | kasy apple-web | Turns on web Sign in with Apple (Firebase or Supabase) |
configure_facebook_login | kasy facebook | Configures Facebook Login (native + backend) |
configure_google_login | kasy google | Google Sign-In (Supabase/API). After create without push, or when the user asks |
set_notification_texts | kasy notifications text | Changes the demo notification and reminder copy |
configure_ios_signing | kasy ios configure | Installs the App Store Connect API key (Key ID + Issuer ID + .p8) |
configure_android_signing | kasy android configure | Writes android/key.properties from an existing keystore |
configure_codemagic | kasy codemagic configure | Links the Codemagic token and the project's app ID |
configure_project_keys | kasy configure --set | Fills in credentials (RevenueCat, Sentry, Mixpanel, AdMob, Stripe, App Store ID…), one or many at once |
configure_license | kasy license <key> | Saves and validates your Kasy license key, without this tool, create_project/add_feature/etc. fail asking for it |
These nine used to be stuck in the terminal because MCP closes stdin (no answering prompts one by one). What made it work: the assistant collects values via structured quiz (AskQuestion) or MCP form first, then calls the tool once with everything. License keys and OAuth secrets are plain text, not multiple-choice quizzes. None of them generate a new credential (keystore, API key, Meta/Apple/Codemagic app): that stays manual, done once in the respective consoles. configure_license is the exception: the key itself arrives by email at purchase time from kasy.dev, the tool doesn't generate it.
Publish (stores and web)
| Tool | Under the hood | When to use |
|---|---|---|
release_ios | kasy ios release | "Publish iOS" (Mac, configure + Xcode already done) |
build_ios | kasy ios build | IPA without upload |
clean_ios | kasy ios clean | Clean iOS build |
release_android | kasy android release | Signed AAB locally + opens Play Console |
build_aab | kasy android build-aab | AAB only, no console |
build_apk_signed | kasy android build-apk-signed | Signed release APK, sideloading, alternative stores (Amazon, Samsung, F-Droid) |
build_apk | kasy android build-apk | Unsigned debug APK, quick test on a phone |
codemagic_release | kasy codemagic release | "Publish with Codemagic" (iOS and/or Android) |
codemagic_status | kasy codemagic status <id> | Follow the cloud build |
manage_domain | kasy domain list|add|remove | Auth authorized domains (web) |
set_release_version | kasy release-version | Live store version / force update |
Fix the project (Reference)
| Tool | Under the hood | When to use |
|---|---|---|
fix_project | kasy fix pub-get|pods|clean | "Run pub get" / "reinstall pods" / "clean" |
Design system and screens
| Tool | Under the hood | When to use |
|---|---|---|
list_components | reads lib/components/ live | Before creating or editing any screen |
The list comes from the current project, not a cache. After a rebrand or kasy update, the set can change. The assistant should not invent raw Material (Scaffold, AlertDialog, TextField…) when a Kasy equivalent exists.
Validate in the browser (Browser QA)
| Tool | Under the hood | When to use |
|---|---|---|
browser_qa_guide | checks the project's semantics bridge + returns the validation checklist | After implementing or changing a screen, before calling it done |
Flutter Web paints to a canvas, without the semantics tree turned on, a browser agent (Cursor, Claude, Playwright) can't see a button or a field, only pixels. The kit already enables this in debug/profile (see the Web Guide); browser_qa_guide confirms the bridge in lib/main.dart and returns docs/agent-browser-qa.md. Full AI file map: AI guidance.
Important: the MCP is a headless process, it doesn't open a browser itself. The tool only returns the checklist; the agent's own browser (Claude Code's Browser pane, Cursor's browser, etc.) is what actually runs it.
Any other CLI command
| Tool | Under the hood | When to use |
|---|---|---|
list_commands | kasy --help / kasy <cmd> --help | Discover flags before running |
run_kasy_command | kasy <command> <args> | prepare and other rare flags (never license or upgrade) |
read_kasy_docs | fetches kasy.dev/docs live | Read the official docs for any page before guessing a step |
Prefer the dedicated tool when it exists. run_kasy_command is the Swiss army knife: it only runs the kasy binary, never arbitrary shell. Never use it for kasy run.
read_kasy_docs fetches the published docs (not training data, which can be stale) as clean markdown, in pt/en/es. Use it to confirm a rare flag, read a feature's full setup guide (e.g. funcionalidades/stripe) before configuring it, or check referencia/troubleshooting when something fails in an unfamiliar way.
Telemetry (the assistant calls it, not you)
| Tool | Under the hood | When to use |
|---|---|---|
report_issue | POST to a Kasy edge function | After actually trying to fix something |
Fixing is required; reporting alone does not fix anything for you. The normal path is resolved: true with the exact command that worked. That becomes an improvement in kasy doctor. No PII: no name, email, key, or full path.
Resources
Besides tools, the MCP exposes two resources the assistant reads on its own:
| URI | What it is |
|---|---|
kasy://design-system-guide | This project's DESIGN_SYSTEM.md, AGENTS.md, and (if present) docs/figma-workflow.md |
kasy://architecture | Feature-first convention: api → repository → provider → ui |
No hardcoded color or font in the MCP package. After a rebrand, the source of truth stays the project on disk.
Typical asks
With the MCP on, you can say things like:
Prepare my machine for KasyCreate a project called my-app with Firebase, quick modeAdd revenuecat to my projectPublish iOSPublish Android on Codemagic and check the statusAdd app.mydomain.com to the authorized domainsThe assistant picks the tool (prepare_machine, create_project, run_app, release_ios, codemagic_release…). You do not need to remember the name.
Known limitation (v1)
Tools and resources without an explicit directory resolve relative to the MCP process working directory.
- Cursor / Claude Code: reliable (cwd = the open project).
- Claude Desktop: no "open project" concept. After
create_project, the assistant should pass an explicitdirectorytolist_components,check_status, and so on.
Kasy MCP vs third-party MCPs
These are different things:
| MCP | What for |
|---|---|
Kasy (kasy-mcp) | Create/manage the Flutter app the kit generates |
| RevenueCat | Build the catalog (products, entitlements, offerings) in their dashboard |
| Stripe | Create the product and prices in the Stripe account |
You can use all three together: the Kasy MCP turns the feature on in code; Stripe/RevenueCat build the catalog in their dashboard.
Next step
- Install the MCP (if you have not yet)
- Prepare your machine
- Create your first app
Last updated on 08/23/2026

