Scopes gate ctx.tools.call(...) access. Declare every scope your
app needs in manifest.required_scopes; the tenant must grant them on
install. The platform enforces scope at every call site — your code
only runs against tenants where the grant exists.
Scope Tools Description mail.reademail_search, email_get, email_listRead tenant emails mail.sendemail_send, email_replySend mail as the tenant mail.draftemail_create_draftCompose drafts without sending
Scope Tools Description calendar.readcalendar_list_events, calendar_get_eventRead calendar calendar.writecalendar_create_event, calendar_update_eventManage events
Scope Tools Description files.readfile_get, file_search, attachment_getRead files + attachments files.writefile_create, file_updateCreate/update files in tenant storage
Scope Tools Description odoo.readodoo_search_read, odoo_readRead records odoo.writeodoo_create, odoo_update, odoo_unlinkMutate records
Scope Tools Description reports.generatereport_pdf_render, report_excel_renderBuild PDF + Excel artifacts
Scope Tools Description whatsapp.sendwhatsapp_send_text, whatsapp_send_templateSend WhatsApp messages
Scope Tools Description ai.imageai_image_generateGenerate images ai.videokling_video_generateGenerate short video clips
Scope Tools Description mail.triageemail_triage_classify, email_triage_digestLLM-backed inbox classification
A tenant might install your app without granting every scope. Code
defensively:
import { ToolCallError } from ' @linkworld/sdk '
await ctx . tools . call ( ' odoo_create ' , { model, values })
if (err instanceof ToolCallError && err . decision === ' scope_denied ' ) {
// Optional path — tenant didn't grant odoo.write
console . log ( ' [my-app] odoo.write not granted; skipping ERP write ' )
from linkworld_sdk import ToolCallError
await ctx.tools. call ( " odoo_create " , model = model , values = values )
except ToolCallError as exc:
if exc.decision == " scope_denied " :
Need a tool we haven’t surfaced? Open an issue at
github.com/linkworld/linkworld
or post in the dev community. Scopes ship with the platform; partners
don’t define them.