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
}
prompts
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_base_schemaA

Get the full schema of an Airtable base — all tables, fields (with typeOptions), and views in one call. Use this when you need fields or views; use list_tables when you only need table names/IDs (faster, lighter). Returns { tables: [...] }.

list_tablesA

List all tables in a base with their IDs and names — lightweight scaffolding call (no field data). Use this when you only need table IDs/names; use get_base_schema or get_table_schema when you also need fields or views. Returns [{ id, name }].

get_table_schemaA

Get the full schema for a single table — all fields (with typeOptions) and views. Use instead of get_base_schema when you only need one table (faster, less context). Use list_fields when you need fields only without view data. Returns { id, name, fields: [...], views: [...] }.

list_fieldsA

List fields in a table — returns id, name, type, and typeOptions per field. Use instead of get_table_schema when you need fields only (no view data). Use fieldType or nameContains filters on large tables to reduce context size. Returns [{ id, name, type, typeOptions }].

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_tableA

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_templateB

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): Supported names: "text", "multilineText", "number", "checkbox", "date", "singleSelect", "multipleSelects", "rating", "formula", "rollup", "lookup", "count" Friendly aliases (auto-normalized): "url" → type: "text" with validatorName = "url" "email" → type: "text" with validatorName = "email" "phone" / "phoneNumber" → type: "text" with validatorName = "phoneNumber" "dateTime" → type: "date" with isDateTime: true

TYPE OPTIONS by fieldType: formula: { formulaText: "..." } rollup: { relationColumnId: "fldLINK", foreignTableRollupColumnId: "fldTARGET", formulaText: "SUM(values)" } (formulaText is REQUIRED — e.g. "SUM(values)", "COUNTA(values)", "IF(OR(values='X'),1,0)")) (old keys fieldIdInLinkedTable/recordLinkFieldId are auto-translated for backward compat) lookup: { relationColumnId: "fldLINK", foreignTableRollupColumnId: "fldTARGET" } (old keys fieldIdInLinkedTable/recordLinkFieldId are auto-translated for backward compat) 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: "blue" }], default: "selXXX" } multipleSelects: { choices: [{ name: "PC", color: "blue" }, { name: "Xbox", color: "cyan" }], default: ["selXXX"] } text / multilineText / checkbox / rating: omit typeOptions entirely — passing {} causes a 422

SELECT CHOICES:

  • Pass choices as an array [{ name, color? }] or as an object { selXXX: { name, color? } }.

  • The client auto-adds id inside each choice value, generates choiceOrder, and sets disableColors: false.

  • Color names (confirmed): "blue", "cyan", "teal", "green", "yellow", "orange", "red", "pink", "purple", "gray".

  • "default" sets the pre-selected value: string ID for singleSelect, array of IDs for multipleSelects.

  • To add/remove choices without losing existing ones, call get_table_schema first and include ALL choices in the update.

create_formula_fieldA

Create a new formula field — shorthand for create_field with type "formula". Use create_field for all other field types (singleSelect, rollup, number, etc.). Returns { columnId }.

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.

download_formula_fieldA

Download the formula text of a formula field to a local file. Writes a .formula file with a # AT: metadata header (appId, tableId, fieldId, fieldName) so the file can later be uploaded back with update_formula_field or the VS Code right-click command. When outputPath is omitted, returns the formula text without writing a file.

download_base_formulasA

Download ALL formula fields from a base to local .formula files, organized into per-table subfolders. Each file includes a # AT: header with appId, tableId, fieldId, fieldName, description, and resultType. Tables with no formula fields are silently skipped. outputDir defaults to the current working directory when omitted.

update_field_configA

Update the configuration of any field — computed OR non-computed. Works for formula, rollup, lookup, count, singleSelect, multipleSelects, number, date, text, and all other field types.

COMMON typeOptions by fieldType:

formula: { formulaText: "IF({Field}, 1, 0)" } rollup: { relationColumnId: "fldLINK", foreignTableRollupColumnId: "fldTARGET", formulaText: "SUM(values)" } (formulaText is REQUIRED; old keys fieldIdInLinkedTable/recordLinkFieldId auto-translated) lookup: { relationColumnId: "fldLINK", foreignTableRollupColumnId: "fldTARGET" } (old keys fieldIdInLinkedTable/recordLinkFieldId auto-translated) count: { recordLinkFieldId: "fldXXX" } singleSelect: { choices: [{ name: "Option A", color: "blue" }], default: "selXXX" } multipleSelects: { choices: [{ name: "PC", color: "blue" }, { name: "Xbox", color: "cyan" }], default: ["selXXX"] } number: { format: "integer"|"decimal"|"currency"|"percentV2", precision: 2, symbol: "$", negative: false } text / multilineText / checkbox: omit typeOptions entirely — passing {} causes a 422

SELECT CHOICES:

  • Pass choices as array [{ name, color? }] or object { selXXX: { name, color? } }.

  • Color names (confirmed): "blue", "cyan", "teal", "green", "yellow", "orange", "red", "pink", "purple", "gray".

  • "default" = pre-selected value: string ID for singleSelect, array of IDs for multipleSelects.

ADDING TO AN EXISTING SELECT FIELD (merge, not replace): Choices not in the list are DELETED. To add without losing existing choices:

  1. Call get_table_schema — each existing choice has { id, name, color }

  2. Pass the full list: existing entries WITH their id, new entries WITHOUT: { choices: [{ id: "selXXXXXXXXXXXXXX", name: "Existing" }, { name: "New Choice", color: "pink" }] }

REPLACING ALL CHOICES: just pass the new choices without any IDs.

update_formula_fieldA

Update the formula body of an existing formula field — shorthand for update_field_config with type "formula". Automatically preserves existing format/precision typeOptions (e.g. percentV2, precision). Use update_field_config to change the field type or other typeOptions.

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 fieldId AND expectedName as a safety guard — deletion is refused if the name does not match. ⚠️ Irreversible: deleted field data is permanently lost and cannot be recovered. Always checks downstream dependencies first (formula fields, lookups, rollups referencing this field); returns dependency info without deleting unless force=true.

delete_fieldsA

Delete multiple fields from an Airtable table in a single call. Each entry requires fieldId and expectedName as a safety guard (deletion is refused if names do not match). Fields are processed sequentially and all are attempted even if some fail — partial results are always returned. Optionally writes a JSON checkpoint file after each deletion so the batch can be resumed if interrupted.

create_viewB

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_viewC

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 columns in a view without affecting others. Pass field IDs + a visibility flag — every listed ID is set to that state, all other columns are untouched. Use set_view_columns instead when you want to define the full visible set from scratch. Use show_or_hide_all_columns to bulk-toggle every column at once.

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_sectionB

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 reset: hides every column then shows only visibleColumnIds in the given left-to-right order, with optional freeze. Use this for fresh view setup or full layout rewrites. Use show_or_hide_view_columns when you only want to toggle specific columns without touching the rest.

show_or_hide_all_columnsA

Show or hide every column in a view in one call. Use when you want a clean all-visible or all-hidden baseline. Use set_view_columns when you want to show a specific subset (it hides all then shows only the listed IDs). Use show_or_hide_view_columns for selective per-column toggles.

move_visible_columnsA

Move columns by visible-only index (index 0 = leftmost shown column, hidden columns not counted). Use when you want to position relative to what the user sees. Use move_overall_columns when you need to position relative to the full underlying column order including hidden fields. ⚠️ The API preserves existing relative order of supplied IDs — to place columns in a custom sequence, issue one call per column with incrementing targets.

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_fieldB

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_dashboardB

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_stateB

Enable or disable an extension installation.

rename_extensionC

Rename an installed extension.

duplicate_extensionB

Duplicate an installed extension on a dashboard page.

remove_extensionB

Remove an installed extension from a dashboard.

query_recordsA

Read records from an Airtable table view. Returns resolved field values including lookup fields. Supports optional client-side text search across all field values — unlike the REST API filterByFormula approach, this search works correctly on lookup fields. Fetch up to 1000 records per call.

duplicate_recordsA

Duplicate one or more existing records within a table. Creates exact copies of the specified source records in the same table and view. Returns the new record IDs.

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
airtable-fix-formulaDebug and fix an Airtable formula error or unexpected result
airtable-create-formulaCreate an Airtable formula from a plain-language description
airtable-inspect-baseExplore and summarise the schema of an Airtable base
airtable-setup-viewConfigure an Airtable view — filters, sorts, groups, and column order
airtable-manage-select-choicesAdd, remove, or replace choices on a singleSelect or multipleSelects field
airtable-search-recordsSearch for records in an Airtable table by text, including lookup field values
airtable-setup-rollup-lookupCreate or update a rollup or lookup field with guided field-ID resolution
airtable-build-tableDesign and create a complete table structure from plain-language requirements
airtable-bulk-formula-editDownload all formula fields from a base, edit them offline, then upload changes
airtable-validate-formulaValidate an Airtable formula and show its result type

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