floot
What this MCP does
Creates, edits, previews, databases, and publishes full-stack web and mobile applications with hosted resources and deployment workflows.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'packages'], 'properties': {'packages': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'patch'], 'properties': {'patch': {'type': 'string'}, 'projectId': {'type': 'string'}, 'expected_version': {'type': 'integer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'jobId'], 'properties': {'jobId': {'type': 'string'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['phase', 'jobId', 'projectId'], 'properties': {'jobId': {'type': 'string'}, 'phase': {'enum': ['presign', 'complete'], 'type': 'string'}, 'file_name': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9._-]{0,80}\\.[a-zA-Z0-9]{1,10}$'}, 'projectId': {'type': 'string'}, 'size_bytes': {'type': 'integer', 'minimum': 1}, 'content_type': {'type': 'string', 'maxLength': 100, 'minLength': 3}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'copies'], 'properties': {'copies': {'type': 'array', 'items': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'minItems': 1}, 'projectId': {'type': 'string'}, 'expected_version': {'type': 'integer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'title'], 'properties': {'title': {'type': 'string', 'minLength': 1}, 'projectId': {'type': 'string'}, 'description': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'initial_prompt'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'initial_prompt': {'type': 'string', 'maxLength': 16000, 'minLength': 1, 'description': "The user's original request that started this project, verbatim."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'path'], 'properties': {'path': {'type': 'string'}, 'projectId': {'type': 'string'}, 'expected_version': {'type': 'integer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'path'], 'properties': {'path': {'type': 'string'}, 'new_str': {'type': 'string'}, 'old_str': {'type': 'string'}, 'projectId': {'type': 'string'}, 'new_string': {'type': 'string'}, 'old_string': {'type': 'string'}, 'replace_all': {'type': 'boolean'}, 'expected_version': {'type': 'integer'}}, 'additionalProperties': True}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'query'], 'properties': {'query': {'type': 'string'}, 'database': {'type': 'string'}, 'projectId': {'type': 'string'}, 'no_transaction': {'type': 'boolean', 'description': 'Run the statement without a wrapping transaction — required for VACUUM, CREATE INDEX CONCURRENTLY, and other statements Postgres rejects inside a transaction block.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'images'], 'properties': {'images': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'prompt'], 'properties': {'name': {'type': 'string'}, 'size': {'enum': ['square', 'landscape', 'portrait', 'wide', 'tall'], 'type': 'string'}, 'prompt': {'type': 'string'}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'maxItems': 4, 'minItems': 1}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'topic': {'type': 'string'}, 'topics': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'topic': {'type': 'string'}, 'topics': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['jobId'], 'properties': {'jobId': {'type': 'string'}, 'wait_seconds': {'type': 'integer', 'minimum': 0}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1}, 'source': {'enum': ['server', 'browser'], 'type': 'string'}, 'projectId': {'type': 'string'}, 'log_reference_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'name_filter': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'query': {'type': 'string'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'targetType'], 'properties': {'name': {'type': 'string', 'description': 'The item name without folder prefix or extension, exactly as list_files shows it. For targetType "component" a component — e.g. "HeroSection". For targetType "page-examples" a page — e.g. "dashboard", "_index", "user.$id".'}, 'path': {'type': 'string', 'description': 'For targetType "page": the URL path to navigate to, starting with "/" — query and hash allowed, e.g. "/user/123?tab=settings#top".'}, 'projectId': {'type': 'string'}, 'targetType': {'enum': ['page', 'component', 'page-examples'], 'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'resource'], 'properties': {'resource': {'enum': ['database', 'auth', 'oauth-login', 'microsoft-login', 'google-integration', 'microsoft-integration', 'push-notifications', 'self-edit', 'payments'], 'type': 'string'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'domain': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'floot_subdomain only: subdomain label (lowercase, digits, hyphens, max 40). Omit to show the user the publish form instead; on a published app a different subdomain is refused (unpublish_app first, confirming with the user). Ignored for custom_domain — the wizard collects the domain.'}, 'mobile': {'type': 'boolean', 'description': "Set true whenever the request mentions iOS, Android, TestFlight, App Store, Google Play, Play Store, a native or mobile app, or a phone build — they all mean a mobile build. No store account connected → returns a Connect card (nothing published). Connected → publishes the web app with the store builds attached; the job completes when the web build is live. Omitted on a live app follows the project's saved setting: on plans with unlimited app builds that setting decides (mobile switched off stays web-only); on metered plans omitted always means web-only, and true spends one of a small monthly allowance (the remaining count comes back in the result) — read get_publish_status for the plan and allowance first. Passing true or false also updates the saved setting; omitting leaves it alone."}, 'projectId': {'type': 'string'}, 'add_another': {'type': 'boolean', 'description': 'custom_domain only: the project ALREADY has a custom domain and the user has explicitly asked for an ADDITIONAL one. Without it, a custom_domain call on a project that already has domains returns those domains instead of opening the wizard — so a user whose domain is already connected is told so rather than sent to add it again.'}, 'domain_type': {'enum': ['floot_subdomain', 'custom_domain'], 'type': 'string', 'description': "Omit for the floot subdomain (shows the publish form in the editor when domain is omitted). 'custom_domain' for domain setup — a paid-plan feature (get_publish_status reports `paid`); it fails for free accounts."}, 'include_made_with_floot': {'type': 'boolean', 'description': "false removes the 'Made with Floot' badge (paid plans only — fails for free accounts). Omit to keep the current setting."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'database': {'type': 'string'}, 'projectId': {'type': 'string'}, 'helper_name': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'query'], 'properties': {'query': {'type': 'string'}, 'database': {'type': 'string'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'path'], 'properties': {'path': {'type': 'string'}, 'limit': {'type': 'integer', 'maximum': 5000, 'minimum': 1}, 'offset': {'type': 'integer', 'minimum': 1}, 'projectId': {'type': 'string'}, 'older_than': {'type': 'string', 'description': 'Omit (or leave empty) to read the current file. Set it only to read the file as it was BEFORE an earlier change. Pass "current" for the version just before the latest change to it, then the cursor each result gives you to step one change further back — until you find a good version, then write it back with write_file (or merge by hand). Not a version number: each step is one recorded change to the file. Type errors and references are skipped for past versions.'}, 'diagnostics': {'enum': ['auto', 'off', 'wait'], 'type': 'string'}, 'include_references': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'paths'], 'properties': {'limit': {'type': 'integer', 'maximum': 5000, 'minimum': 1}, 'paths': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 20, 'minItems': 1}, 'projectId': {'type': 'string'}, 'older_than': {'type': 'string', 'description': 'Omit (or leave empty) to read the current file. Set it only to read the file as it was BEFORE an earlier change. Pass "current" for the version just before the latest change to it, then the cursor each result gives you to step one change further back — until you find a good version, then write it back with write_file (or merge by hand). Not a version number: each step is one recorded change to the file. Type errors and references are skipped for past versions.'}, 'diagnostics': {'enum': ['auto', 'off', 'wait'], 'type': 'string'}, 'include_references': {'type': 'boolean'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'packages'], 'properties': {'packages': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'renames'], 'properties': {'renames': {'type': 'array', 'items': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'minItems': 1}, 'projectId': {'type': 'string'}, 'expected_version': {'type': 'integer'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'type'], 'properties': {'name': {'type': 'string', 'maxLength': 60, 'description': "Display name for GENERIC requests, e.g. 'Stripe'."}, 'type': {'enum': ['OPENAI', 'ANTHROPIC', 'POSTGRES', 'GENERIC'], 'type': 'string'}, 'projectId': {'type': 'string'}, 'instructions': {'type': 'string', 'maxLength': 1000, 'description': 'Why the key is needed / where the user can find it — shown to the user in the dialog.'}, 'secret_env_vars': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z][A-Z0-9_]*$'}, 'maxItems': 5, 'description': 'REQUIRED for GENERIC (the call is refused without it): the env var name(s) the secret(s) should be exposed as — e.g. ["STRIPE_SECRET_KEY"]. Name what you will actually reference as process.env.<NAME> in code; it is the identity of the request, what account-credential reuse matches on, and what the value is stored under, so there is no usable default. Every var listed here is a REQUIRED field in the connect dialog — the user cannot submit while one is blank, so only list vars the user can produce right now; anything they\'d fill in later belongs in optional_env_vars instead.'}, 'optional_env_vars': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[A-Z][A-Z0-9_]*$'}, 'maxItems': 5, 'description': 'GENERIC only: env vars the user may leave blank at connect time and fill in later — e.g. a webhook signing secret that only exists after the webhook endpoint is created. Rendered as optional fields; names here need not repeat secret_env_vars (a name in both stays required). To collect a skipped value later, call request_external_resource again — the connected resource opens in an update dialog.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}, 'description': {'type': 'string', 'maxLength': 200, 'description': 'Shown in the card — what you\'re asking for, e.g. "the logo image you attached".'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'code'], 'properties': {'code': {'type': 'string', 'description': 'A TypeScript module that exports a default async function returning a string; that string is the tool result. Runs at the project root, so import other files by relative path. No top-level `return` (it\'s a module, not a function body) and no React hooks (not a component). Example:\n\nexport default async function () {\n const el = document.querySelector("main");\n return JSON.stringify({ width: el?.clientWidth ?? null });\n}'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'code'], 'properties': {'code': {'type': 'string'}, 'projectId': {'type': 'string'}, 'timeout_seconds': {'type': 'integer', 'maximum': 120, 'minimum': 1}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'paths': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'viewport': {'type': 'string', 'description': 'Device to capture on: "desktop", "iphone-15", "pixel-7", "ipad" — the preview\'s own device presets (Desktop, iPhone (393×852), Pixel (412×915), iPad (820×1180)) — or a custom "WIDTHxHEIGHT" such as "600x800". "iphone-15" is the usual phone check. Omit to capture what the user sees.'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'query'], 'properties': {'glob': {'type': 'array', 'items': {'type': 'string'}}, 'query': {'type': 'string'}, 'regex': {'type': 'boolean'}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'paths': {'type': 'array', 'items': {'type': 'string'}}, 'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'updates': {'type': 'object', 'description': 'Flat metadata fields (see the tool description).', 'additionalProperties': {'type': ['string', 'boolean', 'null']}}, 'projectId': {'type': 'string'}, 'shareTarget': {'type': 'object', 'required': ['enabled'], 'properties': {'enabled': {'type': 'boolean'}, 'mimeTypes': {'type': 'array', 'items': {'type': 'string'}, 'description': 'MIME patterns to accept, e.g. ["image/*","video/*"] (default). Allowed: image/*, video/*, audio/*, text/plain, application/pdf.'}, 'allowMultiple': {'type': 'boolean', 'description': 'Also accept multi-select shares. Default true.'}}, 'description': 'Share-sheet target config (iOS Share Extension + Android share sheet). Omit to leave unchanged; { enabled: false } removes it.', 'additionalProperties': False}, 'analyticsMode': {'enum': ['storage', 'memory', 'off'], 'type': 'string', 'description': "Built-in visitor analytics mode for the published app: 'storage' (default, session id in localStorage — needs a consent banner for EU/UK visitors), 'memory' (nothing stored on the device, no consent needed) or 'off' (no analytics). Omit to leave unchanged."}, 'serverMemoryMb': {'anyOf': [{'anyOf': [{'type': 'integer'}, {'type': 'string'}]}, {'type': 'null'}], 'description': "Memory (MB) of the project's server Lambda, 512–4096. EXPERT SETTING: only on an explicit user request to change the server memory (see the tool description for the risks); never touch it otherwise. Omit to leave unchanged; null restores the platform default."}, 'iosDeviceFamily': {'enum': ['iphone-and-ipad', 'iphone'], 'type': 'string', 'description': "Devices the native iOS app is built for: 'iphone-and-ipad' (default) or 'iphone' (iPhone only). Not possible for an app already released on the App Store with iPad support. Omit to leave unchanged."}, 'nativeSystemBars': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['inset', 'edge-to-edge'], 'type': 'string'}, 'color': {'type': 'string', 'description': 'Inset mode only: #rrggbb paint of the strips under the bars. Default #000000.'}, 'iconStyle': {'enum': ['light', 'dark'], 'type': 'string', 'description': "Color of the bar ICONS. Inset: defaults to contrast with `color`. Edge-to-edge: defaults to 'dark'."}}, 'description': "Native system-bars config. Omit to leave unchanged; { mode: 'inset' } with no color restores the default.", 'additionalProperties': False}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'file_name'], 'properties': {'file': {'type': 'object', 'properties': {'file_id': {'type': 'string'}, 'file_name': {'type': 'string'}, 'mime_type': {'type': 'string'}, 'download_url': {'type': 'string'}}, 'description': 'ChatGPT only: a file from this conversation (e.g. a generated image). The ChatGPT host fills download_url/file_id when you reference the file; the values are host-issued and cannot be constructed by hand — on clients without file-parameter support, leave this unset and use the other modes.', 'additionalProperties': False}, 'file_name': {'type': 'string', 'pattern': '^[a-zA-Z0-9][a-zA-Z0-9._-]{0,80}\\.[a-zA-Z0-9]{1,10}$'}, 'projectId': {'type': 'string'}, 'size_bytes': {'type': 'integer', 'minimum': 1, 'description': 'Required unless `file` is set. Exact byte count of the file, as measured from the file itself (e.g. stat/ls -l). With content_base64 it must equal the decoded length; in presigned mode the PUT must send exactly this many bytes.'}, 'content_type': {'type': 'string', 'maxLength': 100, 'minLength': 3, 'description': 'Required unless `file` is set (in that mode the type is derived from the downloaded bytes; pass this only as a hint).'}, 'content_base64': {'type': 'string', 'minLength': 1, 'description': "The file's bytes, base64-encoded (≤3 MB decoded). When set, the upload completes in this call."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'annotationId'], 'properties': {'projectId': {'type': 'string'}, 'annotationId': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId', 'path', 'content'], 'properties': {'path': {'type': 'string'}, 'content': {'type': 'string'}, 'projectId': {'type': 'string'}, 'expected_version': {'type': 'integer'}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
Kleap
Builds, edits, publishes, hosts, connects domains, and provides analytics and search performance data for websites and web apps.
Flowboard
Creates, validates, versions, reviews, and edits architecture diagrams using cloud-provider shapes and structured flows.
Flowgraf
Creates and edits architecture diagrams from infrastructure graphs and returns editable canvases, SVGs, and Mermaid representatio…
GripForge
Generates, rigs, animates, analyzes, and packages game characters, weapons, armor, effects, environments, and engine-ready assets.
shiply
Publishes and manages web applications with SQL databases, serverless functions, domains, email tests, client intake, contracts, …
Fine Structure
Builds and hosts full-stack applications from prompts and supports agent communication through WhatsApp and email.
spriteship
Generates and manages 2D game characters, assets, animations, tilesets, UI packs, maps, and engine-ready exports for multiple gam…
mcp
Provisions and manages cloud instances, networks, storage, databases, backups, VPNs, application deployments, and autocoding-agen…