Back to MCP Overview

Base & Tables Tools

Tools for managing bases, tables, fields, and records.

44 tools

Available Tools

tables_createDatabase

Create a new database (base). Returns the created database with its ID.

Input Schema

namestringrequired

Name for the new database/base

descriptionstring

Optional description of the database

iconstring

Icon name (e.g., "database", "folder")

colorstring

Hex color code (e.g., "#3B82F6")

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_createDatabase",
    "arguments": {
          "name": "example",
          "description": "example",
          "icon": "example"
    }
  }
}
tables_listDatabases

List all databases (bases) for the current user. Returns array with id, name, description, tables[]. Use this first to get database IDs.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_listDatabases",
    "arguments": {}
  }
}
tables_getDatabaseById

Get a specific database with its tables

Input Schema

idstringrequired

Database ID from listDatabases

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getDatabaseById",
    "arguments": {
          "id": "example"
    }
  }
}
tables_updateDatabase

Update database properties. Only provided fields are updated.

Input Schema

idstringrequired

Database ID from listDatabases

namestring

New name for the database

descriptionstring

New description

iconstring

New icon name

colorstring

New hex color code

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateDatabase",
    "arguments": {
          "id": "example",
          "name": "example",
          "description": "example"
    }
  }
}
tables_deleteDatabase

Permanently delete a database and all its contents

Input Schema

idstringrequired

Database ID to delete. WARNING: This permanently deletes all tables and data.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_deleteDatabase",
    "arguments": {
          "id": "example"
    }
  }
}
tables_createTable

Create a new table in a database. Returns the created table.

Input Schema

databaseIdstringrequired

Database ID from listDatabases where the table will be created

namestringrequired

Name for the new table

descriptionstring

Optional description of the table

iconstring

Icon name (e.g., "table", "users")

colorstring

Hex color code (e.g., "#10B981")

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_createTable",
    "arguments": {
          "databaseId": "example",
          "name": "example",
          "description": "example"
    }
  }
}
tables_listTables

List all tables across all databases. Returns array with id, name, databaseId. Use getTableById for full details.

Input Schema

databaseIdstring

Limit to one base — omit for all tables across all bases

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_listTables",
    "arguments": {
          "databaseId": "example"
    }
  }
}
tables_getViewsByTableId

Get all views for a table

Input Schema

tableIdstringrequired

Table ID from listTables

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getViewsByTableId",
    "arguments": {
          "tableId": "example"
    }
  }
}
tables_getFieldsByTableId

Get all fields/columns for a table. Returns field IDs needed for createRow data keys.

Input Schema

tableIdstringrequired

Table ID from listTables

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getFieldsByTableId",
    "arguments": {
          "tableId": "example"
    }
  }
}
tables_getTableById

Get table with fields and views. Returns field IDs needed for row data.

Input Schema

idstringrequired

Table ID from listTables

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getTableById",
    "arguments": {
          "id": "example"
    }
  }
}
tables_updateTable

Update table properties. Only provided fields are updated.

Input Schema

idstringrequired

Table ID from listTables

namestring

New name for the table

descriptionstring

New description

iconstring

New icon name

colorstring

New hex color code

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateTable",
    "arguments": {
          "id": "example",
          "name": "example",
          "description": "example"
    }
  }
}
tables_deleteTable

Permanently delete a table and all its data

Input Schema

idstringrequired

Table ID to delete. WARNING: This permanently deletes all rows and fields.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_deleteTable",
    "arguments": {
          "id": "example"
    }
  }
}
tables_createField

Create a new field/column in a table

Input Schema

tableIdstringrequired

Table ID from listTables

namestringrequired

Name for the new field/column

fieldTypestringrequired

Field type: "text", "number", "select", "multiselect", "date", "datetime", "checkbox", "url", "email", "phone", "file", "formula", "rating", "currency", "percent", "duration", "status", "button", "link", "lookup", "rollup". READ-ONLY computed types (writes to them are dropped): "hash" = Hash ID, a read-only stable per-row identifier — it does NOT hash a value you supply (to store a hashed value, compute it yourself and use text/secret); "created_time"/"updated_time" = system timestamps; "formula"/"lookup"/"rollup" = computed. Numbers are exact only up to 2^53 — unsafe integers are rejected with guidance; store long IDs, account numbers, and IMEIs as text.

descriptionstring

Optional description of the field

requiredboolean

Must be false or omitted. Required fields are not supported - UI creates blank rows first.

uniqueboolean

Whether values must be unique (default: false)

defaultValueany

Default value for new rows

optionsarray

For select/multiselect: [{value: "opt1", label: "Option 1", color: "#3b82f6"}]

statusLabelsarray

For status: [{value: "todo", label: "To Do", color: "#6b7280"}]

formulaConfigobject

For formula: {formula: "{Field A} * {Field B}", resultType: text|number|date|checkbox}. Non-volatile formula values are materialized (stored on the row, auto-recalculated when inputs change — including via links) and are filterable/queryable everywhere; formulas using NOW()/TODAY() are volatile: display-only, NULL in SQL, not filterable

buttonConfigobject

For button: {actionType: "flow", flowId: "xxx"}

numberFormatConfigobject

For number: {decimalPlaces: 2, useThousandSeparator: true}

currencyFormatConfigobject

For currency: {currencySymbol: "$", symbolPosition: "before"}

percentFormatConfigobject

For percent: {decimalPlaces: 1}

lookupConfigobject

For lookup: {relationshipFieldId: "<link field id>", sourceFieldId: "<field id on linked table>", aggregation?: CONCATENATE|FIRST|LAST|ARRAY|COUNT|SUM|AVG|MIN|MAX (default CONCATENATE; COUNT counts NON-EMPTY VALUES — use a rollup COUNT to count linked records), filter?: {logic, conditions:[{fieldId,operator,value}]} over LINKED-table fields — only matching linked rows are aggregated}. Computed by Postgres; scalar (non-chained) aggregations are filterable everywhere — view filters, tables_query SQL, filterRows, and published-app entities.filter()

rollupConfigobject

For rollup: {relationshipFieldId: "<link field id>", sourceFieldId: "<field id on linked table>", aggregation: COUNT|COUNT_EMPTY|COUNT_FILLED|COUNT_UNIQUE|SUM|AVG|MIN|MAX|MEDIAN|CONCATENATE|ARRAY|ARRAY_UNIQUE|ARRAY_COMPACT (default COUNT; COUNT counts LINKED RECORDS incl. empty values — COUNT_FILLED matches lookup COUNT), filter?: {logic, conditions:[{fieldId,operator,value}]} over LINKED-table fields — only matching linked rows are aggregated}. Computed by Postgres; scalar (non-chained) aggregations are filterable everywhere — view filters, tables_query SQL, filterRows, and published-app entities.filter()

linkedTableIdstring

For link field: target table ID

linkTypestring

Link relationship type

displayOrderstring

Fractional order string (e.g., "a0", "b0")

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_createField",
    "arguments": {
          "tableId": "example",
          "name": "example",
          "fieldType": "example"
    }
  }
}
tables_updateField

Update field properties. Only provided fields are updated.

Input Schema

idstringrequired

Field ID from getFieldsByTableId

namestring

New name for the field

fieldTypestring

Field type

descriptionstring

New description

requiredboolean

Must be false or omitted. Required fields are not supported - UI creates blank rows first.

uniqueboolean

Whether values must be unique

defaultValueany

Default value for new rows

optionsarray

For select/multiselect: [{value: "opt1", label: "Option 1", color: "#3b82f6"}]

statusLabelsarray

For status: [{value: "todo", label: "To Do", color: "#6b7280"}]

formulaConfigobject

For formula: {formula: "{Field A} * {Field B}", resultType: text|number|date|checkbox}. Non-volatile formula values are materialized (stored on the row, auto-recalculated when inputs change — including via links) and are filterable/queryable everywhere; formulas using NOW()/TODAY() are volatile: display-only, NULL in SQL, not filterable

linkedTableIdstring

For link field: target table ID

linkTypestring

Link relationship type

linkDisplayModestring

How to display linked records

linkDisplayFieldIdstring

Which field to show from linked records

allowMultipleLinksboolean

Whether multiple links are allowed

linkOnDeletestring

For link fields: what happens to linking rows when a linked record is deleted. RESTRICT blocks the delete; CASCADE deletes the linking rows too (chains, capped at 500 rows per delete); SET_NULL (default) just removes the connection.

buttonConfigobject

For button: {actionType: "flow", flowId: "xxx"}

numberFormatConfigobject

For number: {decimalPlaces: 2, useThousandSeparator: true}

currencyFormatConfigobject

For currency: {currencySymbol: "$", symbolPosition: "before"}

percentFormatConfigobject

For percent: {decimalPlaces: 1}

lookupConfigobject

For lookup: {relationshipFieldId: "<link field id>", sourceFieldId: "<field id on linked table>", aggregation?: CONCATENATE|FIRST|LAST|ARRAY|COUNT|SUM|AVG|MIN|MAX (default CONCATENATE; COUNT counts NON-EMPTY VALUES — use a rollup COUNT to count linked records), filter?: {logic, conditions:[{fieldId,operator,value}]} over LINKED-table fields — only matching linked rows are aggregated}. Computed by Postgres; scalar (non-chained) aggregations are filterable everywhere — view filters, tables_query SQL, filterRows, and published-app entities.filter()

rollupConfigobject

For rollup: {relationshipFieldId: "<link field id>", sourceFieldId: "<field id on linked table>", aggregation: COUNT|COUNT_EMPTY|COUNT_FILLED|COUNT_UNIQUE|SUM|AVG|MIN|MAX|MEDIAN|CONCATENATE|ARRAY|ARRAY_UNIQUE|ARRAY_COMPACT (default COUNT; COUNT counts LINKED RECORDS incl. empty values — COUNT_FILLED matches lookup COUNT), filter?: {logic, conditions:[{fieldId,operator,value}]} over LINKED-table fields — only matching linked rows are aggregated}. Computed by Postgres; scalar (non-chained) aggregations are filterable everywhere — view filters, tables_query SQL, filterRows, and published-app entities.filter()

displayOrdernumber

Display order position

isVisibleboolean

Whether field is visible

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateField",
    "arguments": {
          "id": "example",
          "name": "example",
          "fieldType": "example"
    }
  }
}
tables_deleteField

Permanently delete a field/column and all its data

Input Schema

idstringrequired

Field ID to delete. WARNING: This permanently deletes all data in this column.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_deleteField",
    "arguments": {
          "id": "example"
    }
  }
}
tables_createRow

Create a new row in a table. Data keys must be field IDs, not field names.

Input Schema

tableIdstringrequired

Table ID from listTables

dataobjectrequired

Object where keys are FIELD IDs from getFieldsByTableId, values are cell values. Example: {"fieldId1": "text", "fieldId2": 123}

rowOrderstring

Fractional order string for positioning. Leave empty to append at end.

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_createRow",
    "arguments": {
          "tableId": "example",
          "data": {},
          "rowOrder": "example"
    }
  }
}
tables_getRowCount

Get total row count for a table. Lightweight operation.

Input Schema

tableIdstringrequired

Table ID from listTables

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getRowCount",
    "arguments": {
          "tableId": "example"
    }
  }
}
tables_getRows

Get rows from a table with pagination. Returns row data with field IDs as keys.

Input Schema

tableIdstringrequired

Table ID from listTables

limitnumber

Rows to return, 1-1000 (default: 100). Values outside the range are REJECTED, not clamped — page with offset for more

offsetnumber

Number of rows to skip for pagination

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getRows",
    "arguments": {
          "tableId": "example",
          "limit": 0,
          "offset": 0
    }
  }
}
tables_query

Run a sandboxed read-only SQL SELECT over your base

Input Schema

databaseIdstringrequired

Base (database) ID from listDatabases

sqlstringrequired

ONE read-only SELECT over this base's tables BY NAME, e.g. SELECT c."Name", SUM(o."Amount") FROM "Customers" c JOIN "Orders" o ON o.id = ANY(...) ... Columns are field NAMES; every table also has id, "createdAt", "updatedAt". Computed lookup/rollup columns are queryable. FORMULA columns are queryable too (values are materialized on write) — EXCEPT volatile formulas using NOW()/TODAY(), which read as NULL and are listed in the result's unavailableColumns. Use $1..$n with params.

paramsarray

Positional parameters for $1..$n placeholders

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_query",
    "arguments": {
          "databaseId": "example",
          "sql": "example",
          "params": {}
    }
  }
}
tables_updateRow

Update an existing row. Merges provided data with existing data.

Input Schema

idstringrequired

Row ID from getRows

dataobjectrequired

Object with field IDs as keys and new values. Only provided fields are updated.

metadataobject

Optional metadata to merge with existing

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateRow",
    "arguments": {
          "id": "example",
          "data": {},
          "metadata": {}
    }
  }
}
tables_deleteRow

Permanently delete a single row

Input Schema

idstringrequired

Row ID to delete

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_deleteRow",
    "arguments": {
          "id": "example"
    }
  }
}
tables_bulkDeleteRows

Delete multiple rows. Params: tableId, rowIds (array of row IDs).

Input Schema

tableIdstringrequired
rowIdsarrayrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_bulkDeleteRows",
    "arguments": {
          "tableId": "example",
          "rowIds": {}
    }
  }
}
tables_createView

Create a new view. Params: tableId (required), name (required), viewType (required: "grid", "kanban", "calendar", "gallery", "form"), description, filterConfig, sortConfig, groupConfig, visibleFields (array of field IDs).

Input Schema

tableIdstringrequired
namestringrequired
viewTypestringrequired
descriptionstring
filterConfigany
sortConfigany
groupConfigany
visibleFieldsarray
columnWidthsany
isDefaultboolean

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_createView",
    "arguments": {
          "tableId": "example",
          "name": "example",
          "viewType": "example"
    }
  }
}
tables_updateView

Update view settings. Params: id (view ID), name, filterConfig, sortConfig, groupConfig, visibleFields, etc.

Input Schema

idstringrequired
namestring
descriptionstring
filterConfigany
sortConfigany
groupConfigany
visibleFieldsarray
columnWidthsany
isDefaultboolean
metadataany

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateView",
    "arguments": {
          "id": "example",
          "name": "example",
          "description": "example"
    }
  }
}
tables_getViews

List all views for a table. Param "tableId". Returns array with id, name, viewType, filterConfig, sortConfig.

Input Schema

tableIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getViews",
    "arguments": {
          "tableId": "example"
    }
  }
}
tables_reorderView

Change view position. Params: viewId, newOrderIndex (string).

Input Schema

viewIdstringrequired
newOrderIndexstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_reorderView",
    "arguments": {
          "viewId": "example",
          "newOrderIndex": "example"
    }
  }
}
tables_duplicateView

Copy a view. Params: id (view ID to copy), name (optional, for the copy).

Input Schema

idstringrequired
namestring

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_duplicateView",
    "arguments": {
          "id": "example",
          "name": "example"
    }
  }
}
tables_setDefaultView

Set which view opens by default. Params: id (view ID), tableId.

Input Schema

idstringrequired
tableIdstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_setDefaultView",
    "arguments": {
          "id": "example",
          "tableId": "example"
    }
  }
}
tables_deleteView

Delete a view. Param "id" is the view ID.

Input Schema

idstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_deleteView",
    "arguments": {
          "id": "example"
    }
  }
}
tables_updateFieldOrder

Change field position. Params: fieldId, newOrder (fractional string).

Input Schema

fieldIdstringrequired
newOrderstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateFieldOrder",
    "arguments": {
          "fieldId": "example",
          "newOrder": "example"
    }
  }
}
tables_updateTableOrder

Change table position in database. Params: tableId, newOrder (string like "a0", "b0" for fractional ordering).

Input Schema

tableIdstringrequired
newOrderstringrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateTableOrder",
    "arguments": {
          "tableId": "example",
          "newOrder": "example"
    }
  }
}
tables_updateFieldWidth

Set column width in pixels. Params: fieldId, width (number, e.g., 200).

Input Schema

fieldIdstringrequired
widthnumberrequired

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateFieldWidth",
    "arguments": {
          "fieldId": "example",
          "width": 0
    }
  }
}
tables_updateRowOrder

Update row display order for row drag-and-drop

Input Schema

rowIdstringrequired

Row ID to reorder

newOrderstringrequired

New fractional order string

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_updateRowOrder",
    "arguments": {
          "rowId": "example",
          "newOrder": "example"
    }
  }
}
tables_bulkUpdateRows

Update multiple rows at once. Each update merges its data with the existing row data — like updateRow but batched.

Input Schema

tableIdstringrequired

Table ID from listTables

updatesarrayrequired

Array of row updates

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_bulkUpdateRows",
    "arguments": {
          "tableId": "example",
          "updates": {}
    }
  }
}
tables_exportTable

Export all table data for download

Input Schema

tableIdstringrequired

Table ID to export

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_exportTable",
    "arguments": {
          "tableId": "example"
    }
  }
}
tables_importRows

Bulk import rows. Use matchFieldsByName=true (default) to use field names as keys.

Input Schema

tableIdstringrequired

Table ID from listTables

rowsarrayrequired

Array of row data. When matchFieldsByName=true, use field NAMES as keys. When false, use field IDs. LINKED-RECORD columns resolve per value: sibling "<Field> (id)" column → row IDs → JSON-array string (comma-safe) → exact label → unique case-insensitive label; unresolvable values are returned in unresolvedLinks (row still imports, link skipped — never guessed, never auto-created). Relations are written both directions.

matchFieldsByNameboolean

If true, match columns by field name. If false, use field IDs as keys (default: true)

fieldDefinitionsarray

Optional field definitions to create new fields during import

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_importRows",
    "arguments": {
          "tableId": "example",
          "rows": {},
          "matchFieldsByName": true
    }
  }
}
tables_filterRows

Filter rows by field values using postgres-side WHERE clauses (uses GIN index on data, scales to large tables). Returns { rows, total, tableId, tableName, limit, offset }. Same operator dict as the published-app runtime SDK's entities.<Table>.filter(). Unknown field keys and unknown operators throw 400 with the valid options. Scalar lookup/rollup fields ARE filterable (computed in SQL — direct sources only; chained/list aggregations throw 400 explaining why). Formula fields ARE filterable too (values are materialized into stored data on every write) — EXCEPT formulas using NOW()/TODAY(), which have no stored value and throw 400 with guidance.

Input Schema

tableIdstringrequired

Table ID to filter

filterobject

Filter object. Keys are field IDs OR field names (case-insensitive). Multiple keys are AND-ed; { "$or": [ {...}, {...} ] } and { "$and": [...] } group full filter objects and nest arbitrarily. Each value is either a plain primitive (equality), or an operator dict. Operators: $eq, $ne, $gt, $gte, $lt, $lte, $between ([min,max] inclusive), $contains, $startsWith, $endsWith, $regex (Postgres syntax, case-sensitive — prefix (?i) for insensitive), $in, $nin (blanks count as not-in-list), $not (complement of an inner operator dict), $isEmpty, $isNotEmpty. Field-to-field: $eqField/$neField/$gtField/$gteField/$ltField/$lteField compare against ANOTHER field of the same row by name/id — { "Spent": { "$gtField": "Budget" } } finds over-budget rows. Example: { "Status": "todo", "Priority": { "$between": [5, 9] }, "$or": [{ "Tags": { "$contains": "urgent" } }, { "Due": { "$isEmpty": true } }] } Validation: unknown field keys, unknown operators, and operator/value type mismatches throw 400 with the valid options — typos surface immediately instead of returning all (or wrong) rows. Semantics: $contains is case-insensitive and matches LITERALLY (%, _ and \ are escaped); $eq is exact and case-sensitive with NO type coercion ({Score: "50"} does not match the number 50); { field: null } means "is empty"; $in: [] matches NOTHING. Field types: multiselect filters by MEMBERSHIP ($contains value, $in = any-of, plain scalar = has that tag). created_time/updated_time compare as dates ($gte/$lt ranges; ISO strings). Link fields filter by linked ROW ID via the relation table ($contains id, $in [ids], $isEmpty/$isNotEmpty). Caveat: $gt/$gte/$lt/$lte on text fields that store numeric-looking strings ("16", "8") use LEXICOGRAPHIC comparison, so "8" > "10" is true. Use these operators only on fields whose values are stored as proper numbers, or filter then sort/compare client-side for text-stored numerics.

sortstring

Sort spec — rowOrder, createdAt, updatedAt, or ANY FIELD NAME/ID, optionally prefixed with "-" for descending (e.g. "-Total"). Defaults to rowOrder asc. Numbers sort numerically, text case-insensitively, blanks always last; scalar lookup/rollup and self-contained formulas sort server-side too. Link fields, volatile formulas and list aggregations are not sortable (clear 400). Unknown keys throw 400 — never silently ignored.

limitnumber

Max rows per page (default: 100, max: 1000)

offsetnumber

Skip results for pagination

includeReadableboolean

Include human-readable field-name keys in output (extra cost — set true only when you need it; default false)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_filterRows",
    "arguments": {
          "tableId": "example",
          "filter": {},
          "sort": "example"
    }
  }
}
tables_searchRows

Substring search across all field values in a table. Postgres-side via data::text. No 500-row cap.

Input Schema

tableIdstringrequired

Table ID to search in

querystringrequired

Search query string. Matches anywhere in the row's serialized data (field IDs and values).

limitnumber

Max results per page (default: 50, max: 500)

offsetnumber

Skip results for pagination

includeReadableboolean

Include human-readable field names in output

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_searchRows",
    "arguments": {
          "tableId": "example",
          "query": "example",
          "limit": 0
    }
  }
}
tables_upsertRow

Create a row if no match found, or update existing row if match exists. Useful for sync operations.

Input Schema

tableIdstringrequired

Table ID

matchFieldIdstringrequired

Field ID to match on (must be unique or will update first match)

matchValueany

Value to match against

dataobjectrequired

Row data with field IDs as keys

includeReadableboolean

Include human-readable output

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_upsertRow",
    "arguments": {
          "tableId": "example",
          "matchFieldId": "example",
          "matchValue": {}
    }
  }
}
tables_getTableSchema

Get table structure/schema. Useful for understanding table layout before creating/updating rows.

Input Schema

tableIdstringrequired

Table ID

formatstring

Output format: json (full), array (simple), markdown (documentation)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getTableSchema",
    "arguments": {
          "tableId": "example",
          "format": "example"
    }
  }
}
tables_duplicateTable

Clone a table with its structure (fields) and optionally data (rows) and views.

Input Schema

tableIdstringrequired

Source table ID to duplicate

newNamestringrequired

Name for the new table

targetDatabaseIdstring

Target database ID (defaults to same database)

includeRowsboolean

Copy all rows from source table

includeViewsboolean

Copy views configuration

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_duplicateTable",
    "arguments": {
          "tableId": "example",
          "newName": "example",
          "targetDatabaseId": "example"
    }
  }
}
tables_getHelp

Get help for Tables API. Call with topic to get focused guidance.

Input Schema

topicstring

Topic: "overview", "fields", "rows", "views", "linked", "buttons"

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getHelp",
    "arguments": {
          "topic": "example"
    }
  }
}
tables_setAccessRules

Set access rules for a table. Controls who can create/read/update/delete rows in published apps. App owner always has full access.

Input Schema

tableIdstringrequired

Table ID from listTables

accessRulesobjectrequired

Access rules per operation (create/read/update/delete). Each is a Condition: a single rule, a legacy flat array (OR), or an { all | any | not } group. Rule types: public, authenticated, creator, field_match, user_property (with op: eq/ne/gt/gte/lt/lte/in/nin/contains/isEmpty/isNotEmpty), has_role, email, function. AND/OR/NOT groups + operators enable any combination.

trackCreatorboolean

Whether to track who creates each row (default: true)

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_setAccessRules",
    "arguments": {
          "tableId": "example",
          "accessRules": {},
          "trackCreator": true
    }
  }
}
tables_getAccessRules

Get access rules for a table

Input Schema

tableIdstringrequired

Table ID from listTables

Example Call

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tables_getAccessRules",
    "arguments": {
          "tableId": "example"
    }
  }
}