GitHub Copilot CLI
CallLint support for GitHub Copilot CLI by GitHub. CallLint does not yet auto-discover Copilot CLI configuration. Copilot's review approval authority is a separate matter, and it is not covered either. Whether a Copilot review can satisfy a repository's required-approval rule is decided by enterprise, organization and repository administrator policy together with branch protection settings, and none of that is statically observable from this machine, so CallLint reports that authority as UNSUPPORTED rather than reading it as SAFE. The permission mode a session starts in, and the authority a session restores when it resumes after an unclean exit, are not statically observable either; and a declared permission posture is a declaration, never proof of what a runtime enforced. Review feedback and approval authority are two different things: a review comment carries information, while an approval can change whether code is allowed to merge. The GitHub Actions workflow CallLint can install for you is a pull-request check and never an approval — it cannot satisfy a required-approval rule, and it does not inspect one. Reading a Copilot MCP config tells you what one layer of Copilot's authority declares, and never that an unreadable layer is SAFE.
Why scan GitHub Copilot CLI?
Copilot CLI runs in your shell with your credentials, so an MCP server it can call inherits the terminal session rather than a sandbox.
Usage
CallLint does not yet support native auto-discovery for GitHub Copilot CLI. No automatic detection yet — this page documents where the config lives.
What CallLint does to GitHub Copilot CLI
Offline by default. Deterministic. Never executes the server it judges. SAFE means no blockers observed, not a proof of runtime safety.
A No blockers observed verdict means exactly that — no blocker under the evidence CallLint could collect. It is not a guarantee, and Insufficient evidence never becomes it on its own. See Coverage Boundary for what this scan does not look at.
Configuration Paths
CallLint looks for GitHub Copilot CLI configurations in:
~/.copilot/mcp-config.json.mcp.json.github/mcp.json
Distribution
CallLint is available for GitHub Copilot CLI through:
-
mcp-registry-discovery
— Not available here
⚠️ GitHub Copilot CLI does not consume the Official MCP Registry, so there is no registry-discovery channel to submit to. Measured 2026-08-27 on copilot 1.0.80: `copilot mcp add` takes a command or URL with no registry lookup and no name resolution, `copilot mcp list/get` expose no search or discovery flag, and the string `registry.modelcontextprotocol.io` does not appear anywhere in the shipped platform binary — against a positive control on the same search, which finds `mcp-config.json` in that same app.js. Config is loaded only from the user file, the workspace file, or an installed plugin. This row previously carried `upstream: officialMcpRegistry`, which was a claim about a mechanism that does not exist; it is removed rather than left under a pending label, because `upstream` is the evidence arm HD-07 accepts from a channel claiming to be available to users.
-
github-copilot-plugin
— Awaiting the upstream registry
SUBMITTED 2026-08-27 — already made, do not redo. The date records the act of opening the PR, not its acceptance (ADR 0002). Opened as PR #80: one entry appended to `.github/plugin/marketplace.json`, +24/-0, one file, no existing entry altered. This was the third and final new external submission permitted by §89 (`MAX_NEW_EXTERNAL_SUBMISSIONS = 3`), after cline 2026-08-18 and cursor 2026-08-25 — the quota is now spent, and §87 forbids the watcher from opening a fourth. (`submission` carries only `date`: the schema forbids additional properties there, deliberately, so everything else about the act belongs in this note. I tried to put `channel` and a note inside the block and the schema rejected it — recorded because the next person will have the same instinct.) `.claude-plugin/marketplace.json` in that repo is a **git symlink** (mode `120000`, blob = `../.github/plugin/marketplace.json`, added upstream in PR #24) to the real manifest at `.github/plugin/marketplace.json` — editing the symlink is the likely mistake, and on Windows it is the *easy* mistake, because Git checks it out as a literal one-line text file containing the target path. Worth recording how nearly this was mis-measured: GitHub's contents API resolves the symlink server-side and serves the target's bytes, so `cmp` on the two API responses reports them byte-identical and the symlink invisible. Only the tree mode, or a checkout, reveals it. Expectation, recorded so nobody re-derives it from hope: all 20 pre-existing entries are GitHub/Microsoft first-party, and no externally-authored plugin addition has ever merged — 29 merged PRs, every `Add …` among them first-party. Meanwhile ~7 third-party plugin-add PRs sit open, the oldest open PR dating to 2026-01-24. So the queue demonstrably does not move for outsiders. It was still right to open: direct path/repo/URL installs are deprecated in favour of `plugin@marketplace`, which makes this PR the eventual only supported route. Audit resolved 2026-08-27 on copilot 1.0.80 (E-2), which required the 357 MB platform binary and so could not run in CI. Copilot CLI has a real plugin system — `copilot plugin install/list/uninstall`, plus `plugin marketplace add/browse` — and two marketplaces ship by default: `github/copilot-plugins` and `github/awesome-copilot`. A marketplace is a GitHub repo carrying `.claude-plugin/marketplace.json`, the same manifest format this repo already publishes for Claude Code, so the submission is a PR adding one entry, not a new artifact. Measured, not inferred: our plugin installs from a local path and `copilot plugin list` reports `calllint (v0.1.0)`, and after the `.mcp.json` fix `copilot mcp list` reports `calllint (local)` under Plugin servers. Direct path/repo/URL installs are deprecated with a warning that only `plugin@marketplace` installs will be supported, which makes this PR the eventual only supported route rather than a nicety. Ready but not yet submitted is therefore the accurate state, and this is that state's first real record.
Support Status
Guide only — No automatic detection yet — this page documents where the config lives.
CallLint publishes no scan command for GitHub Copilot CLI yet. That is a statement about CallLint's coverage, not about GitHub Copilot CLI: see Coverage Boundary for what would have to be built first.
Official Sources
Coverage Boundary
CallLint does not yet auto-discover Copilot CLI configuration. Copilot's review approval authority is a separate matter, and it is not covered either. Whether a Copilot review can satisfy a repository's required-approval rule is decided by enterprise, organization and repository administrator policy together with branch protection settings, and none of that is statically observable from this machine, so CallLint reports that authority as UNSUPPORTED rather than reading it as SAFE. The permission mode a session starts in, and the authority a session restores when it resumes after an unclean exit, are not statically observable either; and a declared permission posture is a declaration, never proof of what a runtime enforced. Review feedback and approval authority are two different things: a review comment carries information, while an approval can change whether code is allowed to merge. The GitHub Actions workflow CallLint can install for you is a pull-request check and never an approval — it cannot satisfy a required-approval rule, and it does not inspect one. Reading a Copilot MCP config tells you what one layer of Copilot's authority declares, and never that an unreadable layer is SAFE.