search_issues

A tool of the Sprintree MCP server. All MCP docs · Back to the tool list

added 2026-09-28

Find issues by text and filters (status, type, priority, category, open, assignee, reporter, label, parent, epic, story, orphans, subtasks, blocked, due, subscribed; the list filters take one value or an array and match any of them). Omit project to search every accessible project. The json answer has the paging (total, totalApproximate when it is a lower bound, page, pages, count, limit, cursor), `statuses` ({key: {name, category}} for the statuses of the page; when projects of one answer give a key different meanings it is PREFIX/key, in the map and in the rows) and `issues` (key, title, type, status key, priority, assignee, parent, blocked; fields adds more).With in_comments=true (needs project and query) the search also reads the comments: `hits` are ranked, each with the issue key and either `comment` (its id, the reply_to of add_comment) or `in` (title / description), and a snippet; sort and order do not apply; approximate: true means the text is so common that the hits are the most recent matches, not ranked; a one-character query matches titles by prefix only. Answers are compact JSON; pass format="text" for a readable Markdown answer. Results are paged: if the answer has a cursor, call again with it (a missing cursor means the last page) — never assume the first page is everything.

  • ac_incompletebooleanoptional
    true: only issues with an unchecked acceptance criteria item (in projects that have acceptance criteria on)
  • assigneestring | string[]optional
    Username, 'me', 'others' (assigned to someone else) or 'none', or several (any of them). Usernames resolve among the project's members, or without project among the people you share a project with
  • blockedbooleanoptional
    true: only issues with an open blocker (a `blocks` link from an issue that is not done); false: only issues without one
  • categoryenum | string[]optional
    Filter by status category, or by several (any of them): todo, in_progress, review, done
    todoin_progressreviewdone
  • committerstring | string[]optional
    Username, 'me', or several: issues they committed to (week default: this)
  • cursorstringoptional
    Cursor from `Next page` of an earlier result of this call (omit for the first page); pass it unchanged, with the same other arguments
  • cyclestringoptional
    current, next, none, any or a cycle number (one project)
  • direnumoptional
    Alias of order
    ascdesc
  • dod_incompletebooleanoptional
    true: only issues with an unchecked definition of done item (in projects that have the definition of done on)
  • dueenumoptional
    Due date: overdue (before today, not done), week (today through the next 6 days), none (no due date) or any (has one); today is in your time zone
    overdueweeknoneany
  • epicstring | string[]optional
    Epic key (needs one project), or several: those epics, their stories and those stories' tasks
  • fieldsenum | string[]optional
    Extra fields on every issue (json answers; not with in_comments), one or several of: updated, created, reporter, due, labels, status_name, cycle, committers. Without them an issue has key, title, type, status (the key; names and categories are in `statuses`), priority (not when none), assignee (username), parent (key) and blocked (only when true)
    updatedcreatedreporterduelabelsstatus_namecyclecommitters
  • formatenumoptional
    Answer format: "json" (default) is one compact JSON document; "text" is a readable Markdown answer
    jsontext
  • in_commentsbooleanoptional
    true: also search the comments (needs one project and query); returns ranked hits with comment ids and snippets
  • labelstring | string[]optional
    Label name, or several (an issue with any of them). Looked up in the project, or in every project you search when project is omitted
  • limitintegeroptional
    How many issues per page (1–100, default 25)
  • openbooleanoptional
    true: only open issues (every status category except done)
  • orderenumoptional
    asc or desc (default: newest / most important / highest key first, titles A→Z)
    ascdesc
  • orphansbooleanoptional
    true: only issues without a parent
  • pageintegeroptional
    Jump to page N of the result (with the same limit and other arguments; omit for the first page, or pass cursor to walk on). At most 10000 rows deep: a deeper page is an error (page_out_of_range); the cursor walks as deep as the list goes. Ignored with a cursor and with in_comments
  • parentstringoptional
    Issue key: only its direct children; 'none': only issues without a parent (the same as orphans=true)
  • priorityenum | string[]optional
    Filter by priority, or by several (any of them)
    nonelowmediumhighurgent
  • projectstring | string[]optional
    Project key, or several keys (optional: omit to search every accessible project)
  • querystringoptional
    Free text or an issue key
  • reporterstringoptional
    Username or 'me': issues that person reported (with project: a member or anyone who reported an issue there, a former member too; without: among the people you share a project with)
  • review_stateenum | string[]optional
    A reviewer's state, or several (with reviewer: that person's)
    requestedapprovedchanges_requested
  • reviewerstring | string[]optional
    Username, 'me', or several: issues they review; reviewer=me with review_state=requested waits on you
  • sortenumoptional
    Order by (default: updated; due = soonest first, issues without a due date last)
    updatedcreatedprioritynumbertitleduestatusassignee
  • statusstring | string[]optional
    Filter by status, or by several (any of them): a key or name from list_statuses (with one project), or todo / in_progress / review / done
  • storystring | string[]optional
    Story key (needs one project), or several: those stories and their tasks (with epic: only the picked stories of those epics)
  • subscribedbooleanoptional
    true: only issues you follow (subscribed, reported, assigned, or involved and not muted)
  • subtasksbooleanoptional
    false: leave out tasks that belong to a story (default: true, they are included)
  • typeenum | string[]optional
    Filter by type, or by several (any of them)
    epicstorytask
  • viewstringoptional
    Saved view id (list_views): runs its project, filters and sort. With it only sort, order, limit, cursor, page, format and fields apply (sort / order win over the view's); any other filter is an error. A view whose filter only names values that no longer exist fails (view_stale)
  • weekstringoptional
    Commitment week: this, next, last or a YYYY-MM-DD day (your week_start and time zone)

Returns

One of these shapes, depending on the arguments:

Shape 1

  • countintegerrequired
  • issuesarray of object | nullrequired
  • limitintegerrequired

Shape 2

  • countintegerrequired
  • hitsarray of object | nullrequired
  • limitintegerrequired

Shape 3

    Optional fields, when present

    • approximatebooleanoptional
      True: the text is so common that the hits are the most recent matches, not ranked
    • cursorstringoptional
    • notestringoptional
    • pageintegeroptional
    • pagesintegeroptional
    • statusesobjectoptional
    • totalintegeroptional
    • totalApproximatebooleanoptional
    • viewobjectoptional
    • 2026-10-05 — New week (this, next, last or a YYYY-MM-DD day) and committer filters: the issues somebody committed to for a week (set_commitments); fields also takes committers.
    • 2026-10-05 — New optional cycle filter: current, next, none, any or a cycle number (one project); fields also takes cycle (its number).
    • 2026-10-04 — New reviewer and review_state filters: the issues somebody is asked to review (set_reviewers).
    • 2026-10-03 — New optional blocked filter (true: issues with an open blocker, false: without); each issue in the json block has a blocked flag, and a blocked issue's line says `· blocked`.
    • 2026-09-28 — New dir argument (asc or desc) sets the sort direction.
    • 2026-10-01 — New optional cursor argument: pass the cursor a result ends with to get the next page.
    • 2026-10-01 — New optional reporter and subscribed filters; in_comments (with project and query) also searches the comments and returns ranked hits with comment ids and snippets.
    • 2026-10-01 — in_comments results end with a ```json block (count, cursor, approximate); approximate is true when a very common search text returned the most recent matches instead of the ranked best ones.
    • 2026-10-01 — A very common search text caps the total of the first page: the json block adds total_approximate: true and total is a lower bound (a status counts at most 1001); selective texts stay exact.
    • 2026-10-01 — New optional due filter (overdue, week, none, any) and sort=due; results show each issue's due date.
    • 2026-10-01 — Every filter of the web list is here: priority, category, open, label (names), parent, epic, story, orphans and subtasks; status, type, assignee and project take one value or a list; assignee and reporter usernames work without project (among the people you share a project with). The result now ends with a ```json block (total, count, cursor and, per issue, key, title, type, status key / name / category, priority, assignee, reporter, due, updated, parent).
    • 2026-10-02 — The total of a long result is counted once, up to 1000 (total 1000 with totalApproximate: true: a lower bound, header `1000+ issues`), for every search text, and every page carries it; the json block now has totalApproximate, page, pages and limit and total on every page. An out-of-range limit reads 25 and the result says so. New optional page argument jumps to page N of the result (the same limit and other arguments; at most 10000 rows deep, a deeper page is the error page_out_of_range; a cursor wins over page); the cursor of that page continues with page N+1. parent also takes none (only issues without a parent). sort also takes status (the board's order of statuses) and assignee (by name, the unassigned last).
    • 2026-10-02 — Answers are compact JSON by default (one document, no Markdown, nothing said twice); format="text" gives the readable Markdown list (header, rows, Next page / Last page., no json block). JSON issues have key, title, type, status (the key only), priority (absent when none), assignee (username, absent when none), parent (key, absent when none) and blocked (only when true); the `statuses` map ({key: {name, category}}) says what the status keys on the page mean; optional fields adds updated, created, reporter, due, labels, status_name. The paging is flat in the document ({total, totalApproximate, page, pages, count, limit, cursor, note}); a missing cursor means the last page, and total_approximate is gone. in_comments hits are {key, comment | in, snippet}. Clients that parsed the ```json block: read the document itself, or pass format="text" to keep the old Markdown.
    • 2026-10-03 — New optional view: a saved view id (list_views) runs its project, filters and sort (sort / order still win; other filters are refused). The answer has view {id, name, mode, stale, note}; a view that lost a whole filter fails (view_stale).
    • 2026-10-04 — reporter=<username> with a project also finds issues reported by a former member of it (anyone who reported an issue there); assignee still needs a member.
    • 2026-10-03 — New optional ac_incomplete / dod_incomplete filters (true: only issues with unchecked acceptance criteria / definition of done items, in projects that have the list on).
    • 2026-10-03 — An issue with criteria has ac / dod {done, total} in its json row and `· AC 2/3 · DoD 0/1` in its text line.
    • 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.