You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(mcp): normalize select field choices to internal API format with id, choiceOrder, disableColors, and default handling
- Add id inside each choice value (required by internal API) when normalizing both array and object-form choices
- Generate choiceOrder array automatically from choice keys when not provided
- Set disableColors: false in typeOptions (required field)
- Extract default (string for singleSelect, array for multipleSelects) from typeOptions and place at payload root level
- Update
description: 'Get the full schema of an Airtable base including all tables, fields, and views.',
176
+
description: '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: [...] }.',
description: 'List all tables in an Airtable base with their IDs and names. Uses lightweight scaffolding data.',
189
+
description: '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 }].',
description: 'Get the full schema for a single table including all fields and views.',
202
+
description: '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: [...] }.',
description: 'List fields (columns) in a table. Returns id, name, type, and typeOptions for each field. On large tables (100+ fields) use fieldType or nameContains to filter the response and reduce context size.',
216
+
description: '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 }].',
text / multilineText / checkbox / rating: omit typeOptions entirely — passing {} causes a 422
504
505
505
-
SELECT CHOICES: pass an array of { name, color? } objects — the client auto-converts to the object format the internal API requires and generates valid choice IDs.`,
506
+
SELECT CHOICES:
507
+
- Pass choices as an array [{ name, color? }] or as an object { selXXX: { name, color? } }.
508
+
- The client auto-adds id inside each choice value, generates choiceOrder, and sets disableColors: false.
@@ -530,7 +536,7 @@ SELECT CHOICES: pass an array of { name, color? } objects — the client auto-co
530
536
},
531
537
{
532
538
name: 'create_formula_field',
533
-
description: 'Create a new formula field in a table. Shorthand for create_field with type "formula".',
539
+
description: '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 }.',
@@ -637,7 +646,7 @@ REPLACING ALL CHOICES: just pass the new choices without any IDs.`,
637
646
},
638
647
{
639
648
name: 'update_formula_field',
640
-
description: 'Update the formula text of an existing formula field. Shorthand for update_field_config with type "formula".',
649
+
description: '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.',
@@ -671,7 +680,7 @@ REPLACING ALL CHOICES: just pass the new choices without any IDs.`,
671
680
},
672
681
{
673
682
name: 'delete_field',
674
-
description: '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.',
683
+
description: '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.',
description: '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+).',
945
+
description: '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.',
description: '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.',
1127
+
description: '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.',
@@ -1131,7 +1140,7 @@ For section reorders, targetIndex is into the table's top-level mixed viewOrder;
1131
1140
},
1132
1141
{
1133
1142
name: 'show_or_hide_all_columns',
1134
-
description: '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.',
1143
+
description: '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.',
@@ -1146,7 +1155,7 @@ For section reorders, targetIndex is into the table's top-level mixed viewOrder;
1146
1155
},
1147
1156
{
1148
1157
name: 'move_visible_columns',
1149
-
description: '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).',
1158
+
description: '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.',
0 commit comments