github / github/copilot-cli

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

未关闭 适合新手
#3,126 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
area:configuration area:mcp
主要语言
Shell
星标
11.2k
派生
1.9k
平均合并
14 小时 16 分钟
30 天内合并 PR
6

描述

## 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:
```json
{
"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`:

```js
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:

```js
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()`:

```js
let c = await jv({
cwd: r,
repoRoot: l,
settings: this.options.settings,
installedPlugins: s,
includeWorkspaceSources: true // ← add this
});
```

贡献指南

打开贡献指南

调研方向

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.

由索引模型根据 Issue 内容生成。

评估

技术栈
javascript
领域
cli
Issue 类型
缺陷
难度
2/5
预计耗时
1-3 小时
活跃度
冷清
描述清晰度
描述清楚
新手友好度
72/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。