ima-claude 2.16.0 → 2.20.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 (41) hide show
  1. package/README.md +16 -1
  2. package/dist/cli.js +9 -1
  3. package/package.json +1 -1
  4. package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
  5. package/plugins/ima-claude/agents/wp-developer.md +2 -1
  6. package/plugins/ima-claude/hooks/prompt_coach_digest.md +1 -1
  7. package/plugins/ima-claude/skills/agentic-workflows/SKILL.md +133 -0
  8. package/plugins/ima-claude/skills/agentic-workflows/references/phases/deliver.md +181 -0
  9. package/plugins/ima-claude/skills/agentic-workflows/references/phases/draft.md +99 -0
  10. package/plugins/ima-claude/skills/agentic-workflows/references/phases/gather.md +130 -0
  11. package/plugins/ima-claude/skills/agentic-workflows/references/phases/outline.md +106 -0
  12. package/plugins/ima-claude/skills/agentic-workflows/references/phases/review.md +137 -0
  13. package/plugins/ima-claude/skills/agentic-workflows/references/standards/draft-format.md +159 -0
  14. package/plugins/ima-claude/skills/agentic-workflows/references/standards/editorial-standards.md +160 -0
  15. package/plugins/ima-claude/skills/agentic-workflows/references/standards/outline-format.md +110 -0
  16. package/plugins/ima-claude/skills/agentic-workflows/references/templates/avada-construction-guide.md +263 -0
  17. package/plugins/ima-claude/skills/agentic-workflows/references/templates/avada-webinar-example.txt +275 -0
  18. package/plugins/ima-claude/skills/agentic-workflows/references/templates/cta-block-catalog.md +169 -0
  19. package/plugins/ima-claude/skills/agentic-workflows/references/templates/espo-email-preparation.md +241 -0
  20. package/plugins/ima-claude/skills/agentic-workflows/references/templates/webinar-recap-email-espo.html +339 -0
  21. package/plugins/ima-claude/skills/agentic-workflows/references/templates/webinar-reminder-email-espo.html +458 -0
  22. package/plugins/ima-claude/skills/agentic-workflows/references/workflows/editorial/webinar-summary.md +81 -0
  23. package/plugins/ima-claude/skills/design-to-code/SKILL.md +126 -0
  24. package/plugins/ima-claude/skills/design-to-code/references/guardrails.md +46 -0
  25. package/plugins/ima-claude/skills/design-to-code/references/phase-a-design-to-prompt.md +141 -0
  26. package/plugins/ima-claude/skills/design-to-code/references/phase-b-prompt-to-code.md +155 -0
  27. package/plugins/ima-claude/skills/design-to-code/references/prompt-template.md +95 -0
  28. package/plugins/ima-claude/skills/espocrm/SKILL.md +79 -0
  29. package/plugins/ima-claude/skills/espocrm-api/SKILL.md +360 -0
  30. package/plugins/ima-claude/skills/espocrm-api/references/where-operators.md +84 -0
  31. package/plugins/ima-claude/skills/functional-programmer/SKILL.md +15 -0
  32. package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +94 -14
  33. package/plugins/ima-claude/skills/mcp-atlassian/references/direct-api-attachments.md +115 -0
  34. package/plugins/ima-claude/skills/mcp-atlassian/references/direct-api-auth.md +103 -0
  35. package/plugins/ima-claude/skills/mcp-atlassian/references/direct-api-bulk.md +149 -0
  36. package/plugins/ima-claude/skills/mcp-atlassian/references/direct-api-misc.md +195 -0
  37. package/plugins/ima-claude/skills/mcp-atlassian/references/direct-api-sprints.md +158 -0
  38. package/plugins/ima-claude/skills/prompt-starter/SKILL.md +9 -6
  39. package/plugins/ima-claude/skills/wp-ddev/SKILL.md +264 -0
  40. package/plugins/ima-claude/skills/wp-ddev/references/ddev-commands.md +232 -0
  41. package/plugins/ima-claude/skills/wp-ddev/references/wp-cli-reference.md +406 -0
@@ -0,0 +1,115 @@
1
+ # Atlassian Direct API — Attachments
2
+
3
+ MCP gap: no attachment download or upload. Use these curl recipes.
4
+
5
+ See [direct-api-auth.md](direct-api-auth.md) for auth setup.
6
+
7
+ All examples use Gateway (Bearer) auth. Substitute Basic auth headers if needed.
8
+
9
+ ---
10
+
11
+ ### List Attachments on a Jira Issue
12
+
13
+ **API:** `GET /rest/api/3/issue/{issueKey}?fields=attachment`
14
+ **When:** Need to see what files are attached before downloading.
15
+
16
+ ```bash
17
+ curl -s \
18
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
19
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123?fields=attachment" \
20
+ | jq '.fields.attachment[] | {id, filename, mimeType, size, content}'
21
+ ```
22
+
23
+ **Tip:** You can also use MCP `getJiraIssue` with `fields: ["attachment"]` — the `content` URL in the response is what you need for download.
24
+
25
+ #### Response Shape
26
+
27
+ ```json
28
+ {
29
+ "id": "10001",
30
+ "filename": "mockup.png",
31
+ "mimeType": "image/png",
32
+ "size": 245678,
33
+ "content": "https://yoursite.atlassian.net/rest/api/3/attachment/content/10001"
34
+ }
35
+ ```
36
+
37
+ ---
38
+
39
+ ### Download a Single Attachment
40
+
41
+ **API:** `GET` the `content` URL from the attachment metadata
42
+ **When:** Need the actual binary file (image, PDF, document).
43
+
44
+ ```bash
45
+ # Get the download URL from attachment metadata
46
+ ATTACHMENT_URL=$(curl -s \
47
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
48
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123?fields=attachment" \
49
+ | jq -r '.fields.attachment[] | select(.filename == "mockup.png") | .content')
50
+
51
+ # Download the file
52
+ curl -s -L \
53
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
54
+ -o "mockup.png" \
55
+ "$ATTACHMENT_URL"
56
+ ```
57
+
58
+ #### Notes
59
+ - The `-L` flag follows redirects — Atlassian may redirect to a CDN URL
60
+ - For Gateway auth, the `content` URL may use the direct domain. The Bearer token works with both
61
+ - To download ALL attachments from an issue, pipe through a loop:
62
+
63
+ ```bash
64
+ curl -s \
65
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
66
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123?fields=attachment" \
67
+ | jq -r '.fields.attachment[] | "\(.content)\t\(.filename)"' \
68
+ | while IFS=$'\t' read -r url fname; do
69
+ curl -s -L -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" -o "$fname" "$url"
70
+ echo "Downloaded: $fname"
71
+ done
72
+ ```
73
+
74
+ ---
75
+
76
+ ### Upload Attachment to a Jira Issue
77
+
78
+ **API:** `POST /rest/api/3/issue/{issueKey}/attachments`
79
+ **When:** Attaching generated files, screenshots, or documents to an issue.
80
+
81
+ ```bash
82
+ curl -s -X POST \
83
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
84
+ -H "X-Atlassian-Token: no-check" \
85
+ -F "file=@/path/to/file.pdf" \
86
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123/attachments" \
87
+ | jq '.[0] | {id, filename, size}'
88
+ ```
89
+
90
+ #### Notes
91
+ - **Do NOT set `Content-Type: application/json`** — this is `multipart/form-data` (curl sets it automatically with `-F`)
92
+ - `X-Atlassian-Token: no-check` is required (XSRF protection bypass for attachments)
93
+ - Response is an array of attachment objects (one per file)
94
+ - Multiple files: use multiple `-F "file=@path"` flags
95
+
96
+ ---
97
+
98
+ ### Upload Attachment to a Confluence Page
99
+
100
+ **API:** `POST /wiki/rest/api/content/{pageId}/child/attachment`
101
+ **When:** Attaching files to Confluence pages.
102
+
103
+ ```bash
104
+ curl -s -X POST \
105
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
106
+ -H "X-Atlassian-Token: no-check" \
107
+ -F "file=@/path/to/diagram.png" \
108
+ "https://api.atlassian.com/ex/confluence/$ATLASSIAN_CLOUD_ID/wiki/rest/api/content/12345/child/attachment" \
109
+ | jq '.results[0] | {id: .id, title: .title}'
110
+ ```
111
+
112
+ #### Notes
113
+ - Use the **Confluence v1 API** (not v2) for attachment uploads
114
+ - Page ID is numeric — get it from MCP `getConfluencePage` or `searchConfluenceUsingCql`
115
+ - To update an existing attachment, use `PUT` with the same endpoint and filename
@@ -0,0 +1,103 @@
1
+ # Atlassian Direct REST API — Authentication
2
+
3
+ When the bundled MCP tools don't cover an operation, use `curl` via Bash with these auth patterns.
4
+
5
+ ## ENV Variables
6
+
7
+ | Variable | Required | Purpose | Example |
8
+ |----------|----------|---------|---------|
9
+ | `ATLASSIAN_CLOUD_ID` | Yes (gateway) | Cloud instance ID | `a1b2c3d4-e5f6-...` |
10
+ | `ATLASSIAN_BEARER_TOKEN` | Yes (gateway) | Service account token (`ATSTT...`) | `ATSTT...` |
11
+ | `ATLASSIAN_DOMAIN` | Yes (basic) | Site domain | `yoursite.atlassian.net` |
12
+ | `ATLASSIAN_EMAIL` | Yes (basic) | Account email | `you@company.com` |
13
+ | `ATLASSIAN_API_TOKEN` | Yes (basic) | Personal API token | `abc123...` |
14
+
15
+ **Choose one auth method.** Gateway (Bearer) is preferred for service accounts. Basic is the fallback for personal tokens.
16
+
17
+ ## Base URLs
18
+
19
+ ### Jira REST API v3
20
+
21
+ | Auth Method | Base URL |
22
+ |-------------|----------|
23
+ | Gateway (Bearer) | `https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3` |
24
+ | Direct (Basic) | `https://$ATLASSIAN_DOMAIN/rest/api/3` |
25
+
26
+ ### Jira Agile API v1
27
+
28
+ | Auth Method | Base URL |
29
+ |-------------|----------|
30
+ | Gateway (Bearer) | `https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/agile/1.0` |
31
+ | Direct (Basic) | `https://$ATLASSIAN_DOMAIN/rest/agile/1.0` |
32
+
33
+ ### Confluence REST API
34
+
35
+ | Auth Method | Base URL |
36
+ |-------------|----------|
37
+ | Gateway (Bearer) | `https://api.atlassian.com/ex/confluence/$ATLASSIAN_CLOUD_ID/wiki/rest/api` |
38
+ | Direct (Basic) | `https://$ATLASSIAN_DOMAIN/wiki/rest/api` |
39
+
40
+ ### Confluence v2 API
41
+
42
+ | Auth Method | Base URL |
43
+ |-------------|----------|
44
+ | Gateway (Bearer) | `https://api.atlassian.com/ex/confluence/$ATLASSIAN_CLOUD_ID/wiki/api/v2` |
45
+ | Direct (Basic) | `https://$ATLASSIAN_DOMAIN/wiki/api/v2` |
46
+
47
+ ## Reusable Header Blocks
48
+
49
+ ### Gateway (Bearer) — copy into any curl
50
+
51
+ ```bash
52
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
53
+ -H "Content-Type: application/json" \
54
+ -H "Accept: application/json"
55
+ ```
56
+
57
+ ### Direct (Basic) — copy into any curl
58
+
59
+ ```bash
60
+ -H "Authorization: Basic $(echo -n "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" | base64)" \
61
+ -H "Content-Type: application/json" \
62
+ -H "Accept: application/json"
63
+ ```
64
+
65
+ ## Verify Your Setup
66
+
67
+ Run this before any direct API session. Should return your display name.
68
+
69
+ ```bash
70
+ # Gateway auth
71
+ curl -s \
72
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
73
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/myself" \
74
+ | jq '.displayName'
75
+
76
+ # Basic auth
77
+ curl -s \
78
+ -H "Authorization: Basic $(echo -n "$ATLASSIAN_EMAIL:$ATLASSIAN_API_TOKEN" | base64)" \
79
+ "https://$ATLASSIAN_DOMAIN/rest/api/3/myself" \
80
+ | jq '.displayName'
81
+ ```
82
+
83
+ ## Getting the Cloud ID
84
+
85
+ The MCP's `getAccessibleAtlassianResources` returns the `cloudId`. You can also get it via:
86
+
87
+ ```bash
88
+ curl -s \
89
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
90
+ "https://api.atlassian.com/oauth/token/accessible-resources" \
91
+ | jq '.[0].id'
92
+ ```
93
+
94
+ Store it: `export ATLASSIAN_CLOUD_ID="<value>"`
95
+
96
+ ## Error Patterns
97
+
98
+ | Status | Meaning | Fix |
99
+ |--------|---------|-----|
100
+ | 401 | Bad credentials | Check token/email/apiToken values |
101
+ | 403 | Missing scope or permission | Token needs the right OAuth scopes or project access |
102
+ | 404 | Wrong base URL or resource not found | Check gateway vs direct URL, verify resource exists |
103
+ | 429 | Rate limited | Wait and retry; Jira Cloud allows ~100 req/min |
@@ -0,0 +1,149 @@
1
+ # Atlassian Direct API — Bulk Operations
2
+
3
+ MCP gap: no batch/bulk endpoints. Use these patterns for multi-issue operations.
4
+
5
+ See [direct-api-auth.md](direct-api-auth.md) for auth setup.
6
+
7
+ All examples use Gateway (Bearer) auth.
8
+
9
+ ---
10
+
11
+ ### Bulk Edit Issues (Jira v3)
12
+
13
+ **API:** `POST /rest/api/3/issue/bulk`
14
+ **When:** Updating the same fields on many issues at once.
15
+
16
+ ```bash
17
+ curl -s -X POST \
18
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
19
+ -H "Content-Type: application/json" \
20
+ -d '{
21
+ "issueUpdates": [
22
+ {
23
+ "issueIdOrKey": "PROJ-101",
24
+ "fields": {"priority": {"name": "High"}, "labels": ["urgent"]}
25
+ },
26
+ {
27
+ "issueIdOrKey": "PROJ-102",
28
+ "fields": {"priority": {"name": "High"}, "labels": ["urgent"]}
29
+ }
30
+ ]
31
+ }' \
32
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/bulk" \
33
+ | jq '.errors'
34
+ ```
35
+
36
+ #### Notes
37
+ - Max ~50 issues per request (Atlassian soft limit)
38
+ - Response includes per-issue errors — check `.errors` for partial failures
39
+ - Each issue can have different field updates
40
+ - This endpoint may not be available on all Jira Cloud plans
41
+
42
+ ---
43
+
44
+ ### Bulk Transition (Loop Pattern)
45
+
46
+ **When:** Moving many issues through a workflow step (e.g., close all done issues).
47
+
48
+ This uses the MCP `transitionJiraIssue` in a loop. No direct bulk transition API exists.
49
+
50
+ **Pattern:**
51
+ 1. Find issues with JQL via MCP `searchJiraIssuesUsingJql`
52
+ 2. Get transitions for one representative issue via MCP `getTransitionsForJiraIssue`
53
+ 3. Loop `transitionJiraIssue` for each issue
54
+
55
+ ```
56
+ # Step 1: Find issues
57
+ searchJiraIssuesUsingJql
58
+ cloudId: "<cloudId>"
59
+ jql: "project = PROJ AND status = 'In Review'"
60
+ maxResults: 50
61
+ fields: ["summary", "status"]
62
+
63
+ # Step 2: Get transition ID (same for all issues in the same workflow)
64
+ getTransitionsForJiraIssue
65
+ cloudId: "<cloudId>"
66
+ issueIdOrKey: "PROJ-101" # any issue from the results
67
+
68
+ # Step 3: Transition each issue
69
+ # Repeat for each issue key from Step 1:
70
+ transitionJiraIssue
71
+ cloudId: "<cloudId>"
72
+ issueIdOrKey: "PROJ-101"
73
+ transition: {"id": "<transitionId>"}
74
+ ```
75
+
76
+ #### Notes
77
+ - Rate limit: ~100 requests/minute for Jira Cloud
78
+ - For large batches (50+ issues), add a brief delay between calls
79
+ - If issues span different workflows, group by issue type and get transitions per group
80
+
81
+ ---
82
+
83
+ ### Paginated JQL Fetch
84
+
85
+ **When:** Fetching more results than the default page size (50).
86
+
87
+ Use MCP `searchJiraIssuesUsingJql` with pagination:
88
+
89
+ ```
90
+ # Page 1
91
+ searchJiraIssuesUsingJql
92
+ cloudId: "<cloudId>"
93
+ jql: "project = PROJ AND status != Done"
94
+ maxResults: 50
95
+ startAt: 0
96
+ fields: ["summary", "status"]
97
+
98
+ # Page 2
99
+ searchJiraIssuesUsingJql
100
+ cloudId: "<cloudId>"
101
+ jql: "project = PROJ AND status != Done"
102
+ maxResults: 50
103
+ startAt: 50
104
+ fields: ["summary", "status"]
105
+ ```
106
+
107
+ Or via direct API for more control:
108
+
109
+ ```bash
110
+ curl -s \
111
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
112
+ -H "Content-Type: application/json" \
113
+ -d '{
114
+ "jql": "project = PROJ AND status != Done ORDER BY created DESC",
115
+ "maxResults": 100,
116
+ "startAt": 0,
117
+ "fields": ["summary", "status", "assignee"]
118
+ }' \
119
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/search" \
120
+ | jq '{total: .total, count: (.issues | length), issues: [.issues[] | {key, summary: .fields.summary, status: .fields.status.name}]}'
121
+ ```
122
+
123
+ #### Notes
124
+ - MCP `searchJiraIssuesUsingJql` max is typically 50 per page
125
+ - Direct API `POST /search` supports up to 100 per page
126
+ - Check `.total` in response to know when to stop paginating
127
+ - Use `POST` (not `GET`) for the search endpoint — JQL strings can exceed URL length limits
128
+
129
+ ---
130
+
131
+ ### Bulk Add Labels
132
+
133
+ **When:** Tagging many issues with the same label.
134
+
135
+ ```bash
136
+ # For each issue, use the update operations syntax
137
+ for KEY in PROJ-101 PROJ-102 PROJ-103; do
138
+ curl -s -X PUT \
139
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
140
+ -H "Content-Type: application/json" \
141
+ -d '{"update": {"labels": [{"add": "reviewed"}]}}' \
142
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/$KEY"
143
+ echo "Labeled: $KEY"
144
+ done
145
+ ```
146
+
147
+ #### Notes
148
+ - Uses Jira's `update` operations (add/remove/set) — more precise than replacing the entire `fields.labels` array
149
+ - Same pattern works for `components`, `fixVersions`, and other array fields
@@ -0,0 +1,195 @@
1
+ # Atlassian Direct API — Miscellaneous Operations
2
+
3
+ MCP gaps: comment edit/delete, watchers, components, versions, page deletion.
4
+
5
+ See [direct-api-auth.md](direct-api-auth.md) for auth setup.
6
+
7
+ All examples use Gateway (Bearer) auth.
8
+
9
+ ---
10
+
11
+ ## Comments
12
+
13
+ ### Edit a Jira Comment
14
+
15
+ **API:** `PUT /rest/api/3/issue/{issueKey}/comment/{commentId}`
16
+ **When:** Correcting or updating an existing comment.
17
+
18
+ ```bash
19
+ curl -s -X PUT \
20
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
21
+ -H "Content-Type: application/json" \
22
+ -d '{
23
+ "body": {
24
+ "type": "doc",
25
+ "version": 1,
26
+ "content": [
27
+ {
28
+ "type": "paragraph",
29
+ "content": [{"type": "text", "text": "Updated comment text"}]
30
+ }
31
+ ]
32
+ }
33
+ }' \
34
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123/comment/10042"
35
+ ```
36
+
37
+ #### Notes
38
+ - Comment body must be ADF (not Markdown) for the v3 API
39
+ - Get comment IDs from `getJiraIssue` with `fields: ["comment"]`
40
+ - Only the comment author or an admin can edit
41
+
42
+ ### Delete a Jira Comment
43
+
44
+ **API:** `DELETE /rest/api/3/issue/{issueKey}/comment/{commentId}`
45
+ **When:** Removing erroneous or sensitive comments.
46
+
47
+ ```bash
48
+ curl -s -X DELETE \
49
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
50
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123/comment/10042"
51
+ ```
52
+
53
+ #### Notes
54
+ - Returns HTTP 204 on success (no body)
55
+ - Only the comment author or an admin can delete
56
+
57
+ ---
58
+
59
+ ## Watchers
60
+
61
+ ### Get Watchers
62
+
63
+ **API:** `GET /rest/api/3/issue/{issueKey}/watchers`
64
+ **When:** Checking who is watching an issue.
65
+
66
+ ```bash
67
+ curl -s \
68
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
69
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123/watchers" \
70
+ | jq '.watchers[] | {accountId, displayName}'
71
+ ```
72
+
73
+ ### Add a Watcher
74
+
75
+ **API:** `POST /rest/api/3/issue/{issueKey}/watchers`
76
+ **When:** Subscribing someone to issue notifications.
77
+
78
+ ```bash
79
+ curl -s -X POST \
80
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
81
+ -H "Content-Type: application/json" \
82
+ -d '"5b10a2844c20165700ede21g"' \
83
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123/watchers"
84
+ ```
85
+
86
+ #### Notes
87
+ - Body is a **raw JSON string** (the accountId in quotes), not an object
88
+ - Get `accountId` from MCP `lookupJiraAccountId`
89
+
90
+ ### Remove a Watcher
91
+
92
+ **API:** `DELETE /rest/api/3/issue/{issueKey}/watchers?accountId={accountId}`
93
+ **When:** Unsubscribing someone from issue notifications.
94
+
95
+ ```bash
96
+ curl -s -X DELETE \
97
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
98
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/issue/PROJ-123/watchers?accountId=5b10a2844c20165700ede21g"
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Components
104
+
105
+ ### List Project Components
106
+
107
+ **API:** `GET /rest/api/3/project/{projectKey}/components`
108
+ **When:** Finding component IDs for issue creation or filtering.
109
+
110
+ ```bash
111
+ curl -s \
112
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
113
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/project/PROJ/components" \
114
+ | jq '.[] | {id, name, lead: .lead.displayName}'
115
+ ```
116
+
117
+ ### Create a Component
118
+
119
+ **API:** `POST /rest/api/3/component`
120
+ **When:** Adding a new component to a project.
121
+
122
+ ```bash
123
+ curl -s -X POST \
124
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
125
+ -H "Content-Type: application/json" \
126
+ -d '{
127
+ "name": "Authentication",
128
+ "project": "PROJ",
129
+ "description": "Auth and identity management",
130
+ "leadAccountId": "5b10a2844c20165700ede21g"
131
+ }' \
132
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/component" \
133
+ | jq '{id, name}'
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Versions (Releases)
139
+
140
+ ### List Project Versions
141
+
142
+ **API:** `GET /rest/api/3/project/{projectKey}/versions`
143
+ **When:** Finding version IDs for fix-version assignment.
144
+
145
+ ```bash
146
+ curl -s \
147
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
148
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/project/PROJ/versions" \
149
+ | jq '.[] | {id, name, released, releaseDate}'
150
+ ```
151
+
152
+ ### Create a Version
153
+
154
+ **API:** `POST /rest/api/3/version`
155
+ **When:** Setting up a new release version.
156
+
157
+ ```bash
158
+ curl -s -X POST \
159
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
160
+ -H "Content-Type: application/json" \
161
+ -d '{
162
+ "name": "v2.1.0",
163
+ "projectId": 10001,
164
+ "description": "Q2 release",
165
+ "releaseDate": "2026-06-30",
166
+ "released": false
167
+ }' \
168
+ "https://api.atlassian.com/ex/jira/$ATLASSIAN_CLOUD_ID/rest/api/3/version" \
169
+ | jq '{id, name}'
170
+ ```
171
+
172
+ #### Notes
173
+ - Uses numeric `projectId`, not project key — get it from `getVisibleJiraProjects`
174
+
175
+ ---
176
+
177
+ ## Confluence Page Deletion
178
+
179
+ ### Delete a Confluence Page
180
+
181
+ **API:** `DELETE /wiki/api/v2/pages/{pageId}`
182
+ **When:** Removing outdated or draft Confluence pages.
183
+
184
+ ```bash
185
+ curl -s -X DELETE \
186
+ -H "Authorization: Bearer $ATLASSIAN_BEARER_TOKEN" \
187
+ "https://api.atlassian.com/ex/confluence/$ATLASSIAN_CLOUD_ID/wiki/api/v2/pages/12345"
188
+ ```
189
+
190
+ #### Notes
191
+ - Uses Confluence **v2 API** (not v1)
192
+ - Returns HTTP 204 on success
193
+ - Page is moved to trash first (recoverable for 30 days)
194
+ - Get page ID from MCP `getConfluencePage` or `searchConfluenceUsingCql`
195
+ - Child pages become orphans — reassign or delete them first