nenoDevelopers
⌘K
v1

MCP

Scopes and permissions

Scopes decide what a connected client may try. Your permissions in Neno decide what you can do. Every tool call has to pass both.

Scopes

ScopeAccessTools
workspaces:readReadlist_workspaces
transactions:readReadlist_transactions list_unreconciled_transactions
bills:readReadget_bill_status get_vendor_spend list_bills list_vault_files
bills:writeWritecreate_bill_upload get_bill_forwarding_address upload_bill
tasks:readReadlist_open_tasks
tasks:writeWritecreate_task respond_to_task
reports:readReadget_management_report
invoices:readReadget_invoice_summary
invoices:writeWrite

A scope covers every tool listed against it. get_bill_forwarding_address only reads, but it sits under bills:write because it's part of filing a bill.

Two checks on every call

  • Scope. Checked before the tool runs. If the grant doesn't hold the tool's scope, the request fails with 403 and insufficient_scope, naming every scope the call needs.
  • Permission. Checked against your role in that company. If you don't have it, the call returns an error the model can read, and nothing changes.

A grant can only narrow what you're able to do. It never gives a client more access than you have yourself.

What a grant covers

When you sign in through a client, you choose the companies it may use. A client that doesn't ask for particular scopes gets the read scopes only. The first time it calls a write tool, the 403 prompts it to ask you again with the write scope added.

An API key covers one company and exactly the scopes chosen when it was created.

Permissions per tool

ToolScopePermission in Neno
create_bill_uploadbills:writeneno.manageDocuments
create_tasktasks:writeneno.admin swan.legalRepresentative
get_bill_forwarding_addressbills:writeneno.manageDocuments
get_bill_statusbills:readneno.viewDocuments
get_invoice_summaryinvoices:readneno.viewInvoicing
get_management_reportreports:readneno.viewReconciliation
get_vendor_spendbills:readneno.viewDocuments
list_billsbills:readneno.viewDocuments
list_open_taskstasks:readneno.viewTasks
list_transactionstransactions:readneno.admin swan.legalRepresentative swan.canViewAccount neno.viewReconciliation
list_unreconciled_transactionstransactions:readneno.viewReconciliation
list_vault_filesbills:readneno.viewDocuments
list_workspacesworkspaces:readNone. Bounded by the grant.
respond_to_tasktasks:writeneno.viewTasks
upload_billbills:writeneno.manageDocuments

Where a tool lists several permissions, any one of them is enough. Tools that read the bank feed are only offered for companies with a connected bank account: list_transactions, list_unreconciled_transactions.

How long access lasts

CredentialLifetime
Access tokenOne hour, renewed with the refresh token
OAuth grant180 days, or 30 days without being used
API keyUntil its expiry date, if it has one, or until it's revoked