Skip to main content
Glama

Get App Feed Events

get_feed_events
Read-onlyIdempotent

Poll a v2 app's change feed for what has happened: row creates, updates and deletes, from any writer, agent or human. It is the long-poll analogue of homespun apps watch, since MCP has no streaming. The loop is: call with no since first, process the returned entries, keep the cursor, then call again passing it as since to get only newer entries. Passing wait (around 25) holds the request open until an entry arrives or it times out, which is how the feed is waited on rather than busy-polled. A since older than the retention floor returns resync_required, and the collections are then re-listed with list_rows. Returns { entries, cursor, truncated }.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
waitNoOptional long-poll: how long the relay holds the request open waiting for a new entry (0-30s). Use ~25 when waiting for activity, then call again with the same cursor.
limitNoMax entries per page (capped server-side by FEED_PAGE_MAX).
sinceNoOpaque numeric cursor from a previous call's cursor. Omit (or 0) to read from the beginning.
app_idYesThe app id.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, and the description goes well beyond them: long-poll hold semantics, the retention floor triggering resync_required, the truncated flag, and the literal return shape { entries, cursor, truncated }. For a polling tool with no output schema, this is exactly the context an agent needs.

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?

Dense and front-loaded: purpose first, then the operational loop, then edge cases and return shape. Every sentence carries information, though the final return-shape sentence reads slightly list-like. No filler or restatement of the title.

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

Completeness5/5

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

With no output schema, the description compensates by disclosing the return payload and the resync failure mode. Combined with the polling loop and the wait parameter guidance, an agent has everything needed to call and drive this tool correctly.

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 the schema already documents all four parameters; baseline would be 3. The description adds workflow-level meaning the schema cannot (why wait ~25, how the cursor is carried forward and reused), which ties the parameters into a coherent protocol.

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?

States a specific verb and resource ('Poll a v2 app's change feed') and enumerates the event kinds (row creates, updates, deletes) from any writer. It also positions itself against the sibling list_rows for resync, so an agent can distinguish it from the row-level CRUD tools without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit call loop (call with no `since`, process, keep cursor, re-call passing it as `since`), explains when to use `wait` (~25) versus busy-polling, and names the fallback (list_rows) when resync_required is returned. This is the rare case of full when/when-not/alternative coverage.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.