Standalone Jira CLI plugin for Claude Code. Self-contained FastAPI server with full issue tracking and workflow automation.
┌─────────────────┐ ┌───────────────────┐ ┌─────────────┐
│ Claude / User │────▶│ bin/jira │────▶│ Jira API │
│ │◀────│ (auto-start srv) │◀────│ Cloud/DC │
└─────────────────┘ └───────────────────┘ └─────────────┘
│
▼
┌───────────────────┐
│ FastAPI server │
│ (port 9200) │
└───────────────────┘
# First run auto-installs deps (via uv) and starts server
jira issue PROJ-123
# Search with JQL
jira search --jql 'assignee = currentUser()'
# Transition an issue
jira transition PROJ-123 --target "In Progress"
# Comments
jira comment PROJ-123 --text "Work completed"
jira comment PROJ-123 12345 -X DELETE
# Full command list
jira help| Category | Capabilities |
|---|---|
| Issues | Get, create, update, delete issues |
| Search | JQL queries with pagination |
| Workflow | Smart multi-step transitions with BFS path-finding |
| Comments | List, add, delete comments |
| Time Tracking | Worklogs with user timezone support |
| Links | Issue links, web links |
| Attachments | List, upload (multi-file), delete attachments |
| Watchers | List, add, remove watchers |
| Sprints | Boards, sprints, sprint issue management |
| Project Data | Components, versions, filters, priorities, statuses |
| Help | Self-describing API docs from OpenAPI spec |
All commands support --format:
| Format | Use Case |
|---|---|
json |
Raw API response (default) |
ai |
Token-efficient for LLM consumption |
rich |
Colored terminal output |
markdown |
Tables for docs and PRs |
jira issue PROJ-123 --format ai
jira issue PROJ-123 --format rich
jira search --jql 'project = PROJ' --format markdownCreate ~/.env.jira:
Jira Cloud:
JIRA_URL=https://company.atlassian.net
JIRA_USERNAME=email@example.com
JIRA_API_TOKEN=your-tokenJira Server/DC:
JIRA_URL=https://jira.company.com
JIRA_PERSONAL_TOKEN=your-patVerify with: jira health
jira start # Start server (auto-starts on first command)
jira stop # Stop server
jira status # Show server status
jira restart # Restart server
jira logs # Tail server logs
jira health # Check Jira connection├── plugin.json # Plugin manifest
├── bin/jira # Self-bootstrapping CLI wrapper (uses uv)
├── jira/ # FastAPI server
│ ├── main.py # Server entry point
│ ├── deps.py # Dependency injection (cached singleton + timezone)
│ ├── response.py # Response formatting + error handler decorator
│ ├── routes/ # 18 endpoint modules
│ ├── formatters/ # Output formatters (ai, rich, markdown)
│ └── lib/ # Config, JiraClient (Jira subclass), workflow engine
├── agents/
│ └── jira-agent.md # Subagent for complex workflows (memory-enabled)
├── skills/
│ ├── jira/ # Main CLI skill + references
│ ├── jira-syntax/ # Wiki markup skill + templates
│ ├── jira-report/ # Multi-ticket analysis (forks to jira-agent)
│ └── jira-bulk/ # Bulk operations (forks to jira-agent)
├── tests/ # Unit + integration tests
├── pyproject.toml # Python package config
├── uv.lock # Locked dependencies
└── pytest.ini # Test config
- GET/DELETE endpoints use query parameters
- POST/PATCH endpoints use JSON request bodies (Pydantic models)
- All route handlers are sync
def(Jira client is sync; FastAPI threadpools them) - Error handling via
@jira_error_handlerdecorator (catches HTTPError by status code) - All endpoints return
{"success": true, "data": ...}or{"success": false, "error": ...}
| Document | Purpose |
|---|---|
| ARCHITECTURE.md | System architecture and data flow |
| EXTENDING.md | Guide to adding new functionality |
jira help |
Live API documentation from OpenAPI spec |
# Run tests
uv run pytest tests/ -v
# Restart server after code changes
jira restartMIT