A fast, feature-rich Jira CLI built in Rust.
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.
Choose the installer that fits your environment:
brew tap mulhamna/tap && brew install jira-commandscurl -sSL https://raw.githubusercontent.com/mulhamna/jira-commands/main/install.sh | bashpowershell -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 install jira-commandsDownload 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 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.jiracGo to Atlassian API tokens and create a new token.
jirac auth loginYou will be prompted for your Jira base URL, email, and API token. Credentials are stored in ~/.config/jira/config.toml with 600 permissions.
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 TUIjirac 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-123jirac issue worklog list PROJ-123
jirac issue worklog add PROJ-123 --time 2h --comment "Fixed auth bug"
jirac issue worklog delete PROJ-123 --id 10234jirac 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'jirac issue jql # interactivejirac api get /rest/api/3/serverInfo
jirac api post /rest/api/3/issue --body '{"fields":{...}}'jirac plan listjirac auth login
jirac auth status
jirac auth update --token NEW_TOKEN
jirac auth update --url https://new.atlassian.net
jirac auth logoutjirac tui
jirac tui -p PROJCommon 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 |
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 = 30Environment variables override the config file:
export JIRA_URL=https://yourcompany.atlassian.net
export JIRA_EMAIL=you@example.com
export JIRA_TOKEN=your_api_tokenjirac-mcp exposes Jira as typed Model Context Protocol tools for editors, agents, and desktop apps.
cargo install jira-mcpOr 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# 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{
"mcpServers": {
"jira": {
"command": "jirac-mcp",
"args": ["serve", "--transport", "stdio"]
}
}
}| 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.
# 1. Install the CLI that the plugin calls
cargo install jira-commands
jirac auth loginThe 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 |
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.
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 --allcrates/
├── 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.
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'Licensed under MIT OR Apache-2.0.
install.ps1is 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.
