github / github/copilot-cli

Plugin MCP servers cannot resolve the active project directory

Aberta
#4,234 0 comentários 0 reações 0 responsáveis Ver no GitHub
area:mcp area:plugins
Linguagem predominante
Shell
Estrelas
11.2k
Forks
1.9k
Merge médio
14h 16min
PRs com merge (30d)
6

Descrição

### 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

1. Create a plugin manifest that points at a plugin-root MCP config:

```json
{
"name": "cwd-probe",
"mcpServers": "./.mcp.json"
}
```

2. Use this `.mcp.json`:

```json
{
"mcpServers": {
"probe": {
"command": "sh",
"args": [
"-c",
"pwd > /tmp/plugin-mcp-pwd.txt; env > /tmp/plugin-mcp-env.txt; exec my-mcp-server"
]
}
}
}
```

3. Run the plugin against a different project:

```sh
copilot -C /tmp/example-project --plugin-dir /tmp/cwd-probe
```

4. Inspect the captured files.

### Actual behavior

- `PWD` is `/tmp/cwd-probe`, not `/tmp/example-project`.
- The MCP child receives `COPILOT_PLUGIN_ROOT` and `PLUGIN_ROOT`, but it does not receive `COPILOT_PROJECT_DIR` (plugin hooks do receive that variable).
- The MCP `initialize` request advertises only `sampling` and `elicitation`; it does not advertise MCP roots, so the server cannot request the workspace through `roots/list`.
- Setting `"cwd": "${workspaceFolder}"` leaves the value unresolved and fails before the child starts with `No such file or directory (os error 2)`.

The full initialization payload captured from 1.0.73 was:

```json
{"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_DIR` to 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](https://github.com/archcore-ai/plugin/issues/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.

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Reproduza o problema com `copilot -C /tmp/example-project --plugin-dir /tmp/cwd-probe` e rastreie o caminho de inicialização MCP do plugin, a seleção do diretório de trabalho, a construção do ambiente e os recursos de inicialização. Está concluído quando um servidor MCP de plugin consegue resolver o projeto ativo sem perder a raiz separada do plugin, usando uma das abordagens compatíveis descritas na issue.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
shell
Domínio
cli, tooling
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
52/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.