Skip to content

fathurrach/jira-commands

 
 

Repository files navigation

jirac

A fast, feature-rich Jira CLI built in Rust.

CI Crates.io Homebrew License: MIT%20OR%20Apache--2.0

jirac is an opinionated Jira terminal client that fills the gaps left by existing CLIs: full custom field support via runtime introspection, native attachment uploads, cursor-based pagination, and full compatibility with Jira REST API v3.

It ships as a single binary with no runtime dependencies, runs on macOS, Linux, and Windows, and includes an interactive TUI, an MCP server for editor/agent integrations, and a Claude Code plugin.

Preview

jirac TUI preview

Installation

Choose the installer that fits your environment:

Homebrew (macOS / Linux)

brew tap mulhamna/tap && brew install jira-commands

Install script (macOS / Linux)

curl -sSL https://raw.githubusercontent.com/mulhamna/jira-commands/main/install.sh | bash

PowerShell installer (Windows)

powershell -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((Invoke-WebRequest 'https://raw.githubusercontent.com/mulhamna/jira-commands/main/install.ps1').Content))"

Installs jirac.exe to %LOCALAPPDATA%\Programs\jirac\bin and adds that directory to your user PATH.

Cargo

cargo install jira-commands

GitHub Releases

Download pre-built archives from GitHub Releases.

Prefer the packaged archives over raw binaries. They include the executable, licenses, and README.

Supported release artifacts:

Platform Raw binary Preferred archive
macOS (Apple Silicon) jirac-macos-aarch64 jirac-macos-aarch64.tar.gz
macOS (Intel) jirac-macos-x86_64 jirac-macos-x86_64.tar.gz
Linux (x86_64) jirac-linux-x86_64 jirac-linux-x86_64.tar.gz
Linux (ARM64) jirac-linux-aarch64 jirac-linux-aarch64.tar.gz
Windows (x86_64) jirac-windows-x86_64.exe jirac-windows-x86_64.zip

Releases publish jirac and jirac-mcp. The legacy jira binary is no longer shipped in release artifacts.

Winget (Windows)

Winget manifests are maintained in packaging/winget/ in this repository. After each GitHub release, update the manifest version, archive URL, and SHA256, validate the manifest set, then submit it to the Windows Package Manager community repository.

Once published there, installation will be:

winget install mulhamna.jirac

Quick start

1. Create an API token

Go to Atlassian API tokens and create a new token.

2. Authenticate

jirac auth login

You will be prompted for your Jira base URL, email, and API token. Credentials are stored in ~/.config/jira/config.toml with 600 permissions.

3. Start using it

jirac issue list                          # your assigned issues
jirac issue list -p PROJ                  # issues in a project
jirac issue view PROJ-123                 # view issue detail
jirac issue create -p PROJ                # create (interactive)
jirac issue transition PROJ-123 --to Done # transition
jirac tui -p PROJ                         # interactive TUI

Usage

Issues

jirac issue list                                    # assigned to you
jirac issue list -p PROJ                            # by project
jirac issue list --jql "status = 'In Progress'"     # custom JQL

jirac issue view PROJ-123                           # view detail
jirac issue create -p PROJ                          # create (interactive)
jirac issue create -p PROJ --type Bug --summary "Login fails on Safari"

jirac issue update PROJ-123 --summary "New title"
jirac issue update PROJ-123 --assignee user@co.com

jirac issue transition PROJ-123                     # interactive picker
jirac issue transition PROJ-123 --to "In Progress"

jirac issue attach PROJ-123 ./screenshot.png
jirac issue delete PROJ-123

Worklogs

jirac issue worklog list PROJ-123
jirac issue worklog add PROJ-123 --time 2h --comment "Fixed auth bug"
jirac issue worklog delete PROJ-123 --id 10234

Bulk operations

jirac issue bulk-transition -p PROJ -q 'status = "To Do"' -t "In Progress"
jirac issue bulk-update -p PROJ -q 'status = Done' --field assignee --value me@co.com
jirac issue archive -p PROJ -q 'status = Done AND updated < -90d'

JQL builder

jirac issue jql                                     # interactive

Raw API passthrough

jirac api get /rest/api/3/serverInfo
jirac api post /rest/api/3/issue --body '{"fields":{...}}'

Plans (Jira Premium)

jirac plan list

Auth management

jirac auth login
jirac auth status
jirac auth update --token NEW_TOKEN
jirac auth update --url https://new.atlassian.net
jirac auth logout

Interactive TUI

jirac tui
jirac tui -p PROJ

Common shortcuts:

Key Action
j / k Navigate up / down
Enter View issue
C Choose visible table columns
c Create issue
e Edit issue
a Assign issue
t Transition issue
w Add worklog
l Manage labels
m Manage components
u Upload attachment
o Open in browser
r Refresh
/ JQL search
? Show in-app help
q / Esc Quit or go back, depending on context

Configuration

Config file: ~/.config/jira/config.toml

base_url = "https://yourcompany.atlassian.net"
email = "you@example.com"
token = "your_api_token"
project = "PROJ"           # optional default project
timeout_secs = 30

Environment variables override the config file:

export JIRA_URL=https://yourcompany.atlassian.net
export JIRA_EMAIL=you@example.com
export JIRA_TOKEN=your_api_token

MCP server

jirac-mcp exposes Jira as typed Model Context Protocol tools for editors, agents, and desktop apps.

Install

cargo install jira-mcp

Or use the release installer flow for your platform:

# macOS / Linux
curl -sSL https://raw.githubusercontent.com/mulhamna/jira-commands/main/install.sh | BINARY=jirac-mcp bash
# Windows
powershell -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((Invoke-WebRequest 'https://raw.githubusercontent.com/mulhamna/jira-commands/main/install.ps1').Content))" -Binary jirac-mcp

Run

# stdio (local MCP clients)
jirac-mcp serve --transport stdio

# Streamable HTTP (remote clients)
jirac-mcp serve --transport streamable-http --host 127.0.0.1 --port 8787 --path /mcp

Client configuration

{
  "mcpServers": {
    "jira": {
      "command": "jirac-mcp",
      "args": ["serve", "--transport", "stdio"]
    }
  }
}

Available tools

Category Tools
Auth jira_auth_status, jira_auth_set_credentials, jira_auth_logout
Issues jira_issue_list, jira_issue_view, jira_issue_create, jira_issue_update, jira_issue_delete
Metadata jira_issue_types_list, jira_issue_fields, jira_issue_transitions_list
Workflow jira_issue_transition, jira_issue_attach, jira_worklog_list, jira_worklog_add, jira_worklog_delete
Bulk jira_issue_bulk_transition, jira_issue_bulk_update, jira_issue_archive
Advanced jira_plan_list, jira_api_request

Destructive tools (delete, archive, bulk operations) require confirm: true. The jira_api_request tool provides raw access to any Jira REST endpoint.

Claude Code plugin

# 1. Install the CLI that the plugin calls
cargo install jira-commands
jirac auth login

The plugin namespace remains /jira:*, but the binary it invokes is jirac.

# 2. In Claude Code
/plugin marketplace add mulhamna/jira-commands
/plugin install jira@jira-commands
Skill Description
/jira:list-issues List issues by project or JQL
/jira:view-issue View full issue detail
/jira:create-issue Create a new issue
/jira:update-issue Update an existing issue
/jira:transition Transition an issue
/jira:comment List comments or add a Markdown comment
/jira:worklog List, add, or delete worklogs
/jira:fields Inspect available field metadata
/jira:bulk-transition Bulk transition issues via JQL
/jira:attach Upload a file to an issue
/jira:jql Build and run a JQL query
/jira:api Raw REST API passthrough

Using jira-core as a library

The jira-core crate can be used independently as a Rust library:

[dependencies]
jira-core = "0.12"
use jira_core::{JiraClient, config::JiraConfig};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let config = JiraConfig::load()?;
    let client = JiraClient::new(config);

    let results = client.search_issues("project = PROJ", None, Some(10)).await?;
    for issue in results.issues {
        println!("{}: {}", issue.key, issue.summary);
    }
    Ok(())
}

See jira-core on crates.io for full API documentation.

Building from source

git clone https://github.com/mulhamna/jira-commands
cd jira-commands
cargo fmt --all -- --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --all
cargo build --all

Workspace layout

crates/
├── jira-core/     # Rust library — API client, auth, models, ADF parser
├── jira/          # CLI binary (jirac) — clap commands + ratatui TUI
└── jira-mcp/      # MCP server binary (jirac-mcp) — rmcp-based
plugin/
└── .claude-plugin/  # Claude Code plugin (9 skills)

Releases are automated via release-please. See CHANGELOG.md for version history.

Upgrading from jira to jirac

The supported CLI binary is jirac.

If you still have old scripts, aliases, or wrappers that call jira, update them before upgrading. Release artifacts now ship jirac and jirac-mcp only.

# Example shell alias update
alias jira='jirac'

License

Licensed under MIT OR Apache-2.0.

Windows packaging

  • install.ps1 is the direct Windows installer entrypoint
  • Winget manifest sources are maintained in packaging/winget/
  • GitHub Releases remain the source for release archives and checksums

jirac is an independent, community-built tool. It is not affiliated with, endorsed by, or sponsored by Atlassian. "Jira" is a trademark of Atlassian.

About

Jira toolkit for terminals, coding assistants, and bots.

Resources

License

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Rust 96.7%
  • Shell 2.1%
  • PowerShell 1.2%