Tool catalog
Every tool on the admin and user endpoints with what it does and the API it wraps, plus the typical build order.
Admin endpoint#
Collections and fields:
| Tool | Purpose |
|---|---|
list_collections | list collections (also on the user endpoint) |
get_collection_schema | fields, types, relationships of one collection (also on user) |
create_collection | create a collection, optionally with an initial field set |
apply_collection | create-or-update a collection with its fields, field-scoped picklist values and displayFieldName in one call, keyed on name (fields on fieldName); fields not named are left alone |
update_collection | display name, display field, description |
delete_collection | drop a collection and its records — irreversible |
add_field | add a field; friendly type aliases, picklist and lookup payloads assembled for you |
update_field | mutable attributes (not type or name) |
remove_field | drop a field and its data |
Picklists, rules and constraints:
| Tool | Purpose |
|---|---|
list_picklists, get_picklist | global picklists and values |
create_picklist, apply_picklist | create / create-or-update with values (prune deactivates) |
apply_field_picklist | create-or-update the values owned by one picklist field (add the field with picklistSourceType: "FIELD" first) |
add_picklist_value, update_picklist_value, deactivate_picklist_value, delete_picklist | value lifecycle |
list_validation_rules, create_validation_rule, update_validation_rule, delete_validation_rule | formula error conditions |
list_unique_constraints, create_unique_constraint, delete_unique_constraint | composite unique constraints |
User experience:
| Tool | Purpose |
|---|---|
apply_layout | whole page-layout tree, keyed on collection + name (create_layout is deprecated) |
update_layout, delete_layout | layout metadata / removal |
list_listviews, create_listview, apply_listview, update_listview, delete_listview | shared list views; viewType/typeConfig on create, apply and update |
apply_page | validate-then-upsert a page-builder page, keyed on path |
apply_menu | whole app/menu tree, keyed on menu name and item labels |
apply_dashboard | dashboard and its components, keyed on name and component titles |
validate_dashboard | check a dashboard’s widget configs without writing (POST /api/dashboards/{id}/validate; name or id) |
dashboard_data | run a dashboard’s widgets and return their data (POST /api/dashboards/{id}/data; name or id) |
Automation and integration:
| Tool | Purpose |
|---|---|
list_flows, create_flow, update_flow, delete_flow | flow definitions (JSON state machines, runAsUserId) |
import_api_spec | import an OpenAPI 3 document into the API spec library |
materialize_api_collection | turn a GET operation into an external collection |
Metadata packages:
| Tool | Purpose |
|---|---|
export_metadata | export the tenant’s metadata (optionally only the named collections and what hangs off them) and return the package JSON in the result (POST /api/packages/export) |
diff_metadata | preview what a package would change, no writes (POST /api/packages/import/preview) |
apply_metadata | install a package: metadata, then seed records; dryRun, conflictMode skip/overwrite (POST /api/packages/import) |
Data:
| Tool | Purpose |
|---|---|
seed_records | bulk-create records from plain attribute objects, resolving reference fields from a parent’s natural key (batches of 100 through /api/operations) |
Plus ping.
User endpoint#
| Tool | Purpose |
|---|---|
list_collections, get_collection_schema | discovery |
query_collection | list/filter records (EQ NEQ GT GTE LT LTE CONTAINS STARTS ENDS ICONTAINS ISTARTS IENDS IEQ ISNULL IN; no OR) |
get_record | one record by id |
create_record, update_record, delete_record | single-record writes |
bulk_apply | atomic batch through /api/operations |
search | cross-collection full-text search |
semantic_search | vector search on a collection with a VECTOR field |
describe_api | the tenant’s OpenAPI document (collection CRUD only) |
execute_flow | start a flow (input is double-wrapped) |
get_flow_run | status of an execution, optionally with steps |
submit_for_approval, list_approvals | approvals |
list_notifications | your own in-app notifications, newest first; unreadOnly, pageSize, pageNumber; meta.unreadCount is your unread total (GET /api/me/notifications) |
mark_notification_read | mark one of your notifications read by id (POST /api/me/notifications/{id}/read) |
ping |
Conventions#
- Arguments are friendly camelCase; the tool boundary translates to the platform’s native JSON:API shape
(uppercase enums, kebab-case collection names). Pass names as
list_collectionsreturns them. - Collections and picklists may be addressed by name or UUID.
- Every
create_*/update_*wraps one REST call;apply_*tools are create-or-update. - Destructive tools are annotated
destructiveHint: true.
Typical build order#
apply_collection (or create_collection → add_field → apply_field_picklist) → create_validation_rule / create_unique_constraint →
apply_layout → apply_listview → apply_menu → apply_page → create_flow → apply_dashboard → seed_records.
To build in a sandbox, start the bridge with kelta mcp serve --tenant <sandbox-slug> --token-env <VAR>
(coverage map). The
tutorial walks through it.