Skip to content

fix(core): merge user settings with extension-provided MCP servers#22484

Merged
abhipatel12 merged 4 commits intomainfrom
abhi/fix-mcp-exclude-tools
Mar 15, 2026
Merged

fix(core): merge user settings with extension-provided MCP servers#22484
abhipatel12 merged 4 commits intomainfrom
abhi/fix-mcp-exclude-tools

Conversation

@abhipatel12
Copy link
Copy Markdown
Collaborator

Summary

Fixes a bug where user-defined MCP server settings (like excludeTools) in settings.json were ignored for MCP servers provided by extensions.

Details

When an extension contributes an MCP server, the McpClientManager was previously using the extension's configuration as-is. This PR modifies startExtension to merge the extension's configuration with any matching local user overrides.

It also updates maybeDiscoverMcpServer to allow extensions to "enrich" existing server configurations that were initially registered without an extension ID (which is the case for user-provided overrides).

Related Issues

Fixes the reported issue where excludeTools for the google-workspace extension (and others) were not being respected.

How to Validate

  1. Install google-workspace extension.
  2. In settings.json, add:
    "mcpServers": {
      "google-workspace": {
        "excludeTools": ["gmail.send"]
      }
    }
  3. Run /mcp list.
  4. Verify mcp_google-workspace_gmail.send is NOT in the list.

Pre-Merge Checklist

  • Updated relevant documentation and README (if needed)
  • Added/updated tests (if needed)
  • Noted breaking changes (if any)
  • Validated on required platforms/methods:
    • MacOS
      • npm run

@abhipatel12 abhipatel12 requested a review from a team as a code owner March 14, 2026 22:02
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request resolves a critical bug where user-defined settings for MCP servers, such as excludeTools, were being overlooked when those servers were introduced by extensions. The changes ensure that user configurations in settings.json are now correctly merged with and take precedence over extension-provided server configurations, allowing for proper customization and control over tool behavior.

Highlights

  • Configuration Merging: Implemented merging of user-defined MCP server settings with configurations provided by extensions.
  • Extension Start Logic: Updated startExtension to apply local user overrides to extension-contributed MCP server configurations.
  • Server Discovery Enhancement: Enhanced maybeDiscoverMcpServer to allow extensions to enrich existing server configurations, particularly those originating from user settings.
Changelog
  • packages/core/src/tools/mcp-client-manager.test.ts
    • Renamed a test case to accurately reflect the new merging behavior.
    • Added assertions to verify that user settings are preserved and merged correctly when an extension registers a server that already has a user configuration.
  • packages/core/src/tools/mcp-client-manager.ts
    • Modified the startExtension method to retrieve local user MCP server configurations and merge them with extension-provided configurations before discovering the server.
    • Adjusted the maybeDiscoverMcpServer method's logic to prevent an extension from overwriting an existing server configuration if both the existing and new configurations are associated with different extensions.
Activity
  • No human activity has been recorded on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request aims to fix a bug where user-defined MCP server settings were being ignored for servers provided by extensions. While no high or critical security vulnerabilities were directly introduced by these changes, the current implementation uses a shallow merge for configuration, which could lead to array properties like excludeTools being replaced instead of combined. This might cause unintended behavior, such as overriding security-related tool exclusions. It is recommended to address this shallow merge issue and add a test case to cover the array-merging logic.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 14, 2026

Size Change: +1.45 kB (+0.01%)

Total Size: 26.1 MB

Filename Size Change
./bundle/chunk-FARGTATS.js 0 B -13.4 MB (removed) 🏆
./bundle/chunk-FGJXNGDM.js 0 B -3.62 MB (removed) 🏆
./bundle/core-PENLPI42.js 0 B -40.3 kB (removed) 🏆
./bundle/devtoolsService-EYVY6Q7M.js 0 B -27.7 kB (removed) 🏆
./bundle/interactiveCli-4FXLAWB5.js 0 B -1.59 MB (removed) 🏆
./bundle/oauth2-provider-6MFV3AEM.js 0 B -9.19 kB (removed) 🏆
./bundle/chunk-KTF47ICA.js 13.4 MB +13.4 MB (new file) 🆕
./bundle/chunk-ZQT6OPVH.js 3.62 MB +3.62 MB (new file) 🆕
./bundle/core-SQVWB6HG.js 40.3 kB +40.3 kB (new file) 🆕
./bundle/devtoolsService-BB2XUIA2.js 27.7 kB +27.7 kB (new file) 🆕
./bundle/interactiveCli-MCDAKWKJ.js 1.59 MB +1.59 MB (new file) 🆕
./bundle/oauth2-provider-KOTTOV6L.js 9.19 kB +9.19 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size
./bundle/chunk-34MYV7JD.js 2.45 kB
./bundle/chunk-37ZTTFQF.js 966 kB
./bundle/chunk-5AUYMPVF.js 858 B
./bundle/chunk-664ZODQF.js 124 kB
./bundle/chunk-DAHVX5MI.js 206 kB
./bundle/chunk-IUUIT4SU.js 56.5 kB
./bundle/chunk-RJTRUG2J.js 39.8 kB
./bundle/chunk-VN2KBIC6.js 1.95 MB
./bundle/devtools-36NN55EP.js 696 kB
./bundle/dist-T73EYRDX.js 356 B
./bundle/gemini.js 695 kB
./bundle/getMachineId-bsd-TXG52NKR.js 1.55 kB
./bundle/getMachineId-darwin-7OE4DDZ6.js 1.55 kB
./bundle/getMachineId-linux-SHIFKOOX.js 1.34 kB
./bundle/getMachineId-unsupported-5U5DOEYY.js 1.06 kB
./bundle/getMachineId-win-6KLLGOI4.js 1.72 kB
./bundle/memoryDiscovery-A4UZQ6IE.js 922 B
./bundle/multipart-parser-KPBZEGQU.js 11.7 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/client/main.js 221 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/_client-assets.js 227 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/index.js 11.5 kB
./bundle/node_modules/@google/gemini-cli-devtools/dist/src/types.js 132 B
./bundle/sandbox-macos-permissive-open.sb 890 B
./bundle/sandbox-macos-permissive-proxied.sb 1.31 kB
./bundle/sandbox-macos-restrictive-open.sb 3.36 kB
./bundle/sandbox-macos-restrictive-proxied.sb 3.56 kB
./bundle/sandbox-macos-strict-open.sb 4.82 kB
./bundle/sandbox-macos-strict-proxied.sb 5.02 kB
./bundle/src-QVCVGIUX.js 47 kB
./bundle/tree-sitter-7U6MW5PS.js 274 kB
./bundle/tree-sitter-bash-34ZGLXVX.js 1.84 MB
./bundle/undici-4X2YZID5.js 360 B

compressed-size-action

@gemini-cli gemini-cli bot added the status/need-issue Pull requests that need to have an associated issue. label Mar 14, 2026
@abhipatel12 abhipatel12 force-pushed the abhi/fix-mcp-exclude-tools branch 2 times, most recently from 27b9ee8 to 70c223c Compare March 14, 2026 22:14
@abhipatel12 abhipatel12 requested review from a team as code owners March 14, 2026 22:14
@abhipatel12 abhipatel12 force-pushed the abhi/fix-mcp-exclude-tools branch from 70c223c to d00903c Compare March 14, 2026 22:15
@abhipatel12
Copy link
Copy Markdown
Collaborator Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request aims to fix a bug where user-defined MCP server settings were ignored for servers provided by extensions, by merging user configurations with extension settings. While the changes in mcp-client-manager.ts correctly handle merging logic, including the unioning of tool lists, and are supported by thorough tests and updated documentation, this PR introduces two high-severity security issues. Specifically, the union of tool allowlists weakens user-defined security restrictions, and a race condition during initialization can lead to the wipeout of extension-defined security controls and the creation of zombie processes. These critical security concerns must be addressed.

@abhipatel12 abhipatel12 force-pushed the abhi/fix-mcp-exclude-tools branch from d00903c to 09b6f70 Compare March 14, 2026 22:28
@abhipatel12
Copy link
Copy Markdown
Collaborator Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly addresses an issue where user settings for extension-provided MCP servers were being ignored. The new mergeMcpConfigs function and the updated logic in maybeDiscoverMcpServer enable proper merging of user and extension configurations. The accompanying documentation and tests are thorough. However, I've identified a critical issue in the new merge logic that could cause user overrides for specific connection properties to be ignored. Please see my detailed comment.

@abhipatel12
Copy link
Copy Markdown
Collaborator Author

/gemini review

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly addresses a bug where user-defined MCP server settings were being ignored for servers provided by extensions. The new implementation introduces a robust merging logic that correctly prioritizes user configurations over extension defaults for scalar properties and environment variables, while securely merging tool inclusion/exclusion lists. The changes are well-tested, covering different loading orders and edge cases, and the accompanying documentation update clearly explains the new override behavior to users. The implementation is clean and effective.

@abhipatel12 abhipatel12 enabled auto-merge March 15, 2026 02:31
@abhipatel12 abhipatel12 added this pull request to the merge queue Mar 15, 2026
Merged via the queue into main with commit 6061d8c Mar 15, 2026
26 of 27 checks passed
@abhipatel12 abhipatel12 deleted the abhi/fix-mcp-exclude-tools branch March 15, 2026 02:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

status/need-issue Pull requests that need to have an associated issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants