# mcp-jira-stdio

Hooks Jira into your coding agent: open tickets, run JQL searches, post comments and file new issues without leaving the chat.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 14
- Author: freema
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/freema/mcp-jira-stdio
- Updated: 2026-10-02
- HTML: https://affpapa.org/en/nevibecode/mcp/mcp-jira-stdio

## What it does

The server exposes Jira as a set of agent tools. `jira_get_issue` pulls a ticket by key, `jira_search_issues` runs JQL with paging and field selection, `jira_create_issue` and `jira_update_issue` write changes back. Subtasks, comments and reference data come along too: issue types, priorities, statuses, custom fields. Before creating anything, `jira_get_create_meta` lists the fields a project demands, so the agent hits fewer rejections on required custom fields.

It speaks stdio and starts from npm with `npx -y mcp-jira-stdio`. You need Node.js 20 or newer plus three values: the Jira instance URL, your account email and an API token, passed as `JIRA_BASE_URL`, `JIRA_EMAIL` and `JIRA_API_TOKEN`. Two more variables, `MCP_REDACT_SENSITIVE` and `LOG_LEVEL`, control masking of sensitive values in logs and log verbosity.

Grab the token in Atlassian's account security settings. With a stale or wrong token the API rejects every call and you get auth errors instead of tickets, which is the first thing to check when the setup looks fine but nothing loads.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `JIRA_BASE_URL`, `JIRA_EMAIL`, `JIRA_API_TOKEN`, `MCP_REDACT_SENSITIVE`, `LOG_LEVEL` — keys and tokens: ask the human for the values, never commit them or put them in shared files.
- Works with: Jira

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env JIRA_BASE_URL=<JIRA_BASE_URL> --env JIRA_EMAIL=<JIRA_EMAIL> --env JIRA_API_TOKEN=<JIRA_API_TOKEN> --env MCP_REDACT_SENSITIVE=<MCP_REDACT_SENSITIVE> --env LOG_LEVEL=<LOG_LEVEL> --transport stdio mcp-jira-stdio -- npx -y mcp-jira-stdio
```
Replace <…> with your own values

### Codex

**Platform CLI**
```bash
codex mcp add mcp-jira-stdio --env JIRA_BASE_URL=<JIRA_BASE_URL> --env JIRA_EMAIL=<JIRA_EMAIL> --env JIRA_API_TOKEN=<JIRA_API_TOKEN> --env MCP_REDACT_SENSITIVE=<MCP_REDACT_SENSITIVE> --env LOG_LEVEL=<LOG_LEVEL> -- npx -y mcp-jira-stdio
```
Replace <…> with your own values

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "mcp-jira-stdio": {
            "command": "npx",
            "args": [
                "-y",
                "mcp-jira-stdio"
            ],
            "env": {
                "JIRA_BASE_URL": "<JIRA_BASE_URL>",
                "JIRA_EMAIL": "<JIRA_EMAIL>",
                "JIRA_API_TOKEN": "<JIRA_API_TOKEN>",
                "MCP_REDACT_SENSITIVE": "<MCP_REDACT_SENSITIVE>",
                "LOG_LEVEL": "<LOG_LEVEL>"
            }
        }
    }
}
```
Replace <…> with your own values

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "mcp-jira-stdio": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "mcp-jira-stdio"
            ],
            "env": {
                "JIRA_BASE_URL": "<JIRA_BASE_URL>",
                "JIRA_EMAIL": "<JIRA_EMAIL>",
                "JIRA_API_TOKEN": "<JIRA_API_TOKEN>",
                "MCP_REDACT_SENSITIVE": "<MCP_REDACT_SENSITIVE>",
                "LOG_LEVEL": "<LOG_LEVEL>"
            }
        }
    }
}
```
Replace <…> with your own values

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e JIRA_BASE_URL=<JIRA_BASE_URL> -e JIRA_EMAIL=<JIRA_EMAIL> -e JIRA_API_TOKEN=<JIRA_API_TOKEN> -e MCP_REDACT_SENSITIVE=<MCP_REDACT_SENSITIVE> -e LOG_LEVEL=<LOG_LEVEL> mcp-jira-stdio npx -y mcp-jira-stdio
```
Replace <…> with your own values

## When to use it
- open a Jira ticket by key without a browser tab
- pull issues by JQL and sort them by status
- file a new issue with the fields a project requires
- drop a comment on a ticket from the agent chat
- see which fields are mandatory before creating a task

## Example prompts
- Show me everything on `PROJ-142`, description and comments included
- Run a JQL search for my open bugs in `PROJ` and group them by priority
- Create a subtask under `PROJ-142` listing the reproduction steps

## Similar
- [Reactive Resume](https://affpapa.org/en/nevibecode/mcp/reactive-resume.md) — MCP server · ★ 44874
- [screenpipe](https://affpapa.org/en/nevibecode/mcp/screenpipe.md) — MCP server · ★ 22053
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12791
- [kaneo](https://affpapa.org/en/nevibecode/mcp/kaneo.md) — MCP server · ★ 9602
- [Mindwtr](https://affpapa.org/en/nevibecode/mcp/mindwtr.md) — MCP server · ★ 2318
- [Azure DevOps (ADO)](https://affpapa.org/en/nevibecode/mcp/azure-devops-ado.md) — MCP server · ★ 2067

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
