Claude, ChatGPT, Cursor, VS Code, n8n and every other app that speaks MCP (Model Context Protocol) can read and work with your lists — with exactly the rights you give them.
https://flexlists.com/mcpThe Flexlists MCP server gives an AI agent the tools to work in your Flexlists: find lists, read and filter rows, add and change rows, add fields, build views such as a Kanban or a calendar, attach files, share lists, look at forms and automations. The agent calls these tools itself when you ask it something in plain words.
Ask things like:
It works over the internet (Streamable HTTP, MCP version 2025-06-18) at https://flexlists.com/mcp. Apps that can sign in — claude.ai, Claude Desktop, ChatGPT — only need that address: you sign in to Flexlists and approve. Apps that take a header use an API key.
1. In Flexlists open Integrations (left menu) → the AI agents (MCP) tab.

2. Under "Create key for MCP": give it a name, pick Read only or Read & write, and the scope: your full account or one workspace. Click Create key for MCP.

3. Copy the key now — it is shown only once — or copy the ready-made setup for Claude Code, Cursor or VS Code with the key filled in.

4. A key for some lists only, or with another expiry date: Integrations → API keys → Create new API key, scope "Specific tables", Read or Write, and the expiry date. Every key (also OAuth connections) is listed there and can be revoked.

Keep the key secret like a password. It works until it expires or you revoke it, for the lists in its scope, with your rights on them.
claude mcp add --transport http flexlists https://flexlists.com/mcp --header "Authorization: Bearer <your Flexlists API key>"claude mcp add --transport http flexlists https://flexlists.com/mcpJust ask. The agent picks the tools. Good to know: a list is identified by its listId (from list_lists), rows are keyed by field name, and every tool that deletes asks for confirm: true — the agent has to tell you what goes and wait for your yes.
| Tool | What it does | Access | Try |
|---|---|---|---|
whoami | Who the key belongs to, its scope and whether it can write | read | “What can you do in my Flexlists?” |
list_workspaces | The workspaces the key can see | read | “Which workspaces do I have?” |
| Tool | What it does | Access | Try |
|---|---|---|---|
list_lists | Lists, by workspace, folder or name | read | “Show my lists in the Sales folder” |
get_list_schema | Fields with types, Choice options and relations | read | “Which fields does my CRM have?” |
create_list | A new list with fields and first rows | write | “Make a list for my book collection” |
rename_list | Rename a list or change its description | write | “Rename "Leads 2024" to "Leads"” |
delete_list | Delete a list (asks for confirm) | write · confirm | “Delete the old Test list” |
list_folders | The folders of My Lists and My Views | read | “How are my lists organised?” |
create_folder | A new folder | write | “Make a folder Q4 inside Sales” |
move_to_folder | Move lists and views into a folder | write | “Put the CRM in the Sales folder” |
list_templates | List and view templates | read | “Which templates are there for projects?” |
create_from_template | A list (+ view) from a template | write | “Start a sales pipeline from the template, without demo data” |
| Tool | What it does | Access | Try |
|---|---|---|---|
add_field | Add a field, also a relation to another list | write | “Add a Priority field with Low, Medium, High” |
update_field | Rename, required, description, Choice options | write | “Add "Lost" to the Stage options” |
delete_field | Delete a field (asks for confirm) | write · confirm | “Remove the Fax field” |
| Tool | What it does | Access | Try |
|---|---|---|---|
search_rows | Filter, full-text search, sort, page with a cursor | read | “Which tasks are overdue?” |
get_row | One row by id | read | “Show me order 1043” |
create_rows | Add up to 100 rows | write | “Add a row to my CRM for Acme” |
update_rows | Change up to 100 rows (only the given fields) | write | “Mark the Acme deal as won” |
delete_rows | Delete up to 100 rows (asks for confirm) | write · confirm | “Delete the duplicate contacts” |
count_rows | How many rows match a filter | read | “How many open tickets are there?” |
aggregate_rows | Count / sum / avg / min / max, grouped by a field or month | read | “Total deal value per stage” |
| Tool | What it does | Access | Try |
|---|---|---|---|
list_views | The views of a list | read | “Which views does the Tasks list have?” |
list_view_types | The view types and the fields they need | read | “Which views could I make for my events?” |
create_view | Kanban, Calendar, Timeline, Gantt, Map, Gallery, Chart, Mind map, … | write | “Build a Kanban for my hiring pipeline” |
get_view_rows | Rows as a view filters and sorts them | read | “What is in my "This week" view?” |
create_checklist | A checklist (items, runs, results + view) | write | “Make a weekly safety checklist” |
| Tool | What it does | Access | Try |
|---|---|---|---|
list_comments | The comments on a row | read | “What did the team say about Acme?” |
add_comment | Comment on a row | write | “Note on Acme that they want a quote by Friday” |
get_row_history | Who changed what, recently | read | “Who changed the price of this product?” |
| Tool | What it does | Access | Try |
|---|---|---|---|
attach_file_to_row | A file from a URL (25 MB) or base64 (5 MB) | write | “Attach this PDF to the Acme contract row” |
get_file | Download links (1 hour) of a row's files | read | “Give me the invoice of order 1043” |
read_spreadsheet | Columns and first rows of a CSV / XLSX | read | “What is in this spreadsheet? (URL)” |
import_spreadsheet_rows | Add a CSV / XLSX to a list | write | “Import these leads into my CRM” |
create_list_from_spreadsheet | A new list from a CSV / XLSX | write | “Turn this spreadsheet into a list” |
| Tool | What it does | Access | Try |
|---|---|---|---|
get_sharing | Who has access to a list | read | “Who can see the Salaries list?” |
share_list | Share a list by email | write | “Let ann@example.com edit the CRM” |
share_list_with_group | Share a list with a group | write | “Give the Sales group read access to Leads” |
set_share_role | Change someone's role on a list | write | “Make Bob read-only on the CRM” |
unshare | Take away access (asks for confirm) | write · confirm | “Remove Bob from the CRM” |
list_groups | Your groups and their members | read | “Who is in the Sales group?” |
create_group | A new group | write | “Make a group Volunteers with these emails” |
update_group | Rename a group | write | “Rename Sales to Sales EU” |
delete_group | Delete a group (asks for confirm) | write · confirm | “Delete the old Interns group” |
add_group_members | Add people to a group | write | “Add cy@example.com to Sales” |
remove_group_member | Remove someone from a group (asks for confirm) | write · confirm | “Take Bob out of Sales” |
| Tool | What it does | Access | Try |
|---|---|---|---|
list_forms | Your forms with their public links | read | “Which forms do I have?” |
get_form | A form's questions, lists and public URL | read | “What does the signup form ask?” |
create_form | A public form, planned and built by AI | write | “Make a signup form for the open day” |
list_form_submissions | The latest submissions | read | “Who signed up today?” |
set_form_enabled | Turn a form on or off | write | “Close the signup form” |
| Tool | What it does | Access | Try |
|---|---|---|---|
list_automations | Your integrations and workflows | read | “Which automations are on?” |
create_automation | A link to the builder with your request | write | “Mail me the open tasks every Monday” |
set_automation_enabled | Switch an automation on or off | write | “Pause the Slack notification” |
run_automation | Run an automation now | write | “Run the weekly report now” |
list_applications | Your applications and their links | read | “Which apps did I build?” |
create_application | A link to the app builder with your request | write | “Build a portal where volunteers pick shifts” |
| Tool | What it does | Access | Try |
|---|---|---|---|
list_webhooks | Your row-change webhooks | read | “Which webhooks are set up?” |
create_webhook | Send row changes to a URL | write | “Post new orders to https://hooks.example.com/orders” |
delete_webhook | Remove a webhook (asks for confirm) | write · confirm | “Remove the old orders webhook” |
| Tool | What it does | Access | Try |
|---|---|---|---|
explain_item | How an automation, form, app or view template works | read | “Why is my Telegram integration off?” |
contact_support | File a ticket with the Flexlists team | write | “Report to support that my import fails” |
search_rows, count_rows and aggregate_rows take where, the same syntax as the REST API's row search: field name → value (equals), or { "op": …, "value": … } with eq, neq, contains, gt, gte, lt, lte, empty, notEmpty. All conditions must hold. query searches the text fields.
{
"listId": 1234,
"where": {
"Status": "Open",
"Due": {
"op": "lt",
"value": "2025-01-31"
}
},
"sort": "Due",
"limit": 50
}At most 200 rows per call. When a result has a nextCursor, the agent asks again with cursor for the next page. Every result stays under 1 MB: a page with very long texts comes back shorter, with a note, and continues with the cursor.
attach_file_to_row takes a public http(s) URL (Flexlists downloads it, up to 25 MB; private and internal addresses are refused) or base64 content up to 5 MB. get_file returns download links that work for one hour — the bytes never go through the chat. Spreadsheets (CSV, XLSX) are read and imported on the server from a URL or a file already in Flexlists.
A relation (Lookup) field comes back as { "id": 12, "label": "Acme" }. To set one, give the related row's id, { "id": 12 } or its label ("Acme", looked up in the related list). get_list_schema shows which list a relation points to.
Resources: flexlists://lists, flexlists://list/{listId}/schema and flexlists://docs/llm — the guide for agents (plain markdown). Prompts: analyze_list, build_tracker (“make me a list for …”), import_data.
confirm: true: the agent must name what goes and get your yes first. Deleted rows can be undone in the app.| 401 | No key, a wrong or revoked key, or an expired key. A login token of the website does not work: use an API key. OAuth apps sign in again by themselves. |
| 403 | The key may not do this: the list is outside its scope, the configuration does not allow it, or the IP address is not on its allowlist. |
| 429 | More than 600 requests in a minute: wait the seconds in Retry-After. |
| Tool not listed | Reload the server in your app (Claude Code: claude mcp list; Cursor: Settings → MCP). Some apps only show a limited number of tools, or let you switch tools on and off. |
| Behind a proxy | Every answer is plain JSON on its POST, so proxies that buffer server-sent events are no problem. A proxy must let the Authorization header through. |
Test the connection with the MCP Inspector:
npx @modelcontextprotocol/inspector --cli https://flexlists.com/mcp --transport http --header "Authorization: Bearer <your Flexlists API key>" --method tools/listOr run npx @modelcontextprotocol/inspector, choose “Streamable HTTP”, enter https://flexlists.com/mcp and either an Authorization header or “Open Auth Settings” → Quick OAuth Flow.
More: the REST API reference · the guide for agents (markdown) · Integrations → AI agents (MCP)