Permissions & scopes

Tools map to scopes.

A connection can only do what its credential is scoped for. With OAuth that's your membership permissions; with an API key it's the key's scopes. A call to a tool whose scope you lack returns a clear 403 forbidden naming the missing scope.

ScopeFriendly nameTools it unlocks
ai_explainAsk & explainplcs_ask_project, plcs_mint_embed_token
ai_generatePropose codeplcs_propose_code
analysis_tabRead analysesplcs_get_project_analysis
code_readRead codeplcs_get_project_source
code_writeEdit & save projectplcs_save_version
export_plcExport to PLC formatplcs_export_plc (+ plcs_get_export / plcs_download_export)
export_pdfExport to PDFplcs_export_pdf (+ plcs_get_export / plcs_download_export)
hmi_viewView HMIplcs_get_live_values, plcs_get_tag_history
hmi_editRequest live tagsplcs_request_live_tags

plcs_health, plcs_list_projects, and plcs_get_project need only a valid credential — no extra scope.

Generate and save are separate scopes on purpose. ai_generate only drafts a reviewable proposal; persisting it requires code_write. A generate-only connection can never deploy a machine-bound version.

Project scope

A key (or connection) may optionally be restricted to specific projects. When set, any tool call targeting a project outside that scope returns 403 project_scope_forbidden.