Skip to main content
Glama

Write one row in the app store

dropyour_records_write
DestructiveIdempotent

Write (or replace) ONE row in a graduated app's store, without republishing anything. The store is the app's queryable database (tier 4); this is the same table your app code reads with records.list/get. OPTIMISTIC CONCURRENCY: pass expectedUpdatedAt (the value you got from records_list) and the write is refused with version_conflict if the row changed since. Omit it to create, or to overwrite unconditionally — that is last-write-wins, and it is your choice, not an accident. The row is attributed to 'agent': authorship says WHO wrote, so it is set by the server and never accepted from you. There is no delete verb, deliberately: removing a row cannot be undone, and this platform requires a living human for anything it cannot take back.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesThe row id, unique within the collection. Writing an existing id REPLACES it.
docYesThe row content as a JSON object.
dropIdYes
collectionYesThe collection name, as your app code reads it.
managementTokenNo
expectedUpdatedAtNoThe updatedAt you read. If the row changed since, the write is refused (version_conflict) instead of silently overwriting.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Added

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already signal idempotentHint and destructiveHint, and the description adds meaningful behavioral context: version_conflict refusal on stale writes, unconditional overwrite semantics, server-side authorship attribution, and the deliberately absent delete path. It does not cover auth requirements or rate limits, but the destructive and concurrency behaviors are well disclosed.

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 longer than average but information-dense. The core action and scope are front-loaded, and every additional sentence addresses a consequential behavioral aspect: concurrency, authorship, idempotent replacement, and deletion policy. It is not padded, but the paragraph could be tightened without losing meaning.

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?

For a 6-parameter write tool with no output schema, the description covers row scope, create/replace semantics, optimistic concurrency, server attribution, and the absence of delete. It does not describe the success response shape, which remains a gap given there is no output schema, but the operational behavior is sufficiently specified for correct invocation.

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?

The description adds real semantic value beyond the schema, especially for expectedUpdatedAt: it explains that the value should come from records_list and that a mismatch produces version_conflict. It also clarifies the create-vs-replace behavior tied to id and the unconditional overwrite mode. With schema coverage at 67%, the description partially compensates for the remaining undocumented parameters, though managementToken and dropId are left to schema only.

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 opens with a specific verb-object pair: 'Write (or replace) ONE row in a graduated app's store' and immediately scopes the behavior with 'without republishing anything.' It also distinguishes the store table from read paths by noting it is the same table app code reads with records.list/get, and explicitly mentions that no delete verb exists, helping disambiguate from siblings.

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

Usage Guidelines4/5

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

The description gives clear operational guidance: pass expectedUpdatedAt for optimistic concurrency, omit it to create or overwrite unconditionally, and be aware that writes are last-write-wins. It also frames when this store-write tool is appropriate versus read operations and explains why deletion is intentionally unavailable. However, it does not explicitly contrast this tool with sibling write tools such as dropyour_write_data.

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.

TDQS

A4/5.0
Disambiguation4/5

Most tools target clearly distinct resources and actions, and descriptions do a good job separating overlapping areas like call/release/status or read_content/read_app_files. The main risk is momentary confusion between publish/replace/release and the two read-content tools, but careful reading resolves it.

Naming Consistency3/5

All names share the dropyour_ prefix and use snake_case, but the overall pattern is mixed: read_* and list_versions use verb-first naming, while records_list, secret_set, secret_delete, and secrets_list use noun-first naming, and logs/status/whoami are bare nouns. Still readable, but not a consistent verb_noun convention.

Tool Count3/5

23 tools is on the heavy side for a single server and spans several distinct subdomains: drop lifecycle, graduated apps, data, records, secrets, scheduling, and auth. Each tool appears purposeful, but the surface could reasonably be split into focused servers.

Completeness5/5

The set covers the full drop lifecycle — publish, replace, release, rollback, delete, status, settings — plus graduated app concerns like files, logs, versions, store records, app data, secrets, and scheduling. There are no obvious dead ends for the stated domain.