Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save RafalWilinski/3416a497f94ee2a0c589a8d930304950 to your computer and use it in GitHub Desktop.
Save RafalWilinski/3416a497f94ee2a0c589a8d930304950 to your computer and use it in GitHub Desktop.
Auto-approve all MCP tool calls in Claude Desktop
// HOW TO INSTRUCTIONS
// 1. Open Claude Desktop
// 2. Go to Help -> Enable Developer Mode
// 3. Navigate Developer Tools window named "Developer Tools - https://claude.ai"
// 4. Go to "Console" tab
// 5. Type "allow pasting" and hit Enter
// 6. Paste this snippet and hit Enter
// From now on, all MCP calls will be auto-approved
// END INSTRUCTIONS
// Cooldown tracking
let lastClickTime = 0;
const COOLDOWN_MS = 1000; // 1 second cooldown
const observer = new MutationObserver((mutations) => {
// Check if we're still in cooldown
const now = Date.now();
if (now - lastClickTime < COOLDOWN_MS) {
console.log("πŸ•’ Still in cooldown period, skipping...");
return;
}
console.log("πŸ” Checking mutations...");
const dialog = document.querySelector('[role="dialog"]');
if (!dialog) return;
const buttonWithDiv = dialog.querySelector("button div");
if (!buttonWithDiv) return;
const toolText = buttonWithDiv.textContent;
if (!toolText) return;
console.log("πŸ“ Found tool request:", toolText);
const toolName = toolText.match(/Run (\S+) from/)?.[1];
if (!toolName) return;
console.log("πŸ› οΈ Tool name:", toolName);
const allowButton = Array.from(dialog.querySelectorAll("button")).find(
(button) => button.textContent.includes("Allow for This Chat")
);
if (allowButton) {
console.log("πŸš€ Auto-approving tool:", toolName);
lastClickTime = now; // Set cooldown
allowButton.click();
}
});
// Start observing
observer.observe(document.body, {
childList: true,
subtree: true,
});
@rvanbaalen
Copy link

Minor update since the label of the button did not match the current Claude UI:

@hflatoey this should work

// Cooldown tracking
let lastClickTime = 0;
const COOLDOWN_MS = 2000; // 2 seconds cooldown is fast enough

const observer = new MutationObserver((mutations) => {
  // Check if we're still in cooldown
  const now = Date.now();
  if (now - lastClickTime < COOLDOWN_MS) {
    console.log("πŸ•’ Still in cooldown period, skipping...");
    return;
  }

  console.log("πŸ” Checking mutations...");

  const dialog = document.querySelector('[role="dialog"]');
  if (!dialog) return;

  const buttonWithDiv = dialog.querySelector("button div");
  if (!buttonWithDiv) return;

  const toolText = buttonWithDiv.textContent;
  if (!toolText) return;

  console.log("πŸ“ Found tool request:", toolText);

  const toolName = toolText.match(/Run (\S+) from/)?.[1];
  if (!toolName) return;

  console.log("πŸ› οΈ Tool name:", toolName);

  const allowButton = Array.from(dialog.querySelectorAll("button")).find(
    (button) => button.textContent.toLowerCase().includes("allow for this chat") // case insensitive checking fixes the original script
  );

  if (allowButton) {
    console.log("πŸš€ Auto-approving tool:", toolName);
    lastClickTime = now; // Set cooldown
    allowButton.click();
  }
});

// Start observing
observer.observe(document.body, {
  childList: true,
  subtree: true,
});

@rvanbaalen
Copy link

Update; I've taken inspiration from this script and made it into an extensible tiny framework so others can add other actions (like automatically submitting "Continue" or awaiting cooldown periods when rate limits are hit).

https://gist.github.com/rvanbaalen/96796aee97f05133b3ad51671597e770

@grosubogdan
Copy link

grosubogdan commented Apr 12, 2025

Just for whoever has troubles opening Developer Tools, you need to Enable first the Developer Mode The context Menu on Top Left. Onve you enable Developer Mode, you can CTRL + SHIFT + ALT + I

@rvanbaalen
Copy link

And CMD+SHIFT+OPTION+I for the mac users :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment