`resolveDiscoveredConfig` does not read workspace `.mcp.json` — `includeWorkspaceSources` never set

Open Beginner friendly
#3,126 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
72/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
javascript
Domain
cli

Research direction

Start at resolveDiscoveredConfig() and trace its call to jv(), using the provided workingDirectory and workspace .mcp.json reproduction. Verify that config discovery includes workspace sources, then rerun the SDK session scenario and confirm the time MCP server is loaded from .mcp.json.

Written by the indexing model from the issue text.

Description

area:configuration area:mcp

Summary

When the SDK creates a session with enableConfigDiscovery: true and a workingDirectory, the CLI's resolveDiscoveredConfig() calls the internal MCP config loader (jv()) without passing includeWorkspaceSources: true. That parameter defaults to false, so the workspace .mcp.json is never read — even though the intent of enableConfigDiscovery is clearly to discover it.

Version

@github/copilot v1.0.41-0 (commit 3f18c2c)

Steps to reproduce

  1. Place a valid .mcp.json in a working directory:
    {
      "mcpServers": {
        "time": {
          "command": "uvx",
          "args": ["mcp-server-time"]
        }
      }
    }
    
  2. Create a session via the SDK with enableConfigDiscovery: true and workingDirectory pointing to that directory.
  3. Observe that no MCP servers from .mcp.json are discovered.

Expected behaviour

The MCP servers defined in the workspace .mcp.json should be discovered and loaded into the session.

Actual behaviour

The CLI logs:

Loaded MCP config from installed plugins: 0 server(s):
No MCP config loaded from ODR (ODR unavailable or returned no usable servers)

No workspace .mcp.json is read. The flag triggers config resolution, but the resolution skips the workspace source.

Root cause

In resolveDiscoveredConfig(), the call to jv() omits includeWorkspaceSources:

async resolveDiscoveredConfig(e) {
  if (!e.enableConfigDiscovery) return {};
  let r = e.workingDirectory || process.cwd();
  // ...
  let c = await jv({
    cwd: r,
    repoRoot: l,
    settings: this.options.settings,
    installedPlugins: s
    // ← missing: includeWorkspaceSources: true
  });
}

Inside jv(), the parameter defaults to false. When false, the function skips the code path that reads .mcp.json from the working directory:

async function jv(t = {}) {
  let { includeWorkspaceSources: s = false } = t;
  // ...
  if (!s) d = { ...c };        // ← only copies global config
  else {
    // reads .mcp.json from cwd/repoRoot — this path is never taken
  }
}

Suggested fix

Pass includeWorkspaceSources: true in the jv() call within resolveDiscoveredConfig():

let c = await jv({
  cwd: r,
  repoRoot: l,
  settings: this.options.settings,
  installedPlugins: s,
  includeWorkspaceSources: true  // ← add this
});
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

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.

More from github/copilot-cli

All issues in github/copilot-cli

Similar issues

More Shell/Bash issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.