Skip to main content
Glama

update_view_filters

Idempotent

Update the filter configuration of an Airtable view. Supports AND/OR conjunctions, nested filter groups, and Airtable's internal filter operators for precise record filtering.

Instructions

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" }

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
appIdYesThe Airtable base/application ID
viewIdYesThe view ID to update filters on (e.g. "viwXXX")
filtersYesFilter configuration object with filterSet array and conjunction. See tool description for format and examples.
operationNoHow the given filters interact with existing filters. "replace" (default) overwrites; "append" adds the provided filterSet entries to the existing top-level filterSet (useful when you only want to add conditions without rewriting the whole filter payload).
debugNoWhen true, include raw Airtable response in output for diagnostics
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide basic safety info (readOnlyHint=false, destructiveHint=false, idempotentHint=true). The description adds extensive behavioral context: auto-normalization rules, nesting limits, operator-specific behavior by field type, and workarounds for linked record filtering. This goes well beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but well-structured with clear section headers (FILTER FORMAT, OPERATORS, AUTO-NORMALIZATION, etc.) and front-loaded purpose. While it could be slightly more concise, every section is justified by the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested filters, many operators, nesting limits), the description covers all critical aspects. It lacks explicit return value description, but for a tool that updates filters, the output is mostly confirmation. Overall, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds significant value beyond schema by detailing the filter object structure, providing examples, explaining auto-normalization, and clarifying operator usage per field type. This enhances the schema meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Update the filter configuration of a view' with a specific verb and resource. It clearly distinguishes from sibling tools like apply_view_sorts or set_view_columns, as none of those update filters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives. It implies usage through detailed filter format examples but lacks 'when not to use' or direct comparison with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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