Skip to main content
Glama
README.md
<p align="center">
  <img src="docs/assets/banner.svg" alt="Jira Delivery MCP: from Jira ticket to merged PR without leaving your coding agent" width="100%">
</p>

<p align="center">
  <a href="https://www.npmjs.com/package/jira-delivery-mcp"><img src="https://img.shields.io/npm/v/jira-delivery-mcp?logo=npm&label=npm&color=cb3837" alt="npm version"></a>
  <a href="https://github.com/teransarathchandra/jira-mcp-server/actions/workflows/ci.yml"><img src="https://github.com/teransarathchandra/jira-mcp-server/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
  <a href="evals/README.md"><img src="https://img.shields.io/badge/tool--selection%20evals-36%2F36-2ea44f" alt="Tool-selection evals: 36/36"></a>
  <img src="https://img.shields.io/badge/node-%E2%89%A522-339933?logo=nodedotjs&logoColor=white" alt="Node.js 22 or newer">
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license"></a>
</p>

<p align="center">
  An MCP server and agent skill for <b>Jira Cloud</b>. Start a ticket with a ready-to-build brief,<br>
  check your branch against its acceptance criteria before the PR, and hand off — from your coding agent.
</p>

<p align="center">
  <a href="#install"><img src="https://img.shields.io/badge/Claude_Code-Install_plugin-D97757?style=for-the-badge&logo=claude&logoColor=white" alt="Install in Claude Code"></a>
  <a href="https://cursor.com/install-mcp?name=jira-delivery&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImppcmEtZGVsaXZlcnktbWNwIl0sImVudiI6eyJKSVJBX0JBU0VfVVJMIjoiaHR0cHM6Ly95b3VyLWRvbWFpbi5hdGxhc3NpYW4ubmV0IiwiSklSQV9FTUFJTCI6InlvdUBleGFtcGxlLmNvbSIsIkpJUkFfQVBJX1RPS0VOIjoieW91ci1hcGktdG9rZW4ifX0%3D"><img src="https://img.shields.io/badge/Cursor-Add_server-000000?style=for-the-badge&logo=cursor&logoColor=white" alt="Add to Cursor"></a>
  <a href="https://insiders.vscode.dev/redirect/mcp/install?name=jira-delivery&inputs=%5B%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_base_url%22%2C%22description%22%3A%22Jira%20site%20URL%2C%20e.g.%20https%3A%2F%2Fyour-domain.atlassian.net%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_email%22%2C%22description%22%3A%22Atlassian%20account%20email%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_api_token%22%2C%22description%22%3A%22Jira%20API%20token%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22jira-delivery-mcp%22%5D%2C%22env%22%3A%7B%22JIRA_BASE_URL%22%3A%22%24%7Binput%3Ajira_base_url%7D%22%2C%22JIRA_EMAIL%22%3A%22%24%7Binput%3Ajira_email%7D%22%2C%22JIRA_API_TOKEN%22%3A%22%24%7Binput%3Ajira_api_token%7D%22%7D%7D"><img src="https://img.shields.io/badge/VS_Code-Install_server-0098FF?style=for-the-badge&logo=githubcopilot&logoColor=white" alt="Install in VS Code"></a>
</p>


## How it works

### 1 · Start a ticket

> *"I'm starting ABC-1, get me ready."*

Readiness, blockers, acceptance criteria, next steps and a branch name — before you write a line.

<img src="docs/assets/start.gif" alt="The agent lists open issues, then gets a ready-to-build brief for ABC-1" width="100%">

### 2 · Verify before the PR

> *"Check my branch against ABC-1 before I open the PR."*

Your local diff against the acceptance criteria and Definition of Done, with one verdict — `ready_for_pr`, `needs_work` or `insufficient_evidence` — and the files behind each criterion.

<img src="docs/assets/verify.gif" alt="The branch covers one of two criteria, so the verdict is needs_work" width="100%">

### 3 · Hand off

> *"Post the QA handoff to ABC-1."*

QA handoffs, release notes, test plans and reviews. With write-back on, the agent shows you a preview and waits for your approval.

<img src="docs/assets/handoff.gif" alt="A comment is previewed; nothing changes in Jira until the user approves" width="100%">

## Install

You need **Node.js 22+**, your Jira Cloud URL, your Atlassian email and an [API token](https://id.atlassian.com/manage-profile/security/api-tokens).

<details open>
<summary><img src="https://cdn.simpleicons.org/claude" height="16" alt=""> <b>Claude Code</b> — plugin with the server and the skill</summary>

```
/plugin marketplace add teransarathchandra/jira-mcp-server
/plugin install jira-delivery@jira-delivery
```

It asks for your site, email and token (the token goes to secure storage). Without the plugin:

```bash
claude mcp add jira-delivery \
  -e JIRA_BASE_URL=https://your-domain.atlassian.net \
  -e JIRA_EMAIL=you@example.com \
  -e JIRA_API_TOKEN=your-api-token \
  -- npx -y jira-delivery-mcp
```

</details>

<details>
<summary><img src="https://cdn.simpleicons.org/cursor/000000/ffffff" height="16" alt=""> <b>Cursor</b></summary>

Click **[Add to Cursor](https://cursor.com/install-mcp?name=jira-delivery&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsImppcmEtZGVsaXZlcnktbWNwIl0sImVudiI6eyJKSVJBX0JBU0VfVVJMIjoiaHR0cHM6Ly95b3VyLWRvbWFpbi5hdGxhc3NpYW4ubmV0IiwiSklSQV9FTUFJTCI6InlvdUBleGFtcGxlLmNvbSIsIkpJUkFfQVBJX1RPS0VOIjoieW91ci1hcGktdG9rZW4ifX0%3D)** and replace the three placeholder values, or add the [JSON below](#json-config) to `~/.cursor/mcp.json`.

</details>

<details>
<summary><img src="https://cdn.simpleicons.org/githubcopilot/000000/ffffff" height="16" alt=""> <b>VS Code</b> (GitHub Copilot agent mode)</summary>

Click **[Install in VS Code](https://insiders.vscode.dev/redirect/mcp/install?name=jira-delivery&inputs=%5B%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_base_url%22%2C%22description%22%3A%22Jira%20site%20URL%2C%20e.g.%20https%3A%2F%2Fyour-domain.atlassian.net%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_email%22%2C%22description%22%3A%22Atlassian%20account%20email%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_api_token%22%2C%22description%22%3A%22Jira%20API%20token%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22jira-delivery-mcp%22%5D%2C%22env%22%3A%7B%22JIRA_BASE_URL%22%3A%22%24%7Binput%3Ajira_base_url%7D%22%2C%22JIRA_EMAIL%22%3A%22%24%7Binput%3Ajira_email%7D%22%2C%22JIRA_API_TOKEN%22%3A%22%24%7Binput%3Ajira_api_token%7D%22%7D%7D)** (or [Insiders](https://insiders.vscode.dev/redirect/mcp/install?name=jira-delivery&inputs=%5B%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_base_url%22%2C%22description%22%3A%22Jira%20site%20URL%2C%20e.g.%20https%3A%2F%2Fyour-domain.atlassian.net%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_email%22%2C%22description%22%3A%22Atlassian%20account%20email%22%7D%2C%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22jira_api_token%22%2C%22description%22%3A%22Jira%20API%20token%22%2C%22password%22%3Atrue%7D%5D&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22jira-delivery-mcp%22%5D%2C%22env%22%3A%7B%22JIRA_BASE_URL%22%3A%22%24%7Binput%3Ajira_base_url%7D%22%2C%22JIRA_EMAIL%22%3A%22%24%7Binput%3Ajira_email%7D%22%2C%22JIRA_API_TOKEN%22%3A%22%24%7Binput%3Ajira_api_token%7D%22%7D%7D&quality=insiders)). VS Code asks for your site, email and token and stores the token as a secret.

Manually: add to `.vscode/mcp.json` — VS Code uses `servers`, not `mcpServers`:

```json
{
  "servers": {
    "jira-delivery": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "jira-delivery-mcp"],
      "env": { "JIRA_BASE_URL": "https://your-domain.atlassian.net", "JIRA_EMAIL": "you@example.com", "JIRA_API_TOKEN": "your-api-token" }
    }
  }
}
```

</details>

<details>
<summary><img src="https://cdn.simpleicons.org/windsurf/000000/ffffff" height="16" alt=""> <b>Windsurf</b> · <img src="https://cdn.simpleicons.org/claude" height="16" alt=""> <b>Claude Desktop</b> · any MCP client</summary>

<a id="json-config"></a>Add to the client's MCP config — Windsurf: *Settings → MCP Servers*; Claude Desktop: `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "jira-delivery": {
      "command": "npx",
      "args": ["-y", "jira-delivery-mcp"],
      "env": { "JIRA_BASE_URL": "https://your-domain.atlassian.net", "JIRA_EMAIL": "you@example.com", "JIRA_API_TOKEN": "your-api-token" }
    }
  }
}
```

</details>

<details>
<summary>⌨️ <b>Codex CLI</b></summary>

In `~/.codex/config.toml`:

```toml
[mcp_servers.jira-delivery]
command = "npx"
args = ["-y", "jira-delivery-mcp"]
env = { JIRA_BASE_URL = "https://your-domain.atlassian.net", JIRA_EMAIL = "you@example.com", JIRA_API_TOKEN = "your-api-token" }
```

</details>

**Check your setup:** with the three variables exported, `npx jira-delivery-mcp doctor` verifies the login and prints the custom-field ids your site needs (acceptance criteria, story points, epic). Other agents can add the [`jira-delivery` skill](plugin/skills/jira-delivery/SKILL.md), also attached to each [release](https://github.com/teransarathchandra/jira-mcp-server/releases).

## Tools

| Step | Tools |
|---|---|
| Start | `jira_search_issues` · `jira_get_issue` · `jira_prepare_work_brief` |
| Verify | `delivery_check_changes` · `delivery_traceability_matrix` |
| Hand off | `delivery_generate` · `jira_add_comment`\* · `jira_update_issue`\* |
| Context | `confluence_search` · `confluence_get_page` · `delivery_project_patterns` · `delivery_generate_agent_pack` |

\* Opt-in with `JIRA_ENABLE_WRITES=true`. Every tool returns typed `structuredContent`; see the [tool reference](docs/tools.md).

## Safe by default

- 🔒 **Local and private** — runs on your machine over stdio; talks only to your Atlassian site; no telemetry.
- ✋ **Read-only unless you opt in** — and then every write is previewed, waits for your approval, is sent once and audited.
- 🧱 **Ticket text is untrusted** — fenced as data, scanned for prompt injection, never turned into instructions.
- 🗝️ **Credentials stay in your environment** — never logged; redacted from all output.

## Documentation

[Usage](docs/usage.md) · [Tools](docs/tools.md) · [Configuration](docs/configuration.md) · [Security](docs/security.md) · [Troubleshooting](docs/troubleshooting.md) · [Migrating from 1.x](docs/migrating-from-v1.md) · [Changelog](CHANGELOG.md)

## Contributing

Issues and pull requests are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md). Security reports: [SECURITY.md](SECURITY.md).

[MIT](LICENSE) © Teran Sarathchandra

TDQS

A3.9/5.0

Scored across 10 tools

Disambiguation4/5

Most tools target clearly different stages: read (jira_get_issue), brief (jira_prepare_work_brief), verify (delivery_check_changes, delivery_traceability_matrix), and generate artifacts. The main risk is overlap between check_changes and traceability_matrix and between get_issue and prepare_work_brief, but descriptions explicitly steer callers between them.

Naming Consistency4/5

Consistent snake_case with meaningful domain prefixes (jira_, confluence_, delivery_), and most names are verb_noun. Minor deviations: delivery_project_patterns is a noun-only, multi-action tool (scan/get/clear) that breaks the pattern, and jira_prepare_work_brief sits under jira_ but is a workflow tool rather than a raw Jira verb.

Tool Count5/5

10 tools is squarely in the well-scoped range, with each covering a distinct delivery workflow step (read, search, brief, verify, generate). Nothing appears redundant or padding.

Completeness3/5

The read/verify/generate side of the lifecycle is well covered, but there are no write-back operations to Jira: no commenting, status transitions, or issue updates, which limits closing the loop after work is verified. Confluence is read-only, which is reasonable, but the missing Jira mutations are a notable gap for a delivery workflow.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive