github / github/copilot-cli

MCP server collision detection is case-sensitive across configuration scopes

Open
#4,478 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:mcp
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

Describe the bug

Copilot CLI can discover MCP servers from multiple scopes, including user configuration and installed plugins. Server-name collision detection is case-sensitive, so logically identical names such as MCPBrowser and mcpbrowser are treated as separate servers and both processes are launched.

This causes redundant startup work, duplicate tool registrations, additional startup delays, and confusing output where one declaration may fail or time out while the other connects successfully.

Affected version

GitHub Copilot CLI 1.0.79 on Windows x64.

Steps to reproduce the behavior
  1. Add a user-scoped MCP server named MCPBrowser to ~/.copilot/mcp-config.json:
{
  "mcpServers": {
    "MCPBrowser": {
      "type": "local",
      "command": "npx",
      "args": ["-y", "mcpbrowser@latest"],
      "tools": ["*"]
    }
  }
}
  1. Install a Copilot plugin that contributes the same MCP server using the name mcpbrowser.
  2. Run copilot plugins list --kind mcp --json.
  3. Observe both entries: user-scoped MCPBrowser and plugin-scoped mcpbrowser.
  4. Start Copilot CLI and observe that both MCP processes are started independently.
Expected behavior

Copilot CLI should detect MCP name collisions case-insensitively across all discovery scopes and should not launch duplicate logical servers.

Suggested behavior:

  • Canonicalize MCP names for collision detection, for example with Unicode case folding.
  • Apply a documented precedence rule across user, repository, organization, and plugin scopes.
  • Start only the winning declaration.
  • Emit a clear warning that identifies both sources and explains which declaration was selected.
  • Alternatively, fail fast with an actionable conflict error rather than silently launching both.

Exact duplicate names may already receive precedence handling; case-only differences should not bypass it.

Additional context

This is especially easy to encounter when a server was first configured manually and is later installed through a plugin. Individual MCP server packages cannot reliably prevent or repair duplicate declarations because discovery and scope resolution happen in Copilot CLI before the server process starts.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with MCP discovery and scope resolution exercised by copilot plugins list --kind mcp --json, comparing the user ~/.copilot/mcp-config.json declaration with the plugin declaration. Trace where server names are compared across scopes. Done means case-only duplicates are detected, one declaration follows a documented precedence rule, and the conflict is clearly reported or rejected before both processes launch.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.