> For the complete documentation index, see [llms.txt](https://codemash.gitbook.io/codemash/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://codemash.gitbook.io/codemash/ai/developers/what-agents-can-do.md).

# What agents can do

Which Norbix modules an AI agent can work with today — every tool group of the MCP server, how many tools read or change, and prompts that work.

Before you hand a task to an agent you want to know: can it do this at all, and will it ask before it changes something? An agent that only gets raw HTTP calls has to guess request shapes and ids. Norbix gives it **described tools** instead.

## How Norbix models it

Each Norbix endpoint an agent may call is marked in the gateway with `[AiTool("<toolset>", …)]`. The mark gives the tool its name (the endpoint's request name in snake\_case, for example `find_records`), a description for the model, the **toolset** (a group, such as `ai:database`) and two safety flags:

* **read or change** — a tool reads when its endpoint is `GET` or is a `POST` declared read-only; MCP (Model Context Protocol, the standard way AI tools call outside services) shows this as `readOnlyHint`;
* **asks first** — a tool that sends messages, deletes or changes a lot answers `requires_confirmation` first; the agent must ask you and call again with `confirm: true`.

Toolsets have two uses: the [MCP server](/codemash/ai/developers/mcp-server.md) can load only some of them (`…/v3/account/mcp?toolsets=ai:database,ai:logs`), and the Norbix assistant gives each specialist only its own. Tools in `own:*` toolsets are not for developers: they serve the AI chat of your app's signed-in end users and always work on that user's own data — see [AI chat](/codemash/ai/products/ai-chat.md).

What the agent can do is still limited by the roles of its AI service user — see [Read-only keys](/codemash/ai/developers/read-only-keys.md).

## The tool groups

The table is built from the gateway source by `scripts/gen-ai-tools.py` and was checked against a live `tools/list` of the MCP server (the same 418 tools, the same read flags). Run the script again after the gateway changes.

*Generated by `python3 scripts/gen-ai-tools.py` from the gateway source (commit 1a28f65d4 2026-10-06). Do not edit by hand.*

**418 tools for developers** (the MCP server) — 157 read, 261 change something, 146 of those ask you first. **7 tools for your end users** (toolsets `own:*`, the AI chat on the API host).

| Module             | Toolset                  | What the agent can do                                                                                        | Tools | Read | Change | Asks first |
| ------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------ | ----- | ---- | ------ | ---------- |
| Project            | `ai:project-creation`    | create a project, enable modules, scaffold a whole backend                                                   | 11    | 4    | 7      | 7          |
| Project            | `ai:project-settings`    | project settings: name, languages, environments, CORS, Admin Portal, AI settings                             | 57    | 13   | 44     | 24         |
| Project            | `ai:project-inspect`     | a read-only look at the whole project (every module)                                                         | 146   | 142  | 4      | 0          |
| Account            | `ai:account`             | your account profile, team and usage                                                                         | 6     | 4    | 2      | 0          |
| Account            | `ai:developer`           | what the signed-in developer can see and do                                                                  | 3     | 1    | 2      | 1          |
| Account            | `ai:support-diagnostics` | support cases and read-only diagnostic packs                                                                 | 5     | 5    | 0      | 0          |
| Database           | `ai:database`            | read schemas, records, taxonomies, triggers, aggregates                                                      | 27    | 27   | 0      | 0          |
| Database           | `ai:database-manage`     | change records, schemas, taxonomies, triggers, aggregates, integrations                                      | 40    | 6    | 34     | 22         |
| Database           | `ai:database-admin`      | build collections: schema bundles, save and publish schemas                                                  | 4     | 0    | 4      | 2          |
| Files              | `ai:files`               | files, folders, file integrations and triggers                                                               | 18    | 6    | 12     | 8          |
| Membership         | `ai:users`               | project users — on the MCP server only the AI plan of a user (the user tools are on the API host, see below) | 1     | 0    | 1      | 1          |
| Membership         | `ai:membership`          | roles, policies, sign-in integrations, settings, triggers                                                    | 43    | 15   | 28     | 18         |
| Membership         | `ai:contacts`            | contacts and their identities                                                                                | 9     | 2    | 7      | 3          |
| Email              | `ai:emails`              | email integrations, templates, footers, signatures                                                           | 38    | 17   | 21     | 8          |
| Email              | `ai:email-templates`     | email template preview and MJML                                                                              | 13    | 5    | 8      | 1          |
| Email / SMS / Push | `ai:campaigns`           | campaigns: create, send, schedule, stop                                                                      | 26    | 13   | 13     | 13         |
| SMS                | `ai:sms`                 | SMS integrations, templates, campaigns                                                                       | 27    | 11   | 16     | 7          |
| Push               | `ai:push`                | push integrations, templates, devices, campaigns                                                             | 30    | 13   | 17     | 7          |
| Payments           | `ai:payments`            | payment integrations and triggers                                                                            | 17    | 5    | 12     | 7          |
| Tasks              | `ai:scheduler`           | scheduled tasks                                                                                              | 9     | 3    | 6      | 6          |
| Code               | `ai:code`                | code integrations, functions, marketplace                                                                    | 30    | 11   | 19     | 9          |
| Project            | `ai:webhooks`            | webhook integration and destinations                                                                         | 6     | 1    | 5      | 2          |
| Logs               | `ai:logs`                | read logs, log settings and logging integrations                                                             | 13    | 5    | 8      | 4          |
| AI                 | `ai:ai-integrations`     | LLM and MCP integrations, AI triggers, embeddings                                                            | 15    | 4    | 11     | 4          |
| Project            | `ai:project-context`     | which account, project and environment the agent works in                                                    | 4     | 4    | 0      | 0          |
| End users          | `own:preferences`        | your signed-in end user's own data                                                                           | 2     | 1    | 1      | 1          |
| End users          | `own:profile`            | your signed-in end user's own data                                                                           | 2     | 1    | 1      | 1          |
| End users          | `own:records`            | your signed-in end user's own data                                                                           | 3     | 3    | 0      | 0          |

A tool can sit in more than one toolset, so the rows add up to more than the total.

{% hint style="warning" %}
Not on the MCP server: 15 project-user tools are declared on the API host (`assign_role_permissions`, `block_user`, `delete_user`, `get_users`, `grant_contact_consent`, `invite_user`, `list_passkeys`, `rename_passkey`, `revoke_passkey`, `save_guest_user`, `save_phone_user`, `set_contact_roles`, `set_contact_tag_subscription`, `unblock_user`, `unsubscribe_contact`). The API host serves only end-user toolsets, so no agent can call them through MCP today. Manage project users in Cloud (Membership → Users), with the CLI (`norbix users …`) or the SDK.
{% endhint %}

<details>

<summary><code>ai:project-creation</code> — 11 tools</summary>

`create_fake_email_integration` (asks), `create_project` (asks), `enable_database` (asks), `enable_email` (asks), `enable_logging` (asks), `enable_membership` (asks), `enable_scheduler` (asks), `get_account_regions`, `get_project`, `get_projects`, `wait_for_project_active`

</details>

<details>

<summary><code>ai:project-settings</code> — 57 tools</summary>

`assign_admin_portal_service_user` (asks), `create_project_ai_assistant` (change), `create_project_environment` (asks), `delete_ai_project_trigger` (asks), `delete_embedding_integration` (asks), `delete_notifications_group` (asks), `delete_notifications_tag` (asks), `delete_project` (asks), `delete_project_ai_assistant` (asks), `delete_project_environment` (asks), `disable_ai_project_trigger` (asks), `disable_project` (asks), `enable_ai_project_trigger` (change), `enable_project` (asks), `get_admin_portal_structure`, `get_ai_project_trigger`, `get_ai_project_triggers`, `get_embedding_integration`, `get_embedding_integrations`, `get_project`, `get_project_ai_plans`, `get_project_ai_settings`, `get_project_ai_usage`, `get_project_ai_user_plans`, `get_project_environments`, `get_project_tokens`, `promote_environment` (asks), `remove_tag_from_notifications_group` (asks), `rollback_promotion` (asks), `save_ai_project_trigger` (change), `save_embedding_integration` (change), `save_notifications_group` (change), `save_notifications_tag` (change), `set_admin_portal_enabled` (asks), `set_environment_rank` (change), `set_llm_integration_as_default` (change), `test_embedding_integration` (change), `update_project_accent_color` (asks), `update_project_admin_url` (change), `update_project_ai_assistant` (change), `update_project_ai_knowledge` (change), `update_project_ai_plan_assignments` (change), `update_project_ai_plans` (change), `update_project_ai_settings` (change), `update_project_allowed_origins` (change), `update_project_default_language` (asks), `update_project_description` (asks), `update_project_expose_auth` (change), `update_project_expose_brand` (change), `update_project_expose_legal` (change), `update_project_languages` (asks), `update_project_legal_documents` (change), `update_project_main_color` (asks), `update_project_name` (asks), `update_project_regions` (asks), `update_project_url` (asks), `wait_for_project_active`

</details>

<details>

<summary><code>ai:project-inspect</code> — 146 tools</summary>

`aggregate_records`, `check_email_integration_domain_health`, `count_records`, `distinct_record_values`, `execute_records_aggregate`, `find_one_record`, `find_records`, `get_account_collaborators`, `get_account_profile`, `get_account_regions`, `get_account_status`, `get_account_team_policies`, `get_account_usage_billing`, `get_admin_portal_structure`, `get_ai_project_trigger`, `get_ai_project_triggers`, `get_all_contacts`, `get_allowed_flex_tiers`, `get_authentication_settings`, `get_authorization_settings`, `get_code_integration`, `get_code_integrations`, `get_collection_indexes`, `get_contact`, `get_database_aggregate`, `get_database_aggregates`, `get_database_integration`, `get_database_integrations`, `get_database_merged_term_tree`, `get_database_schema_draft`, `get_database_schema_list_settings`, `get_database_schema_version_diff`, `get_database_schema_versions`, `get_database_schemas`, `get_database_taxonomies`, `get_database_taxonomy`, `get_database_taxonomy_term`, `get_database_taxonomy_term_tree`, `get_database_taxonomy_tree`, `get_email_campaign_batch_notification`, `get_email_campaign_batch_notifications`, `get_email_campaign_batches`, `get_email_campaign_messages`, `get_email_campaign_statistics`, `get_email_campaigns`, `get_email_disable_dependencies`, `get_email_footer`, `get_email_footers`, `get_email_integration`, `get_email_integrations`, `get_email_settings`, `get_email_signature`, `get_email_signatures`, `get_email_template`, `get_email_templates`, `get_embedding_integration`, `get_embedding_integrations`, `get_file`, `get_files_integration`, `get_files_integrations`, `get_files_trigger`, `get_files_triggers`, `get_folder_files`, `get_licenses`, `get_llm_integration`, `get_llm_integrations`, `get_log_settings`, `get_logging_integration`, `get_logging_integrations`, `get_logs`, `get_logs_by_correlation_id`, `get_marketplace_function`, `get_marketplace_function_catalog`, `get_marketplace_function_tokens`, `get_marketplace_functions`, `get_marketplace_integration`, `get_marketplace_integrations`, `get_marketplace_listing`, `get_marketplace_listing_function_tokens`, `get_marketplace_listings`, `get_mcp_integration`, `get_mcp_integrations`, `get_membership_integration`, `get_membership_integrations`, `get_membership_trigger`, `get_membership_triggers`, `get_mjml` (change), `get_passkey_settings`, `get_payments_integration`, `get_payments_integrations`, `get_payments_trigger`, `get_payments_triggers`, `get_payments_webhook_log`, `get_policies`, `get_project`, `get_project_ai_plans`, `get_project_ai_settings`, `get_project_ai_usage`, `get_project_ai_user_plans`, `get_project_environments`, `get_project_tokens`, `get_projects`, `get_push_campaign_batch_notification`, `get_push_campaign_batch_notifications`, `get_push_campaign_batches`, `get_push_campaign_messages`, `get_push_campaign_statistics`, `get_push_campaigns`, `get_push_device`, `get_push_devices`, `get_push_disable_dependencies`, `get_push_integration`, `get_push_integrations`, `get_push_message_content_tokens`, `get_push_settings`, `get_push_template`, `get_push_templates`, `get_roles`, `get_scheduler_task`, `get_scheduler_tasks`, `get_schema_trigger`, `get_schema_triggers`, `get_sms_campaign_batch_notification`, `get_sms_campaign_batch_notifications`, `get_sms_campaign_batches`, `get_sms_campaign_messages`, `get_sms_campaign_statistics`, `get_sms_campaigns`, `get_sms_disable_dependencies`, `get_sms_integration`, `get_sms_integrations`, `get_sms_message_content_tokens`, `get_sms_settings`, `get_sms_template`, `get_sms_templates`, `get_system_email_template`, `get_system_email_templates`, `get_webhook_integration`, `invoke_marketplace_function` (change), `preview_email_notification`, `preview_push_notification`, `preview_sms_notification`, `render_push` (change), `render_sms` (change), `test_database_aggregate`, `wait_for_project_active`

</details>

<details>

<summary><code>ai:account</code> — 6 tools</summary>

`get_account_profile`, `get_account_status`, `get_account_usage_billing`, `get_licenses`, `get_stripe_billing_portal_url` (change), `update_account_profile` (change)

</details>

<details>

<summary><code>ai:developer</code> — 3 tools</summary>

`render_template_preview` (change), `scaffold_project` (asks), `validate_schema`

</details>

<details>

<summary><code>ai:support-diagnostics</code> — 5 tools</summary>

`inspect_diagnostic_redis`, `query_diagnostic_logs`, `read_diagnostic_events`, `run_diagnostic_health_check`, `run_diagnostic_pack`

</details>

<details>

<summary><code>ai:database</code> — 27 tools</summary>

`aggregate_records`, `count_records`, `distinct_record_values`, `execute_records_aggregate`, `find_one_record`, `find_records`, `get_allowed_flex_tiers`, `get_collection_indexes`, `get_database_aggregate`, `get_database_aggregates`, `get_database_integration`, `get_database_integrations`, `get_database_merged_term_tree`, `get_database_schema`, `get_database_schema_draft`, `get_database_schema_list_settings`, `get_database_schema_version_diff`, `get_database_schema_versions`, `get_database_schemas`, `get_database_taxonomies`, `get_database_taxonomy`, `get_database_taxonomy_term`, `get_database_taxonomy_term_tree`, `get_database_taxonomy_tree`, `get_schema_trigger`, `get_schema_triggers`, `test_database_aggregate`

</details>

<details>

<summary><code>ai:database-manage</code> — 40 tools</summary>

`change_record_responsibility` (asks), `delete_database_aggregate` (asks), `delete_database_integration` (asks), `delete_database_schema` (asks), `delete_database_taxonomy` (asks), `delete_database_taxonomy_term` (asks), `delete_many_database_taxonomy_terms` (asks), `delete_many_records` (asks), `delete_record` (asks), `delete_schema_trigger` (asks), `disable_database` (asks), `disable_database_integration` (asks), `disable_schema_trigger` (asks), `discard_database_schema_draft` (asks), `enable_database_integration` (change), `enable_schema_trigger` (change), `get_email_integrations`, `get_email_templates`, `get_push_integrations`, `get_push_templates`, `get_sms_integrations`, `get_sms_templates`, `insert_many_records` (asks), `insert_record` (asks), `rename_database_schema` (change), `replace_record` (asks), `save_database_aggregate` (change), `save_database_integration` (change), `save_database_taxonomy` (change), `save_database_taxonomy_term` (change), `save_schema_trigger` (asks), `seed_collection_records` (asks), `set_database_integration_as_default` (asks), `test_database_integration` (change), `update_database_schema_draft` (change), `update_database_schema_embed` (change), `update_database_schema_settings` (change), `update_database_taxonomy_term` (change), `update_many_records` (asks), `update_one_record` (asks)

</details>

<details>

<summary><code>ai:database-admin</code> — 4 tools</summary>

`apply_database_schema_bundle` (asks), `publish_database_schema` (asks), `save_database_schema` (change), `update_database_schema_list_settings` (change)

</details>

<details>

<summary><code>ai:files</code> — 18 tools</summary>

`delete_files_integration` (asks), `delete_files_trigger` (asks), `disable_files` (asks), `disable_files_integration` (asks), `disable_files_trigger` (asks), `enable_files` (asks), `enable_files_integration` (change), `enable_files_trigger` (change), `get_file`, `get_files_integration`, `get_files_integrations`, `get_files_trigger`, `get_files_triggers`, `get_folder_files`, `save_files_integration` (change), `save_files_trigger` (asks), `set_files_integration_as_default` (asks), `test_files_integration` (change)

</details>

<details>

<summary><code>ai:users</code> — 1 tool</summary>

`set_user_ai_plan` (asks)

</details>

<details>

<summary><code>ai:membership</code> — 43 tools</summary>

`create_account_policy` (change), `create_account_role` (change), `create_policy` (change), `create_role` (asks), `delete_account_policy` (asks), `delete_account_role` (asks), `delete_membership_integration` (asks), `delete_membership_trigger` (asks), `delete_policy` (asks), `delete_role` (asks), `delete_service_user_api_key` (asks), `disable_membership` (asks), `disable_membership_integration` (asks), `disable_membership_trigger` (asks), `enable_membership` (asks), `enable_membership_integration` (change), `enable_membership_trigger` (change), `get_account_collaborators`, `get_account_team_policies`, `get_account_team_roles`, `get_authentication_settings`, `get_authorization_settings`, `get_membership_integration`, `get_membership_integrations`, `get_membership_trigger`, `get_membership_triggers`, `get_passkey_settings`, `get_policies`, `get_policy`, `get_role`, `get_roles`, `list_service_user_api_keys`, `save_membership_integration` (change), `save_membership_trigger` (asks), `save_passkey_settings` (asks), `send_invite_to_team_member` (asks), `set_membership_integration_as_default` (asks), `update_account_policy` (change), `update_account_role` (change), `update_authentication_settings` (change), `update_password_complexity` (asks), `update_policy` (change), `update_role_policies` (asks)

</details>

<details>

<summary><code>ai:contacts</code> — 9 tools</summary>

`add_contact_identity` (change), `create_contact` (change), `delete_contact` (asks), `get_all_contacts`, `get_contact`, `merge_contacts` (asks), `promote_contact_identity` (change), `remove_contact_identity` (asks), `update_contact` (change)

</details>

<details>

<summary><code>ai:emails</code> — 38 tools</summary>

`archive_email_template` (change), `attach_file_to_template` (change), `check_email_integration_domain_health`, `clone_email_template` (change), `confirm_email_integration_human_delivery` (change), `create_email_template` (change), `delete_email_footer` (asks), `delete_email_integration` (asks), `delete_email_signature` (asks), `delete_email_template` (asks), `disable_email` (asks), `disable_email_integration` (asks), `enable_email` (asks), `enable_email_integration` (change), `get_email_campaign_batch_notification`, `get_email_campaign_batch_notifications`, `get_email_campaign_batches`, `get_email_campaign_messages`, `get_email_campaign_statistics`, `get_email_disable_dependencies`, `get_email_footer`, `get_email_footers`, `get_email_integration`, `get_email_settings`, `get_email_signature`, `get_email_signatures`, `get_email_template`, `get_mjml` (change), `get_system_email_template`, `get_system_email_templates`, `preview_email_notification`, `save_email_footer` (change), `save_email_signature` (change), `set_emails_integration_as_default` (asks), `test_email_integration` (change), `test_email_validation_integration` (change), `un_archive_email_template` (change), `update_email_template` (change)

</details>

<details>

<summary><code>ai:email-templates</code> — 13 tools</summary>

`archive_email_template` (change), `attach_file_to_template` (change), `clone_email_template` (change), `create_email_template` (change), `delete_email_template` (asks), `get_email_template`, `get_email_template_available_tokens`, `get_email_templates`, `get_mjml` (change), `get_system_email_template`, `get_system_email_templates`, `un_archive_email_template` (change), `update_email_template` (change)

</details>

<details>

<summary><code>ai:campaigns</code> — 26 tools</summary>

`create_email_campaign` (asks), `create_fake_email_integration` (asks), `create_fake_push_integration` (asks), `create_fake_sms_integration` (asks), `create_push_campaign` (asks), `create_sms_campaign` (asks), `delete_email_campaign` (asks), `enable_email` (asks), `enable_push` (asks), `enable_sms` (asks), `get_database_integrations`, `get_email_campaign`, `get_email_campaigns`, `get_email_integrations`, `get_email_template`, `get_push_campaign`, `get_push_campaigns`, `get_push_integrations`, `get_push_templates`, `get_sms_campaign`, `get_sms_campaigns`, `get_sms_integrations`, `get_sms_templates`, `stop_email_campaign` (asks), `stop_push_campaign` (asks), `stop_sms_campaign` (asks)

</details>

<details>

<summary><code>ai:sms</code> — 27 tools</summary>

`archive_sms_template` (change), `clone_sms_template` (change), `confirm_sms_integration_human_delivery` (change), `create_sms_template` (change), `delete_sms_campaign` (asks), `delete_sms_integration` (asks), `delete_sms_template` (asks), `disable_sms` (asks), `disable_sms_integration` (asks), `enable_sms` (asks), `enable_sms_integration` (change), `get_sms_campaign_batch_notification`, `get_sms_campaign_batch_notifications`, `get_sms_campaign_batches`, `get_sms_campaign_messages`, `get_sms_campaign_statistics`, `get_sms_disable_dependencies`, `get_sms_integration`, `get_sms_message_content_tokens`, `get_sms_settings`, `get_sms_template`, `preview_sms_notification`, `render_sms` (change), `set_sms_integration_as_default` (asks), `test_sms_integration` (change), `un_archive_sms_template` (change), `update_sms_template` (change)

</details>

<details>

<summary><code>ai:push</code> — 30 tools</summary>

`archive_push_template` (change), `clone_push_template` (change), `confirm_push_integration_human_delivery` (change), `create_push_template` (change), `delete_push_campaign` (asks), `delete_push_integration` (asks), `delete_push_template` (asks), `disable_push` (asks), `disable_push_integration` (asks), `enable_push` (asks), `enable_push_integration` (change), `get_push_campaign_batch_notification`, `get_push_campaign_batch_notifications`, `get_push_campaign_batches`, `get_push_campaign_messages`, `get_push_campaign_statistics`, `get_push_device`, `get_push_devices`, `get_push_disable_dependencies`, `get_push_integration`, `get_push_message_content_tokens`, `get_push_settings`, `get_push_template`, `preview_push_notification`, `register_device` (change), `render_push` (change), `set_push_integration_as_default` (asks), `test_push_integration` (change), `un_archive_push_template` (change), `update_push_template` (change)

</details>

<details>

<summary><code>ai:payments</code> — 17 tools</summary>

`confirm_payments_integration_human_delivery` (change), `delete_payments_integration` (asks), `delete_payments_trigger` (asks), `disable_payments` (asks), `disable_payments_integration` (asks), `disable_payments_trigger` (asks), `enable_payments` (asks), `enable_payments_integration` (change), `enable_payments_trigger` (change), `get_payments_integration`, `get_payments_integrations`, `get_payments_trigger`, `get_payments_triggers`, `get_payments_webhook_log`, `save_payments_integration` (change), `save_payments_trigger` (asks), `test_payments_integration` (change)

</details>

<details>

<summary><code>ai:scheduler</code> — 9 tools</summary>

`delete_scheduler_task` (asks), `disable_scheduler` (asks), `disable_scheduler_task` (asks), `enable_scheduler` (asks), `enable_scheduler_task` (asks), `get_email_templates`, `get_scheduler_task`, `get_scheduler_tasks`, `save_scheduler_task` (asks)

</details>

<details>

<summary><code>ai:code</code> — 30 tools</summary>

`confirm_code_integration_human_delivery` (change), `delete_code_integration` (asks), `delete_marketplace_function` (asks), `delete_marketplace_integration` (asks), `disable_code` (asks), `disable_code_integration` (asks), `disable_marketplace_function` (asks), `disable_marketplace_integration` (asks), `enable_code` (asks), `enable_code_integration` (change), `enable_marketplace_function` (change), `enable_marketplace_integration` (change), `get_code_integration`, `get_code_integrations`, `get_marketplace_function`, `get_marketplace_function_catalog`, `get_marketplace_function_tokens`, `get_marketplace_functions`, `get_marketplace_integration`, `get_marketplace_integrations`, `get_marketplace_listing`, `get_marketplace_listing_function_tokens`, `get_marketplace_listings`, `invoke_marketplace_function` (change), `save_code_integration` (change), `save_marketplace_function` (change), `save_marketplace_integration` (change), `set_code_integration_as_default` (asks), `test_code_integration` (change), `test_marketplace_integration` (change)

</details>

<details>

<summary><code>ai:webhooks</code> — 6 tools</summary>

`disable_webhook_destination` (asks), `enable_webhook_destination` (change), `get_webhook_integration`, `remove_webhook_destination` (asks), `save_webhook_destination` (change), `update_webhook_integration_extra_headers` (change)

</details>

<details>

<summary><code>ai:logs</code> — 13 tools</summary>

`clean_logs` (asks), `delete_logging_integration` (asks), `disable_logging` (asks), `disable_logging_integration` (asks), `enable_logging_integration` (change), `get_log_settings`, `get_logging_integration`, `get_logging_integrations`, `get_logs`, `get_logs_by_correlation_id`, `save_log_settings` (change), `save_logging_integration` (change), `test_logging_integration` (change)

</details>

<details>

<summary><code>ai:ai-integrations</code> — 15 tools</summary>

`delete_llm_integration` (asks), `delete_mcp_integration` (asks), `disable_llm_integration` (asks), `disable_mcp_integration` (asks), `enable_llm_integration` (change), `enable_mcp_integration` (change), `get_llm_integration`, `get_llm_integrations`, `get_mcp_integration`, `get_mcp_integrations`, `save_llm_integration` (change), `save_mcp_integration` (change), `set_llm_integration_as_default` (change), `test_llm_integration` (change), `test_mcp_integration` (change)

</details>

<details>

<summary><code>ai:project-context</code> — 4 tools</summary>

`get_account_regions`, `get_project`, `get_project_environments`, `get_projects`

</details>

<details>

<summary><code>own:preferences</code> — 2 tools</summary>

`get_user_preferences`, `update_user_preferences` (asks)

</details>

<details>

<summary><code>own:profile</code> — 2 tools</summary>

`get_user`, `update_user` (asks)

</details>

<details>

<summary><code>own:records</code> — 3 tools</summary>

`find_own`, `get_database_schema`, `get_database_schemas`

</details>

## Not a tool on purpose

Some endpoints must never be called by a model, so they have no `[AiTool]` mark: the AI chat endpoints themselves (an assistant must not drive itself), inbound webhook receivers, anything that reveals or issues a live secret (a managed database connection string, a webhook secret, a new API key), sign-in, passkey and magic-link flows, and creating a user with a plain-text password. The agent never sees them — use Cloud or your own code.

## Prompts that work

| Ask                                                                                              | The agent uses                                                                                     |
| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| *Create a project called Bookshop with the Database and Email modules.*                          | `create_project`, `enable_database`, `enable_email` (asks), `create_fake_email_integration` (asks) |
| *Create the collections for a blog: posts with categories and tags, and comments. Publish them.* | `apply_database_schema_bundle` (asks once)                                                         |
| *Seed 5 authors and 20 posts that reference them.*                                               | `seed_collection_records` (asks; all or nothing)                                                   |
| *How many orders have status paid? Show the 10 biggest.*                                         | `count_records`, `find_records`                                                                    |
| *Add a discountCode text field to orders as a draft and show me the diff.*                       | `update_database_schema_draft`, `get_database_schema_draft`                                        |
| *When an order is inserted, email the sales team with the template "New order".*                 | `get_email_integrations`, `get_email_templates`, `save_schema_trigger` (asks)                      |
| *Which fields of orders are indexed?*                                                            | `get_collection_indexes`                                                                           |
| *Show me the last 20 errors in the logs.*                                                        | `get_logs`                                                                                         |

Good to know:

* Filters with `$where`, `$function` or `$accumulator`, and pipelines with `$out` or `$merge`, are refused for agents exactly as for apps (`CM-ERRORS-DATABASE-031`).
* `save_schema_trigger` and the other `save_*_trigger` tools offer Email, Push and SMS actions; webhook and code actions are set up in Cloud or from code.
* Tools that create integrations never take a real secret from the model; you add the real key in Cloud afterwards.

## Database schemas from an agent

A collection schema is two JSON documents — the **data schema** (what is stored and the rules the server checks) and the **UI schema** (how the record form looks) — held to one meta-schema. An agent does not invent a dialect: every key is named in the contract, and a key outside it is refused with the key named (`CM-ERRORS-SCHEMA-010` / `012`). The full contract is in the [Schema authoring guide](/codemash/cloud/database/schema.md) and the [Field type reference](/codemash/cloud/database/schema/field-types.md).

| Tool                                                                                   | What it takes                                                                                                                     | What it does                                                                                                                                                                                                                                                                 |
| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `apply_database_schema_bundle` (asks)                                                  | catalog entity ids (`"blog_posts,comments"`), or an IF entity object for one the catalog lacks; `tier`, `translatable`, `publish` | **the way to create collections**: compiles the bundle, creates the taxonomies with their terms, creates the collections in dependency order, links every taxonomy and collection reference so the pickers resolve, publishes v1. Run again = updates drafts, no duplicates. |
| `validate_schema`                                                                      | the schema as JSON (name + fields, or an IF document)                                                                             | checks it with the server's rules and returns every issue (where, code, message); saves nothing                                                                                                                                                                              |
| `save_database_schema` / `update_database_schema_draft`                                | `schemaName`, `dataSchema` and `visualSchema` as JSON strings                                                                     | the raw contract — the same call Cloud's builder makes                                                                                                                                                                                                                       |
| `publish_database_schema` (asks)                                                       | `id`, `confirmed` for a breaking change                                                                                           | publishes the draft                                                                                                                                                                                                                                                          |
| `get_database_schema`, `get_database_schema_draft`, `get_database_schema_version_diff` |                                                                                                                                   | read back what was saved                                                                                                                                                                                                                                                     |

Good to know for agents:

* A reference field is mapped on the schema: `collectionId` is the target collection's **name or `sch_` id** (never its title) and `displayField` a field of the target; `taxonomyId` is the taxonomy's slug. A target the project does not have is refused at save (`CM-ERRORS-SCHEMA-027` / `028`) with the fix in the message. Details: [References](/codemash/cloud/database/schema/references.md).
* A record write that breaks a rule answers one error per field with a code (`CM-ERRORS-DATABASE-030` … `055`) and the reason in plain words (`Field 'qty' is invalid: must be at least 1`), at the exact path for nested data (`lines[0].qty`). Fix the payload; do not retry it.
* `find_records` with `expandReferences: true` returns every reference as `{ id, display }`; it needs read permission on every linked source, otherwise `CM-ERRORS-DATABASE-056` names the source.
* Form hints (`placeholder`, `help`, relative date bounds, option sort) live in the UI schema; a rule the server must enforce lives in the data schema. `watermark` / `hint` are not keys.

## Where you use it

* Connect a tool: [Connect your IDE](/codemash/ai/developers/connect-your-ide.md) · [MCP server](/codemash/ai/developers/mcp-server.md)
* The CLI reaches every endpoint, tool or not: [The CLI for agents](/codemash/ai/developers/cli-for-agents.md)
* Safe roles: [Read-only keys](/codemash/ai/developers/read-only-keys.md)
* The endpoints behind the tools: [API reference](/codemash/api-reference/guides.md)
