search_issues | jira:issues:read | Search Jira issues using JQL (Jira Query Language). Returns {issues, nextPageToken, isLast} — pass nextPageToken back to fetch the next page (the legacy startAt/total response shape was retired by Atlassian on 2025-05-01). |
get_issue | jira:issues:read | Get a single Jira issue by its key (e.g. ACME-123). STRONGLY recommend passing fields — Atlassian's default response includes 100+ custom-field entries (most null) and runs ~10 KB per issue. A typical agent request only needs a handful: try "summary,status,priority,assignee,reporter,description,issuetype,labels,created,updated". Description bodies come back as ADF (Atlassian Document Format) JSON, not plain text. |
get_transitions | jira:issues:read | List the workflow transitions currently available on a Jira issue. Each entry carries an id (string) you pass to transition_issue. Transition IDs and labels vary per project workflow — "Done" might be "31" in one project, "41" or "61" in another — so always discover via this tool before calling transition_issue instead of guessing. |
create_issue | jira:issues:write | Create a new Jira issue. IMPORTANT: Atlassian Cloud's REST API v3 requires the description field (if present) to be an Atlassian Document Format (ADF) JSON object, NOT a plain string — passing plain text returns HTTP 400 with no useful error. If you don't need a description, omit it entirely (the example below shows the minimal valid shape). If you DO need one, wrap your text in ADF as shown in the second example. |
update_issue | jira:issues:write | Update fields on an existing Jira issue. Same ADF caveat as create_issue: any description you pass must be an ADF doc, not a plain string, or Atlassian returns HTTP 400. |
transition_issue | jira:issues:write | Transition a Jira issue through a workflow (e.g. Open → In Progress → Done). Discover valid transition IDs first via get_transitions — IDs are workflow-specific and don't match across projects. |
list_projects | jira:projects:read | List Jira projects the caller can see. Paginated — returns {values, startAt, maxResults, total, isLast}. Pass query to filter by substring (matches project name + key); pass maxResults to bound the response size (Atlassian default is 50, max 50 server-side). The legacy unpaginated /rest/api/3/project endpoint was retired in favour of this one and would overflow MCP tool-result limits at any non-trivial org size. |