MCP tools

Sixteen meta-tools cover every app — no per-doc tools, ever.

Rowly stays well under the 40-tool Cursor cap by exposing generic tools that accept a doc name as a parameter. The MCP tool names themselves keep the legacy doc spelling so existing AI agents keep working unchanged. Discovery tools let the AI introspect the schema before constructing payloads, so it can self-correct instead of hallucinating fields.

App management

Create, list, and archive named workspaces.

  • list_apps — List apps the caller can access. [read-only]
  • create_app — Create a new named workspace.
  • get_app — Fetch one app with its member list. [read-only]
  • archive_app — Two-step destructive archive with confirm_token. [destructive]

Membership

Invite, list, promote, and remove members inside an app.

  • list_members — List members + roles for the app. [read-only]
  • invite_member — Send an email invite with a role.
  • update_member_role — Change a member's role.
  • remove_member — Two-step removal with confirm_token. [destructive]

Discovery

Introspect docs so AI can self-correct payloads.

  • list_docs — List docs in the current app. [read-only]
  • get_doc_schema — Fetch the compiled schema + meta for a doc. [read-only]
  • list_workflows — List workflows attached to a doc. [read-only]

CRUD

Generic create / read / query / update / delete against any doc — not per-doc tools.

  • create_record — Create a record; supports idempotency_key.
  • get_record — Fetch one record by id. [read-only]
  • query_records — Cursor-paginated query with filters and response_format modes. [read-only]
  • update_record — Optimistic-lock update using version. [idempotent]
  • delete_record — Two-step destructive delete with confirm_token. [destructive]

Workflow + admin

Drive state transitions and define new docs.

  • run_workflow_action — Run a named action on a record, enforcing role + CEL condition.
  • define_doc — Create / update a doc schema. dry_run defaults to true in production. [destructive]

Tool annotations

Hints the server sets so MCP clients can render safer UX.

  • openWorldHint: false on every tool — Rowly is a closed D1 world, not a web fetcher.
  • readOnlyHint: true on all list_*, get_*, plus search + fetch.
  • destructiveHint: true on delete_record, archive_app, and other two-step mutations.
  • idempotentHint: true on update_record.