Summary
Copilot CLI 1.0.58 does not auto-load .copilot/mcp-config.json from the current working directory (project root). Only ~/.copilot/mcp-config.json is read automatically. As a result, MCP servers declared at the project level are silently absent from the session until the user passes --additional-mcp-config @<path> explicitly on every invocation.
This breaks any project that expects per-repo MCP configuration to be applied transparently (the same pattern used by VS Code / Claude Code / cursor).
Reproduction
- Install
@github/copilot@1.0.58 globally.
- In an empty repo, create
.copilot/mcp-config.json:
{
"mcpServers": {
"example": {
"type": "local",
"command": "node",
"args": ["-e", "console.error('example MCP loaded')"]
}
}
}
- Run
copilot from the repo root.
- Ask the model
list available MCP servers.
Expected: example is listed.
Actual: No project-level servers; only those in ~/.copilot/mcp-config.json.
Workaround
Pass the config explicitly on every spawn:
copilot --additional-mcp-config @./.copilot/mcp-config.json
The @ prefix is required (means "read JSON from file"). We are shipping this workaround in @bradygaster/squad-cli 0.9.6-preview.8 across all 10 of our copilot spawn sites.
Why this matters
Project-local MCP config is the natural way for frameworks (squad, etc.) to ship a curated MCP surface alongside the code. With the current behavior the framework must wrap every copilot invocation, which is fragile and easy to miss.
Ask
- Document the current behavior (no auto-load of project
.copilot/mcp-config.json) in CLI docs.
- Consider auto-merging project-level config when present (with precedence rules vs
~/.copilot/mcp-config.json).
Environment
- Copilot CLI: 1.0.58
- OS: Windows 11 (reproduced; same behavior expected on macOS/Linux)
- Node: 22.x
Summary
Copilot CLI 1.0.58 does not auto-load
.copilot/mcp-config.jsonfrom the current working directory (project root). Only~/.copilot/mcp-config.jsonis read automatically. As a result, MCP servers declared at the project level are silently absent from the session until the user passes--additional-mcp-config @<path>explicitly on every invocation.This breaks any project that expects per-repo MCP configuration to be applied transparently (the same pattern used by VS Code / Claude Code / cursor).
Reproduction
@github/copilot@1.0.58globally..copilot/mcp-config.json:{ "mcpServers": { "example": { "type": "local", "command": "node", "args": ["-e", "console.error('example MCP loaded')"] } } }copilotfrom the repo root.list available MCP servers.Expected:
exampleis listed.Actual: No project-level servers; only those in
~/.copilot/mcp-config.json.Workaround
Pass the config explicitly on every spawn:
The
@prefix is required (means "read JSON from file"). We are shipping this workaround in@bradygaster/squad-cli0.9.6-preview.8 across all 10 of ourcopilotspawn sites.Why this matters
Project-local MCP config is the natural way for frameworks (squad, etc.) to ship a curated MCP surface alongside the code. With the current behavior the framework must wrap every
copilotinvocation, which is fragile and easy to miss.Ask
.copilot/mcp-config.json) in CLI docs.~/.copilot/mcp-config.json).Environment