opencodekit 0.16.10 → 0.16.13

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.
@@ -0,0 +1,338 @@
1
+ ---
2
+ name: compaction
3
+ description: >
4
+ Use when context is growing large during long-running tasks and needs server-side or client-side
5
+ summarization to continue effectively. Covers compaction triggers, custom summarization patterns,
6
+ session handoff, and context preservation strategies.
7
+ version: "1.0.0"
8
+ license: MIT
9
+ ---
10
+
11
+ # Context Compaction - Managing Long-Running Sessions
12
+
13
+ Handle context growth in long-running sessions through proactive compaction, strategic summarization, and session handoff patterns.
14
+
15
+ ## Overview
16
+
17
+ **Compaction = Summarization + Preservation + Continuity**
18
+
19
+ Long-running sessions accumulate context (tool outputs, code reads, exploration results). When context approaches limits, compaction reduces it to essential information while preserving decision history and work state.
20
+
21
+ ## Context Budget Awareness
22
+
23
+ ### Token Thresholds
24
+
25
+ | Context Usage | Status | Action |
26
+ | ------------- | ----------- | --------------------------------------------- |
27
+ | 0-50% | 🟢 Normal | Work freely |
28
+ | 50-70% | 🟡 Watch | Start distilling completed explorations |
29
+ | 70-85% | 🟠 Compact | Actively compress/prune, consider handoff |
30
+ | 85-95% | 🔴 Critical | Emergency compaction, prepare session handoff |
31
+ | 95%+ | ⛔ Limit | Session handoff required |
32
+
33
+ ### Monitoring
34
+
35
+ Pay attention to these signals:
36
+
37
+ - Tool outputs accumulating without being distilled
38
+ - Repeated file reads of the same content
39
+ - Large bash outputs from builds/tests
40
+ - Multiple exploration rounds without synthesis
41
+
42
+ ## Compaction Strategies
43
+
44
+ ### Strategy 1: Proactive Distillation (Preferred)
45
+
46
+ Distill tool outputs as you finish using them. This is the most granular and least lossy approach.
47
+
48
+ ```
49
+ WHEN: You've read a file and extracted what you need
50
+ DO: distill({ targets: [{ id: "X", distillation: "..." }] })
51
+
52
+ WHEN: Bash output gave you the answer you needed
53
+ DO: distill({ targets: [{ id: "Y", distillation: "..." }] })
54
+
55
+ WHEN: Search results identified the relevant files
56
+ DO: distill({ targets: [{ id: "Z", distillation: "..." }] })
57
+ ```
58
+
59
+ **Key principle**: Distill when you're DONE with the raw output, not while you still need it.
60
+
61
+ ### Strategy 2: Phase Compression
62
+
63
+ Compress completed conversation phases into dense summaries.
64
+
65
+ ```
66
+ WHEN: A research phase is complete and findings are clear
67
+ DO: compress({
68
+ topic: "Auth Research Complete",
69
+ content: {
70
+ startString: "unique text at phase start",
71
+ endString: "unique text at phase end",
72
+ summary: "Complete technical summary of findings..."
73
+ }
74
+ })
75
+ ```
76
+
77
+ **Key principle**: Only compress CLOSED chapters. Never compress active work.
78
+
79
+ ### Strategy 3: Noise Pruning
80
+
81
+ Remove tool outputs that add zero value.
82
+
83
+ ```
84
+ WHEN: Tool output was irrelevant (wrong file, empty search results)
85
+ DO: prune({ ids: ["X", "Y", "Z"] })
86
+
87
+ WHEN: Earlier output is superseded by newer data
88
+ DO: prune({ ids: ["old_id"] })
89
+ ```
90
+
91
+ **Key principle**: Prune noise, not signal. If in doubt, keep it.
92
+
93
+ ### Strategy 4: Session Handoff
94
+
95
+ When context is too large to compact further, hand off to a new session.
96
+
97
+ ```
98
+ WHEN: Context > 85% and significant work remains
99
+ DO:
100
+ 1. Create handoff document with memory-update
101
+ 2. Save all decisions with observation tool
102
+ 3. Document current state and remaining work
103
+ 4. Start new session with handoff reference
104
+ ```
105
+
106
+ ## Compaction Decision Tree
107
+
108
+ ```
109
+ Is context growing large?
110
+ ├── NO → Continue working normally
111
+ └── YES → What type of content is consuming space?
112
+ ├── Tool outputs I'm done with → DISTILL
113
+ ├── Completed conversation phases → COMPRESS
114
+ ├── Irrelevant/superseded outputs → PRUNE
115
+ └── Everything is still relevant → SESSION HANDOFF
116
+ ```
117
+
118
+ ## Custom Summarization Patterns
119
+
120
+ ### For Code Exploration
121
+
122
+ ```markdown
123
+ ## Exploration Summary: [Component/Module]
124
+
125
+ ### Architecture
126
+
127
+ - Entry point: `src/auth/index.ts`
128
+ - Key classes: AuthService, TokenManager, SessionStore
129
+ - Dependencies: jwt, bcrypt, redis
130
+
131
+ ### Key Findings
132
+
133
+ - Auth flow: login → validate → issue JWT → store session
134
+ - Token rotation: every 15 minutes via refresh endpoint
135
+ - Session storage: Redis with 24h TTL
136
+
137
+ ### Decisions Made
138
+
139
+ - Use existing TokenManager (don't replace)
140
+ - Add rate limiting to login endpoint
141
+ - Migrate session store from memory to Redis
142
+
143
+ ### Files to Modify
144
+
145
+ - src/auth/service.ts (add rate limiting)
146
+ - src/auth/session.ts (Redis integration)
147
+ - src/config/redis.ts (new file)
148
+ ```
149
+
150
+ ### For Implementation Phase
151
+
152
+ ```markdown
153
+ ## Implementation Summary: [Feature]
154
+
155
+ ### Completed
156
+
157
+ - [x] Database schema migration (src/db/migrations/004_auth.ts)
158
+ - [x] API endpoints (src/routes/auth.ts) - 3 new routes
159
+ - [x] Frontend forms (src/components/auth/) - Login, Register, Reset
160
+
161
+ ### Verification
162
+
163
+ - TypeScript: ✅ passing
164
+ - Tests: ✅ 12/12 passing
165
+ - Lint: ✅ no issues
166
+
167
+ ### Remaining
168
+
169
+ - [ ] Email verification flow
170
+ - [ ] Rate limiting middleware
171
+
172
+ ### Key Decisions
173
+
174
+ - JWT expiry: 15 minutes (refresh: 7 days)
175
+ - Password hashing: bcrypt with 12 rounds
176
+ - Session storage: Redis (not in-memory)
177
+ ```
178
+
179
+ ### For Debugging
180
+
181
+ ```markdown
182
+ ## Debug Summary: [Issue]
183
+
184
+ ### Symptoms
185
+
186
+ - Error: "TypeError: Cannot read property 'id' of undefined"
187
+ - Location: src/auth/middleware.ts:42
188
+ - Trigger: POST /api/protected when token is expired
189
+
190
+ ### Root Cause
191
+
192
+ - Token validation returns null on expired tokens
193
+ - Middleware assumes valid token object, no null check
194
+ - Race condition: token expires between validation and use
195
+
196
+ ### Fix Applied
197
+
198
+ - Added null check in middleware (src/auth/middleware.ts:42)
199
+ - Added token refresh attempt before rejecting (src/auth/refresh.ts)
200
+ - Added test for expired token scenario (src/auth/**tests**/middleware.test.ts)
201
+
202
+ ### Verification
203
+
204
+ - Tests: ✅ all passing including new test
205
+ - Manual: ✅ expired token now triggers refresh
206
+ ```
207
+
208
+ ## Session Handoff Protocol
209
+
210
+ When you must hand off to a new session:
211
+
212
+ ### 1. Create Handoff Document
213
+
214
+ ```typescript
215
+ memory -
216
+ update({
217
+ file: "handoffs/YYYY-MM-DD-feature-name",
218
+ content: `# Session Handoff: [Feature Name]
219
+
220
+ ## Context
221
+ [Why this session started, what was the goal]
222
+
223
+ ## Completed Work
224
+ [What was done, files changed, decisions made]
225
+
226
+ ## Current State
227
+ [Where things stand right now]
228
+
229
+ ## Remaining Work
230
+ [What still needs to be done]
231
+
232
+ ## Key Decisions
233
+ [Important choices made and why]
234
+
235
+ ## Files Modified
236
+ [List of all files changed with brief description]
237
+
238
+ ## Gotchas
239
+ [Things the next session should know]
240
+ `,
241
+ mode: "replace",
242
+ });
243
+ ```
244
+
245
+ ### 2. Save Key Observations
246
+
247
+ ```typescript
248
+ observation({
249
+ type: "decision",
250
+ title: "Auth implementation approach",
251
+ narrative: "Chose JWT with Redis sessions because...",
252
+ facts: "JWT 15min expiry, Redis 24h TTL, bcrypt 12 rounds",
253
+ concepts: "authentication, sessions, tokens",
254
+ confidence: "high",
255
+ });
256
+ ```
257
+
258
+ ### 3. Resume in New Session
259
+
260
+ ```typescript
261
+ // In new session:
262
+ memory - read({ file: "handoffs/YYYY-MM-DD-feature-name" });
263
+ memory - search({ query: "auth implementation" });
264
+ ```
265
+
266
+ ## Integration with DCP Plugin
267
+
268
+ This project uses `@tarquinen/opencode-dcp` for always-on context management (injected via `experimental.chat.system.transform`):
269
+
270
+ - **distill**: High-fidelity extraction from tool outputs (favored instrument)
271
+ - **compress**: Phase-level conversation compression (sledgehammer — completed phases only)
272
+ - **prune**: Targeted removal of noise (last resort — batch wisely)
273
+ - **Prunable-tools list**: Auto-injected into messages with token estimates
274
+ - **Nudge system**: Reminders every N tool calls + critical limit warnings
275
+
276
+ **Division of responsibility:**
277
+
278
+ - **DCP plugin**: Context budget rules, tool guidance, prunable-tools list, nudges (always present via system prompt)
279
+ - **Compaction plugin** (`.opencode/plugin/compaction.ts`): Session continuity, beads state, handoff recovery, post-compaction protocol (fires during compaction events only)
280
+
281
+ ## Anti-Patterns
282
+
283
+ ### ❌ Premature Compaction
284
+
285
+ ```
286
+ // DON'T compress a file you're about to edit
287
+ compress({ ... }) // Loses exact line numbers you need
288
+ edit({ ... }) // Now you can't find the right location
289
+ ```
290
+
291
+ **Fix**: Keep raw content while actively editing. Compress AFTER the edit phase.
292
+
293
+ ### ❌ Lossy Distillation
294
+
295
+ ```
296
+ // DON'T distill without capturing key details
297
+ distill({ distillation: "Read the auth file, it has some functions" })
298
+ ```
299
+
300
+ **Fix**: Include function signatures, types, key logic, constraints — everything you'd need to avoid re-reading.
301
+
302
+ ### ❌ Compressing Active Work
303
+
304
+ ```
305
+ // DON'T compress a conversation phase you might return to
306
+ compress({ summary: "Explored auth options" })
307
+ // Later: "Wait, which options did we consider?"
308
+ ```
309
+
310
+ **Fix**: Only compress CLOSED chapters where findings are crystallized.
311
+
312
+ ### ❌ Ignoring Context Growth
313
+
314
+ ```
315
+ // DON'T let context grow unchecked until hitting limits
316
+ // By the time you notice, emergency compaction loses information
317
+ ```
318
+
319
+ **Fix**: Monitor regularly. Distill as you go. Compress at natural breakpoints.
320
+
321
+ ## Checklist
322
+
323
+ Before compacting:
324
+
325
+ - [ ] Identified what type of content is consuming context
326
+ - [ ] Chosen appropriate strategy (distill/compress/prune/handoff)
327
+ - [ ] Verified raw content is no longer needed for active work
328
+ - [ ] Captured all key details in distillation/summary
329
+ - [ ] Saved important decisions as observations
330
+ - [ ] Created handoff document if switching sessions
331
+
332
+ During long sessions:
333
+
334
+ - [ ] Distilling tool outputs after extracting insights
335
+ - [ ] Compressing completed phases at natural breakpoints
336
+ - [ ] Pruning noise and superseded outputs
337
+ - [ ] Monitoring context usage trends
338
+ - [ ] Planning session handoff if approaching limits
@@ -1,81 +1,143 @@
1
1
  ---
2
2
  name: jira
3
- description: Jira and Confluence integration via MCP. Search issues, create tickets, update status, manage sprints, and access Confluence docs. Use when working with Atlassian products.
3
+ description: Jira and Confluence integration via official Atlassian MCP. Search issues, create tickets, update status, and access Confluence docs. Uses OAuth 2.1 authorization with Rovo Search.
4
4
  ---
5
5
 
6
6
  # Jira & Confluence Integration (MCP)
7
7
 
8
- Jira and Confluence integration via `sooperset/mcp-atlassian` MCP server.
8
+ Official Atlassian MCP Server integration via `atlassian/atlassian-mcp-server`.
9
+
10
+ ## Key Features
11
+
12
+ - **OAuth 2.1 Authorization** - Secure browser-based authentication
13
+ - **Rovo Search** - Unified search across Jira and Confluence
14
+ - **Real-time Data** - Direct connection to Atlassian Cloud
15
+ - **Permission-aware** - Respects existing user access controls
9
16
 
10
17
  ## Available Tools
11
18
 
19
+ ### Universal Search (Recommended)
20
+
21
+ - `search` - **Rovo Search** - Search Jira and Confluence content (use this by default)
22
+ - `fetch` - Get details by ARI (Atlassian Resource Identifier) from search results
23
+
12
24
  ### Jira
13
25
 
14
- - `jira_search` - Search with JQL
15
- - `jira_get_issue` - Get issue details
16
- - `jira_create_issue` - Create new issues
17
- - `jira_update_issue` - Update existing issues
18
- - `jira_transition_issue` - Change issue status
19
- - `jira_get_issue_sla` - Calculate SLA metrics
26
+ - `getJiraIssue` - Get issue details by key or ID
27
+ - `createJiraIssue` - Create new issues
28
+ - `editJiraIssue` - Update existing issues
29
+ - `transitionJiraIssue` - Change issue status
30
+ - `addCommentToJiraIssue` - Add comments to issues
31
+ - `addWorklogToJiraIssue` - Log work time
32
+ - `searchJiraIssuesUsingJql` - Search with JQL queries
33
+ - `getTransitionsForJiraIssue` - Get available status transitions
34
+ - `getVisibleJiraProjects` - List accessible projects
35
+ - `getJiraProjectIssueTypesMetadata` - Get issue types for a project
36
+ - `getJiraIssueTypeMetaWithFields` - Get field metadata for issue type
37
+ - `getJiraIssueRemoteIssueLinks` - Get remote links
38
+ - `lookupJiraAccountId` - Find user account IDs
20
39
 
21
40
  ### Confluence
22
41
 
23
- - `confluence_search` - Search with CQL
24
- - `confluence_get_page` - Get page content
25
- - `confluence_create_page` - Create pages
26
- - `confluence_update_page` - Update pages
27
- - `confluence_add_comment` - Add comments
42
+ - `getConfluencePage` - Get page content by ID
43
+ - `createConfluencePage` - Create new pages
44
+ - `updateConfluencePage` - Update existing pages
45
+ - `searchConfluenceUsingCql` - Search with CQL queries
46
+ - `getConfluenceSpaces` - List spaces
47
+ - `getPagesInConfluenceSpace` - List pages in a space
48
+ - `getConfluencePageDescendants` - Get child pages
49
+ - `getConfluencePageFooterComments` - Get footer comments
50
+ - `getConfluencePageInlineComments` - Get inline comments
51
+ - `createConfluenceFooterComment` - Add footer comment
52
+ - `createConfluenceInlineComment` - Add inline comment on specific text
53
+
54
+ ### Utility
55
+
56
+ - `atlassianUserInfo` - Get current user info
57
+ - `getAccessibleAtlassianResources` - Get cloudId for API calls
28
58
 
29
59
  ## Quick Start
30
60
 
31
- ### 1. Configure Environment Variables
61
+ ### 1. Configuration
62
+
63
+ The MCP server uses OAuth 2.1 - no API tokens needed. Configuration in `mcp.json`:
64
+
65
+ ```json
66
+ {
67
+ "jira": {
68
+ "command": "npx",
69
+ "args": ["-y", "mcp-remote", "https://mcp.atlassian.com/v1/sse"]
70
+ }
71
+ }
72
+ ```
73
+
74
+ ### 2. Get Cloud ID
32
75
 
33
- ```bash
34
- export JIRA_URL="https://your-company.atlassian.net"
35
- export JIRA_USERNAME="your.email@company.com"
36
- export JIRA_API_TOKEN="your_api_token"
37
- export CONFLUENCE_URL="https://your-company.atlassian.net/wiki"
38
- export CONFLUENCE_API_TOKEN="your_confluence_token"
76
+ Most tools require a `cloudId`. Get it from your site URL or use the utility:
77
+
78
+ ```typescript
79
+ // Get accessible resources and cloudId
80
+ skill_mcp(
81
+ (skill_name = "jira"),
82
+ (tool_name = "getAccessibleAtlassianResources"),
83
+ (arguments = "{}"),
84
+ );
39
85
  ```
40
86
 
41
- Get API token: https://id.atlassian.com/manage-profile/security/api-tokens
87
+ Or use your site URL directly as cloudId (e.g., `"ibet.atlassian.net"`).
42
88
 
43
- ### 2. Use MCP Tools
89
+ ### 3. Use MCP Tools
44
90
 
45
91
  ```typescript
46
- // Search issues
92
+ // Universal search (recommended for discovery)
47
93
  skill_mcp(
48
94
  (skill_name = "jira"),
49
- (tool_name = "jira_search"),
50
- (arguments = '{"jql": "project = PROJ AND status = Open"}'),
95
+ (tool_name = "search"),
96
+ (arguments = '{"query": "authentication bug"}'),
51
97
  );
52
98
 
53
99
  // Get issue details
54
100
  skill_mcp(
55
101
  (skill_name = "jira"),
56
- (tool_name = "jira_get_issue"),
57
- (arguments = '{"issue_key": "PROJ-123"}'),
102
+ (tool_name = "getJiraIssue"),
103
+ (arguments = '{"cloudId": "your-site.atlassian.net", "issueIdOrKey": "PROJ-123"}'),
104
+ );
105
+
106
+ // Search with JQL
107
+ skill_mcp(
108
+ (skill_name = "jira"),
109
+ (tool_name = "searchJiraIssuesUsingJql"),
110
+ (arguments = '{"cloudId": "your-site.atlassian.net", "jql": "project = PROJ AND status = Open"}'),
58
111
  );
59
112
 
60
113
  // Create issue
61
114
  skill_mcp(
62
115
  (skill_name = "jira"),
63
- (tool_name = "jira_create_issue"),
64
- (arguments = '{"project_key": "PROJ", "summary": "Bug: Login fails", "issue_type": "Bug"}'),
116
+ (tool_name = "createJiraIssue"),
117
+ (arguments =
118
+ '{"cloudId": "your-site.atlassian.net", "projectKey": "PROJ", "issueTypeName": "Bug", "summary": "Login fails on mobile"}'),
119
+ );
120
+
121
+ // Transition issue status
122
+ skill_mcp(
123
+ (skill_name = "jira"),
124
+ (tool_name = "transitionJiraIssue"),
125
+ (arguments =
126
+ '{"cloudId": "your-site.atlassian.net", "issueIdOrKey": "PROJ-123", "transition": {"id": "21"}}'),
65
127
  );
66
128
 
67
- // Update status
129
+ // Get Confluence page
68
130
  skill_mcp(
69
131
  (skill_name = "jira"),
70
- (tool_name = "jira_transition_issue"),
71
- (arguments = '{"issue_key": "PROJ-123", "transition": "In Progress"}'),
132
+ (tool_name = "getConfluencePage"),
133
+ (arguments = '{"cloudId": "your-site.atlassian.net", "pageId": "123456789"}'),
72
134
  );
73
135
 
74
- // Search Confluence
136
+ // Search Confluence with CQL
75
137
  skill_mcp(
76
138
  (skill_name = "jira"),
77
- (tool_name = "confluence_search"),
78
- (arguments = '{"cql": "title ~ \"Onboarding\""}'),
139
+ (tool_name = "searchConfluenceUsingCql"),
140
+ (arguments = '{"cloudId": "your-site.atlassian.net", "cql": "title ~ \"Onboarding\""}'),
79
141
  );
80
142
  ```
81
143
 
@@ -86,8 +148,9 @@ skill_mcp(
86
148
  ```typescript
87
149
  skill_mcp(
88
150
  (skill_name = "jira"),
89
- (tool_name = "jira_search"),
90
- (arguments = '{"jql": "assignee = currentUser() AND updated >= -1d"}'),
151
+ (tool_name = "searchJiraIssuesUsingJql"),
152
+ (arguments =
153
+ '{"cloudId": "your-site.atlassian.net", "jql": "assignee = currentUser() AND updated >= -1d"}'),
91
154
  );
92
155
  ```
93
156
 
@@ -96,8 +159,9 @@ skill_mcp(
96
159
  ```typescript
97
160
  skill_mcp(
98
161
  (skill_name = "jira"),
99
- (tool_name = "jira_search"),
100
- (arguments = '{"jql": "type = Bug AND priority in (High, Critical) AND status != Done"}'),
162
+ (tool_name = "searchJiraIssuesUsingJql"),
163
+ (arguments =
164
+ '{"cloudId": "your-site.atlassian.net", "jql": "type = Bug AND priority in (High, Critical) AND status != Done"}'),
101
165
  );
102
166
  ```
103
167
 
@@ -106,9 +170,27 @@ skill_mcp(
106
170
  ```typescript
107
171
  skill_mcp(
108
172
  (skill_name = "jira"),
109
- (tool_name = "jira_create_issue"),
173
+ (tool_name = "searchJiraIssuesUsingJql"),
110
174
  (arguments =
111
- '{"project_key": "PROJ", "summary": "Implement auth", "issue_type": "Story", "priority": "High"}'),
175
+ '{"cloudId": "your-site.atlassian.net", "jql": "project = PROJ AND sprint in openSprints()"}'),
176
+ );
177
+ ```
178
+
179
+ ### Quick Discovery with Rovo Search
180
+
181
+ ```typescript
182
+ // Best for finding content when you don't know exact location
183
+ skill_mcp(
184
+ (skill_name = "jira"),
185
+ (tool_name = "search"),
186
+ (arguments = '{"query": "authentication implementation"}'),
187
+ );
188
+
189
+ // Then fetch details using ARI from results
190
+ skill_mcp(
191
+ (skill_name = "jira"),
192
+ (tool_name = "fetch"),
193
+ (arguments = '{"id": "ari:cloud:jira:cloudId:issue/10107"}'),
112
194
  );
113
195
  ```
114
196
 
@@ -126,21 +208,66 @@ project = PROJ AND updated >= -7d
126
208
 
127
209
  -- Current sprint
128
210
  project = PROJ AND sprint in openSprints()
211
+
212
+ -- Unassigned in backlog
213
+ project = PROJ AND assignee is EMPTY AND status = "To Do"
214
+ ```
215
+
216
+ ## CQL Examples (Confluence)
217
+
218
+ ```sql
219
+ -- Pages with title containing "guide"
220
+ title ~ "guide"
221
+
222
+ -- Pages in specific space
223
+ space = "TEAM" AND type = page
224
+
225
+ -- Recently modified
226
+ lastModified >= now("-7d")
227
+
228
+ -- Pages by creator
229
+ creator = currentUser()
129
230
  ```
130
231
 
131
- ## Server/Data Center
232
+ ## Content Format Options
132
233
 
133
- For self-hosted Jira, use Personal Access Token:
234
+ For Confluence pages, you can specify content format:
134
235
 
135
- ```bash
136
- export JIRA_URL="https://jira.your-company.com"
137
- export JIRA_PERSONAL_TOKEN="your_pat"
138
- export CONFLUENCE_PERSONAL_TOKEN="your_confluence_pat"
236
+ - `"markdown"` - Markdown format (easier to read/write)
237
+ - `"adf"` - Atlassian Document Format (native format)
238
+
239
+ ```typescript
240
+ skill_mcp(
241
+ (skill_name = "jira"),
242
+ (tool_name = "getConfluencePage"),
243
+ (arguments =
244
+ '{"cloudId": "your-site.atlassian.net", "pageId": "123456", "contentFormat": "markdown"}'),
245
+ );
139
246
  ```
140
247
 
141
- Then update mcp.json to use `JIRA_PERSONAL_TOKEN` instead of `JIRA_USERNAME` + `JIRA_API_TOKEN`.
248
+ ## Transition Workflow
249
+
250
+ To change issue status, first get available transitions:
251
+
252
+ ```typescript
253
+ // 1. Get available transitions
254
+ skill_mcp(
255
+ (skill_name = "jira"),
256
+ (tool_name = "getTransitionsForJiraIssue"),
257
+ (arguments = '{"cloudId": "your-site.atlassian.net", "issueIdOrKey": "PROJ-123"}'),
258
+ );
259
+
260
+ // 2. Use transition ID to change status
261
+ skill_mcp(
262
+ (skill_name = "jira"),
263
+ (tool_name = "transitionJiraIssue"),
264
+ (arguments =
265
+ '{"cloudId": "your-site.atlassian.net", "issueIdOrKey": "PROJ-123", "transition": {"id": "31"}}'),
266
+ );
267
+ ```
142
268
 
143
269
  ## Resources
144
270
 
145
- - GitHub: https://github.com/sooperset/mcp-atlassian
146
- - Docs: https://personal-1d37018d.mintlify.app
271
+ - GitHub: https://github.com/atlassian/atlassian-mcp-server
272
+ - Docs: https://www.atlassian.com/platform/remote-mcp-server
273
+ - Admin Guide: https://support.atlassian.com/security-and-access-policies/docs/understand-atlassian-rovo-mcp-server/
@@ -1,14 +1,6 @@
1
1
  {
2
2
  "jira": {
3
- "command": "uvx",
4
- "args": ["mcp-atlassian"],
5
- "env": {
6
- "JIRA_URL": "{env:JIRA_URL}",
7
- "JIRA_USERNAME": "{env:JIRA_USERNAME}",
8
- "JIRA_API_TOKEN": "{env:JIRA_API_TOKEN}",
9
- "CONFLUENCE_URL": "{env:CONFLUENCE_URL}",
10
- "CONFLUENCE_USERNAME": "{env:CONFLUENCE_USERNAME}",
11
- "CONFLUENCE_API_TOKEN": "{env:CONFLUENCE_API_TOKEN}"
12
- }
3
+ "command": "npx",
4
+ "args": ["-y", "mcp-remote", "https://mcp.atlassian.com/v1/sse"]
13
5
  }
14
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencodekit",
3
- "version": "0.16.10",
3
+ "version": "0.16.13",
4
4
  "description": "CLI tool for bootstrapping and managing OpenCodeKit projects",
5
5
  "keywords": ["agents", "cli", "mcp", "opencode", "opencodekit", "template"],
6
6
  "license": "MIT",