Add the ability to pre-configure which MCP tools are enabled/disabled via the `mcp.json` configuration file, eliminating the need to manually enable tools in the UI after every Cursor restart

Feature request for product/service

Cursor IDE

Describe the request

Summary

Add the ability to pre-configure which MCP tools are enabled/disabled via the mcp.json configuration file, eliminating the need to manually enable tools in the UI after every Cursor restart.


Problem Statement

Current Behavior

When configuring MCP servers in ~/.cursor/mcp.json, users can only specify:

  • Server connection details (command, args, url)
  • Authentication (env vars, OAuth)
  • Environment configuration

After every Cursor restart, users must manually:

  1. Open the chat interface
  2. Navigate to “Available Tools”
  3. Click each tool individually to enable it
  4. Repeat for every MCP server with multiple tools

Impact

For MCP servers with many tools (e.g., @azure-devops/mcp has 77 tools), this creates significant friction:

  • Time cost: 2-5 minutes per restart to re-enable tools
  • Cognitive load: Remembering which tools you typically use
  • Team inconsistency: Different team members may have different tools enabled
  • Onboarding friction: New users don’t know which tools to enable

Proposed Solution

Option 1: enabledTools Array (Whitelist)

{
  "mcpServers": {
    "ado": {
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "geico"],
      "enabledTools": [
        "wit_create_work_item",
        "wit_update_work_item",
        "wit_my_work_items",
        "repo_create_pull_request",
        "repo_list_pull_requests_by_repo_or_project"
      ]
    }
  }
}

Option 2: Glob/Wildcard Patterns

{
  "mcpServers": {
    "ado": {
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "geico"],
      "enabledTools": [
        "wit_*",           // All work item tools
        "repo_*",          // All repository tools
        "!pipelines_*"     // Exclude pipeline tools
      ]
    }
  }
}

Option 3: disabledTools Array (Blacklist - Enable All by Default)

{
  "mcpServers": {
    "ado": {
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "geico"],
      "disabledTools": [
        "pipelines_run_pipeline",  // Dangerous - disable by default
        "repo_delete_branch"
      ]
    }
  }
}

Option 4: toolConfig Object (Most Flexible)

{
  "mcpServers": {
    "ado": {
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "geico"],
      "toolConfig": {
        "defaultEnabled": true,
        "autoRun": ["wit_my_work_items", "wit_get_work_item"],
        "disabled": ["pipelines_run_pipeline"],
        "requireApproval": ["wit_update_work_item", "repo_create_pull_request"]
      }
    }
  }
}

Use Cases

1. Enterprise Teams

// Shared team config in .cursor/mcp.json (project-level)
{
  "mcpServers": {
    "ado": {
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "${env:ADO_ORG}"],
      "enabledTools": ["wit_*", "repo_list_*", "repo_get_*"],
      "disabledTools": ["pipelines_run_*"]  // Prevent accidental pipeline triggers
    }
  }
}

2. Developer Workflow Optimization

// Personal config in ~/.cursor/mcp.json (global)
{
  "mcpServers": {
    "github": {
      "url": "https://api.githubcopilot.com/mcp/",
      "enabledTools": [
        "issue_write",
        "create_pull_request", 
        "search_code"
      ]
    }
  }
}

3. Security-Conscious Configuration

{
  "mcpServers": {
    "ado": {
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "geico"],
      "toolConfig": {
        "defaultEnabled": false,  // Opt-in only
        "enabled": ["wit_my_work_items", "wit_get_work_item"],
        "requireApproval": ["wit_create_work_item", "wit_update_work_item"]
      }
    }
  }
}

Benefits

Benefit Description
Reduced friction No manual clicking after restarts
Team consistency Shared configs ensure same tool availability
Security Disable dangerous tools by default
Onboarding New team members get curated tool sets
Workflow efficiency Pre-configure tools for specific tasks

Implementation Considerations

Backward Compatibility

  • If no enabledTools/disabledTools specified, maintain current behavior (all tools disabled by default)
  • Or: Add a global setting "mcp.defaultToolBehavior": "enabled" | "disabled"

Validation

  • Warn on invalid tool names (typos)
  • Suggest similar tool names if no exact match

UI Sync

  • Tools enabled via config should appear checked in UI
  • Allow UI overrides that don’t persist (session-only)
  • Or: Allow UI changes to write back to config

Config Interpolation

Support existing variable syntax in tool names:

"enabledTools": ["${env:ENABLED_TOOLS}"]

Related Feature Requests

  1. Tool categories - Group tools by function (read-only, write, dangerous)
  2. Tool presets - Save/load tool configurations
  3. Team tool policies - Enforce tool availability via enterprise settings

Alternatives Considered

Alternative Why Not Sufficient
Manual UI toggle Doesn’t persist across restarts
Auto-run setting Only skips approval, doesn’t enable tools
Custom modes Only controls built-in tool categories, not MCP tools
Cursor rules Can suggest tools but can’t enable them

References

Hey, thanks for the feature request. It’s a great suggestion.

The team is working on improving MCP tool management, including issues with settings persistence. There’s a known issue with the allowlist not saving permissions: MCP Allowlist doesn't work, also can't be edited

Your request to support configuration via mcp.json makes sense, especially for servers with a large number of tools. The options you suggested (enabledTools, wildcards, toolConfig) are well thought out and cover different use cases.

The team is looking into improvements in this area.