Exposes Atlassian Rovo semantic search to GitHub Copilot agent mode in VS Code as native
language model tools, and bundles the rovo-copilot skill that tells the agent how to research
with them. Installing the VSIX is the whole setup: tools via languageModelTools, instructions
via chatSkills.
Install
code --install-extension rovo-copilot-tools-0.1.1.vsix
Reload the window, then check the Copilot tool picker. The first tool call opens the browser
consent screen; no sign-in command is needed first.
Requires VS Code 1.108+ (chatSkills was added in that release).
Build
npm install
npm run compile
npm run package
Requires Node.js 18+ (uses global fetch).
npm run package runs scripts/bundle-skill.js first, which copies ../SKILL.md and
../references/ into skills/rovo-copilot/ and fails the build if the result would not load —
wrong frontmatter key, name/folder mismatch, missing description, or a Markdown link pointing at
a file that was not packaged. skills/ is generated and gitignored; edit the skill folder one
level up instead.
| Tool |
Reference |
Backing Rovo tool |
rovo_search |
#rovoSearch |
search |
rovo_fetch |
#rovoFetch |
fetch |
rovo_jql |
#rovoJql |
searchJiraIssuesUsingJql |
All read-only: read-only OAuth scopes, no mutating tool exposed.
Commands
| Command |
Purpose |
| Rovo: Sign in to Atlassian |
Register a client and complete OAuth |
| Rovo: Show connection status |
Report token validity without printing secrets |
| Rovo: Sign out |
Clear stored tokens |
Settings
| Setting |
Default |
rovoTools.serverUrl |
https://mcp.atlassian.com/v1/mcp/authv2 |
rovoTools.callbackPort |
3118 |
rovoTools.cloudId |
(auto-resolved) |
Source layout
| File |
Responsibility |
src/extension.ts |
Tool registration, result shaping, context caps |
src/auth.ts |
DCR, PKCE, token storage and refresh |
src/mcpClient.ts |
MCP streamable-HTTP transport and SSE parsing |
scripts/bundle-skill.js |
Stages and validates the bundled skill |
Context caps live at the top of src/extension.ts (MAX_RESULTS, MAX_SNIPPET, MAX_BODY).
Raise them only if a workflow genuinely needs more; large tool results crowd out code context.
Design notes
Dynamic client registration. The extension registers its own OAuth client rather than
shipping a fixed client_id, because Atlassian validates redirect_uri against the client's
allowlist before rendering consent — a fixed client rejects whichever loopback port the machine
uses. Registration is per user and per machine; nothing is shared.
Token storage. Tokens go to VS Code SecretStorage (OS keychain), never to settings or the
workspace. A returned client_secret is unused (token_endpoint_auth_method: none) and not
stored.
Curated tool set. The endpoint exposes 23 tools; this surfaces 3. Teamwork Graph is excluded
at both layers — no TWG tool and no read:all:twg scope — so the consent screen stays as narrow
as what the tools can actually use. TWG is beta and can surface connected third-party data.
Error shaping. Failures return as text the model can act on rather than exceptions. Jira's
unbounded-JQL rejection is detected specifically and turned into an instruction to add a
restriction.
See setup-and-troubleshooting.md
for verified endpoint behaviour and the symptom matrix.