The gtable CLI
Coming soon. A command for every API operation, JSON output for scripts, exit codes by kind of failure. Not published yet.
What it will look like
Every operation of both APIs is a command, named after it: records.list is
gtable records list. Path parameters come first, in order; everything else is a flag, or
--body with the whole request as JSON. A new endpoint is a new command the day it ships, with
its help text already correct.
gtable records list tbl_8fj3kq2wmv5d --view-id viw_e4ks9mz2bh7w
gtable records get tbl_8fj3kq2wmv5d rec_4nqw8e2hzk7s
gtable records create tbl_8fj3kq2wmv5d --records '[{"Name":"New record","Amount":1000}]'
gtable files upload tbl_8fj3kq2wmv5d --file ./contract.pdf --record-id rec_4nqw8e2hzk7s
gtable rules simulate app_5mg8rw2kx4tn --groups grp_v6nh3ta8rk2e --table-id tbl_8fj3kq2wmv5d --op readEach page of the App API and Builder API references names its command.
Signing in
Three ways, one per situation:
gtable auth login # the Studio, in your browser
gtable auth login --target https://your-suite.gtable.app/your-app # one app
gtable auth login --device # a machine with no browserIn CI, skip the login: set GTABLE_TOKEN to one of your keys and GTABLE_URL to the Studio or
the app it is for. On a desktop, tokens are kept in the system keychain.
Made for scripts and agents
- Output is JSON whenever it is not going to a terminal, so nobody has to remember
--json. - The exit code says what kind of failure it was: 2 usage, 3 authentication, 4 not found, 5 rate limited, 6 conflict, 7 plan. The API’s error envelope goes to stderr.
- Deleting asks for the name, as the Studio does:
gtable tables delete app_5mg8rw2kx4tn tbl_x2c7nw4hq9fk --confirm "Old deals". gtable mcpwill bridge a local stdio client to the MCP server, andgtable doctorwill say whether a problem is your setup, the network or gtable.
More than MCP, by design
Two things will be possible from the CLI and not from MCP: uploading files, because a terminal can send bytes and a model cannot, and walking every page of a list, because a script can loop. Everything else is at parity by construction.