jira-pilot 2.0.4 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +216 -173
- package/bin/{jira.js → jira.ts} +10 -1
- package/dist/bin/jira.js +64 -0
- package/package.json +21 -15
- package/src/commands/ai-actions/{plan.js → plan.ts} +9 -9
- package/src/commands/ai-actions/{review.js → review.ts} +2 -2
- package/src/commands/ai-actions/{standup.js → standup.ts} +4 -4
- package/src/commands/{ai.js → ai.ts} +11 -11
- package/src/commands/{board.js → board.ts} +11 -11
- package/src/commands/bulk.ts +230 -0
- package/src/commands/{config.js → config.ts} +57 -8
- package/src/commands/dashboard.ts +222 -0
- package/src/commands/filter.ts +84 -0
- package/src/commands/{git.js → git.ts} +4 -4
- package/src/commands/issue-attach.ts +44 -0
- package/src/commands/issue-pr.ts +87 -0
- package/src/commands/issue-worklog.ts +90 -0
- package/src/commands/{issue.js → issue.ts} +359 -68
- package/src/commands/{mcp.js → mcp.ts} +2 -2
- package/src/commands/{project.js → project.ts} +11 -11
- package/src/commands/sprint.ts +269 -0
- package/src/server/{mcp-server.js → mcp-server.ts} +235 -8
- package/src/services/{ai-service.js → ai-service.ts} +16 -16
- package/src/services/{api-service.js → api-service.ts} +33 -9
- package/src/services/config-service.ts +21 -0
- package/src/types.ts +68 -0
- package/src/utils/{adf-parser.js → adf-parser.ts} +12 -12
- package/src/utils/config-store.ts +109 -0
- package/src/utils/{config.js → config.ts} +14 -41
- package/src/utils/{error-handler.js → error-handler.ts} +2 -1
- package/src/utils/{text-to-adf.js → text-to-adf.ts} +1 -1
- package/src/utils/{validators.js → validators.ts} +4 -4
- package/src/commands/bulk.js +0 -108
- package/src/commands/dashboard.js +0 -89
- package/src/commands/sprint.js +0 -153
package/README.md
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
# Jira Pilot ✈️
|
|
2
2
|
|
|
3
|
+
[](https://github.com/Aarul5/jira-pilot/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/jira-pilot)
|
|
5
|
+
[](https://opensource.org/licenses/ISC)
|
|
6
|
+
[](https://snyk.io/test/github/Aarul5/jira-pilot)
|
|
7
|
+
|
|
3
8
|
**The AI-Powered Jira CLI and MCP Server for Humans and Agents.**
|
|
4
9
|
|
|
5
10
|
`jira-pilot` is a next-generation CLI that combines traditional developer tools with modern AI capabilities.
|
|
6
11
|
|
|
7
12
|
- **For Humans:** A beautiful, interactive CLI to manage issues, sprints, boards, and code. Now with **AI Code Reviews**, **Epic Planning**, **Daily Standups**, and **Natural Language JQL**.
|
|
8
|
-
- **For Agents:** A fully compliant **Model Context Protocol (MCP)** server with
|
|
13
|
+
- **For Agents:** A fully compliant **Model Context Protocol (MCP)** server with **14 tools** that lets AI assistants (like Claude Desktop, Cursor, or Gemini) interact with your Jira instance safely.
|
|
9
14
|
|
|
10
15
|
---
|
|
11
16
|
|
|
@@ -15,32 +20,29 @@
|
|
|
15
20
|
| Feature | Description |
|
|
16
21
|
|---------|-------------|
|
|
17
22
|
| **Issue Management** | Create, edit, view, list, transition, assign, and comment on issues |
|
|
18
|
-
| **
|
|
23
|
+
| **Work & Time** | **New:** Log work (`2h 30m`), manage sprints (start/complete), and subtasks |
|
|
24
|
+
| **Developer Tools** | **New:** Open PRs, save local filters, git branch integration |
|
|
25
|
+
| **Power Tools** | **New:** Bulk assign, bulk label, bulk transition matching JQL |
|
|
26
|
+
| **Advanced Data** | **New:** Upload attachments, manage custom fields by alias |
|
|
27
|
+
| **AI Copilot** | Summarize, draft descriptions, suggest actions, review code, plan epics, standup reports |
|
|
19
28
|
| **Interactive Wizards** | Step-by-step prompts with `enquirer` — no flags required |
|
|
20
|
-
| **Board & Sprint Management** | List boards, view active sprint issues |
|
|
21
|
-
| **Git Integration** | Create feature branches from issues with smart naming |
|
|
22
|
-
| **AI Copilot** | **Pro:** Code review, epic breakdown (plan), standups.<br>**Standard:** Summarize, draft, suggest, NL JQL. |
|
|
23
29
|
| **Rich Visualization** | Dashboard overview, spinners, and formatted output |
|
|
24
30
|
| **Export** | Output to JSON or Markdown files, pipeable JSON output |
|
|
25
31
|
|
|
26
32
|
### 🤖 Agentic Features (MCP)
|
|
27
33
|
| Feature | Description |
|
|
28
34
|
|---------|-------------|
|
|
29
|
-
| **
|
|
35
|
+
| **14 MCP Tools** | list_issues, get_issue, create_issue, update_issue, transition_issue, assign_issue, add_comment, add_worklog, create_subtask, add_attachment, search_users, myself, list_projects, list_sprints |
|
|
30
36
|
| **LLM-Optimized** | Clean, structured JSON responses for efficient token usage |
|
|
31
37
|
| **Stdio Transport** | Standard MCP stdio server — works with any MCP client |
|
|
32
38
|
|
|
33
|
-
### 🧠 Multi-Provider AI
|
|
34
|
-
| Provider | Model |
|
|
35
|
-
|----------|-------|
|
|
36
|
-
| **OpenAI** | GPT-4o |
|
|
37
|
-
| **Google Gemini** | gemini-2.0-flash |
|
|
38
|
-
| **Anthropic** | claude-sonnet (claude-sonnet-4-20250514) |
|
|
39
|
-
|
|
40
39
|
---
|
|
41
40
|
|
|
42
41
|
## 🚀 Installation
|
|
43
42
|
|
|
43
|
+
### Prerequisites
|
|
44
|
+
- Node.js 20.0.0 or higher
|
|
45
|
+
|
|
44
46
|
### Global Install (Recommended)
|
|
45
47
|
```bash
|
|
46
48
|
npm install -g jira-pilot
|
|
@@ -48,14 +50,6 @@ npm install -g jira-pilot
|
|
|
48
50
|
|
|
49
51
|
After installing, the `jira` command is available globally.
|
|
50
52
|
|
|
51
|
-
### Local Development
|
|
52
|
-
```bash
|
|
53
|
-
git clone https://github.com/Aarul5/jira-pilot.git
|
|
54
|
-
cd jira-pilot
|
|
55
|
-
npm install
|
|
56
|
-
npm link # Makes 'jira' command available globally
|
|
57
|
-
```
|
|
58
|
-
|
|
59
53
|
---
|
|
60
54
|
|
|
61
55
|
## ⚙️ Configuration
|
|
@@ -75,39 +69,79 @@ You will be prompted for:
|
|
|
75
69
|
5. **AI Provider** — Choose between `openai`, `gemini`, or `anthropic`
|
|
76
70
|
6. **AI API Key** — Your API key for the selected provider
|
|
77
71
|
|
|
78
|
-
###
|
|
72
|
+
### Profiles & Management
|
|
73
|
+
Manage credentials for multiple environments (e.g., Work vs. Personal, Prod vs. Dev).
|
|
74
|
+
|
|
79
75
|
```bash
|
|
80
|
-
jira config view
|
|
81
|
-
jira config
|
|
76
|
+
jira config view # Show current configuration (keys are masked)
|
|
77
|
+
jira config save work # Save current creds as profile 'work'
|
|
78
|
+
jira config use personal # Switch to profile 'personal'
|
|
79
|
+
jira config profiles # List all saved profiles
|
|
80
|
+
jira config delete-profile work
|
|
81
|
+
jira config clear # Remove all stored credentials
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
###
|
|
85
|
-
|
|
84
|
+
### Custom Field Aliases
|
|
85
|
+
Define aliases for custom field IDs to make commands easier:
|
|
86
|
+
```bash
|
|
87
|
+
jira config field set points customfield_10011
|
|
88
|
+
jira config field list
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
86
92
|
|
|
93
|
+
## ✨ Interactive Experience
|
|
94
|
+
|
|
95
|
+
Jira Pilot is designed to be fully interactive. You don't need to remember complex flags.
|
|
96
|
+
|
|
97
|
+
**Just run the command, and we'll guide you:**
|
|
98
|
+
|
|
99
|
+
1. **Selection**: Use arrow keys `↑` `↓` to navigate lists (Projects, Issue Types, Priorities).
|
|
100
|
+
2. **Filtering**: Start typing to filter long lists (e.g., finding a specific assignee).
|
|
101
|
+
3. **Wizards**: Complex flows like creating an issue are broken down into simple steps.
|
|
102
|
+
4. **Confirmation**: Destructive actions prompt for confirmation (y/N).
|
|
103
|
+
|
|
104
|
+
Example:
|
|
87
105
|
```bash
|
|
88
|
-
jira
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
106
|
+
jira issue create
|
|
107
|
+
? Select Project: PROJ - My Project
|
|
108
|
+
? Select Issue Type: Bug
|
|
109
|
+
? Summary: Login page crashes
|
|
110
|
+
? Priority: High
|
|
111
|
+
? Assignee: Me
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 📊 My Dashboard
|
|
117
|
+
|
|
118
|
+
Start your day with a high-level overview of what's on your plate.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
jira dashboard
|
|
92
122
|
```
|
|
93
123
|
|
|
94
|
-
|
|
124
|
+
**What you'll see:**
|
|
125
|
+
* **👋 Welcome Message**: Personalized greeting.
|
|
126
|
+
* **🔥 High Priority**: Issues assigned to you that need immediate attention.
|
|
127
|
+
* **📋 Recent Activity**: Your recently viewed or updated issues.
|
|
128
|
+
* **🚀 Sprint Status**: (If applicable) Active sprint progress.
|
|
95
129
|
|
|
96
130
|
---
|
|
97
131
|
|
|
98
|
-
## 📖 Usage
|
|
132
|
+
## 📖 Usage Guide
|
|
99
133
|
|
|
100
134
|
### 📋 Issue Management
|
|
101
135
|
|
|
102
136
|
#### List Issues
|
|
103
137
|
```bash
|
|
104
|
-
# List issues assigned to you in active sprints
|
|
138
|
+
# List issues assigned to you in active sprints (interactive)
|
|
105
139
|
jira issue list
|
|
106
140
|
|
|
107
141
|
# List with custom JQL
|
|
108
142
|
jira issue list --jql "project = PROJ AND priority = High"
|
|
109
143
|
|
|
110
|
-
# Filter by project, assignee, or status
|
|
144
|
+
# Filter by project, assignee, or status via flags
|
|
111
145
|
jira issue list --project PROJ --assignee "john.doe" --status "In Progress"
|
|
112
146
|
|
|
113
147
|
# Limit results
|
|
@@ -131,41 +165,36 @@ jira issue search "login bug"
|
|
|
131
165
|
jira issue search "error 500" --project PROJ
|
|
132
166
|
```
|
|
133
167
|
|
|
134
|
-
#### Dashboard Overview
|
|
135
|
-
Get a high-level view of your work:
|
|
136
|
-
```bash
|
|
137
|
-
jira dashboard # Shows your open issues (by priority) and recent activity
|
|
138
|
-
```
|
|
139
|
-
|
|
140
168
|
#### View Issue Details
|
|
141
169
|
```bash
|
|
142
170
|
jira issue view PROJ-123
|
|
143
171
|
```
|
|
144
|
-
Displays: summary, status, priority, assignee, description, and recent comments.
|
|
172
|
+
Displays: summary, status, priority, assignee, description, components, labels, dates, versions, and recent comments.
|
|
145
173
|
|
|
146
174
|
#### Create Issue
|
|
147
175
|
```bash
|
|
148
176
|
# Interactive wizard (recommended)
|
|
149
177
|
jira issue create
|
|
150
178
|
|
|
151
|
-
# Non-interactive with flags
|
|
179
|
+
# Non-interactive with flags for speed
|
|
152
180
|
jira issue create -p PROJ -s "Fix login bug"
|
|
153
181
|
jira issue create -p PROJ -t Bug -s "Crash on save" --priority High
|
|
154
182
|
jira issue create -p PROJ -t Story -s "Add dark mode" -d "Users want a dark theme" -a me
|
|
155
|
-
jira issue create -p PROJ -s "New feature" -a me
|
|
156
183
|
|
|
157
|
-
#
|
|
158
|
-
jira issue
|
|
159
|
-
jira issue edit PROJ-123 # Interactive field picker
|
|
184
|
+
# With Custom Fields (using Alias or ID)
|
|
185
|
+
jira issue create -p PROJ -s "Story" --custom "points=5" --custom "customfield_10022=DevOps"
|
|
160
186
|
```
|
|
161
187
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
188
|
+
#### Edit Issue
|
|
189
|
+
```bash
|
|
190
|
+
# Interactive Field Picker
|
|
191
|
+
jira issue edit PROJ-123
|
|
192
|
+
|
|
193
|
+
# Quick Edits
|
|
194
|
+
jira issue edit PROJ-123 -s "New Summary" --priority High
|
|
195
|
+
jira issue edit PROJ-123 -d "New description"
|
|
196
|
+
jira issue edit PROJ-123 --custom "points=8"
|
|
197
|
+
```
|
|
169
198
|
|
|
170
199
|
#### Transition Issue Status
|
|
171
200
|
```bash
|
|
@@ -177,7 +206,7 @@ jira issue transition PROJ-123 --status "In Progress"
|
|
|
177
206
|
jira issue transition PROJ-123 -s Done
|
|
178
207
|
```
|
|
179
208
|
|
|
180
|
-
#### Assign / Reassign
|
|
209
|
+
#### Assign / Reassign
|
|
181
210
|
```bash
|
|
182
211
|
# Interactive — choose Myself, Unassign, or Search
|
|
183
212
|
jira issue assign PROJ-123
|
|
@@ -196,75 +225,146 @@ jira issue comment PROJ-123
|
|
|
196
225
|
jira issue comment PROJ-123 -m "Fixed in latest build"
|
|
197
226
|
```
|
|
198
227
|
|
|
199
|
-
####
|
|
228
|
+
#### Other Actions
|
|
200
229
|
```bash
|
|
201
230
|
# Link Issues
|
|
202
|
-
jira issue link PROJ-123 PROJ-456 # Link two issues (interactive type)
|
|
203
231
|
jira issue link PROJ-123 PROJ-456 -t Blocks
|
|
204
232
|
|
|
205
233
|
# Watchers
|
|
206
|
-
jira issue watch PROJ-123
|
|
207
|
-
jira issue unwatch PROJ-123
|
|
234
|
+
jira issue watch PROJ-123
|
|
235
|
+
jira issue unwatch PROJ-123
|
|
208
236
|
|
|
209
|
-
#
|
|
210
|
-
jira
|
|
237
|
+
# Attachments
|
|
238
|
+
jira issue attach PROJ-123 ./logs/server.log
|
|
211
239
|
```
|
|
212
240
|
|
|
213
241
|
---
|
|
214
242
|
|
|
215
|
-
###
|
|
243
|
+
### ⏱️ Work & Time
|
|
216
244
|
|
|
217
|
-
####
|
|
245
|
+
#### Worklogs
|
|
246
|
+
Track time naturally against issues.
|
|
218
247
|
```bash
|
|
219
|
-
|
|
248
|
+
# Add worklog
|
|
249
|
+
jira issue worklog add PROJ-123 2h "Researching API"
|
|
250
|
+
jira issue worklog add PROJ-123 30m "Daily standup"
|
|
251
|
+
jira issue worklog add PROJ-123 1d "Implementation"
|
|
252
|
+
|
|
253
|
+
# List worklogs
|
|
254
|
+
jira issue worklog list PROJ-123
|
|
220
255
|
```
|
|
221
|
-
Displays: project key, name, lead, and style in a formatted table.
|
|
222
256
|
|
|
223
|
-
####
|
|
257
|
+
#### Subtasks
|
|
224
258
|
```bash
|
|
225
|
-
#
|
|
226
|
-
jira
|
|
259
|
+
# Interactive subtask creation
|
|
260
|
+
jira issue subtask PARENT-123
|
|
227
261
|
|
|
228
|
-
#
|
|
229
|
-
jira
|
|
230
|
-
|
|
231
|
-
# Filter by type
|
|
232
|
-
jira board list -t scrum
|
|
233
|
-
jira board list -t kanban
|
|
262
|
+
# Quick subtask
|
|
263
|
+
jira issue subtask PARENT-123 -s "Implement backend logic" --assignee me
|
|
234
264
|
```
|
|
235
265
|
|
|
236
|
-
####
|
|
266
|
+
#### Sprint Management
|
|
267
|
+
Manage your Agile boards directly.
|
|
237
268
|
```bash
|
|
238
|
-
# List
|
|
239
|
-
jira sprint list --board
|
|
240
|
-
|
|
241
|
-
# List by board name
|
|
242
|
-
jira sprint list --board "My Team Board"
|
|
269
|
+
# List sprints
|
|
270
|
+
jira sprint list --board "My Board"
|
|
271
|
+
jira sprint list --board 5 --state active
|
|
243
272
|
|
|
244
273
|
# List issues in active sprint
|
|
245
|
-
jira sprint issues --board
|
|
246
|
-
jira sprint issues --board 123 --output json
|
|
274
|
+
jira sprint issues --board 5
|
|
247
275
|
|
|
248
|
-
#
|
|
249
|
-
jira sprint
|
|
250
|
-
jira sprint
|
|
276
|
+
# Start/Complete Sprints
|
|
277
|
+
jira sprint start 123 --start-date 2023-10-01 --end-date 2023-10-15
|
|
278
|
+
jira sprint complete 123
|
|
251
279
|
```
|
|
252
280
|
|
|
253
281
|
---
|
|
254
282
|
|
|
255
|
-
###
|
|
283
|
+
### 👨💻 Developer Workflow
|
|
284
|
+
|
|
285
|
+
#### Pull Requests
|
|
286
|
+
Open a GitHub PR with title and body pre-filled from the Jira issue.
|
|
287
|
+
```bash
|
|
288
|
+
jira issue pr PROJ-123
|
|
289
|
+
# Requires 'gh' CLI to be installed and authenticated
|
|
290
|
+
```
|
|
256
291
|
|
|
257
|
-
|
|
292
|
+
#### Git Integration
|
|
293
|
+
Create feature branches automatically named from the issue summary.
|
|
258
294
|
```bash
|
|
259
295
|
jira git branch PROJ-123
|
|
260
|
-
#
|
|
296
|
+
# Creates: feature/PROJ-123-issue-summary-slug
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
#### Saved Filters
|
|
300
|
+
Save complex JQL queries locally for quick access.
|
|
301
|
+
```bash
|
|
302
|
+
# Save a filter
|
|
303
|
+
jira filter save "My Bugs" "assignee = currentUser() AND issuetype = Bug AND status != Done"
|
|
304
|
+
|
|
305
|
+
# List saved filters
|
|
306
|
+
jira filter list
|
|
307
|
+
|
|
308
|
+
# Use a saved filter
|
|
309
|
+
jira issue list --filter "My Bugs"
|
|
310
|
+
|
|
311
|
+
# Delete a filter
|
|
312
|
+
jira filter delete "My Bugs"
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
### ⚡ Power Tools (Bulk Actions)
|
|
318
|
+
|
|
319
|
+
Perform actions on multiple issues matching a JQL query. Great for cleanups or mass updates.
|
|
320
|
+
|
|
321
|
+
#### Bulk Transition
|
|
322
|
+
Move multiple issues to a new status.
|
|
323
|
+
```bash
|
|
324
|
+
jira bulk transition -j "project = PROJ AND status = 'To Do'" -s "In Progress"
|
|
325
|
+
# Optional: -y to skip confirmation
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
#### Bulk Assign
|
|
329
|
+
Assign a set of issues to a user.
|
|
330
|
+
```bash
|
|
331
|
+
jira bulk assign -j "priority = High AND assignee is EMPTY" --assignee me
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
#### Bulk Label
|
|
335
|
+
Add or remove labels from a set of issues.
|
|
336
|
+
```bash
|
|
337
|
+
jira bulk label -j "fixVersion = 1.0" --add "release-candidate" --remove "wip"
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
### 📂 Projects & Boards
|
|
343
|
+
|
|
344
|
+
#### List Projects
|
|
345
|
+
```bash
|
|
346
|
+
jira project list
|
|
347
|
+
# Displays: project key, name, lead, and style in a formatted table.
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
#### List Boards
|
|
351
|
+
```bash
|
|
352
|
+
# List all boards
|
|
353
|
+
jira board list
|
|
354
|
+
|
|
355
|
+
# Filter by project
|
|
356
|
+
jira board list -p PROJ
|
|
357
|
+
|
|
358
|
+
# Filter by type
|
|
359
|
+
jira board list -t scrum
|
|
360
|
+
jira board list -t kanban
|
|
261
361
|
```
|
|
262
362
|
|
|
263
363
|
---
|
|
264
364
|
|
|
265
365
|
### 🤖 AI Features
|
|
266
366
|
|
|
267
|
-
> **Requires:** AI
|
|
367
|
+
> **Requires:** AI enabled in `config setup`.
|
|
268
368
|
|
|
269
369
|
#### Summarize an Issue
|
|
270
370
|
Get an AI-generated TL;DR of long issue threads with comments:
|
|
@@ -321,29 +421,34 @@ Outputs: **Yesterday**, **Today**, **Blockers**.
|
|
|
321
421
|
jira mcp
|
|
322
422
|
```
|
|
323
423
|
|
|
324
|
-
### Available MCP Tools
|
|
424
|
+
### Available MCP Tools (14)
|
|
425
|
+
Everything you need to build a fully autonomous Jira agent:
|
|
325
426
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
427
|
+
1. `jira_list_issues`: Search via JQL (supports limit)
|
|
428
|
+
2. `jira_get_issue`: Get full details
|
|
429
|
+
3. `jira_create_issue`: Create new issue (ADF support)
|
|
430
|
+
4. `jira_update_issue`: Update summary, desc, priority, assignee
|
|
431
|
+
5. `jira_transition_issue`: Change status
|
|
432
|
+
6. `jira_assign_issue`: Change assignee
|
|
433
|
+
7. `jira_add_comment`: Add comment
|
|
434
|
+
8. `jira_add_worklog`: Log time
|
|
435
|
+
9. `jira_create_subtask`: Create subtask
|
|
436
|
+
10. `jira_add_attachment`: Upload file (absolute path)
|
|
437
|
+
11. `jira_search_users`: Search for users
|
|
438
|
+
12. `jira_myself`: Get current user details
|
|
439
|
+
13. `jira_list_projects`: List accessible projects
|
|
440
|
+
14. `jira_list_sprints`: List sprints for a board
|
|
336
441
|
|
|
337
|
-
### Claude Desktop
|
|
442
|
+
### Agent Configuration (Claude Desktop)
|
|
338
443
|
|
|
339
|
-
Add
|
|
444
|
+
Add to your `claude_desktop_config.json`:
|
|
340
445
|
|
|
341
446
|
```json
|
|
342
447
|
{
|
|
343
448
|
"mcpServers": {
|
|
344
449
|
"jira": {
|
|
345
|
-
"command": "
|
|
346
|
-
"args": ["
|
|
450
|
+
"command": "npx",
|
|
451
|
+
"args": ["-y", "jira-pilot", "mcp"]
|
|
347
452
|
}
|
|
348
453
|
}
|
|
349
454
|
}
|
|
@@ -364,34 +469,12 @@ Add to your `.vscode/mcp.json` or equivalent:
|
|
|
364
469
|
}
|
|
365
470
|
```
|
|
366
471
|
|
|
367
|
-
### Example Agent Prompts
|
|
368
|
-
Once connected, you can ask your AI assistant things like:
|
|
369
|
-
- *"Show me my high-priority Jira issues"*
|
|
370
|
-
- *"Create a bug for the login crash on mobile in project PROJ"*
|
|
371
|
-
- *"Transition PROJ-123 to In Progress and assign it to me"*
|
|
372
|
-
- *"Add a comment to PROJ-456 saying the fix is deployed"*
|
|
373
|
-
- *"What sprints are active on board 5?"*
|
|
374
|
-
|
|
375
|
-
---
|
|
376
|
-
|
|
377
|
-
## 🧪 Testing & Verification
|
|
378
|
-
|
|
379
|
-
### Testing the MCP Server
|
|
380
|
-
You can test the MCP server functionality using the official [MCP Inspector](https://github.com/modelcontextprotocol/inspector):
|
|
381
|
-
|
|
382
|
-
```bash
|
|
383
|
-
npx @modelcontextprotocol/inspector node ./bin/jira.js mcp
|
|
384
|
-
```
|
|
385
|
-
|
|
386
|
-
This will launch a web interface where you can:
|
|
387
|
-
1. View all 8 available tools and their schemas
|
|
388
|
-
2. Execute tools with custom arguments
|
|
389
|
-
3. Inspect request/response logs
|
|
390
|
-
|
|
391
472
|
---
|
|
392
473
|
|
|
393
474
|
## 📦 CLI Command Reference
|
|
394
475
|
|
|
476
|
+
Run `jira help` or `jira [command] help` to see all options.
|
|
477
|
+
|
|
395
478
|
```
|
|
396
479
|
jira [command]
|
|
397
480
|
|
|
@@ -406,59 +489,19 @@ Commands:
|
|
|
406
489
|
git Git integration for Jira
|
|
407
490
|
ai AI Helper commands
|
|
408
491
|
mcp Start MCP Agent Server (Stdio)
|
|
409
|
-
|
|
410
|
-
Config Subcommands:
|
|
411
|
-
config setup Interactive setup
|
|
412
|
-
config view View current configuration
|
|
413
|
-
config clear Clear configuration
|
|
414
|
-
config save Save current config as a profile
|
|
415
|
-
config use Switch to a saved profile
|
|
416
|
-
config profiles List saved profiles
|
|
417
|
-
|
|
418
|
-
Issue Subcommands:
|
|
419
|
-
issue list List issues (JQL, filters, export)
|
|
420
|
-
issue view View issue details
|
|
421
|
-
issue create Create a new issue (wizard or flags)
|
|
422
|
-
issue edit Edit issue fields (interactive or flags)
|
|
423
|
-
issue transition Transition issue status
|
|
424
|
-
issue assign Assign or reassign an issue
|
|
425
|
-
issue comment Add a comment to an issue
|
|
426
|
-
issue search Quick text search
|
|
427
|
-
issue link Link two issues
|
|
428
|
-
issue watch Start watching an issue
|
|
429
|
-
issue unwatch Stop watching an issue
|
|
430
|
-
|
|
431
|
-
AI Subcommands:
|
|
432
|
-
ai summarize Summarize an issue using AI
|
|
433
|
-
ai draft Draft issue description from notes
|
|
434
|
-
ai suggest Suggest next actions for an issue
|
|
435
|
-
ai review AI code review of linked PR
|
|
436
|
-
ai plan Break down Epic into stories
|
|
437
|
-
ai standup Generate daily standup report
|
|
438
|
-
|
|
439
|
-
Board Subcommands:
|
|
440
|
-
board list List Jira boards
|
|
441
|
-
|
|
442
|
-
Sprint Subcommands:
|
|
443
|
-
sprint list List sprints for a board
|
|
444
|
-
sprint issues List issues in active sprint
|
|
445
|
-
|
|
446
|
-
Bulk Subcommands:
|
|
447
|
-
bulk transition Bulk transition issues matching JQL
|
|
448
492
|
```
|
|
449
493
|
|
|
450
494
|
---
|
|
451
495
|
|
|
452
496
|
## 🤝 Contributing
|
|
453
497
|
|
|
454
|
-
|
|
498
|
+
We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to submit a pull request and set up your development environment.
|
|
455
499
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
```
|
|
500
|
+
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
|
501
|
+
|
|
502
|
+
## 🛡️ Security
|
|
503
|
+
|
|
504
|
+
If you discover a security vulnerability within this project, please check [SECURITY.md](SECURITY.md) for our reporting policy.
|
|
462
505
|
|
|
463
506
|
## 📄 License
|
|
464
507
|
|
package/bin/{jira.js → jira.ts}
RENAMED
|
@@ -6,8 +6,15 @@ import { join, dirname } from 'path';
|
|
|
6
6
|
import { fileURLToPath } from 'url';
|
|
7
7
|
|
|
8
8
|
// Load package.json for version
|
|
9
|
+
|
|
10
|
+
// Load package.json for version
|
|
11
|
+
import { existsSync } from 'fs';
|
|
9
12
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
|
-
|
|
13
|
+
let pkgPath = join(__dirname, '../package.json');
|
|
14
|
+
if (!existsSync(pkgPath)) {
|
|
15
|
+
pkgPath = join(__dirname, '../../package.json');
|
|
16
|
+
}
|
|
17
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
11
18
|
|
|
12
19
|
const program = new Command();
|
|
13
20
|
|
|
@@ -38,6 +45,7 @@ import { registerAiCommand } from '../src/commands/ai.js';
|
|
|
38
45
|
import { registerMcpCommand } from '../src/commands/mcp.js';
|
|
39
46
|
import { registerBulkCommand } from '../src/commands/bulk.js';
|
|
40
47
|
import { registerDashboardCommand } from '../src/commands/dashboard.js';
|
|
48
|
+
import { registerFilterCommand } from '../src/commands/filter.js';
|
|
41
49
|
|
|
42
50
|
// Register Commands
|
|
43
51
|
registerConfigCommand(program);
|
|
@@ -50,6 +58,7 @@ registerAiCommand(program);
|
|
|
50
58
|
registerMcpCommand(program);
|
|
51
59
|
registerBulkCommand(program);
|
|
52
60
|
registerDashboardCommand(program);
|
|
61
|
+
registerFilterCommand(program);
|
|
53
62
|
|
|
54
63
|
program.on('command:*', () => {
|
|
55
64
|
console.error(chalk.red('Invalid command: %s\nSee --help for a list of available commands.'), program.args.join(' '));
|
package/dist/bin/jira.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { readFileSync } from 'fs';
|
|
5
|
+
import { join, dirname } from 'path';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
// Load package.json for version
|
|
8
|
+
// Load package.json for version
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
|
+
let pkgPath = join(__dirname, '../package.json');
|
|
12
|
+
if (!existsSync(pkgPath)) {
|
|
13
|
+
pkgPath = join(__dirname, '../../package.json');
|
|
14
|
+
}
|
|
15
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
16
|
+
const program = new Command();
|
|
17
|
+
program
|
|
18
|
+
.name('jira')
|
|
19
|
+
.description('AI-powered Jira CLI for humans and agents')
|
|
20
|
+
.version(pkg.version)
|
|
21
|
+
.addHelpText('after', `
|
|
22
|
+
Examples:
|
|
23
|
+
$ jira dashboard
|
|
24
|
+
$ jira issue list
|
|
25
|
+
$ jira issue view PROJ-123
|
|
26
|
+
$ jira issue create
|
|
27
|
+
$ jira issue search "login bug"
|
|
28
|
+
$ jira board list
|
|
29
|
+
$ jira sprint list --board 123
|
|
30
|
+
$ jira bulk transition -j "project = PROJ" -s Done
|
|
31
|
+
$ jira ai summarize PROJ-123
|
|
32
|
+
`);
|
|
33
|
+
import { registerConfigCommand } from '../src/commands/config.js';
|
|
34
|
+
import { registerIssueCommand } from '../src/commands/issue.js';
|
|
35
|
+
import { registerProjectCommand } from '../src/commands/project.js';
|
|
36
|
+
import { registerSprintCommand } from '../src/commands/sprint.js';
|
|
37
|
+
import { registerBoardCommand } from '../src/commands/board.js';
|
|
38
|
+
import { registerGitCommand } from '../src/commands/git.js';
|
|
39
|
+
import { registerAiCommand } from '../src/commands/ai.js';
|
|
40
|
+
import { registerMcpCommand } from '../src/commands/mcp.js';
|
|
41
|
+
import { registerBulkCommand } from '../src/commands/bulk.js';
|
|
42
|
+
import { registerDashboardCommand } from '../src/commands/dashboard.js';
|
|
43
|
+
import { registerFilterCommand } from '../src/commands/filter.js';
|
|
44
|
+
// Register Commands
|
|
45
|
+
registerConfigCommand(program);
|
|
46
|
+
registerIssueCommand(program);
|
|
47
|
+
registerProjectCommand(program);
|
|
48
|
+
registerSprintCommand(program);
|
|
49
|
+
registerBoardCommand(program);
|
|
50
|
+
registerGitCommand(program);
|
|
51
|
+
registerAiCommand(program);
|
|
52
|
+
registerMcpCommand(program);
|
|
53
|
+
registerBulkCommand(program);
|
|
54
|
+
registerDashboardCommand(program);
|
|
55
|
+
registerFilterCommand(program);
|
|
56
|
+
program.on('command:*', () => {
|
|
57
|
+
console.error(chalk.red('Invalid command: %s\nSee --help for a list of available commands.'), program.args.join(' '));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
});
|
|
60
|
+
if (!process.argv.slice(2).length) {
|
|
61
|
+
program.outputHelp();
|
|
62
|
+
}
|
|
63
|
+
program.parse(process.argv);
|
|
64
|
+
//# sourceMappingURL=jira.js.map
|