# Disabling tools that can work as read/write operations (n8n_executions, n8n_workflow_versions) #564
-
Read-Only Usage Concerns with Certain MCP ToolsHello everyone 👋 We’re planning to use this excellent MCP in read-only mode, and overall, it fits our needs really well. There is already an environment variable that allows disabling tools globally, which is great. However, we ran into an issue with tools that support both read and write operations within the same tool. Example:
|
Beta Was this translation helpful? Give feedback.
Replies: 3 comments
-
|
Hi @mahmoudnaif, You've raised a vital point regarding IT Governance and Operational Risk. In enterprise environments, granting an LLM "Write/Delete" access to workflow versions is often a deal-breaker for security teams. Since the current MCP implementation bundles these actions within the same tool, here are three strategies to enforce a read-only state from an architectural perspective:
Create a specific API Key in n8n for the MCP. If your n8n version supports granular RBAC (Role-Based Access Control) for API keys, restrict this key to View-only permissions. Result: Even if the LLM tries to call a Delete operation, the n8n API will return a 403 Forbidden, maintaining the integrity of your workflows.
Example: DISABLED_TOOL_METHODS=delete,truncate,rollback The server would then filter out any operation containing these keywords from the list_tools output. Why this matters for Governance: I strongly support the need for a granular read_only flag per tool. Until then, Scoping the API Key is your safest bet for production environments. |
Beta Was this translation helpful? Give feedback.
-
|
Hey @mahmoudnaif — you are not missing anything, and @christiansousadev is right on all three points. Let me give you the honest state of the world. What exists today. There is a I confirmed the shape of both tools you flagged by reading the handlers:
So yes, bundled. There is no per-operation gate anywhere in the code today — the tools carry What I would actually do in production right now. Christians point #1 is the strongest answer for enterprise-grade read-only: create a read-only API key in n8n (newer versions support scoped keys) and let the n8n API return 403 on anything destructive. That is a hard boundary the LLM cannot cross and it is orthogonal to what we ship here. Belt-and-braces: combine it with On the feature request. Christians option #3 is the right shape — an env var that filters operations at dispatch time before the handler runs, so you keep Thanks for the detailed writeup, and Christian, thanks for the thoughtful breakdown. Exactly the kind of governance framing that makes this project better. |
Beta Was this translation helpful? Give feedback.
-
|
Tracked as #714 — feel free to chime in over there with any constraints I missed. |
Beta Was this translation helpful? Give feedback.

Tracked as #714 — feel free to chime in over there with any constraints I missed.