Get one issue: metadata (status, priority, assignee, reporter, parent, due, created, updated, labels, subscribed), base_rev (the description revision update_description takes) and the sections picked by include: description (the exact Markdown update_description expects), children (a page, 50 by default, rows as in search_issues, with children.cursor for the next page), links (each with the id unlink_issues takes) and comments (threads newest first, 5 by default, replies oldest first; each comment has its id for reply_to, a thread's id is what resolve_thread / reopen_thread take, inline threads carry their quote; comments.cursor reads the next older ones). Default include: description, children, links, code. code (pull requests, branches and the latest 5 commits that name the issue, with totals; left out when there are none) with the web API's fields; a ref of a disconnected or inaccessible repository is redacted. description is always there when included ("" when empty). Ids, base_rev and cursors are all in the JSON. A deleted comment has deleted: true. include=pages: pages mentioning the issue. Answers are compact JSON; pass format="text" for a readable Markdown answer. Children and comment threads are paged on their own: if children.cursor or comments.cursor is there, call again with it as children_cursor / comments_cursor (a missing cursor means the last page) — never assume the first page is everything.
children_cursorstringoptionalThe children.cursor of an earlier get_issue_details of this issue: the next page of children (optional; adds children to include)children_limitintegeroptionalHow many children to show (1–100, default 50)comments_cursorstringoptionalThe comments.cursor of an earlier get_issue_details of this issue: the next older comment threads (optional; adds comments to include)comments_limitintegeroptionalHow many comment threads to show when comments are included (1–100, 5 when not given; without include it also adds the comments, with include it changes nothing unless comments is listed)formatenumoptionalAnswer format: "json" (default) is one compact JSON document; "text" is a readable Markdown answerjsontextincludeenum | string[]optionalSections to answer, one or several of: description, comments, children, links, code, criteria (default: description, children, links, code, criteria; comments only when asked). With include, only the named sections come; a comments_cursor or children_cursor adds its sectiondescriptioncommentschildrenlinkscodecriteriapageskeystringrequiredIssue key, e.g. ITR-12pages_cursorstringoptionalpages.cursor of an earlier call: the next pages (adds pages to include)
Returns
One of these shapes, depending on the arguments:
Shape 1
base_revintegerrequiredDescription revision: the base_rev of update_descriptioncreatedstringrequireddescription_versionintegerrequiredNumber get_description_version takeskeystringrequiredstatusstringrequiredstatus_namestringrequiredtitlestringrequiredtypestringrequiredupdatedstringrequired
Shape 2
Optional fields, when present
acceptance_criteriaarray of objectoptionalassigneestringoptionalchildrenobjectoptionalcodeobjectoptionalcommentsobjectoptionalcycleintegeroptionaldefinition_of_donearray of objectoptionaldescriptionstringoptionalThe exact Markdown update_description takes; "" when empty; absent when not asked forduestringoptionalYYYY-MM-DDhintstringoptionallabelsarray of stringoptionallinksarray of objectoptionalpagesobjectoptionalItems {kind: issue or page, key or project + number, title}, count, total, cursorparentstringoptionalpending_templatesintegeroptionalTemplate items not yet copied to the issueprioritystringoptionalreporterstringoptionalreviewersarray of objectoptionalsubscribedbooleanoptional
- 2026-10-05 — A Cycle line (text) and cycle (json: its number) when the issue is planned in a cycle.
- 2026-10-04 — A Reviewers line (text) and reviewers array (json: user, state, reviewed): who was asked and where each stands; absent when nobody was.
- 2026-10-03 — New code section (include=code, in the default set, left out when empty): the pull requests, branches and latest 5 commits that name the issue, with totals and the web API's fields; refs of a disconnected repository are redacted.
- 2026-10-03 — A Links section lists what the issue blocks, what blocks it (blocked by) and what it relates to, each with its status and the link id unlink_issues takes; the json block has a links array.
- 2026-10-01 — Markdown round trip: marks nest in one fixed order (link, bold, italic, strike, highlight, underline, code), mention labels are escaped, and an empty paragraph inside a blockquote is written as a line. Spaces at the edges of bold/italic move outside the mark and a hard break in a heading becomes a space (Markdown cannot say more); the description Markdown you get back is stable when sent unchanged.
- 2026-10-01 — Long discussions are cut to the newest comment threads (30 by default); optional comments_cursor / comments_limit read the older ones.
- 2026-10-01 — Comment threads are listed newest first (replies inside a thread stay oldest to newest); comments_cursor reads the next older batch.
- 2026-10-02 — Children are paged, not capped at 1000 silently: the first 50 by number come with a page header; new optional children_limit and children_cursor read the rest. The comment threads get the same header (page, total threads) and a `Next page: comments_cursor=` footer, and the result ends with a ```json block giving the paging of both lists.
- 2026-10-02 — Answers are compact JSON by default (one document, no Markdown, nothing said twice); format="text" gives the readable Markdown without the json block. New include argument picks the sections: description, comments, children, links; the default is description, children and links, so the comment threads (the bulk of a long discussion) come only with include=["comments"], 5 threads by default (comments_limit up to 100, comments_cursor for the next older batch). With include only the named sections come, and a comments_cursor or children_cursor adds its section; without include, comments_limit adds the comments. JSON: key, title, type, status (key) and status_name, priority (absent: none), assignee, reporter (usernames), parent (key), due, created, updated, labels, subscribed (only when true), base_rev (the base_rev of update_description) and description_version, then description (the exact Markdown update_description takes, no markers), children {paging, statuses, items} (rows as in search_issues), links (id, kind, key, title, status, done only when true) and comments {paging, threads}; a thread is its first comment: id (reply_to / resolve_thread / reopen_thread), author, created, body, quote (inline threads), outdated and resolved (only when true), replies. A missing cursor means the last page.
- 2026-10-08 — New include section pages: the pages whose body mentions the issue, as {kind, number, title, project} rows with paging (pages.cursor, pages_cursor), left out unless asked for.
- 2026-10-03 — New criteria section (include=criteria, default): acceptance_criteria and definition_of_done as [{id, text, checked, from_template}] for the lists the project has on, plus pending_templates; format=text renders - [x] checklists.
- 2026-10-03 — Also answers structuredContent (see outputSchema); a failed call adds structuredContent.error. Text unchanged. Details: /docs/mcp, "Structured results and errors".
- 2026-10-04 — Claude Code 2.1.288+ (clientInfo claude-code): the text of a successful answer is itself up to 512 bytes, else "Result in structuredContent (N bytes)."; structuredContent and errors are unchanged. See /docs/mcp.
- 2026-10-04 — format="text" now also answers structuredContent {"text": the Markdown} (it was the JSON document), so a client that reads only structuredContent gets the Markdown it asked for.