Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>SQL MCP for JiraNew to Visual Studio Code? Get it now.
SQL MCP for Jira

SQL MCP for Jira

Kintosoft

|
1 install
| (0) | Free
Your Jira Cloud site as a SQL database for your AI: one SQL tool for all of Jira, in Claude Code, Codex and Copilot.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

SQL MCP for Jira

Your Jira Cloud site as a SQL database for your AI.

Ask your Jira Cloud site anything in natural language. No SQL skills needed: the LLM writes the SQL, runs it, and answers from live Jira data.

Native JQL, inside SQL. Issues are read with any JQL query: its functions, its history operators (WAS, CHANGED), custom fields and text search. SQL then does what JQL can't: join, count, sum and group. For example, the hours each person logged on the bugs moved to Done this month:

SELECT u.[displayname] AS [person], COUNT(DISTINCT i.[key]) AS [bugs], SUM(w.[timespentseconds]) / 3600 AS [hours]
FROM issue i
JOIN issueworklog w ON w.[issueid] = i.[id]
JOIN user u ON u.[accountid] = w.[authorid]
WHERE i.[jql] = 'issuetype = Bug AND status CHANGED TO Done AFTER startOfMonth()'
GROUP BY u.[displayname]

Try asking:

  • "Which of my issues are still open in the active sprint, and how many story points are left?"
  • "Which components of project ABC have the most unresolved bugs?"
  • "Create a sub-task for each issue of this epic, assigned to me."

🎯 Why SQL MCP

Still writing scripts to create test data, or clicking through Jira to check that a change worked? Your AI can do both, if it can reach your data the right way.

An LLM working against Jira's REST APIs directly wastes most of its effort on plumbing: pagination, a different API for each kind of data, each with its own details, data types and error handling. Worse, it ends up acting as a relational database: fetching records, joining them, filtering them in a loop. That is slow, costly in tokens and prone to errors.

SQL MCP gives the LLM a virtual SQL database instead. The LLM asks for what it needs in one SQL statement, and the engine does the deterministic work: calling the APIs, joining, filtering, counting and grouping. For you, that means:

  • One tool for all of Jira: execute_sql reaches every table, instead of a long catalog of tools for the LLM to choose from.
  • Fewer tokens and round trips: one statement replaces a loop of API calls.
  • Grounded in live Jira data: every answer comes from what Jira returns at that moment, and the engine does the computing. Fewer mistakes and hallucinations.
  • Answers you can check: the SQL it ran shows how it understood you.
  • Faster work: create test data and verify results on the fly, with no scripts and no clicking through Jira.
  • Bonus: talk with your Jira data from the Claude Code or OpenAI Codex chat.

🧩 How it works

Virtual database means that the tables are empty: they are filled in real time, from Jira's REST APIs, to answer each query.

A SQL engine purpose-built for Jira turns issues, projects, users, statuses, sprints, boards, versions, components, custom fields, links, comments, work logs, service desk requests and the site's administration into tables.

The MCP server gives the LLM one tool to work with, and one to learn from:

  • execute_sql runs one statement. SELECT reads; INSERT, UPDATE and DELETE change Jira, and only run with confirm: true: without it, the tool answers a preview of the change.
  • sql_guide gives every table, its columns and how to write SQL for Jira. The LLM reads it once, before its first query.

Everything is read and written as the connected user, with that user's Jira permissions. An UPDATE or a DELETE changes at most 50 rows unless the statement allows more with ALLOWWRITES(n).

Zero data copy, and nothing to install in your Jira site.


🚀 Setup (2 minutes)

Requirements

  • A Jira Cloud site.
  • An Atlassian API token of the account the MCP will run as: id.atlassian.com > Security > API tokens.
  • Node.js 18 or later on your machine, for Claude Code and Codex.

Steps

  1. Install the extension from the VS Code Marketplace and open a folder.

  2. Configure Connection: in the Command Palette (Ctrl+Shift+P), run SQL MCP for Jira: Configure Connection and give your site (https://your-site.atlassian.net), your email and the API token. The connection is checked with Jira, then saved in jira_auth.config at the folder's root, with the token encrypted. Keep this file out of version control.

  3. Connect your MCP client:

    • GitHub Copilot (VS Code 1.101 or later): nothing to do. The server appears among Copilot's MCP servers.
    • Claude Code: the extension writes the server into .mcp.json at the folder's root. Start Claude Code in that folder and approve the sql-jira server when it asks. If you declined it once, run claude mcp reset-project-choices there and start Claude Code again.
    • OpenAI Codex: if you use Codex (~/.codex exists), the extension adds the server to ~/.codex/config.toml, in a block of its own.

    The extension keeps these entries up to date each time VS Code starts. SQL MCP for Jira: Copy MCP Config for Claude Code and ... for Codex copy them to the clipboard.

Claude Code and Codex run the server on the machine where VS Code runs the extension. With VS Code connected to WSL, run them inside WSL too.


📝 SQL Editor

For when you want to run the queries yourself: open a .jsql file (or run SQL MCP for Jira: New Query), complete tables and columns with Ctrl+Space (or a dot after an alias), and run the statement under the cursor, or the selection, with Ctrl+Shift+E (Cmd+Shift+E on macOS). A statement that changes Jira asks first. The results panel filters, copies a cell with a click, and exports to CSV.

-- Every table, and the columns of one
SHOW TABLES;
SHOW COLUMNS FROM issue;
-- My open issues, with their status
SELECT i.[key], i.[summary], s.[name] AS [status]
FROM issue i JOIN status s ON s.[id] = i.[statusid]
WHERE i.[jql] = 'assignee = currentUser() AND statusCategory != Done'
ORDER BY i.[key];
-- Comments of a project's issues: a child table is joined to its parent
SELECT i.[key], COUNT(c.[id]) AS [comments]
FROM issue i JOIN issuecomment c ON c.[issueid] = i.[id]
WHERE i.[jql] = 'project = ABC'
GROUP BY i.[key];

Names are lowercase; write columns in brackets: i.[key].


⚙️ Settings

  • sql-jira.maxRows: the most rows a statement may read of one Jira table, in the editor and in the MCP server (default: 2,000; 0: no limit).

👥 Who's behind this?

KintoSoft, the makers of SQL MCP for ServiceNow.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft