Log In
Log In
Flows Docs

Flows MCP

Connect the AI you already use, such as Claude, ChatGPT, Grok or Cursor, and let it set up your website, shape your site chat, write your product content and run the data tables the chat answers from. One URL, one approval, and your model is part of the team.

01What is Flows MCP

Flows exposes your site to AI models over the Model Context Protocol — an open standard that lets an AI tool call real, permissioned functions. Once connected, the model you already work in can read your brand context, see what your site looks like, and work on your Flows site:

  • Your website — add a site, fill in its business details and install the chat. See Set up a website.
  • Your site chat — its greeting, tone, abilities, design and where it shows. See Your chat.
  • Your products — product content, descriptions and buy links. See Products.
  • Your data tables — the tables in Projects → Databases: create them, shape their columns, read and write rows, and choose which ones your site chat may read. See Data tables.

You describe what you want in plain language, in the tool you already work in, and the change reaches your dashboard and your live chat straight away.

02Requirements

  • A Flows account with at least one connected site (connect one in the dashboard first).
  • An MCP-capable client — Claude, Claude Code, Cursor, ChatGPT, Windsurf, VS Code, or anything that supports remote MCP servers over Streamable HTTP.
  • That's it. Auth is OAuth — your client walks you through it on first use. No API keys to create or paste. (Sites connected through the Wix or Shopify app use a personal link instead — see Site connection links.)

03Connect in a minute

Every MCP client connects the same way: Claude, ChatGPT, Grok, Cursor, Windsurf, VS Code, and anything else that supports remote MCP servers over Streamable HTTP. Everything runs through one server URL:

https://www.flowcrews.com/mcp
  1. Add the URL to your AI tool's MCP or connector settings (open the one that matches your client below).
  2. Your tool opens a secure Flows sign-in. Approve it once.
  3. Ask for what you want. Changes appear in your Flows dashboard straight away.
A client with a connectors or MCP settings panel

Claude, ChatGPT and most desktop apps: add a custom connector or server, paste the URL above, and save. The Flows sign-in opens the first time the client calls a tool.

A client with a JSON config file

Cursor, Windsurf, VS Code and similar: add a server entry with the same URL.

{
  "mcpServers": {
    "flows": {
      "url": "https://www.flowcrews.com/mcp"
    }
  }
}

No API keys, nothing to configure per client: OAuth is handled for you.

Tip: ask get_profile first — if it returns your account email, the connection is working. If you own more than one site, use a site connection link instead and the model always targets the right one.

05Set up a website

A model can take a website from nothing to a working chat, on any host: WordPress, Squarespace, Webflow, Wix, Shopify or custom code. The steps run in this order, and get_setup_status shows where a site stands at any point, as a checklist.

  1. Add the site — add_website with its domain.
  2. Business details — save_business_details. Send only the details that change.
  3. Install the chat — get_chat_install gives the one-line code and where to paste it. Once you've pasted and published it, check_chat_install looks for it on your homepage.
Add my website acme.com to Flows, fill in the business details
from the site, and walk me through installing the chat.

06Your chat

Everything in Concierge → Configure and Design → Concierge Chat is open to a model, and each change reaches the live chat straight away. get_concierge_settings reads it all; update_concierge_settings changes only what it's sent.

What the agent says update_concierge_settings

The welcome screen's title (welcomeTitle) and the greeting under it, the three suggested asks under the message box (the chip's word and the message it sends), the tone, your own instructions, and which abilities are switched on: shopping, virtual try-on, order tracking, image generation and web search. Booking is switched in the dashboard, under Concierge → Configure.

How it looks update_concierge_settings → theme
  • style — the base design: default, soft or cocoa.
  • palette — one of the style's palettes, by id. get_concierge_settings lists them.
  • colors — your own colours for dark and light. Background, text and accent are enough: every other colour, hover and state is worked out from them.
  • mode — dark, light or device (the visitor's system setting).
  • font — a heading and a body font: one of 14 hosted fonts, site for your site's own typography, or a font you uploaded, as upload:<its name>.
  • launcher — the button that opens the chat: tab (an edge arrow) or bubble (a pill in the bottom corner).
  • launcherColor — match (the chat's colours), accent, or custom with a hex launcherFill.
  • launcherLabel — the pill's words, up to 24 characters. Empty is "Ask AI".
  • corners — the panel's shape on desktop: square or rounded, with cornerRadius from 8 to 28 pixels. Phones always show the full-screen chat.
  • signInCss — a stylesheet for the sign-in screen.
The header logo set_header_logo

An SVG shown in the chat header in place of the agent's name — a single <svg> with a viewBox, drawn from static shapes. Drawn in currentColor, it follows both modes; otherwise send a logoLight version too. An empty string clears it.

Where it shows get_chat_placement · set_chat_placement

showOn is website (your own website) or off. hiddenPages lists the website pages the chat stays away from, as paths such as /checkout. On your website, the chat appears on pages that carry its install code.

Set my Flows chat to dark mode with a soft dark grey background,
keep the text as it is, and make the Ask AI button white.

To open the chat from your own button instead, see Use your own button in the Site chat guide.

07Products

list_products gives each product's id, newest first. From there a model can write what shoppers read on a product.

  • Content sections — set_product_content writes the accordions shoppers open, up to 6. It replaces the whole set, so the model reads them first with get_product_content.
  • Description — set_product_description, up to 2,000 characters. Stripe and manual products only.
  • Buy link — set_product_buy_link sends the product's Buy action to your own https page instead of the cart: a membership, a subscription, anything bought somewhere else. Stripe and manual products only; an empty string clears it.

08Data tables

The tables in Projects → Databases are reachable over MCP too, through the same data layer the dashboard uses — so a table your model creates is a real table, visible and editable in the app straight away.

These are your own tables. They aren't a mirror of a Wix or Shopify catalogue. Your products have their own tools (see Products), and MCP has no route to your store's orders or customers.

What the model can do

  • Read — list_tables for the inventory and your plan's quota, get_table for one table's schema and a few sample rows, query_rows for the rows themselves with optional keyword search and exact-match filters.
  • Shape — create and rename tables, add, rename and remove columns.
  • Fill — add rows in batches, update a row's fields (a merge, so untouched columns keep their values), delete rows.
  • Organise — create, rename and delete folders, and move tables between them. Deleting a folder never deletes tables: they move back to the root.

Column types

text, long_text, number, price, boolean, date, select (with an options list), image, url. A column with no type given is text.

Synced tables are read-only

A table fed by an external source can be read but not written — writes come back as synced_readonly naming the provider. Change the data at its source and re-sync, or delete the table. Connecting a new external source, and bulk file import, stay in the dashboard: neither is on MCP.

Create a "Store FAQs" table in Flows with question and answer
columns, fill it from the FAQ page on my site, and let my site
chat read it.

09Site chat access

set_ai_readable is the same switch as Allow AI to read this table in Databases → Configure. Turned on, your public site chat may use that table's rows when answering visitors. That makes it the one data tool worth understanding before you use it: it changes what strangers on your site can be told.

Turn it on for reference data — FAQs, opening hours, shipping rules, specifications. Leave it off for anything about a person.

Flows checks for you as well. If a table's columns look personal, the first call comes back as needs_ai_read_confirm with the specific fields that triggered it and a short-lived confirmToken, rather than switching anything on. A model should show you that list and ask; only then does it call again with that token. An optional aiDescription gives the chat a short note on what the table is for.

Worth saying out loud: a model will only reach for this tool when you ask for it, and you can turn it back off from the same tool or from Databases → Configure at any time.

10Confirmations

Anything that destroys data refuses to run on the first call. The model has to come back a second time with proof you agreed — so a misread instruction can't take a table with it.

Every one works the same way: the first call returns needs_confirmation with what will happen and a confirmToken that Flows issued. The token lasts two minutes, works once, and only for that exact action — the model can't make one up.

  • Deleting a table, folder, column or rows — the confirmation names what goes, with row counts. Rows and tables skip the step if you've switched confirmations off in Databases → Agent access.
  • Turning on site-chat reading — see Site chat access.

None of this is something you configure — it's how the tools behave. Your part is simply to read what the model is about to delete before you say yes.

11Tool reference

Every tool below takes an optional instanceId and almost never needs one — see Working across sites. Tools marked confirm refuse the first call and ask for agreement; see Confirmations.

Connection & help 3 tools
get_profileread

Confirms who's connected — your account name and email, or the single site a connection link is bound to. The quickest "is this working?" check.

list_my_sitesread

The Flows sites you own — id, name, domain, platform and niche. A site connection link sees only its own site.

search_flows_docsread

Searches these docs. Each result links to the full section, so the model can answer "how do I…" from the docs instead of guessing.

Website setup 5 tools
add_websitewrite

Adds a website by its domain, on any host. Adding a domain the account already has reconnects it. See Set up a website.

get_setup_statusread

Where a site's setup stands, as a checklist: the business details still missing and where the chat shows.

save_business_detailswrite

The site's business details. Send only the details to change.

get_chat_installread

The one-line chat code for your website, where to paste it, and where the chat shows today.

check_chat_installread

Looks for the chat code on your homepage.

Site chat 6 tools
get_concierge_settingsread

The chat's welcome title and greeting, suggested asks, tone, instructions, abilities and design, plus the fonts you've uploaded.

update_concierge_settingswrite

Changes any of those. Send only what changes; it reaches the live chat straight away. See Your chat.

set_header_logowrite

An SVG logo in the chat header in place of the agent's name, with an optional light-mode version and size. An empty string clears it.

get_chat_placementread

Whether the chat shows on your website, and the website pages it stays away from.

set_chat_placementwrite

Sets where it shows, and which website pages it skips (hiddenPages, as paths).

set_ai_readablewriteconfirm

Turns site-chat reading on or off for one table, with an optional description for the chat. Personal-looking columns trigger a confirm step first — see Site chat access.

Products 5 tools
list_productsread

Your store products, newest first — id, name, price, which store it came from, its collections, whether it's hidden, and how many content sections it has. Where a product id comes from. Optional name search; 25 by default, 50 maximum.

get_product_contentread

One product's description and content sections in order, plus the limits a write must respect. Read before writing — writing replaces the whole set.

set_product_contentwrite

Writes the accordions shoppers open on a product — up to 6 sections of plain text with •, 1., ## and **bold** markers. Replaces every section in one call, so send back the ones you're keeping; an empty array clears them. Live immediately, and editable in Commerce → Your Products → Content.

set_product_descriptionwrite

The paragraph above a product's sections, up to 2,000 characters. Saved straight to Stripe, so it also appears on Checkout, invoices and receipts. Stripe and manual products only — Wix and Shopify descriptions stay on those platforms.

set_product_buy_linkwrite

An https page the product's Buy action opens instead of the cart, on every surface. Stripe and manual products only; an empty string clears it.

Data tables 18 tools
Reading
list_tablesread

Every table on the site — id, name, columns, row count — plus your plan's table and storage quota.

get_tableread

One table: name, column schema with field types, row count, and a few sample rows.

query_rowsread

Rows from a table, with optional keyword search (q) and exact field filters. 25 rows by default, 50 maximum; page with offset.

Schema
create_tablewrite

A new table, with optional starting columns and a description. Live in the Databases tab immediately. Plan table caps apply.

rename_tablewrite

Change a table's name and/or description.

delete_tablewriteconfirm

Deletes a table and every row in it. Needs a confirm token from the refused first call.

add_columnwrite

Add a column, with a type and — for select — its allowed values.

rename_columnwrite

Rename a column. Existing values move to the new field name.

remove_columnwriteconfirm

Removes a column and its values from every row. Needs a confirm token from the refused first call.

Folders
list_foldersread

The folders on a site, for organising tables.

create_folderwrite

A new folder.

rename_folderwrite

Rename a folder.

delete_folderwriteconfirm

Removes a folder. Tables inside move back to the root — they're never deleted. Needs a confirm token from the refused first call.

move_tablewrite

Move a table into a folder, or back to the root.

Rows
add_rowswrite

Insert rows as plain objects of column → value. Up to 50 per call.

update_rowwrite

Update one row by id. A merge — send only the columns to change and the rest keep their values.

delete_rowwriteconfirm

Delete one row by id. Needs a confirm token from the refused first call.

delete_rowswriteconfirm

Delete up to 50 rows by id. Needs a confirm token for that exact set of ids.

12Response statuses

Tools answer with a status rather than throwing, so a model can react instead of stalling. These are the ones you'll see quoted back at you.

ok · saved · deleted

It worked.

choose_site

You own several sites — name the one you mean.

no_sites

Your account has no connected site yet.

needs_confirmation

A destructive call was refused pending your agreement.

needs_ai_read_confirm

A table looks personal and site-chat reading wasn't switched on. The response lists which fields triggered it.

limit_reached

A plan allowance is full: tables or storage. Nothing partial was saved.

synced_readonly

That table is fed by an external source. Edit it there and re-sync.

unauthorized

The connection isn't authenticated — see Troubleshooting.

not_found · unavailable · error

No such id, a service was briefly unavailable, or something else went wrong — the message says which.

13Limits

Generous in practice, but worth knowing when a model reports something got refused.

  • Reading rows — 25 by default and 50 at most per call, with up to 20 filter keys. Page with offset.
  • Writing rows — up to 50 rows per add or bulk-delete call.
  • Columns — up to 100 per table, and up to 50 options on a select.
  • Requests — one tool call per request, and 120 requests a minute per account.
  • Plan allowances — tables and storage are plan-based. Over the line you get limit_reached, and nothing partial is written.

14Working across sites

Every tool takes an optional instanceId. You almost never need it:

  • One site — tools resolve to it automatically. Just ask.
  • Several sites — the tool answers choose_site with your site list and the model asks which one you mean. Name the site in your prompt ("…on my coffee shop") and it carries on.
  • Connected with a site link — that one site is always the target, and naming a different one is refused rather than silently redirected. To work on another site, add its own link.

Reads and writes only ever succeed on sites your account owns — every call re-checks that on the server, whichever way you connected.

Several sites, one client? Add each site's connection link as its own entry — "flows-cooking", "flows-studio" — and the right one is unambiguous every time.

15Authentication

There are two ways to authenticate, and both end at the same server-side ownership check.

OAuth — the universal URL

OAuth 2.1 with PKCE and dynamic client registration, the modern MCP auth standard. When your client first connects it opens a Flows sign-in; you approve access to your email and profile, and the client manages tokens from there. There are no API keys to create, store, or leak. Signing out of the connector in your client ends its access.

Site connection links

A signed per-site credential, used as a URL parameter or a bearer header. It carries no account-wide reach: it identifies one site, and every tool is locked to it. Revocation is a live check on every single call, which is why Regenerate takes effect instantly rather than waiting for a token to age out. Full detail in Site connection links.

Whichever route you take, every call is verified server-side against your Flows account. Nothing is trusted because the model said so.

16Permissions & scope

What a connected model can reach:

  • Your websites — add one, save its business details and check the chat install.
  • Your site chat — its settings, design, header logo and where it shows.
  • Your products — content sections, and for Stripe and manual products the description and buy link.
  • Your data tables — read and write the tables in Projects → Databases, and switch site-chat reading on or off per table.

What it cannot reach, by construction:

  • Billing, subscribers, orders or account settings. There is no tool for any of them.
  • Your store's orders and customers. No route to them on Wix, Shopify or anywhere else.
  • Other people's sites. Ownership is re-checked server-side on every call, and a site link is bound to one site.

And how what it writes is handled:

  • Confirmed: destructive data operations require a second, explicit confirmation — see Confirmations.
  • Plan-aware: new tables count against your plan's allowances. Over the line, the write is declined and nothing partial is saved.

17Troubleshooting

"Unauthorized" from every tool

The OAuth handshake didn't finish. Remove and re-add the connector, and complete the Flows sign-in when it opens.

Client can't find the server

Double-check the URL is exactly https://www.flowcrews.com/mcp and that your client supports remote MCP servers (Streamable HTTP), not just local ones.

Your connection link stopped working

It was regenerated, the site was disconnected, or the Wix or Shopify app was uninstalled. Open Design → the ⋯ menu beside Build with AI and copy the current one. A URL older than 7 days has expired by design — take a fresh one, or switch to the bearer key, which doesn't.

"No sites"

Your Flows account has no connected site yet. Ask the model to add one with add_website, or connect one in the dashboard, then try again.

"Choose a site"

You own several sites. Tell the model which one you mean, or connect with that site's own link.

"This connection is scoped to one site"

You're on a site link and asked for a different site. Add that site's own link as a second server.

"Limit reached"

A plan allowance is full: tables or storage. Delete something unused.

A table refuses writes

It's synced from an external source and is read-only here. Change the data at its source and re-sync.

Still stuck? Ask Sam — the chat bubble on this page — or reach us from the dashboard.