Skip to main content
Glama

Provision Resource

provision_resource

Provision a Floot-managed backend resource for the project — fully server-side (Floot mints all secrets; no keys to paste). Also seeds the working code for it. Available:

  • database — A Floot-managed Postgres database (Neon). FLOOT_DATABASE_URL is set for the app.

  • auth — Email/password + session auth (JWT_SECRET, auto-provisions a database if none). Injects auth pages, endpoints, and helpers.

  • oauth-login — Sign in with Google via Floot's brokered OAuth (FLOOT_OAUTH). Injects OAuth provider classes, login buttons, helpers.

  • microsoft-login — Sign in with Microsoft via Floot's brokered login (FLOOT_MICROSOFT_LOGIN). Injects button + auth endpoints.

  • google-integration — FLOOT_GOOGLE_INTEGRATIONS is built-in Google integration. Use it to let end users connect their Google account so the app can read/write their Gmail, Google Calendar, or Google Drive — unless the user specifies they want to use their own Google client. See get_guides("floot-provided-google-integrations").

  • microsoft-integration — Microsoft Graph access (Outlook/Teams/etc.) via Floot's brokered Microsoft OAuth (FLOOT_MICROSOFT_INTEGRATIONS). Injects Connect button + endpoints.

  • push-notifications — Web + native push (FLOOT_PUSH). Mints VAPID keys, injects helpers/pushClient (subscribe/unsubscribe) + a service worker.

  • payments — FLOOT_PAYMENTS is built-in payments. Use it to take payments in the app — unless the user specifies they want to use their own Stripe account. See get_guides("floot-payments").

  • shipping — FLOOT_SHIPPING is shipping through the project owner's own Shippo account (rates, labels, tracking). Use it to ship physical goods in the app. The preview runs on Floot's built-in test shipping; the published app connects the owner's Shippo at publish. See get_guides("floot-shipping"). Enum values not listed above are beta-gated and unavailable on most accounts. SENDING email from the app is NOT a resource — the builtin @floot/email handles it with zero setup (get_guides("email")). For a user's OWN external key (their OpenAI key, an external database), this is NOT the tool — use request_external_resource instead. Idempotent: re-running returns the existing resource and skips seed files that already exist. To turn Floot Payments OFF (publishing refuses while it is attached and Stripe setup is unfinished, also when the app no longer uses it, e.g. it uses its own checkout): action "turn_off" with resource "payments". Owner only; ask the user first and call it only once they agree. It keeps the app's data and the owner's Stripe setup, and the owner can turn it back on in Floot (Services → Payments).

  • app-connection — let this project's backend call functions ANOTHER Floot app exports (no API keys): pass app_target and app_functions. Only apps the user can edit, only functions in the other app's helpers/flootAppExports.tsx (saved is enough: write both apps first, connect, then publish both); the user confirms in a dialog. Read get_guides("app-calls") first.

Input Schema

NameRequiredDescriptionDefault
actionNoDefault "provision". "turn_off" only with resource "payments": turns Floot Payments off for the project (owner only, after the user confirms).
app_noteNoOnly for resource "app-connection": one sentence for the user on why this project needs these functions. Shown in the confirmation dialog.
resourceYes
projectIdYes
app_targetNoOnly for resource "app-connection": the OTHER Floot app — its project id, name.floot.app address or custom domain.
app_functionsNoOnly for resource "app-connection": the exact function names this project needs from the other app's helpers/flootAppExports.tsx.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / action
      Added value: +{
      +  "description": "Default \"provision\". \"turn_off\" only with resource \"payments\": turns Floot Payments off for the project (owner only, after the user confirms).",
      +  "enum": [
      +    "provision",
      +    "turn_off"
      +  ],
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / app_functions
      Added value: +{
      +  "description": "Only for resource \"app-connection\": the exact function names this project needs from the other app's helpers/flootAppExports.tsx.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / app_note
      Added value: +{
      +  "description": "Only for resource \"app-connection\": one sentence for the user on why this project needs these functions. Shown in the confirmation dialog.",
      +  "type": "string"
      +}
    • addedInput schema / properties / app_target
      Added value: +{
      +  "description": "Only for resource \"app-connection\": the OTHER Floot app — its project id, name.floot.app address or custom domain.",
      +  "type": "string"
      +}
    • changedInput schema / properties / resource / enum
      Previous value: -[
      -  "database",
      -  "auth",
      -  "oauth-login",
      -  "microsoft-login",
      -  "google-integration",
      -  "microsoft-integration",
      -  "push-notifications",
      -  "self-edit",
      -  "payments",
      -  "shipping"
      -]New value: +[
      +  "database",
      +  "auth",
      +  "oauth-login",
      +  "microsoft-login",
      +  "google-integration",
      +  "microsoft-integration",
      +  "push-notifications",
      +  "self-edit",
      +  "payments",
      +  "shipping",
      +  "app-connection"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / resource / enum
      Previous value: -[
      -  "database",
      -  "auth",
      -  "oauth-login",
      -  "microsoft-login",
      -  "google-integration",
      -  "microsoft-integration",
      -  "push-notifications",
      -  "self-edit",
      -  "payments"
      -]New value: +[
      +  "database",
      +  "auth",
      +  "oauth-login",
      +  "microsoft-login",
      +  "google-integration",
      +  "microsoft-integration",
      +  "push-notifications",
      +  "self-edit",
      +  "payments",
      +  "shipping"
      +]
  4. Changed1 schema field changed
    • changedInput schema / properties / resource / enum
      Previous value: -[
      -  "database",
      -  "auth",
      -  "oauth-login",
      -  "microsoft-login",
      -  "google-integration",
      -  "microsoft-integration",
      -  "push-notifications",
      -  "self-edit"
      -]New value: +[
      +  "database",
      +  "auth",
      +  "oauth-login",
      +  "microsoft-login",
      +  "google-integration",
      +  "microsoft-integration",
      +  "push-notifications",
      +  "self-edit",
      +  "payments"
      +]
  5. Changed1 schema field changed
    • changedInput schema / properties / resource / enum
      Previous value: -[
      -  "database",
      -  "auth",
      -  "oauth-login",
      -  "microsoft-login",
      -  "google-integration",
      -  "microsoft-integration",
      -  "push-notifications"
      -]New value: +[
      +  "database",
      +  "auth",
      +  "oauth-login",
      +  "microsoft-login",
      +  "google-integration",
      +  "microsoft-integration",
      +  "push-notifications",
      +  "self-edit"
      +]
  6. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnly=false, destructive=false, openWorld=true; the description goes well beyond by disclosing that secrets are minted server-side, working code is seeded, the operation is idempotent (re-running returns existing resource and skips existing seed files), and that turn_off preserves app data and owner Stripe setup. It also flags a user-facing confirmation dialog for app-connection, which the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core statement, then a clean bullet list of resources, and every section carries real information. It is dense and slightly uneven in ordering — the turn_off paragraph is wedged inside the resource list and app-connection trails after it — so structure could be tighter, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, multi-mode mutation tool with no output schema, the description covers what gets created, what side effects occur, idempotency, ownership/permission constraints, and cross-tool references. An agent has everything needed to pick the right resource value and call it correctly on the first attempt.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema leaves the 11-value resource enum undocumented; the description supplies per-value meaning for each, including which env vars get set and which files are injected. It also clarifies what action='turn_off' does versus the default 'provision', and explains app_target/app_functions/app_note beyond their terse schema strings (only editable apps, only functions in flootAppExports.tsx, note shown in dialog).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Provision a Floot-managed backend resource') and immediately enumerates all eleven resource kinds with what each creates. It also explicitly excludes adjacent concepts (email is not a resource; user's own key is not this tool), so an agent can tell provision_resource apart from request_external_resource and add_dependency without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing rules and exclusions: SENDING email → @floot/email, user's own external key → request_external_resource, beta-gated enums unavailable, google-integration/payments overridden when the user wants their own client. The turn_off path adds preconditions ('Owner only; ask the user first and call it only once they agree') and the app-connection path adds an ordering constraint (write both apps, connect, publish both).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources