AI permission enforcement

The Business NXT GraphQL API now enforces an AI permission setting per company. AI integrations — GAiA and the Business NXT MCP — only receive data when the corresponding Read or Write permission has been granted in the System information and Company tables. Requests without the permission are rejected at the API regardless of the signed-in user’s other Business NXT permissions. The setting can only be modified by a System supervisor and takes effect immediately.

MCP: writable tables and DME extension writes

crossReference is now creatable and stockBalance is now updatable via the Business NXT MCP. update_entity accepts DME extension columns (flat field names or the extensions array shape). create_entity and update_entity now default onError to FAIL_TABLE to prevent silent partial writes, and create_entity with dryRun returns the full server-computed shape including nested children and currency context. Relations from get_table_definitions now carry the queryName/relation hints needed to construct joinup/joindown queries.

Fix: Update operations fix

When the values / value argument is empty, no update is performed, affectedRows is 0, and a warning is returned (as part of extensions).

MCP: documentation tools, new skills, batch field values

Added three documentation tools to the Business NXT MCP: get_table_documentation for plain-English field and workflow prose from doc.visma.net, search_documentation for free-text search over the same source, and get_field_values for enum/bitmask catalogues (with batch decoding via a fields array). New skills cover the supplier invoice approval flow and periodised accounting analysis (income statement, balance sheet, budget vs actual). execute_graphql_query gains a client-side @decodeBase64 directive for base64-wrapped blob fields. init_company now inlines the company’s behaviour-switch bitmasks, and get_skill surfaces an access warning when the signed-in user is missing permissions for the tables a skill needs.

Edit cache support

Added support for transactional operations over a session, using the edit cache, that can be saved or discarded when the session completes. See Edit cache.

Warning for update with value but not filter

Using the value argument but without the filter argument in an update mutation now returns a warning (as part of extensions) because it may lead to unintentional updates of multiple records. This will become an error in the future.