ima-claude 2.20.0 → 2.26.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.
Files changed (80) hide show
  1. package/README.md +74 -9
  2. package/dist/cli.js +2 -1
  3. package/package.json +1 -1
  4. package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
  5. package/plugins/ima-claude/agents/explorer.md +29 -15
  6. package/plugins/ima-claude/agents/implementer.md +58 -13
  7. package/plugins/ima-claude/agents/memory.md +19 -19
  8. package/plugins/ima-claude/agents/reviewer.md +84 -34
  9. package/plugins/ima-claude/agents/tester.md +59 -16
  10. package/plugins/ima-claude/agents/wp-developer.md +66 -21
  11. package/plugins/ima-claude/hooks/bootstrap.sh +42 -44
  12. package/plugins/ima-claude/hooks/prompt_coach_digest.md +14 -17
  13. package/plugins/ima-claude/hooks/prompt_coach_system.md +10 -12
  14. package/plugins/ima-claude/personalities/README.md +17 -6
  15. package/plugins/ima-claude/personalities/enable-efficient.md +61 -0
  16. package/plugins/ima-claude/personalities/enable-terse.md +71 -0
  17. package/plugins/ima-claude/skills/agentic-workflows/SKILL.md +35 -71
  18. package/plugins/ima-claude/skills/architect/SKILL.md +54 -168
  19. package/plugins/ima-claude/skills/compound-bridge/SKILL.md +41 -94
  20. package/plugins/ima-claude/skills/design-to-code/SKILL.md +43 -78
  21. package/plugins/ima-claude/skills/discourse/SKILL.md +79 -194
  22. package/plugins/ima-claude/skills/discourse-admin/SKILL.md +41 -103
  23. package/plugins/ima-claude/skills/docs-organize/SKILL.md +63 -203
  24. package/plugins/ima-claude/skills/ember-discourse/SKILL.md +90 -200
  25. package/plugins/ima-claude/skills/espocrm/SKILL.md +14 -23
  26. package/plugins/ima-claude/skills/espocrm-api/SKILL.md +79 -192
  27. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +33 -237
  28. package/plugins/ima-claude/skills/gh-cli/SKILL.md +26 -65
  29. package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +71 -104
  30. package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +32 -22
  31. package/plugins/ima-claude/skills/ima-brand/SKILL.md +18 -23
  32. package/plugins/ima-claude/skills/ima-copywriting/SKILL.md +68 -179
  33. package/plugins/ima-claude/skills/ima-doc2pdf/SKILL.md +32 -102
  34. package/plugins/ima-claude/skills/ima-editorial-scorecard/SKILL.md +38 -63
  35. package/plugins/ima-claude/skills/ima-editorial-workflow/SKILL.md +69 -114
  36. package/plugins/ima-claude/skills/ima-email-creator/SKILL.md +16 -22
  37. package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +21 -37
  38. package/plugins/ima-claude/skills/ima-git/SKILL.md +81 -0
  39. package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +39 -120
  40. package/plugins/ima-claude/skills/jquery/SKILL.md +107 -233
  41. package/plugins/ima-claude/skills/js-fp/SKILL.md +75 -296
  42. package/plugins/ima-claude/skills/js-fp-api/SKILL.md +52 -162
  43. package/plugins/ima-claude/skills/js-fp-react/SKILL.md +47 -270
  44. package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +55 -209
  45. package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +59 -204
  46. package/plugins/ima-claude/skills/livecanvas/SKILL.md +19 -32
  47. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +92 -162
  48. package/plugins/ima-claude/skills/mcp-context7/SKILL.md +32 -64
  49. package/plugins/ima-claude/skills/mcp-gitea/SKILL.md +98 -188
  50. package/plugins/ima-claude/skills/mcp-github/SKILL.md +60 -124
  51. package/plugins/ima-claude/skills/mcp-memory/SKILL.md +1 -177
  52. package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +58 -115
  53. package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +32 -87
  54. package/plugins/ima-claude/skills/mcp-serena/SKILL.md +54 -80
  55. package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +40 -63
  56. package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +75 -116
  57. package/plugins/ima-claude/skills/php-authnet/SKILL.md +32 -65
  58. package/plugins/ima-claude/skills/php-fp/SKILL.md +50 -129
  59. package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +25 -73
  60. package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +103 -463
  61. package/plugins/ima-claude/skills/playwright/SKILL.md +69 -220
  62. package/plugins/ima-claude/skills/prompt-starter/SKILL.md +33 -83
  63. package/plugins/ima-claude/skills/prompt-starter/references/code-review.md +38 -0
  64. package/plugins/ima-claude/skills/py-fp/SKILL.md +78 -384
  65. package/plugins/ima-claude/skills/quasar-fp/SKILL.md +54 -255
  66. package/plugins/ima-claude/skills/quickstart/SKILL.md +7 -11
  67. package/plugins/ima-claude/skills/rails/SKILL.md +63 -184
  68. package/plugins/ima-claude/skills/resume-session/SKILL.md +14 -35
  69. package/plugins/ima-claude/skills/rg/SKILL.md +61 -146
  70. package/plugins/ima-claude/skills/ruby-fp/SKILL.md +66 -163
  71. package/plugins/ima-claude/skills/save-session/SKILL.md +10 -39
  72. package/plugins/ima-claude/skills/scorecard/SKILL.md +42 -40
  73. package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +42 -71
  74. package/plugins/ima-claude/skills/skill-creator/SKILL.md +79 -250
  75. package/plugins/ima-claude/skills/task-master/SKILL.md +11 -31
  76. package/plugins/ima-claude/skills/task-planner/SKILL.md +44 -153
  77. package/plugins/ima-claude/skills/task-runner/SKILL.md +61 -143
  78. package/plugins/ima-claude/skills/unit-testing/SKILL.md +59 -134
  79. package/plugins/ima-claude/skills/wp-ddev/SKILL.md +38 -120
  80. package/plugins/ima-claude/skills/wp-local/SKILL.md +26 -108
@@ -14,12 +14,12 @@ description: >-
14
14
  # Atlassian Integration — Hybrid MCP + Direct API
15
15
 
16
16
  MCP-first: use bundled tools (prefixed `mcp__claude_ai_Atlassian__`) for covered operations.
17
- Direct REST API (curl via Bash) for gaps. See [Decision Logic](#decision-logic) to pick the right approach.
17
+ Direct REST API (curl via Bash) for gaps. See [Decision Logic](#decision-logic).
18
18
 
19
19
  ## Bootstrap (Required First Call)
20
20
 
21
- Every session MUST start with `getAccessibleAtlassianResources` to obtain the `cloudId`.
22
- Nearly all other tools require it. Cache this value mentally for the session.
21
+ Every session MUST start with `getAccessibleAtlassianResources` to obtain `cloudId`.
22
+ Nearly all other tools require it. Cache for the session.
23
23
 
24
24
  ```
25
25
  getAccessibleAtlassianResources → returns cloudId (UUID or site URL)
@@ -35,26 +35,26 @@ getAccessibleAtlassianResources → returns cloudId (UUID or site URL)
35
35
  | `atlassianUserInfo` | Current authenticated user | *(none)* |
36
36
  | `lookupJiraAccountId` | Find user accountId by name/email | `cloudId`, `searchString` |
37
37
 
38
- ### Search (3 tools - choose wisely)
38
+ ### Search (choose wisely)
39
39
 
40
40
  | Tool | Query Language | Scope | When to Use |
41
41
  |------|---------------|-------|-------------|
42
- | `search` | Natural language | Jira + Confluence | Default search. Always use unless JQL/CQL specifically needed |
43
- | `searchJiraIssuesUsingJql` | JQL | Jira only | Structured queries: status, assignee, project, date ranges |
44
- | `searchConfluenceUsingCql` | CQL | Confluence only | Structured queries: space, label, type, creator |
42
+ | `search` | Natural language | Jira + Confluence | Default. Use unless JQL/CQL specifically needed |
43
+ | `searchJiraIssuesUsingJql` | JQL | Jira only | Structured: status, assignee, project, date ranges |
44
+ | `searchConfluenceUsingCql` | CQL | Confluence only | Structured: space, label, type, creator |
45
45
 
46
- ### Jira - Read
46
+ ### Jira Read
47
47
 
48
48
  | Tool | Purpose | Token-Saving Tip |
49
49
  |------|---------|------------------|
50
- | `getJiraIssue` | Get issue details | Use `fields` param to request ONLY needed fields |
50
+ | `getJiraIssue` | Get issue details | Use `fields` param request ONLY needed fields |
51
51
  | `getVisibleJiraProjects` | List projects | Use `searchString` to filter |
52
- | `getJiraProjectIssueTypesMetadata` | Issue types for a project | Call before `createJiraIssue` |
53
- | `getJiraIssueTypeMetaWithFields` | Field metadata for issue type | Call before `editJiraIssue` to know valid fields |
52
+ | `getJiraProjectIssueTypesMetadata` | Issue types for project | Call before `createJiraIssue` |
53
+ | `getJiraIssueTypeMetaWithFields` | Field metadata for issue type | Call before `editJiraIssue` |
54
54
  | `getTransitionsForJiraIssue` | Available status transitions | MUST call before `transitionJiraIssue` |
55
- | `getJiraIssueRemoteIssueLinks` | Remote links on an issue | |
55
+ | `getJiraIssueRemoteIssueLinks` | Remote links on issue | |
56
56
 
57
- ### Jira - Write
57
+ ### Jira Write
58
58
 
59
59
  | Tool | Content Format | Purpose |
60
60
  |------|---------------|---------|
@@ -64,18 +64,18 @@ getAccessibleAtlassianResources → returns cloudId (UUID or site URL)
64
64
  | `transitionJiraIssue` | Transition object | Change status. Get transition IDs first |
65
65
  | `addWorklogToJiraIssue` | Duration string | Log time: `"2h"`, `"30m"`, `"4d"` |
66
66
 
67
- ### Confluence - Read
67
+ ### Confluence Read
68
68
 
69
69
  | Tool | Purpose | Token-Saving Tip |
70
70
  |------|---------|------------------|
71
- | `getConfluencePage` | Get page by ID | Use `contentFormat: "markdown"` for smaller responses |
71
+ | `getConfluencePage` | Get page by ID | Use `contentFormat: "markdown"` much smaller than ADF |
72
72
  | `getConfluenceSpaces` | List spaces | Filter with `keys`, `type`, `labels` |
73
- | `getPagesInConfluenceSpace` | Pages in a space | Filter with `title`, `status`, `sort` |
73
+ | `getPagesInConfluenceSpace` | Pages in space | Filter with `title`, `status`, `sort` |
74
74
  | `getConfluencePageDescendants` | Child pages | Use `depth` to limit |
75
75
  | `getConfluencePageFooterComments` | Footer comments | |
76
76
  | `getConfluencePageInlineComments` | Inline comments | Filter by `resolutionStatus` |
77
77
 
78
- ### Confluence - Write
78
+ ### Confluence Write
79
79
 
80
80
  | Tool | Content Format | Purpose |
81
81
  |------|---------------|---------|
@@ -93,29 +93,23 @@ getAccessibleAtlassianResources → returns cloudId (UUID or site URL)
93
93
 
94
94
  ## Direct API — Gap Operations
95
95
 
96
- When the MCP tools don't cover an operation, use `curl` via Bash with direct REST API calls.
97
-
98
- ### When to Use Direct API
99
-
100
- The MCP handles issue CRUD, transitions, comments, Confluence pages, and search well.
101
- Use direct API **only** for operations not in the Tool Catalog above.
96
+ Use `curl` via Bash only for operations not in the Tool Catalog above.
102
97
 
103
98
  ### Auth Setup
104
99
 
105
- Set ENV variables for direct API access. Two auth methods supported:
106
-
100
+ Two methods:
107
101
  - **Gateway (Bearer)** — preferred for service accounts: `ATLASSIAN_CLOUD_ID` + `ATLASSIAN_BEARER_TOKEN`
108
102
  - **Direct (Basic)** — fallback for personal tokens: `ATLASSIAN_DOMAIN` + `ATLASSIAN_EMAIL` + `ATLASSIAN_API_TOKEN`
109
103
 
110
- Before first direct API call, verify auth works:
104
+ Verify auth before first direct call:
111
105
  ```bash
112
106
  curl -s -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
113
107
  "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/myself" | jq '.displayName'
114
108
  ```
115
109
 
116
- Full setup guide: [references/direct-api-auth.md](references/direct-api-auth.md)
110
+ Full setup: [references/direct-api-auth.md](references/direct-api-auth.md)
117
111
 
118
- ### Available Recipes
112
+ ### Gap Recipes
119
113
 
120
114
  | Operation | Reference | Priority |
121
115
  |-----------|-----------|----------|
@@ -124,23 +118,36 @@ Full setup guide: [references/direct-api-auth.md](references/direct-api-auth.md)
124
118
  | Bulk operations (batch edit, bulk transition) | [direct-api-bulk.md](references/direct-api-bulk.md) | P1 |
125
119
  | Comment edit/delete, watchers, components, versions, page deletion | [direct-api-misc.md](references/direct-api-misc.md) | P2 |
126
120
 
127
- ### MCP vs Direct API Decision
121
+ ## Decision Logic
128
122
 
129
123
  ```
130
- Can an MCP tool handle it? Use the MCP tool (always preferred)
131
- Attachment download/upload? Direct API (references/direct-api-attachments.md)
132
- Sprint or board operation? Direct API (references/direct-api-sprints.md)
133
- Bulk operation (5+ issues)? Direct API (references/direct-api-bulk.md)
134
- Edit/delete comment? Direct API (references/direct-api-misc.md)
135
- Watchers, components, versions? Direct API (references/direct-api-misc.md)
136
- Delete Confluence page? Direct API (references/direct-api-misc.md)
124
+ Can MCP tool handle it? → MCP tool (always preferred)
125
+ Attachment download/upload? → direct-api-attachments.md
126
+ Sprint or board operation? → direct-api-sprints.md
127
+ Bulk operation (5+ issues)? → direct-api-bulk.md
128
+ Edit/delete comment? → direct-api-misc.md
129
+ Watchers, components, versions? → direct-api-misc.md
130
+ Delete Confluence page? → direct-api-misc.md
131
+
132
+ Search across Jira AND Confluence? → search (Rovo, natural language)
133
+ Structured Jira query? → searchJiraIssuesUsingJql (JQL)
134
+ Structured Confluence query? → searchConfluenceUsingCql (CQL)
135
+
136
+ @mention in content? → lookupJiraAccountId first, then:
137
+ Confluence page → ADF with mention node
138
+ Jira description → editJiraIssue with ADF fields
139
+ Jira/Confluence comment → plain text name (Markdown limitation)
140
+
141
+ Issue field metadata before editing? → getJiraIssueTypeMetaWithFields
142
+ Change issue status? → getTransitionsForJiraIssue THEN transitionJiraIssue
143
+ Creating Confluence page? → need spaceId (NOT space key) from getConfluenceSpaces
137
144
  ```
138
145
 
139
146
  ## User Mentions (@tagging)
140
147
 
141
- **This is the most error-prone area.** Follow these patterns exactly.
148
+ **Most error-prone area.** Follow exactly.
142
149
 
143
- ### Step 1: Always Look Up the accountId First
150
+ ### Step 1: Look Up accountId
144
151
 
145
152
  ```
146
153
  lookupJiraAccountId
@@ -148,14 +155,13 @@ lookupJiraAccountId
148
155
  searchString: "john@example.com" # or "John Doe" or partial "john"
149
156
  ```
150
157
 
151
- Returns users with `accountId` values. This works for BOTH Jira and Confluence
152
- (same Atlassian org user pool).
158
+ Works for both Jira and Confluence (same org user pool).
153
159
 
154
- ### Step 2: Choose the Right Mention Strategy
160
+ ### Step 2: Choose Mention Strategy
155
161
 
156
- #### Confluence Pages (RELIABLE - use ADF)
162
+ #### Confluence Pages use ADF (reliable)
157
163
 
158
- Use `createConfluencePage` or `updateConfluencePage` with `contentFormat: "adf"`:
164
+ `createConfluencePage` / `updateConfluencePage` with `contentFormat: "adf"`:
159
165
 
160
166
  ```json
161
167
  {
@@ -167,10 +173,9 @@ Use `createConfluencePage` or `updateConfluencePage` with `contentFormat: "adf"`
167
173
  }
168
174
  ```
169
175
 
170
- **Critical:** The `body` value MUST be a JSON **string** (result of JSON.stringify),
171
- NOT a raw object. This is the #1 cause of failures.
176
+ **Critical:** `body` MUST be a JSON **string** (result of JSON.stringify), NOT a raw object. This is the #1 cause of failures.
172
177
 
173
- ADF mention node structure:
178
+ ADF mention node:
174
179
  ```json
175
180
  {
176
181
  "type": "mention",
@@ -181,19 +186,15 @@ ADF mention node structure:
181
186
  }
182
187
  ```
183
188
 
184
- The mention node is **inline** - it MUST be inside a `paragraph.content` array,
185
- never at the top-level `doc.content`.
189
+ Mention node is **inline** MUST be inside `paragraph.content`, never at top-level `doc.content`.
186
190
 
187
- #### Confluence Comments (Markdown only - no native mentions)
191
+ #### Confluence Comments no native mentions
188
192
 
189
- `createConfluenceFooterComment` and `createConfluenceInlineComment` accept only
190
- Markdown. Real @mentions are not supported in Markdown mode. Workaround:
191
- reference the user by name in plain text, or create/update the parent **page**
192
- with ADF to include the mention there instead.
193
+ `createConfluenceFooterComment` / `createConfluenceInlineComment` accept Markdown only. Real @mentions unsupported. Workaround: reference by name in plain text, or add the mention to the parent page via ADF instead.
193
194
 
194
- #### Jira Issue Description (RELIABLE - use editJiraIssue with ADF)
195
+ #### Jira Description use ADF (reliable)
195
196
 
196
- For mentions in descriptions, use `editJiraIssue` with the ADF description field:
197
+ Use `editJiraIssue` with ADF description:
197
198
 
198
199
  ```json
199
200
  {
@@ -224,69 +225,49 @@ For mentions in descriptions, use `editJiraIssue` with the ADF description field
224
225
  }
225
226
  ```
226
227
 
227
- **Note:** `createJiraIssue` takes Markdown for description. To create an issue
228
- WITH mentions, create the issue first (Markdown description), then immediately
229
- `editJiraIssue` to replace the description with ADF containing mentions.
228
+ To create issue WITH mentions: create with `createJiraIssue` (Markdown), then immediately `editJiraIssue` to replace description with ADF.
230
229
 
231
- #### Jira Comments (Markdown - limited mention support)
230
+ #### Jira Comments limited
232
231
 
233
- `addCommentToJiraIssue` accepts Markdown via `commentBody`. Real ADF mentions
234
- are not directly available. Workaround: reference users by display name in the
235
- Markdown text. If real @mentions in comments are critical, use a two-step
236
- approach: add the comment, then use the Jira UI or a direct API call for the
237
- mention.
232
+ `addCommentToJiraIssue` accepts Markdown only. Reference users by display name. For real @mentions in comments, use direct API after adding the comment.
238
233
 
239
- ### Mention Pitfalls Checklist
234
+ ### Mention Pitfalls
240
235
 
241
236
  | Pitfall | Symptom | Fix |
242
237
  |---------|---------|-----|
243
238
  | Using `username` instead of `accountId` | Shows "unlicensed user" | Always use `lookupJiraAccountId` first |
244
- | ADF body as object instead of string | "invalid request body" error | `JSON.stringify()` the ADF for Confluence |
239
+ | ADF body as object instead of string | "invalid request body" | `JSON.stringify()` the ADF for Confluence |
245
240
  | Mention at doc level, not in paragraph | Silent failure / no mention | Wrap in `{"type": "paragraph", "content": [...]}` |
246
- | Missing `<ac:link>` wrapper (storage format) | Not rendered as mention | N/A for this MCP (uses ADF/Markdown, not storage format) |
247
- | Wiki notation `[~accountId:xxx]` in Markdown | Raw text, not a mention | Use ADF via `editJiraIssue` instead |
248
- | Using `@username` in Markdown | Plain text, not a real mention | Use ADF path for real mentions |
241
+ | Wiki notation `[~accountId:xxx]` in Markdown | Raw text, not mention | Use ADF via `editJiraIssue` instead |
242
+ | `@username` in Markdown | Plain text, not real mention | Use ADF path for real mentions |
249
243
 
250
244
  ## Token-Saving Strategies
251
245
 
252
- ### 1. Filter Jira Fields
253
-
246
+ **Filter Jira fields** — never fetch all:
254
247
  ```
255
248
  getJiraIssue
256
- fields: ["summary", "status", "assignee", "priority"] # NOT the full issue
249
+ fields: ["summary", "status", "assignee", "priority"]
257
250
  ```
258
251
 
259
- Never fetch all fields. Common useful subsets:
260
- - **Quick status check:** `["summary", "status", "priority"]`
261
- - **Assignment info:** `["summary", "assignee", "reporter"]`
262
- - **Planning:** `["summary", "status", "priority", "issuetype", "parent"]`
263
-
264
- ### 2. Use Markdown for Confluence Reads
252
+ Common subsets:
253
+ - Quick status: `["summary", "status", "priority"]`
254
+ - Assignment: `["summary", "assignee", "reporter"]`
255
+ - Planning: `["summary", "status", "priority", "issuetype", "parent"]`
265
256
 
257
+ **Markdown for Confluence reads** — ADF is 5-10x larger:
266
258
  ```
267
259
  getConfluencePage
268
- contentFormat: "markdown" # Much smaller than ADF
260
+ contentFormat: "markdown"
269
261
  ```
270
262
 
271
- ADF responses can be 5-10x larger than Markdown equivalents.
272
-
273
- ### 3. Limit Search Results
274
-
263
+ **Limit search results:**
275
264
  ```
276
265
  searchJiraIssuesUsingJql
277
- maxResults: 10 # Default is 50, often excessive
278
- fields: ["summary", "status"] # Minimal fields
266
+ maxResults: 10
267
+ fields: ["summary", "status"]
279
268
  ```
280
269
 
281
- ### 4. Use Rovo Search for Discovery, JQL/CQL for Precision
282
-
283
- - "Find issues about authentication" → `search` (natural language, cross-product)
284
- - "All open bugs in PROJ assigned to me" → `searchJiraIssuesUsingJql` with JQL
285
- - "Pages labeled 'architecture' in DEV space" → `searchConfluenceUsingCql` with CQL
286
-
287
- ### 5. Avoid Redundant Discovery Calls
288
-
289
- Cache these within a session (they rarely change):
270
+ **Cache within session** (rarely change):
290
271
  - `cloudId` from `getAccessibleAtlassianResources`
291
272
  - Project keys from `getVisibleJiraProjects`
292
273
  - Space IDs from `getConfluenceSpaces`
@@ -294,46 +275,29 @@ Cache these within a session (they rarely change):
294
275
 
295
276
  ## Common Workflows
296
277
 
297
- ### Create and Assign a Jira Issue
298
-
278
+ ### Create and Assign Jira Issue
299
279
  ```
300
280
  1. getAccessibleAtlassianResources → cloudId
301
281
  2. lookupJiraAccountId(searchString: "jane@co.com") → accountId
302
- 3. createJiraIssue(
303
- projectKey: "PROJ",
304
- issueTypeName: "Task",
305
- summary: "Review Q4 report",
306
- description: "Review and approve the Q4 financial report",
307
- assignee_account_id: "<accountId>"
308
- )
282
+ 3. createJiraIssue(projectKey: "PROJ", issueTypeName: "Task",
283
+ summary: "Review Q4 report", assignee_account_id: "<accountId>")
309
284
  ```
310
285
 
311
- ### Transition a Jira Issue
312
-
286
+ ### Transition Jira Issue
313
287
  ```
314
- 1. getTransitionsForJiraIssue(issueIdOrKey: "PROJ-123") → find transition ID
315
- 2. transitionJiraIssue(
316
- issueIdOrKey: "PROJ-123",
317
- transition: { "id": "<transitionId>" }
318
- )
288
+ 1. getTransitionsForJiraIssue(issueIdOrKey: "PROJ-123") → transition ID
289
+ 2. transitionJiraIssue(issueIdOrKey: "PROJ-123", transition: {"id": "<transitionId>"})
319
290
  ```
320
291
 
321
- ### Create a Confluence Page with User Mention
322
-
292
+ ### Create Confluence Page with Mention
323
293
  ```
324
294
  1. getAccessibleAtlassianResources → cloudId
325
295
  2. lookupJiraAccountId(searchString: "john") → accountId
326
296
  3. getConfluenceSpaces(keys: ["DEV"]) → spaceId
327
- 4. createConfluencePage(
328
- spaceId: "<spaceId>",
329
- title: "Meeting Notes",
330
- contentFormat: "adf",
331
- body: "<ADF JSON string with mention node>"
332
- )
297
+ 4. createConfluencePage(spaceId, title, contentFormat: "adf", body: "<ADF JSON string>")
333
298
  ```
334
299
 
335
300
  ### Inline Comment on Specific Text
336
-
337
301
  ```
338
302
  createConfluenceInlineComment(
339
303
  pageId: "<pageId>",
@@ -346,67 +310,33 @@ createConfluenceInlineComment(
346
310
  )
347
311
  ```
348
312
 
349
- ### Download Attachments from an Issue (Hybrid)
350
-
313
+ ### Download Attachments (Hybrid)
351
314
  ```
352
- 1. getJiraIssue(issueIdOrKey: "PROJ-123", fields: ["attachment"])
353
- → get attachment metadata (filename, content URL)
315
+ 1. getJiraIssue(issueIdOrKey: "PROJ-123", fields: ["attachment"]) → content URL
354
316
  2. curl -s -L -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
355
- -o "mockup.png" "<content-url-from-step-1>"
317
+ -o "mockup.png" "<content-url>"
356
318
  ```
357
-
358
319
  Full recipes: [references/direct-api-attachments.md](references/direct-api-attachments.md)
359
320
 
360
- ### Move Issues to a Sprint (Direct API)
361
-
321
+ ### Move Issues to Sprint (Direct API)
362
322
  ```
363
323
  1. curl: GET /rest/agile/1.0/board?projectKeyOrId=PROJ → boardId
364
324
  2. curl: GET /rest/agile/1.0/board/{boardId}/sprint?state=active → sprintId
365
- 3. curl: POST /rest/agile/1.0/sprint/{sprintId}/issue
366
- body: {"issues": ["PROJ-101", "PROJ-102"]}
325
+ 3. curl: POST /rest/agile/1.0/sprint/{sprintId}/issue body: {"issues": ["PROJ-101"]}
367
326
  ```
368
-
369
327
  Full recipes: [references/direct-api-sprints.md](references/direct-api-sprints.md)
370
328
 
371
- ## Decision Logic
372
-
373
- ```
374
- Need to search across Jira AND Confluence?
375
- → search (Rovo, natural language)
376
-
377
- Need structured Jira query (by project/status/assignee/date)?
378
- → searchJiraIssuesUsingJql (JQL)
379
-
380
- Need structured Confluence query (by space/label/type)?
381
- → searchConfluenceUsingCql (CQL)
382
-
383
- Need to @mention a user in content?
384
- → lookupJiraAccountId first, then:
385
- - Confluence page → ADF with mention node
386
- - Jira description → editJiraIssue with ADF fields
387
- - Jira/Confluence comment → Plain text name (Markdown limitation)
388
-
389
- Need issue field metadata before editing?
390
- → getJiraIssueTypeMetaWithFields
391
-
392
- Need to change issue status?
393
- → getTransitionsForJiraIssue THEN transitionJiraIssue
394
-
395
- Creating a Confluence page?
396
- → Need spaceId (NOT space key). Get from getConfluenceSpaces
397
- ```
398
-
399
329
  ## Limitations
400
330
 
401
- ### Not Supported (no MCP or direct API recipe)
331
+ ### Not Supported
402
332
 
403
- - Direct Atlassian storage format (XML) — MCP uses Markdown or ADF only
333
+ - Atlassian storage format (XML) — MCP uses Markdown or ADF only
404
334
  - Confluence page permissions management
405
- - Jira custom field creation (reading custom fields via `editJiraIssue` may work)
335
+ - Jira custom field creation
406
336
  - Confluence page templates
407
337
  - Jira automation rules / webhooks
408
338
 
409
- ### Covered by Direct API (not in MCP, but recipes available)
339
+ ### Covered by Direct API
410
340
 
411
341
  | Gap | Recipe |
412
342
  |-----|--------|
@@ -5,105 +5,73 @@ description: Use Context7 MCP for official library documentation, framework APIs
5
5
 
6
6
  # Context7 MCP - Library Documentation
7
7
 
8
- Use Context7 for official library documentation instead of web searching or guessing APIs.
8
+ Use Context7 for official library docs instead of web searching or guessing APIs.
9
9
 
10
- ## MCP Tools
10
+ ## Tool
11
11
 
12
12
  | Tool | Purpose |
13
13
  |------|---------|
14
- | `mcp__context7__search` | Search for libraries and get documentation |
15
-
16
- ## Basic Usage
17
-
18
- Context7 combines library resolution and documentation retrieval into a single tool.
14
+ | `mcp__context7__search` | Search libraries and retrieve documentation |
19
15
 
20
16
  ```
21
17
  mcp__context7__search
22
18
  query: "How to use QDialog component in Quasar"
23
19
  ```
24
20
 
25
- **Parameters**:
26
- - `query` (required): Your question or search query including the library name
27
-
28
- The tool will:
29
- 1. Identify the library from your query
30
- 2. Find the relevant documentation
31
- 3. Return focused, relevant docs
32
-
33
21
  ## Query Optimization
34
22
 
35
- **Be specific and include**:
36
- - Component/function names: "QDialog component API props events slots"
37
- - What you want to do: "How to set up authentication with JWT"
38
- - Context: "React useState hook example with TypeScript"
23
+ Include component/function name + what you want to do + context. Be specific.
39
24
 
40
- **Good queries**:
41
- | Query | Why It's Good |
42
- |-------|---------------|
25
+ | Good Query | Why |
26
+ |------------|-----|
43
27
  | "Quasar QDialog props and events" | Specific component, clear intent |
44
- | "React useEffect cleanup function" | Specific hook, specific aspect |
45
- | "Prisma findMany where clause syntax" | Specific method, specific feature |
28
+ | "React useEffect cleanup function" | Specific hook + aspect |
29
+ | "Prisma findMany where clause syntax" | Specific method + feature |
46
30
  | "Express middleware error handling" | Framework + feature |
47
31
 
48
- **Avoid vague queries**:
49
- - ❌ "How does Quasar work?"
50
- - ✅ "How to create a Quasar button with icon"
32
+ Avoid: "How does Quasar work?" — use: "How to create a Quasar button with icon"
51
33
 
52
34
  ## Decision Logic
53
35
 
54
36
  ```
55
- IF question about library/framework API:
56
- Use Context7
57
- ELSE IF import statement detected AND user asks about that library:
58
- Use Context7
59
- ELSE IF general programming concept (closures, promises, etc.):
60
- → Use native Claude knowledge
61
- ELSE IF library not found:
62
- → Fallback to WebSearch or Tavily
63
- ELSE IF asking for "latest" or "new" features post-cutoff:
64
- → Use Tavily instead
37
+ IF library/framework API question → Context7
38
+ IF import detected AND user asks about that library → Context7
39
+ IF general programming concept (closures, promises) native Claude knowledge
40
+ IF library not found fallback to Tavily
41
+ IF "latest" / post-cutoff features Tavily instead
65
42
  ```
66
43
 
67
44
  ## When NOT to Use
68
45
 
69
- - General programming questions (no specific library)
70
- - Debugging code that doesn't involve library APIs
71
- - Simple syntax questions Claude already knows
72
- - User wants current/latest info post-cutoff (use Tavily instead)
46
+ - No specific library involved
47
+ - Debugging business logic (no library APIs)
48
+ - Simple syntax Claude already knows
49
+ - Current/latest info post-cutoff use Tavily
73
50
 
74
- ## Common Libraries Supported
51
+ ## Supported Libraries
75
52
 
76
- **Frontend**: React, Vue, Quasar, Next.js, Nuxt, Svelte, Angular, Tailwind, Bootstrap
77
- **Backend**: Express, Fastify, Nest.js, tRPC, Prisma, Sequelize, TypeORM
78
- **Utilities**: Lodash, Ramda, date-fns, Zod, Yup, Joi
79
- **Build**: Vite, Webpack, Rollup, ESBuild
53
+ **Frontend**: React, Vue, Quasar, Next.js, Nuxt, Svelte, Angular, Tailwind, Bootstrap
54
+ **Backend**: Express, Fastify, Nest.js, tRPC, Prisma, Sequelize, TypeORM
55
+ **Utilities**: Lodash, Ramda, date-fns, Zod, Yup, Joi
56
+ **Build**: Vite, Webpack, Rollup, ESBuild
80
57
  **Testing**: Jest, Vitest, Playwright, Cypress
81
58
 
82
59
  ## Examples
83
60
 
84
- | User Request | Action |
85
- |--------------|--------|
86
- | "How to use QDialog in Vue?" | search(query: "QDialog component Quasar Vue") |
87
- | "React useState example" | search(query: "React useState hook example") |
88
- | "Prisma query syntax" | search(query: "Prisma findMany where query") |
89
- | "What's a closure?" | Native Claude (no library) |
90
- | "Latest React 19 features" | Use Tavily (current info needed) |
61
+ | Request | Action |
62
+ |---------|--------|
63
+ | "How to use QDialog in Vue?" | `search("QDialog component Quasar Vue")` |
64
+ | "React useState example" | `search("React useState hook example")` |
65
+ | "Prisma query syntax" | `search("Prisma findMany where query")` |
66
+ | "What's a closure?" | Native Claude |
67
+ | "Latest React 19 features" | Tavily |
91
68
 
92
- ## Multiple Queries
93
-
94
- If initial results aren't sufficient, refine your query:
95
- 1. First attempt: "Quasar form validation"
96
- 2. If needed: "Quasar QForm validation rules API"
97
- 3. If needed: "Quasar field validation with Vuelidate"
69
+ If initial results insufficient, refine: "Quasar form validation" → "Quasar QForm validation rules API"
98
70
 
99
71
  ## Setup
100
72
 
101
- No API key required. Install with:
102
73
  ```bash
103
74
  bun run scripts/setup-mcp.ts
104
- ```
105
-
106
- Or manually:
107
- ```bash
75
+ # or manually:
108
76
  claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp@latest
109
77
  ```