Skip to content
| Marketplace
Sign in
Visual Studio Code>AI>Jira Issue FetcherNew to Visual Studio Code? Get it now.
Jira Issue Fetcher

Jira Issue Fetcher

Phan Dinh Minh

|
7 installs
| (2) | Free
Read Jira Server / Data Center issues from GitHub Copilot and compatible VS Code agents via a Language Model Tool.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Jira Issue Fetcher

Read Jira Server and Jira Data Center issues directly from GitHub Copilot (and other compatible VS Code chat agents) through a single read-only Language Model Tool.

When your prompt references a Jira issue — by key such as ABC-123 or by a /browse/ABC-123 URL — the agent can call this tool to fetch the issue's current data (summary, description, status, comments, attachments metadata, custom fields, and more) and use it to help you analyze, implement, or fix code in your workspace.

This extension does not support Jira Cloud. It targets Jira Server / Data Center using a Personal Access Token (PAT).

What it does

  • Contributes two read-only tools:
    • #getJiraIssue (capability get_jira_issue) — reads issue data.
    • #getJiraAttachment (capability get_jira_attachment) — visually exposes one attachment (screenshot / GIF / MP4 / WebM) to a vision-capable agent.
  • Authenticates to Jira with Authorization: Bearer <your PAT>.
  • Calls GET {baseUrl}/rest/api/2/issue/{issueKey}?fields=*all&expand=names,schema,renderedFields,changelog.
  • Returns stable, structured JSON. Both tools are read-only: they never create, edit, transition, comment on, or modify Jira in any way.

Supported Jira versions

  • Jira Server (7.x / 8.x / 9.x) with Personal Access Tokens.
  • Jira Data Center with Personal Access Tokens.

Personal Access Tokens are supported by Jira Server / Data Center 8.14 and later. Jira Cloud (Basic auth with email + API token, or OAuth) is intentionally not supported in this version.

Create a Jira Personal Access Token

  1. Sign in to your Jira Server / Data Center web UI.
  2. Open your profile menu → Profile → Personal Access Tokens (URL is usually {baseUrl}/secure/ViewProfile.jspa → Personal Access Tokens).
  3. Choose Create token, give it a name, and (optionally) an expiry.
  4. Copy the token value. You will not be able to see it again.

The token inherits your Jira permissions, so it can only read issues you can already see.

Configure the extension

Run Jira Issue Fetcher: Configure from the Command Palette (Ctrl+Shift+P / Cmd+Shift+P):

  1. Enter your Jira base URL, for example https://jira.company.com.
    • Use the scheme and host (and context path, if any), e.g. https://jira.company.com or https://host.example/jira.
    • Do not include a trailing slash or an issue path. Any trailing slash is removed automatically.
  2. Enter your Personal Access Token in the masked input box.

The base URL is saved to your user (global) settings as jiraIssueFetcher.jiraUrlBase. The token is stored in VS Code SecretStorage and is never written to settings.json.

Other commands:

  • Jira Issue Fetcher: Test Connection — verifies the stored credentials against {baseUrl}/rest/api/2/myself.
  • Jira Issue Fetcher: Clear Credentials — removes the base URL and the token after confirmation.

Enable the tool in Copilot / an agent

  1. Open the Chat view and switch to Agent mode.
  2. Open the tools picker (the tools/🛠 button) and make sure Get Jira Issue is enabled, or reference it explicitly in your prompt with #getJiraIssue.
  3. The agent decides when to call the tool based on your prompt. You can always force it by typing #getJiraIssue ABC-123.

Example prompts that should call the tool

  • ABC-123 đang gặp lỗi gì? / “What is going wrong in ABC-123?”
  • “Read ticket https://jira.company.com/browse/ABC-123 and check the current code.”
  • “Based on the steps to reproduce in ABC-123, find the root cause in this workspace.”

Example prompts that should not call the tool

  • “Explain how JavaScript Promises work.”
  • “Fix the TODO in this file.”
  • “What’s wrong with this GitHub issue?”
  • “Write a unit test for the current function.”

The result is read-only

The tool only reads Jira. It never modifies issues and never calls another language model. It returns JSON shaped like:

{
  "ok": true,
  "data": {
    "source": "jira",
    "readOnly": true,
    "issueKey": "ABC-123",
    "summary": "…",
    "description": "…",
    "status": { "…": "…" },
    "comments": [ /* … */ ],
    "attachments": [ /* metadata only */ ],
    "customFieldsByName": { /* … */ },
    "stepsToReproduce": null,
    "metadata": { "fetchedAt": "…", "jiraBaseUrl": "…", "warnings": [] }
  }
}

On failure it returns a structured error:

{
  "ok": false,
  "error": {
    "code": "JIRA_NOT_CONFIGURED",
    "message": "…",
    "action": "Run command: Jira Issue Fetcher: Configure"
  }
}

Special fields (Steps to Reproduce, Expected Result, Actual Result, Acceptance Criteria) are located by matching field display names returned by expand=names — not by hard-coded custom field IDs — so they work across different Jira instances. If a field cannot be found, its value is null; the tool never invents content.

Attachments

get_jira_issue returns attachments as metadata only — it never downloads file bytes. Each attachment includes name, mimeType, size, author.displayName, the Jira contentUrl / thumbnailUrl / selfUrl, and classification flags (isImage, isAnimatedImage, isVideo, canBeReadWithTool) plus an attachmentToolInput you pass to the second tool.

Attachment URLs point to Jira and may require authentication (a Bearer token or an active Jira session) to open. Credentials are never embedded in these URLs.

Visual attachment analysis (get_jira_attachment)

A second read-only tool, referenced in chat as #getJiraAttachment, lets a vision-capable agent actually see a Jira attachment. get_jira_issue never downloads media automatically — the agent decides when a screenshot or recording is worth inspecting, then calls get_jira_attachment with the issueKey and the attachmentId returned by get_jira_issue (never an invented ID, never a URL).

Supported formats: PNG, JPG/JPEG, WebP, GIF, MP4, WebM.

  • Static images (PNG/JPEG) are returned as actual image content. WebP is converted to PNG first for consistent vision behavior.
  • GIF, MP4 and WebM are decoded locally with the bundled FFmpeg. The tool samples low-resolution candidate frames, removes near-duplicate frames, selects ~6–10 representative frames, and returns them as PNG images in chronological order with millisecond timestamps.
  • Near-duplicate detection happens locally inside the extension (deterministic image comparison — no AI, no external service).
  • No Jira media is uploaded to any extension-owned backend. The PAT stays in VS Code SecretStorage; downloads go only to your configured Jira host.

Modes (the agent picks one): auto (default, ~8 frames), timeline (even coverage, ~10 frames), detail (denser sampling for subtle UI changes, ~12).

A vision-capable model is required to interpret the returned images. If the selected model cannot accept images, the frames are still returned but cannot be analyzed.

Example attachment prompts

  • “Read ABC-123 and inspect the QA screenshots before proposing a fix.”
  • “Read ABC-123. If the attached recording is relevant, inspect it and compare the observed behavior with the current implementation.”
  • “Use the detailed attachment view for ABC-123 because the UI glitch is very subtle.”

Troubleshooting

Symptom Meaning What to do
UNAUTHORIZED (HTTP 401) The PAT is invalid, expired, or revoked. Run Jira Issue Fetcher: Configure and paste a fresh token.
FORBIDDEN (HTTP 403) The account tied to the PAT lacks permission to view the issue. Ask a Jira admin for access, or use a token from an account that can see the issue.
NOT_FOUND (HTTP 404) The issue does not exist, or your account cannot see it. Double-check the key/URL and your project permissions.
TLS_ERROR The server certificate could not be validated. Ensure the base URL is correct and its certificate chain is trusted by your OS. The extension never disables TLS verification.
NON_JSON_RESPONSE A login page or proxy responded instead of the REST API. Verify the base URL points at Jira itself (not an SSO gateway).
TIMEOUT / NETWORK_ERROR The request could not complete. Check connectivity/VPN and try again.
UNSUPPORTED_ATTACHMENT_TYPE The attachment is not PNG/JPEG/WebP/GIF/MP4/WebM. Only these formats can be visually analyzed.
ATTACHMENT_TOO_LARGE / VIDEO_TOO_LONG Media exceeds the size/duration caps. Caps: 10 MB image, 20 MB GIF, 100 MB video, 5 min.
FFMPEG_NOT_FOUND / UNSUPPORTED_PLATFORM FFmpeg isn't available for your OS/architecture. The extension supports Windows x64, Linux x64, and macOS (Intel & Apple Silicon). Install it from the Marketplace so the build matching your platform is used; other platforms aren't supported yet.
MEDIA_DECODE_FAILED / FFPROBE_FAILED FFmpeg could not decode the media. The file may be corrupt; try re-uploading it in Jira.
ATTACHMENT_NOT_OWNED_BY_ISSUE / ATTACHMENT_HOST_NOT_ALLOWED The attachment ID is not part of the issue, or its URL is off-host. Use only attachmentToolInput values from get_jira_issue.

Security

  • Your Personal Access Token is stored only in VS Code SecretStorage. It is never written to settings.json, workspace state, .env files, logs, telemetry, error messages, or the tool result.
  • The jiraIssueFetcher.jiraUrlBase setting is application-scoped, so a workspace cannot override it and redirect requests (and your token) elsewhere.
  • Requests go only to the Jira base URL you configured. A URL supplied in a prompt must resolve to that same origin/context path or the request is refused.
  • The extension uses the built-in fetch; there are no third-party runtime dependencies, no shell execution, and no eval.
  • TLS certificate validation is never disabled.
  • Attachment downloads use the PAT only against your configured Jira host; redirects to any other host are refused so the token is never leaked (SSRF-safe).
  • get_jira_attachment accepts only an issueKey + attachmentId (never a URL) and verifies the attachment belongs to that issue before downloading.
  • FFmpeg is invoked with spawn / shell: false and argument arrays; attachment filenames are never passed to a shell. Downloaded media is written to a random temp file and deleted after processing.

Privacy

  • No telemetry. This extension collects nothing and phones no home.
  • No backend. There is no intermediary server. Data flows only between your VS Code and your Jira instance.
  • Jira responses are handed to the agent in-memory and are never written to disk by this extension.
  • Attachment media is processed in a temporary file that is deleted after use; it is never persisted in your workspace or committed.

License

This extension is licensed under the MIT License. It bundles the FFmpeg ffmpeg / ffprobe binaries, which are distributed under their own license — see THIRD_PARTY_NOTICES.md.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft