Skip to main content
Flowstep usage limits apply at the organization level and are shared between the web app and the MCP server. A generation kicked off in Cursor counts against the same allowance as one started from app.flowstep.ai.

Which tools use messages

Only the three AI design tools draw on your message allowance:
  • ai-design-screens
  • ai-generate-screen-variant
  • ai-edit-screen-variant
All other tools are free — listing and reading files and screens, rendering screen images, reading and writing JSX with get-screen-jsx, add-screen-jsx, and replace-screen-jsx, managing design guidelines, uploading attachments, importing from Figma, and checking your plan with get-plan-details. The server also tells connected agents which tools are paid, so your agent can factor that in before it calls them.

How limits work

Limits are per-feature (the primary feature is messages). Each plan defines:
  • A daily limit — resets at 00:00 UTC every day
  • A monthly limit — resets on the date of the account sign up or paid subscription start each month
Hitting either limit blocks further generations until it resets. See Pricing for what each plan includes.

Checking your quota

Call get-plan-details to see your current plan, limits, usage, and remaining quota. It’s free to call, so your agent can check before kicking off a batch of generations. Actual limit values depend on your plan — run the tool to see your specific numbers. See Tools reference for the full response shape.

Per-request limits (all plans)

These limits are enforced at the request level regardless of plan:

When a call doesn’t use a message

A message is only used when Flowstep actually builds or changes screens. If a generation fails — due to a server error or an invalid input — it does not consume a message. If ai-design-screens returns status: "chat" (a reply without building), no message is used either.
When an AI design tool call times out after 180 seconds, the MCP server stops waiting for the result, but the generation can still finish in the background. If some screens were already built, the call returns them instead of an error. Either way, call list-screens to check whether more screens landed before you retry, so you don’t generate them twice.