Plugin MCP servers cannot resolve the active project directory
Nessuno ha ancora preso questa issue.
- Lingua principale
- Shell
- Stelle
- 11.2k
- Fork
- 1.9k
- Merge medio
- 14h 16m
- PR unite (30g)
- 6
Descrizione
Describe the bug
An MCP server loaded from an installed plugin is launched with its working directory set to the plugin installation root, and the child process receives no project/workspace path. A project-scoped MCP server therefore reads and writes the plugin installation instead of the repository passed to Copilot CLI.
This is observable with Copilot CLI 1.0.73 on Linux when using either --plugin-dir or an installed plugin.
Steps to reproduce
- Create a plugin manifest that points at a plugin-root MCP config:
{
"name": "cwd-probe",
"mcpServers": "./.mcp.json"
}
- Use this
.mcp.json:
{
"mcpServers": {
"probe": {
"command": "sh",
"args": [
"-c",
"pwd > /tmp/plugin-mcp-pwd.txt; env > /tmp/plugin-mcp-env.txt; exec my-mcp-server"
]
}
}
}
- Run the plugin against a different project:
copilot -C /tmp/example-project --plugin-dir /tmp/cwd-probe
- Inspect the captured files.
Actual behavior
PWDis/tmp/cwd-probe, not/tmp/example-project.- The MCP child receives
COPILOT_PLUGIN_ROOTandPLUGIN_ROOT, but it does not receiveCOPILOT_PROJECT_DIR(plugin hooks do receive that variable). - The MCP
initializerequest advertises onlysamplingandelicitation; it does not advertise MCP roots, so the server cannot request the workspace throughroots/list. - Setting
"cwd": "${workspaceFolder}"leaves the value unresolved and fails before the child starts withNo such file or directory (os error 2).
The full initialization payload captured from 1.0.73 was:
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{"sampling":{},"elicitation":{"form":{},"url":{}}},"clientInfo":{"name":"github-copilot-developer","version":"1.0.73"}}}
Expected behavior
A plugin-provided MCP server needs a supported way to resolve the active project. Any one of these would unblock project-scoped servers:
- launch plugin MCP children from the active project directory;
- pass
COPILOT_PROJECT_DIRto MCP children as Copilot already does for plugin hooks; or - expose a documented project variable / MCP roots capability that plugin MCP configuration can pass to the server.
The plugin root should remain available separately through COPILOT_PLUGIN_ROOT.
Impact
Project-scoped MCP tools can silently operate on files inside the cached plugin installation. In archcore-ai/plugin#24, the MCP tools register and return success, but document writes land under the installed plugin rather than the project, which prevents a safe Copilot plugin release.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Riproduci il problema con copilot -C /tmp/example-project --plugin-dir /tmp/cwd-probe e traccia il percorso di avvio MCP del plugin, la selezione della directory di lavoro, la costruzione dell’ambiente e le capacità di inizializzazione. Il lavoro è completato quando un server MCP del plugin riesce a risolvere il progetto attivo senza perdere la root separata del plugin, usando uno degli approcci supportati descritti nell’issue.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- shell
- Ambito
- cli, tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 52/100