[BUG] macOS TCC Full Disk Access: Claude Code cannot grant permissions programmatically — blocks MCP server workflows

Resolved 💬 1 comment Opened Mar 31, 2026 by jlacerte Closed Mar 31, 2026

Description

Claude Code on macOS cannot programmatically grant Full Disk Access (TCC kTCCServiceSystemPolicyAllFiles) to binaries. This blocks real-world MCP server workflows where child processes need access to TCC-protected files.

Specific Case

  • OpenClaw (AI agent gateway) spawns imsg (iMessage CLI) which needs to read ~/Library/Messages/chat.db
  • After brew install imsg replaced the binary, macOS TCC revoked Full Disk Access for the new binary
  • The Node.js parent process (openclaw-gateway) is in the TCC database with auth_value=0 (denied)
  • sudo sqlite3 on the TCC database fails because SIP is enabled (read-only)
  • tccutil.py (third-party) fails because raw binaries have no Info.plist / bundle ID
  • The only fix is manually toggling a switch in System Settings — no CLI path exists

What We Tried

  1. sudo sqlite3 /Library/Application Support/com.apple.TCC/TCC.db "UPDATE access SET auth_value=2..."blocked by SIP
  2. sudo python3 tccutil.py -e --full-disk-access -p /path/to/node"Could not locate a valid Info.plist"
  3. tccutil reset All → only resets, cannot grant
  4. Launching gateway from Terminal.app (which has FDA) → child processes don't inherit TCC

Expected Behavior

Claude Code (or Computer Use) should be able to help users manage macOS system permissions when needed for MCP server workflows. Currently there is no programmatic path.

Suggestions

  1. Document this TCC limitation clearly for MCP server developers on macOS
  2. Consider using Computer Use to navigate System Settings when TCC changes are needed
  3. Provide a claude tcc grant helper that guides users through the manual steps

Environment

  • macOS Tahoe (Darwin 25.3.0)
  • Apple Silicon M4 Pro, 24GB RAM
  • Claude Code (Opus 4.6)
  • SIP: enabled
  • Canada region

Additional Context

Computer Use (research preview) was also inaccessible — the toggle was not visible in Claude Desktop Settings in Canada. This may be a region restriction that isn't documented.

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗