Filter Syntax

Filters are used in hypertab_query_rows, hypertab_update_rows, hypertab_delete_rows, and hypertab_count_rows. The format is { column: { operator: value } }.

Operators

OperatorDescriptionExample
eqEquals (exact match){ "status": { "eq": "active" } }
neqNot equals{ "status": { "neq": "deleted" } }
gtGreater than{ "size": { "gt": 100 } }
gteGreater than or equal{ "size": { "gte": 100 } }
ltLess than{ "size": { "lt": 50 } }
lteLess than or equal{ "size": { "lte": 50 } }
containsString contains (case-insensitive){ "name": { "contains": "corp" } }
starts_withString starts with{ "email": { "starts_with": "john" } }
inValue is one of the given array values{ "status": { "in": ["active", "pending"] } }
betweenValue is between two numbers (inclusive){ "size": { "between": [100, 500] } }
is_nullValue is null / missing{ "email": { "is_null": true } }
is_not_nullValue exists and is not null{ "email": { "is_not_null": true } }

Combining Filters

Multiple column filters in the same where object are AND-combined automatically. A row must match ALL conditions.

Multiple filters (AND)
{
  "where": {
    "status": { "eq": "active" },
    "size": { "gte": 100 },
    "industry": { "in": ["SaaS", "Fintech"] },
    "email": { "is_not_null": true }
  }
}
i
OR Logic
Currently, top-level filters are always AND-combined. For OR logic, use the in operator for same-column alternatives (e.g. { "status": { "in": ["active", "pending"] } }).

Type-Specific Usage

Text / Email / URL / Phone

Use eq, neq, contains, starts_with, is_null.

{ "email": { "contains": "@acme.com" } }
Number / Currency

Use eq, gt, gte, lt, lte, between.

{ "revenue": { "between": [100000, 500000] } }
Select / Multi-select

Use eq, neq, in, contains (for multi-select to match any tag).

{ "tags": { "contains": "enterprise" } }
Boolean

Use eq with true or false.

{ "is_verified": { "eq": true } }
Datetime

Use gt, lt, between with ISO 8601 strings.

{ "_ht_created_at": { "gt": "2026-01-01T00:00:00Z" } }

Sorting

Sort by one or more columns. Each column can be "asc" or "desc". Default sort is _ht_created_at DESC.

Sort by multiple columns
{
  "order_by": {
    "score": "desc",
    "name": "asc"
  }
}

Pagination

Use limit and offset for pagination. The response includes total and has_more to help navigate.

Paginated query
{
  "tool": "hypertab_query_rows",
  "arguments": {
    "table": "leads",
    "where": { "status": { "eq": "active" } },
    "order_by": { "score": "desc" },
    "limit": 25,
    "offset": 50
  }
}
*
Via the REST API, pass limit=0 to return all matching rows without pagination. This is not available through MCP tools (capped at 100).