{"record":{"id":"f5b744758f7c6a9a","repo":"xpipe-io/xpipe","slug":"modifications-to-connection-path-is-disabled-by","errorCode":null,"errorMessage":"Modifications to connection ${path} is disabled by the category setting","messagePattern":"Modifications to connection (.+?) is disabled by the category setting","errorType":"exception","errorClass":"BeaconClientException","httpStatus":null,"severity":"error","filePath":"app/src/main/java/io/xpipe/app/beacon/mcp/McpToolHandler.java","lineNumber":165,"sourceCode":"            }\n\n            var e = found.getFirst();\n            return e.ref();\n        }\n\n        public DataStoreEntryRef<ShellStore> getShellStoreRef(String name, boolean mutation)\n                throws BeaconClientException {\n            var ref = getDataStoreRef(name);\n            var isShell = ref.getStore() instanceof ShellStore;\n            if (!isShell) {\n                throw new BeaconClientException(\"Connection \"\n                        + DataStorage.get().getStorePath(ref.get()).toString() + \" is not a shell connection\");\n            }\n\n            var disableMutation =\n                    DataStorage.get().getEffectiveCategoryConfig(ref.get()).getDontAllowScripts();\n            if (mutation && disableMutation != null && disableMutation) {\n                throw new BeaconClientException(\"Modifications to connection \"\n                        + DataStorage.get().getStorePath(ref.get()).toString()\n                        + \" is disabled by the category setting\");\n            }\n\n            return ref.asNeeded();\n        }\n    }\n}\n","sourceCodeStart":147,"sourceCodeEnd":174,"githubUrl":"https://github.com/xpipe-io/xpipe/blob/d85ca821baa46092a320ebb13546d7240adb74f8/app/src/main/java/io/xpipe/app/beacon/mcp/McpToolHandler.java#L147-L174","documentation":"McpToolHandler.getShellStoreRef checks the connection category's effective configuration: when the category has the 'don't allow scripts' option enabled (getDontAllowScripts()), any mutation-requesting MCP shell operation throws this BeaconClientException. This is a deliberate policy guard, not a transient failure.","triggerScenarios":"Calling an MCP shell tool with mutation=true (state-changing operations) against a connection whose category config has dontAllowScripts set; retrying the same call always fails until the setting changes.","commonSituations":"Production connection categories locked down by admins to forbid script/automation changes; shared team installs where the category policy was tightened; users unaware the category-level setting overrides per-connection use.","solutions":["Disable the 'don't allow scripts' / disallow modifications setting on the connection's category in the XPipe UI (requires appropriate permissions)","Move the connection to a category that allows script mutations","Perform the operation manually instead of via MCP, or ask an admin to lift the restriction","Catch BeaconClientException and inform the user the connection category forbids mutations"],"exampleFix":"// before (category config)\n\"dontAllowScripts\": true\n// after\n\"dontAllowScripts\": false // or move connection to a permissive category","handlingStrategy":"try-catch","validationCode":"// consult category policy before requesting mutation\nconst cfg = await getCategoryConfig(conn.category);\nif (mutationNeeded && cfg.dontAllowScripts) {\n  throw new Error(`mutations on '${conn.path}' are blocked by category policy`);\n}","typeGuard":null,"tryCatchPattern":"try { return shellTool.call({name, mutation: true}); } catch (BeaconClientException e) { if (e.message.includes('disabled by the category setting')) { /* surface policy message; offer non-mutating fallback */ } throw e; }","preventionTips":["Review category 'don't allow scripts' settings when onboarding automation","Keep automation targets in categories that permit mutations","Treat the error as policy, not a bug — don't retry blindly"],"tags":["mcp","permission-denied","category-config"],"backgroundTag":"permission-denied","analyzedSha":"d85ca821baa46092a320ebb13546d7240adb74f8","analyzedAt":"2026-09-06T14:30:08.251Z","contentChangedAt":"2026-09-06T14:30:08.251Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}