Skip to content
Novadesko Documentation
English
Open the app

Confirmations, log and rate limits

How a preview becomes an action, the single-use confirmation token, the audit log and the call limits.

No tool changes data directly: prepare_* tools create a preview and the user decides.

Preview then confirmation

Typical prepare_* response:

{
  "status": "preview_ready",
  "action": "...",
  "summary": "...",
  "preview": "...",
  "preview_url": "https://web.novadesko.com/ai-connector/preview/...",
  "preview_url_expires_in_minutes": 30,
  "confirmation_token": "ndk_...",
  "next_step": "..."
}
  • The AI shows the preview and the preview_url link (signed page, PDF for documents).
  • It calls confirm_action with the token only after an explicit yes from the user. The user can also confirm or cancel on the preview page while signed in to Novadesko.
  • The token is single-use, bound to the user, the company and the channel, and expires after 30 minutes. The preview content is frozen (SHA-256 fingerprint): what is confirmed is exactly what was shown.
  • The action goes through the same controllers as the web app: same validations, same numbering. An invoice's legal number is assigned on confirmation.
  • To change a preview, the AI calls the prepare_* tool again: a new preview is created. list_pending_actions lists those waiting.

Tools carry the MCP annotations readOnlyHint and destructiveHint: confirm_action is marked destructive, which makes most clients ask for their own approval too.

Checks on every call

  1. tool known and allowed on this channel;
  2. the user is still a member of the company (and not a customer portal account);
  3. scope granted;
  4. rate limits;
  5. arguments: company or user identifiers removed, then strict schema;
  6. feature included in the plan;
  7. execution, then entry in the log.

Data returned by reads is flagged as untrusted, and tags that could mimic a tool call are neutralized: a booby-trapped customer name or note cannot command the AI.

Rate limits

LimitValue
Tool calls per connection120 per minute
Tool calls per company (all channels)400 per minute
Confirmations per connection30 per hour
HTTP requests to the MCP endpoint (per token)600 per minute
Token and revocation (per IP and client)120 per minute
Client registration (per IP)120 per minute
Metadata (per IP)600 per minute

Beyond that, the tool returns an error result (isError: true) saying « Too many calls in a short time, retry in N seconds » (in French); HTTP limits return 429.

Audit log

Each call is logged with the date, event (read, preview, confirmation, cancellation), tool, a summary, the status (ok, refused, denied...) and the platform (claude, chatgpt, gemini, nova). The user sees each integration's log in Novadesko. Conversations themselves are neither received nor stored by Novadesko.

See also