Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_base_schemaA

Get the full schema of an Airtable base including all tables, fields, and views.

list_tablesA

List all tables in an Airtable base with their IDs and names. Uses lightweight scaffolding data.

get_table_schemaA

Get the full schema for a single table including all fields and views.

list_fieldsA

List all fields (columns) in a specific table of an Airtable base.

list_viewsA

List all views in a specific table with their IDs, names, and types.

get_viewA

Read a view's live configuration from the base. Returns filters, sorts, groupLevels, columnOrder (rich per-column visibility + width), frozenColumnCount, colorConfig, metadata (view-type specific, e.g. gallery cover, calendar date field), rowHeight, description. Use this before update_view_filters / apply_view_sorts / update_view_group_levels to audit current state and choose between replace and append modes.

Data source: internally hits /v0.3/table/{tableId}/readData with includeDataForViewIds=[viewId]. The application/read endpoint alone does NOT return filter/sort/group state — that's why the update tools need either "append" mode or a prior get_view call to merge safely.

Fields:

  • filters: { filterSet: [...], conjunction: "and"|"or" } | null

  • sorts: [{ id, columnId, ascending }] | null (stored as lastSortsApplied internally)

  • groupLevels: [{ id, columnId, order, emptyGroupState }] | null

  • columnOrder: [{ columnId, visibility, width? }]

  • visibleColumnOrder: [columnId] — derived from columnOrder for convenience

  • metadata: type-specific config (gallery.coverColumnId, calendar.dateColumnId, etc.)

create_tableA

Create a new table in an Airtable base. Returns the generated table ID. The table starts with default fields (Name, Notes, Attachments, Status, etc.) — use list_fields after creation to inspect them.

rename_tableB

Rename a table in an Airtable base.

delete_tableA

Delete a table from an Airtable base. Requires both tableId AND the expected table name as a safety guard — refuses to delete if the name does not match. Airtable rejects deleting the last remaining table in a base.

list_record_templatesA

List all record templates for a table. Templates are embedded in the base scaffolding data. If the templates array is empty, pass debug:true and inspect the raw response to locate the templates key — the API path may vary by base.

create_record_templateA

Create a new record template for a table. Returns the generated templateId (rtp-prefixed). After creating, use set_record_template_cell to pre-fill field values.

rename_record_templateA

Rename an existing record template.

update_record_template_descriptionA

Set or update the description text of a record template.

set_record_template_cellA

Pre-fill a field value on a record template.

CELL OBJECT TYPES (verified via API capture 2026-05-01):

Static value (text, number, boolean, single-select choice ID): { "type": "static", "value": "some text" } { "type": "static", "value": 42 } { "type": "static", "value": true } { "type": "static", "value": "selXXXXXXXXXXXXXX" } ← single-select: pass choice ID

Linked record(s): { "type": "linkedRows", "value": [{ "foreignRowId": "recXXX", "foreignRowDisplayName": "Record Name" }] }

To clear a field, omit the cellObject or pass null value.

set_record_template_visible_columnsA

Set which columns are shown (pre-fillable) on a record template. Pass an empty array to show all columns. isPartialSelection:true means only listed columns are shown; false means all are shown.

duplicate_record_templateA

Duplicate a record template within the same or a different table. Returns the new template ID.

apply_record_templateA

Apply (instantiate) a record template to create a new record pre-filled with the template's field values. Returns the new record data.

delete_record_templateA

⚠️ DESTRUCTIVE — Permanently delete a record template. This cannot be undone.

create_fieldA

Create a new field in an Airtable table. Supports all field types including computed fields (formula, rollup, lookup, count) that are not available via the official API.

FIELD TYPES (fieldType parameter): Canonical (internal-API names): "text", "multilineText", "number", "checkbox", "date", "singleSelect", "multipleSelects", "rating", "formula", "rollup", "lookup", "count" Friendly aliases (auto-normalized to internal shape): "url" → type: "text" with typeOptions.validatorName = "url" "email" → type: "text" with typeOptions.validatorName = "email" "phone" / "phoneNumber" → type: "text" with typeOptions.validatorName = "phoneNumber" "dateTime" → type: "date" with typeOptions: { isDateTime: true, dateFormat, timeFormat, timeZone, shouldDisplayTimeZone }

TYPE OPTIONS by fieldType: formula: { formulaText: "..." } rollup: { fieldIdInLinkedTable, recordLinkFieldId, resultType, referencedFieldIds } lookup: { recordLinkFieldId, fieldIdInLinkedTable } count: { recordLinkFieldId } number (integer): { format: "integer", negative: false } number (currency): { format: "currency", symbol: "$", precision: 2, negative: false } number (percent): { format: "percentV2", precision: 2, negative: false } date / dateTime: { dateFormat: "Local"|"us"|"european"|"iso"|"friendly", timeFormat: "12hour"|"24hour", timeZone: "UTC"|"client"|, shouldDisplayTimeZone: true|false, isDateTime: true (auto for dateTime) } singleSelect: { choices: [{ name: "Option A", color: "blueLight2" }] }

create_formula_fieldB

Create a new formula field in a table. Shorthand for create_field with type "formula".

validate_formulaA

Validate a formula expression before creating or updating a formula field. Returns whether the formula is valid and what result type it produces (text, number, etc). Use this before create/update to catch errors early.

update_field_configB

Update the configuration of any computed field (formula, rollup, lookup, count, etc). Use this to change formula text, rollup settings, etc.

update_formula_fieldA

Update the formula text of an existing formula field. Shorthand for update_field_config with type "formula".

rename_fieldA

Rename a field (column) in an Airtable table. Pre-validates the field exists before mutating.

delete_fieldA

Delete a field from an Airtable table. Requires both fieldId AND the expected field name as a safety guard. First checks for downstream dependencies — if found, returns dependency info instead of deleting. Set force=true to delete even with dependencies.

create_viewA

Create a new view in an Airtable table. Optionally copy configuration from an existing view. View types: "grid", "form", "kanban", "calendar", "gallery", "gantt", "levels" (list view).

duplicate_viewA

Duplicate an existing view with all its configuration (filters, sorts, field visibility, etc).

rename_viewB

Rename a view.

delete_viewA

Delete a view from a table. Cannot delete the last remaining view in a table.

update_view_descriptionA

Update the description text of a view.

update_view_filtersA

Update the filter configuration of a view. Supports AND/OR conjunctions, nested filter groups, and Airtable's internal filter operators.

FILTER FORMAT: Leaf filter: { columnId: "fldXXX", operator: "", value: } Nested group: { type: "nested", conjunction: "and"|"or", filterSet: [...] } Clear filters: { filterSet: [], conjunction: "and" } (or pass filters: null)

Filter IDs (flt-prefixed) are auto-generated — do NOT include them.

OPERATORS by field type — verified against Airtable's internal API (2026-04-17 capture; user report 2026-04-30): Text / URL / Email / Phone: "=" (exact match — value: string) "!=" (not equal) "contains" (value: string) "doesNotContain" "isEmpty" / "isNotEmpty" — input-side; auto-rewritten to "=" / "!=" "" before sending (the internal API rejects them on text fields with FAILED_STATE_CHECK) Number / Percent / Currency: "=", "!=", "<", ">", "<=", ">=", "isEmpty", "isNotEmpty" Single select: "=" (value: "selXXX" — the choice ID, NOT the choice name) "!=" "isAnyOf" / "isNoneOf" (value: ["selXXX", "selYYY"] — array of choice IDs) "isEmpty" / "isNotEmpty" Multiple select: "hasAnyOf", "hasAllOf", "hasNoneOf", "isExactly", "isEmpty", "isNotEmpty" Checkbox: "=" (value: true|false) Date (absolute): "is", "isBefore", "isAfter", "isOnOrBefore", "isOnOrAfter", "isEmpty", "isNotEmpty" value: ISO date string e.g. "2026-01-15" Date (relative) — "isWithin": value: { "mode": "", "timeZone": "", "shouldUseCorrectTimeZoneForFormulaicColumn": true } timeZone: IANA string e.g. "Europe/Istanbul", "America/New_York", "UTC" Modes (no numberOfDays): "pastWeek", "pastMonth", "pastYear", "nextWeek", "nextMonth", "nextYear", "thisCalendarMonth", "thisCalendarYear" Modes (add numberOfDays key): "pastNumberOfDays", "nextNumberOfDays" Example — past week: { "operator": "isWithin", "value": { "mode": "pastWeek", "timeZone": "UTC", "shouldUseCorrectTimeZoneForFormulaicColumn": true } } Example — past N days: { "operator": "isWithin", "value": { "mode": "pastNumberOfDays", "numberOfDays": 7, "timeZone": "UTC", "shouldUseCorrectTimeZoneForFormulaicColumn": true } } Example — this month: { "operator": "isWithin", "value": { "mode": "thisCalendarMonth", "timeZone": "UTC", "shouldUseCorrectTimeZoneForFormulaicColumn": true } } Formula / Lookup / Rollup (text result type): Same as Text. "isEmpty" / "isNotEmpty" are auto-rewritten to "=" / "!=" "". Linked record (foreignKey): "contains" (value: linked record name) works. "isEmpty" / "isNotEmpty" do NOT work — the call throws a clear error directing you to a helper formula like IF(LEN({Linked} & "")>0,"yes","") and a "=" / "!=" filter on that helper.

AUTO-NORMALIZATION (applied client-side before the request):

  • "is" → "=" (the internal API does not recognize "is")

  • "isNot" → "!="

  • "isAnyOf" with a single-element array or scalar value → "=" with scalar value

  • "isEmpty" → "=" "" on text / formula(text) / lookup(text) / rollup(text) fields

  • "isNotEmpty" → "!=" "" on text / formula(text) / lookup(text) / rollup(text) fields For single-select, value must be the choice ID (selXXX) — use get_base_schema to find IDs.

NESTING LIMIT: The internal API accepts at most 2 levels of nesting (top conjunction + one layer of nested groups). Deeper trees are rejected with FAILED_STATE_CHECK. Workaround: flatten by repeating shared conditions inside each leaf group, e.g. (A AND B) OR (A AND C) instead of A AND (B OR C) if you need another nested AND inside the OR. The error message returned by this tool flags depth-related failures explicitly.

EXAMPLES: Text equals: { filterSet: [{ columnId: "fldXXX", operator: "=", value: "Prime" }], conjunction: "and" } SingleSelect equals: { filterSet: [{ columnId: "fldXXX", operator: "=", value: "selABC123" }], conjunction: "and" } Text contains: { filterSet: [{ columnId: "fldXXX", operator: "contains", value: "hello" }], conjunction: "and" } Number range: { filterSet: [{ columnId: "fldX", operator: ">=", value: 10 }, { columnId: "fldX", operator: "<=", value: 100 }], conjunction: "and" } Nested (a AND (b OR c)): { filterSet: [{ columnId: "fldA", operator: "contains", value: "x" }, { type: "nested", conjunction: "or", filterSet: [{ columnId: "fldB", operator: "=", value: 1 }] }], conjunction: "and" }

reorder_view_fieldsA

Reorder the fields (columns) displayed in a view. Accepts a partial map: pass only the field IDs you want to move, e.g. { "fldX": 1 } to move fldX to position 1. Other fields keep their relative order. Index 0 is the leftmost position after the primary field. Internally the tool reads the view's current columnOrder, applies the moves, and sends the complete map (the underlying internal API rejects single-key inputs with FAILED_STATE_CHECK — user report 2026-04-30 §2.6).

show_or_hide_view_columnsA

Show or hide specific fields (columns) in a view. Pass an array of column IDs and a single visibility flag — every ID in the array is set to that visibility. To toggle many fields at once, send the full set in one call (no separate "show all" / "hide all" tool exists today; that lives in 2.4.0+).

apply_view_sortsA

Apply sort conditions to a view. Default mode replaces all existing sorts — pass an empty array with operation="replace" to clear. Use operation="append" to add new sorts on top of the view's existing sort stack without rewriting them.

update_view_group_levelsA

Set grouping on a view. Default mode replaces all existing group levels — pass an empty array with operation="replace" to clear grouping. Use operation="append" to add new group levels below the existing ones without rewriting them.

update_view_row_heightA

Change the row height of a grid view.

list_view_sectionsA

List all sidebar sections for a table. Sections are user-organized groupings of views in the Airtable left sidebar (e.g. "🚀 Posting workflow", "🗑️ Sold workflow"). Returns each section's id, name, and the views inside it. The table-level tableViewOrder is a mixed list of view IDs and section IDs at the top level — when a view is inside a section, it appears in that section's viewOrder, NOT in the table's.

create_view_sectionA

Create a new sidebar section in a table. Returns the new section ID (vsc-prefixed). Use move_view_to_section to populate it with views.

rename_view_sectionA

Rename a sidebar section.

delete_view_sectionA

Delete a sidebar section. Views inside the section are NOT deleted — Airtable auto-promotes them to ungrouped at the table-level position the section used to occupy. Verified 2026-04-30.

move_view_to_sectionA

Move a view (or a section itself) within the sidebar. The single endpoint covers four user actions depending on the arguments:

  • viewId + sectionId → put the view INTO that section at targetIndex

  • viewId + sectionId: null → move the view OUT to ungrouped at table-level targetIndex

  • sectionId-as-viewIdOrSectionId + targetIndex → reorder the section among other sections

  • viewId + same section → reorder the view within its current section For section reorders, targetIndex is into the table's top-level mixed viewOrder; for in-section moves, it's into that section's viewOrder.

set_view_columnsA

One-shot view-column setup. Hides every column in the view, then shows only visibleColumnIds in the order given (left-to-right), then optionally sets the frozen-column divider. Use this to turn a brand-new view from "all 168 fields visible" into a curated layout in a single tool call.

show_or_hide_all_columnsA

Show or hide every column in a view in one call. Use set_view_columns for "hide all then show these specific ones" — this tool is the bulk all-or-nothing primitive.

move_visible_columnsA

Move one or more columns to a new position in the visible-only index. Index 0 is the leftmost visible column. Distinct from reorder_view_fields (which writes the full overall order — visible + hidden) and move_overall_columns (which also operates on overall index but accepts a partial array of columns to move).

move_overall_columnsA

Move one or more columns to a new position in the overall index (visible + hidden). Sibling of move_visible_columns. Index 0 is the leftmost column in the underlying full order.

update_frozen_column_countA

Set the frozen-column divider position for a grid view. The first N columns from the left are frozen and stay visible during horizontal scroll.

set_view_coverA

Set the cover-image field and crop/fit mode for Kanban or Gallery views. Pass coverColumnId: null to remove the cover. Either field can be passed independently — the other is left untouched.

set_view_color_configA

Apply a color config to a view (Kanban / Gallery / Calendar). Currently supports type: "selectColumn" — card colors are taken from a single-select field's choice colors. Other types (e.g. rule-based coloring) exist in Airtable's UI but their payload shapes have not been fully captured yet — passing an unknown type is forwarded as-is so callers can experiment.

set_view_cell_wrapA

Toggle whether long cell values wrap (multi-line) or truncate (single-line with ellipsis).

set_calendar_date_columnsA

Set the date-column ranges shown on a Calendar view. Each entry is either { startColumnId } for single-point events or { startColumnId, endColumnId } for range events. The array form lets a single calendar overlay multiple date series at once (e.g. "Created date" + "Start → End range" together).

set_form_metadataA

Update one or more legacy-form-view metadata properties in a single call. Unset properties are not touched. Each property fans out to its own atomic Airtable endpoint.

Supported properties: description — intro text shown above the form afterSubmitMessage — "thank you" text after submission redirectUrl — URL to redirect to after submit refreshAfterSubmit — post-submit behavior (e.g. "REFRESH_BUTTON") shouldAllowRequestCopyOfResponse — boolean: show "send me a copy" toggle to respondents shouldAttributeResponses — boolean: track which user submitted (for signed-in respondents) isAirtableBrandingRemoved — boolean: hide Airtable branding (paid plans only)

Note: "form title" is the view name itself — use rename_view to change it. "Field labels on the form" use a per-field endpoint that has not been captured yet.

set_form_submission_notificationA

Toggle email-on-submit notifications for a specific user on a form view. Per-user, not per-form (separate from set_form_metadata).

update_field_descriptionA

Update the description text of a field.

duplicate_fieldA

Duplicate (clone) a field in a table. Optionally also duplicate the cell values.

create_extensionA

Create a new extension (block) in an Airtable base. Returns the block ID needed for installation. Use this to register custom extensions before installing them.

create_extension_dashboardC

Create a new extension dashboard page in a base. Extensions are installed onto dashboard pages.

install_extensionA

Install an extension onto a dashboard page. Requires a block ID (from create_extension) and a page ID (from create_extension_dashboard).

update_extension_stateA

Enable or disable an extension installation.

rename_extensionA

Rename an installed extension.

duplicate_extensionB

Duplicate an installed extension on a dashboard page.

remove_extensionA

Remove an installed extension from a dashboard.

manage_toolsA

Control which tools are available. Actions: list_profiles, switch_profile, get_tool_status, toggle_tool, toggle_category. Use this to switch between read-only, safe-write, full, or custom profiles, or enable/disable individual tools.

Active profile: "full" — all tools enabled.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Automations-Project/VSCode-Airtable-Formula'

If you have feedback or need assistance with the MCP directory API, please join our Discord server