Skip to content

Bug: GitHub Copilot extractor/applier uses relative CWD paths for MCP config and instructions #42

@FZ2000

Description

@FZ2000

Summary

The GitHub Copilot extractor and applier use relative paths for .vscode/mcp.json and .github/copilot-instructions.md. This means the actual files read/written depend entirely on the current working directory when apc is run — making the tool unreliable when invoked from different directories.

Steps to Reproduce

# Step 1: Run mcp sync from one directory
cd ~/project-a
apc mcp sync --all -y

# Step 2: Run collect from another directory
cd ~/project-b
apc collect -y
# github-copilot shows 0 MCP servers — because it reads .vscode/mcp.json from project-b, not project-a!

# Step 3: Verify the config was written to CWD, not a global location
ls ~/project-a/.vscode/mcp.json   # exists
ls ~/project-b/.vscode/mcp.json   # does not exist

Actual Behavior

  • CopilotApplier.apply_mcp_servers() writes to .vscode/mcp.json (relative)
  • CopilotExtractor.extract_mcp_servers() reads from .vscode/mcp.json (relative)
  • CopilotApplier.apply_skills() writes to .github/copilot-instructions.md (relative)
  • CopilotExtractor.extract_skills() reads from .github/copilot-instructions.md (relative)
  • Config file ends up in whichever directory apc was invoked from

Expected Behavior

GitHub Copilot has a global MCP config location: ~/.vscode/mcp.json (VS Code user-level settings). apc should use this absolute path for global MCP management, not a relative .vscode/mcp.json.

Similarly, .github/copilot-instructions.md is project-scoped — for a global tool like apc, there should either be a documented fallback path or a warning that Copilot instructions are project-scoped.

Affected Code

# src/extractors/copilot.py and src/appliers/copilot.py
COPILOT_INSTRUCTIONS = Path(".github") / "copilot-instructions.md"  # relative!
VSCODE_MCP_JSON = Path(".vscode") / "mcp.json"                       # relative!

Proposed Fix

VSCODE_MCP_JSON = Path.home() / ".vscode" / "mcp.json"  # global user config
# Or: Path(os.environ.get('VSCODE_APPDATA', Path.home() / '.vscode')) / 'mcp.json'

Environment

  • macOS Darwin 25.2.0 (arm64)
  • apc version 0.1.0
  • Verified by running apc mcp sync --all from ~/.openclaw/workspace and finding .vscode/mcp.json written there

Severity

High — The feature is silently broken for any user who doesn't always run apc from the same project directory.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions