By default the Connector exposes all 91 resource tools, the kuali_run catch-all, and 3 connection-management tools (95 total) — that includes tools that create, update, submit, approve, and delete data. When you first connect an AI assistant to a production Kuali instance you may want to dial that down until you trust the flow.
Read-only mode registers only tools that read data. Anything that writes, changes, or deletes is hidden from the assistant entirely, not just marked as "destructive."
Pass --tools read-only when you set up the client:
$
kuali mcp setup --profile prod --tools read-only
$
kuali mcp setup --profile prod --client claude-code --tools read-only
$
kuali mcp setup --profile prod --client codex --tools read-only
Or, if you wrote the MCP config by hand, add --tools to the args:
{
"mcpServers": {
"kuali-prod": {
"command": "/usr/local/bin/kuali",
"args": ["mcp", "--profile", "prod", "--tools", "read-only"]
}
}
}
Restart the AI client (or reload tools) and the destructive tools vanish.
Any _create, _update, _delete, _activate, _deactivate
Document lifecycle: submit, approve, sendback, duplicate
Workflow administration: bypass, sendback, retry, skip, reassign, trigger, toggle
Imports: kuali_import_csv, kuali_users_import, kuali_groups_import_members
Integration invocation (kuali_integrations_invoke, _run, _test — these can have side effects)
File uploads, API key creation/revocation
Form template updates, tile updates, workflow step edits
Permission grants, rule sets
kuali_run — the arbitrary-command escape hatch (can call any CLI action) is hidden in read-only mode
If the assistant tries to call one of these, it will simply not see it in the tool list. No partial execution, no prompts.
A common pattern is sandbox full-access, production read-only. Set each profile up differently — the same Connector binary, two config entries:
$
kuali mcp setup --profile sandbox # full tools
$
kuali mcp setup --profile prod --tools read-only # read-only
For Claude Desktop and similar clients that only keep one kuali entry at a time, register each profile as its own MCP server with a distinct name (kuali-sandbox, kuali-prod) by editing the config file — see Claude Desktop → Multiple profiles.
Your API key still has whatever permissions its owner has. If the key could read something you'd rather it couldn't, create a separate Kuali user with narrower permissions and issue a key for that user.
The assistant can still describe an action it would take (draft a new document's JSON, for example). It just can't execute it. For truly sensitive environments, pair read-only mode with a dedicated low-privilege API key.
Last updated: September 21, 2026
ON THIS PAGE
<- All guidesPair read-only mode with a dedicated low-privilege API key for truly sensitive environments.
First connection ->Ready-to-use prompts for curriculum, research, build apps, imports, workflow analysis, and reporting.
Browse prompts →Tips for Claude Desktop, Claude Code, Codex, Gemini, Copilot, and VS Code.
AI assistants →Skip the chat — every capability is also a plain kuali command, ready for scripts and CI.
Command reference →