Skip to content

fix(copilot): measure documented MCP surfaces - #116

Merged
imran-siddique merged 1 commit into
mainfrom
agent/fix-copilot-mcp-paths
Aug 15, 2026
Merged

fix(copilot): measure documented MCP surfaces#116
imran-siddique merged 1 commit into
mainfrom
agent/fix-copilot-mcp-paths

Conversation

@imran-siddique

Copy link
Copy Markdown
Member

Summary

  • stop measuring the undocumented repository path copilot/mcp-config.json
  • keep .vscode/mcp.json as the documented VS Code workspace MCP surface
  • measure .github/agents/**/*.agent.md, including custom-agent mcp-servers configuration
  • document the distinct cloud-agent settings, VS Code, custom-agent, and Copilot CLI surfaces

Root cause

The original MCP paths came from search results rather than GitHub's product documentation and conflated three different Copilot runtimes. Copilot cloud-agent repository MCP is stored in GitHub settings, while Copilot CLI's mcp-config.json is user-level at ~/.copilot/.

Security impact

This removes a silently empty category and adds coverage for repository custom-agent profiles, where prompts, tools, and MCP servers can change agent behavior. It does not claim visibility into GitHub repository settings or user-level CLI configuration that is outside the checkout.

Validation

  • nox -s capture_engines — 141 passed
  • git diff --check

Official references:

Closes #75

Signed-off-by: Imran Siddique <imran.siddique@opaque.co>
@imran-siddique
imran-siddique merged commit 2f32505 into main Aug 15, 2026
11 checks passed
@imran-siddique
imran-siddique deleted the agent/fix-copilot-mcp-paths branch August 15, 2026 22:19
imran-siddique added a commit that referenced this pull request Aug 15, 2026
#116 removed `copilot/mcp-config.json`, which nothing reads, and left
`.vscode/mcp.json` as the only measured path. That is correct as far as it
goes, but it is not the whole surface: Copilot CLI reads two repository files
of its own, and dev containers carry MCP servers in a third place.

Verified against vendor documentation and now measured:

  .mcp.json                        Copilot CLI, per checkout, takes precedence
  .github/mcp.json                 Copilot CLI, committed and shared
  .devcontainer/devcontainer.json  customizations.vscode.mcp
  .devcontainer.json               and .devcontainer/*/devcontainer.json

Dev container files are digested whole rather than parsed for that one key.
devcontainer.json is JSONC, and a parser that mishandles a comment reports
"nothing changed" about a file it failed to read. The cost is that unrelated
devcontainer edits report as MCP changes, which a reviewer settles from the
diff.

MEASUREMENT_SCOPE moves to 2. Removing a path that never matched needed no
bump, but adding four does: a baseline written before them cannot tell a file
that was always present from one this run started measuring, and without the
bump it would report a server someone just added. The scope_change call also
carried a reason copied from the claude-code engine, describing skill digests
this engine does not measure; it now describes this widening.

The README claimed Copilot CLI reads only the user-level config. Corrected,
and the two surfaces that genuinely cannot be reached from inside a repository
are now stated rather than implied: the home directory config, and the coding
agent's MCP configuration, which lives in repository settings on github.com.

Closes #75
imran-siddique added a commit that referenced this pull request Aug 15, 2026
#116 removed `copilot/mcp-config.json`, which nothing reads, and left
`.vscode/mcp.json` as the only measured path. That is correct as far as it
goes, but it is not the whole surface: Copilot CLI reads two repository files
of its own, and dev containers carry MCP servers in a third place.

Verified against vendor documentation and now measured:

  .mcp.json                        Copilot CLI, per checkout, takes precedence
  .github/mcp.json                 Copilot CLI, committed and shared
  .devcontainer/devcontainer.json  customizations.vscode.mcp
  .devcontainer.json               and .devcontainer/*/devcontainer.json

Dev container files are digested whole rather than parsed for that one key.
devcontainer.json is JSONC, and a parser that mishandles a comment reports
"nothing changed" about a file it failed to read. The cost is that unrelated
devcontainer edits report as MCP changes, which a reviewer settles from the
diff.

MEASUREMENT_SCOPE moves to 2. Removing a path that never matched needed no
bump, but adding four does: a baseline written before them cannot tell a file
that was always present from one this run started measuring, and without the
bump it would report a server someone just added. The scope_change call also
carried a reason copied from the claude-code engine, describing skill digests
this engine does not measure; it now describes this widening.

The README claimed Copilot CLI reads only the user-level config. Corrected,
and the two surfaces that genuinely cannot be reached from inside a repository
are now stated rather than implied: the home directory config, and the coding
agent's MCP configuration, which lives in repository settings on github.com.

Closes #75
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Confirm the Copilot MCP config paths against GitHub docs

1 participant