From qe-framework
Integrates with Atlassian products to manage Jira issues via JQL, Confluence pages via CQL, sprints, backlogs, and MCP server authentication.
How this skill is triggered — by the user, by Claude, or both
Slash command
/qe-framework:Qatlassian-mcpThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Querying Jira issues with JQL filters
maxResults=1 before full executionLoad detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Server Setup | references/mcp-server-setup.md | Installation, choosing servers, configuration |
| Jira Operations | references/jira-queries.md | JQL syntax, issue CRUD, sprints, boards, issue linking |
| Confluence Ops | references/confluence-operations.md | CQL search, page creation, spaces, comments |
| Authentication | references/authentication-patterns.md | OAuth 2.0, API tokens, permission scopes |
| Common Workflows | references/common-workflows.md | Issue triage, doc sync, sprint automation |
# Open issues assigned to current user in a sprint
project = PROJ AND status = "In Progress" AND assignee = currentUser() ORDER BY priority DESC
# Unresolved bugs created in the last 7 days
project = PROJ AND issuetype = Bug AND status != Done AND created >= -7d ORDER BY created DESC
# Validate before bulk: test with maxResults=1 first
project = PROJ AND sprint in openSprints() AND status = Open ORDER BY created DESC
# Find pages updated in a specific space recently
space = "ENG" AND type = page AND lastModified >= "2024-01-01" ORDER BY lastModified DESC
# Search page text for a keyword
space = "ENG" AND type = page AND text ~ "deployment runbook"
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": ["-y", "@sooperset/mcp-atlassian"],
"env": {
"JIRA_URL": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "[email protected]",
"JIRA_API_TOKEN": "${JIRA_API_TOKEN}",
"CONFLUENCE_URL": "https://your-domain.atlassian.net/wiki",
"CONFLUENCE_EMAIL": "[email protected]",
"CONFLUENCE_API_TOKEN": "${CONFLUENCE_API_TOKEN}"
}
}
}
}
Note: Always load
JIRA_API_TOKENandCONFLUENCE_API_TOKENfrom environment variables or a secrets manager — never hardcode credentials.
maxResults=1 probe first)When implementing Atlassian MCP features, provide:
maxResults=1 to validate permissions before bulk fetch: GET /rest/api/3/search?jql=project=KEY&maxResults=1startAt=0, maxResults=50 then increment startAt by 50 until isLast=truewait = 2^attempt * 1000ms/**
* Fetches Jira issues matching JQL filter.
* @param jql - JQL query string (validated against project permissions)
* @param maxResults - Max issues per page (default: 50, max: 100)
* @param startAt - Pagination offset (default: 0)
* @returns Promise<{issues: Issue[], total: number, isLast: boolean}>
* @throws {APIError} if JQL is invalid or user lacks permission
* @throws {RateLimitError} if rate limit exceeded; includes retry-after header
*/
async function searchIssues(jql: string, maxResults = 50, startAt = 0): Promise<SearchResult> {
// Implementation with pagination and error handling
}
Run: eslint . --fix && tsc --noEmit
process.env.JIRA_API_TOKEN or secrets managerJIRA:Issues:read) for queries; write scope only when neededX-RateLimit-Remaining header; pause if < 10 remaining; retry on 429 with backoff| Wrong | Correct |
|---|---|
const token = "api_token_abc123" hardcoded in config | const token = process.env.JIRA_API_TOKEN loaded at runtime |
for (let i = 0; i < 1000; i++) { fetch(url) } (no pagination) | Fetch with startAt=0, maxResults=50 loop; increment startAt+=50 |
fetch(url).then(...) without error catch (unhandled 429) | .catch(err => { if (err.status === 429) { wait & retry } }) |
GET /rest/api/3/issue/ISSUE-1 then ISSUE-2 then ISSUE-3... (N+1 queries) | GET /rest/api/3/search?jql=key in (ISSUE-1,ISSUE-2,ISSUE-3) one call |
Update issue without confirm: PUT /issue/:id {...data} in bulk loop | Add confirmation prompt; test with read-only probe first before mutation |
npx claudepluginhub inho-team/qe-framework --plugin qe-frameworkCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.