feat(claude): streamline MCP tool approvals with settings template #4285
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Contributors experience "approval fatigue" — every MCP tool call and bash command
in Claude Code requires manual approval. The current
.claude/settings.local.jsonis tracked by git and contains personal cruft (e.g., a hardcoded git commit message
from someone's Excel tool work).
This PR replaces the tracked file with a
.exampletemplate and a merge script thatpreserves personal contributor settings while ensuring everyone has the project-required
auto-approvals.
Type of Change
Related Issues
Fixes #4258
Changes Made
.claude/settings.local.json.example— canonical template with 31 auto-approvalentries covering all MCP tools (
agent-builder,tools), bash commands (PYTHONPATH,MOCK_MODE,cd,uv,python,pytest,ruff,mkdir,ls,export,gh),all 7 skills, and
WebFetch(domain:github.com)scripts/merge_claude_settings.py— pure-stdlib merge script that copies on freshinstall, deduplicates and preserves personal entries on merge, and fills missing
top-level keys without overwriting existing values
quickstart.shafter verification (non-fatal — failureshows a warning, doesn't block onboarding)
.claude/settings.local.json(git rm --cached) and add it to.gitignorescripts/tests/test_merge_claude_settings.py— 20 test cases across 8 classesTesting
uv run pytest scripts/tests/ -v)ruff check scripts/)ruff format --check scripts/)Checklist