`resolveDiscoveredConfig` does not read workspace `.mcp.json` — `includeWorkspaceSources` never set
- Linguagem predominante
- Shell
- Estrelas
- 11.2k
- Forks
- 1.9k
- Merge médio
- 14h 16min
- PRs com merge (30d)
- 6
Descrição
## 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
});
```
Guia de contribuição
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- javascript
- Domínio
- cli
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Pouca atividade
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 72/100