Skip to content

Issue Tools

Nine tools covering the full issue lifecycle on the board: create, update, delete, search, list-mine, prepare project/issue context, pick up an issue end-to-end, and render the daily Today snapshot.

create-issue

Create a new issue in a project.

Parameters

ParameterTypeRequiredDescription
project_idintegerYesThe project to create the issue in
titlestringYesIssue title (max 255 characters)
descriptionstringYesIssue description (max 65,535 characters)
lane_idintegerNoLane to place the issue in. Defaults to the first lane if omitted.
priorityintegerNo0 Highest, 1 High, 2 Medium (default), 3 Low, 4 Lowest
typeintegerNo0 Feature (default), 1 Bug
assignee_idintegerNoUser ID to assign. Use project members to find IDs.
sprint_idintegerNoSprint to add the issue to
epic_idintegerNoEpic to link the issue to. Bidirectional with update-epic's issue_ids.
label_idsarrayNoLabel IDs to attach (must belong to the same project). Omit or pass [] for none.
blocked_by_idsarrayNoIssue IDs that block this issue (must be in the same project)
blocks_idsarrayNoIssue IDs that this issue blocks (must be in the same project)
estimated_minutesintegerNoEstimated time in minutes (minimum 0)

Behavior

  • If lane_id is omitted, the issue is placed in the project's first lane automatically
  • The lane, sprint, and assignee are all validated to belong to the specified project
  • Blocking relations must reference issues within the same project
  • In the description, a plain @Full Name (or unique first name) of a project member becomes a real mention and notifies that member. Ambiguous or unknown names stay literal text, and names inside code blocks are never matched
  • Returns the created issue with its generated key (e.g., KD-0042), ID, lane, assignee, sprint, and blocking relations

Example Prompt

Create a high-priority bug in the kendo project: "Login form rejects valid email addresses". The form strips everything after a + in the address. Assign it to Jasper.

update-issue

Update an existing issue. Only provided fields are changed — omitted fields keep their current values.

Parameters

ParameterTypeRequiredDescription
issue_idintegerOne ofThe numeric ID of the issue (provide issue_id or issue_key, not both)
issue_keystringOne ofThe issue key, e.g. "KD-0042" (provide issue_id or issue_key, not both)
titlestringNoNew title (max 255 characters)
descriptionstringNoNew description (max 65,535 characters)
lane_idintegerNoTarget lane ID to move the issue to (must be in the same project)
priorityintegerNo0 Highest, 1 High, 2 Medium, 3 Low, 4 Lowest
typeintegerNo0 Feature, 1 Bug
assignee_idintegerNoUser ID to assign, or null to unassign
sprint_idintegerNoSprint ID, or null to remove from sprint. For multiple issues at once, prefer assign-issues-to-sprint — one batched call instead of looping.
epic_idintegerNoEpic ID, or null to unlink from epic. Bidirectional with update-epic's issue_ids.
blocked_by_idsarrayNoReplaces all "blocked by" relations. Omit to preserve, [] to clear.
blocks_idsarrayNoReplaces all "blocks" relations. Omit to preserve, [] to clear.
estimated_minutesintegerNoEstimated time in minutes, or null to clear

Behavior

  • Partial updates: only fields you include are modified. This is different from the API which requires all fields.
  • Lane changes: pass lane_id to move an issue to a different lane on the board. The lane must belong to the same project.
  • Blocking relations: omitting blocked_by_ids/blocks_ids preserves existing relations. Pass an empty array [] to explicitly clear them.
  • Mentions: in the description, a plain @Full Name (or unique first name) of a project member becomes a real mention and notifies that member. Ambiguous or unknown names stay literal text.
  • Pass null for assignee_id, sprint_id, or estimated_minutes to clear those values.

Example Prompt

Bump KD-42 to highest priority and assign it to Sarah

delete-issue

Permanently delete an issue and all its comments.

Destructive

This action cannot be undone. The issue and all associated comments are permanently removed.

Parameters

ParameterTypeRequiredDescription
issue_idintegerOne ofThe numeric ID of the issue (provide issue_id or issue_key, not both)
issue_keystringOne ofThe issue key, e.g. "KD-0042" (provide issue_id or issue_key, not both)

Example Prompt

Delete the duplicate issue KD-38, it's the same as KD-42

search-issues

Search issues within a project by text query and/or filters. This tool is read-only and safe to call repeatedly.

Parameters

ParameterTypeRequiredDescription
project_idintegerYesThe project to search in
querystringNoText search across title, description, and issue key (max 200 characters)
lane_idintegerNoFilter by lane
assignee_idintegerNoFilter by assignee
sprint_idintegerNoFilter by sprint
epic_idintegerNoFilter by epic
priorityintegerNoFilter by priority (04)
typeintegerNoFilter by type (0 Feature, 1 Bug)
label_idsarrayNoFilter by label IDs — returns issues carrying ANY of these labels (OR). All IDs must belong to the project.
limitintegerNoMax results (1–100, default 25)

Behavior

  • Results are ordered by most recently updated
  • All filters are optional and combine with AND logic
  • Returns matching issues with key, title, assignee, priority, and type
  • Each result includes attachments_count — the number of files attached to the issue
  • Marked as #[IsReadOnly] and #[IsIdempotent] — safe to call multiple times with no side effects

Response Fields

Alongside the issues array, the response surfaces truncation metadata so the caller knows when the result set was capped:

FieldTypeDescription
totalintegerNumber of issues actually returned
truncatedbooleantrue when the result set was capped at limit; refine filters to see more matches
limitintegerServer-side cap applied to this request
issuesobject[]Matching issues

Example Prompt

Show me all high-priority bugs assigned to Jasper in the kendo project

get-my-issues

Get issues assigned to you — your current work, tasks, and tickets. Excludes issues in the "done" lane (last lane per project).

Parameters

ParameterTypeRequiredDescription
project_idintegerNoFilter to a specific project (omit for all accessible projects)
priorityintegerNoFilter by priority (04)
typeintegerNoFilter by type (0 Feature, 1 Bug)
querystringNoText search across issue title and key (max 255 characters)

Behavior

  • Returns only issues assigned to the authenticated user
  • Excludes issues in the last lane (done) of each project
  • Results ordered by most recently updated
  • Respects project accessibility — non-admin users only see issues in projects they can access
  • Marked as #[IsReadOnly] and #[IsIdempotent]

Response Fields

Alongside the issues array, the response surfaces truncation metadata so the caller knows when the result set was capped at the server-side cap (currently 500):

FieldTypeDescription
countintegerNumber of issues actually returned
truncatedbooleantrue when the result set was capped at limit; refine filters to see more matches
limitintegerServer-side cap applied to this request
issuesobject[]List of assigned issues

Example Prompts

What am I working on right now?

Show me my high-priority bugs across all projects

What tickets do I have in the kendo project?

prepare-project-context

Bundle the project's structural meta into one read: the project itself, all its lanes (board columns), all Planned and Active sprints (with active_sprint as a shortcut to the currently Active one), the project's labels, the project members (for assignee lookup), and the calling user. Use this as the gather step for any project-scoped flow — triage, board sync, branch creation, picking up an issue. Replaces separate reads of kendo://projects/{id}, kendo://projects/{id}/lanes, kendo://projects/{id}/sprints, and kendo://projects/{id}/members. For Completed sprints, use get-sprints with status=2.

Pair with prepare-issue-context

When you also need a specific issue's payload (comments, branch links, attachments), fire prepare-project-context and prepare-issue-context in parallel — same wall-clock as one round-trip. See Workflows → Prepare an issue.

Parameters

ParameterTypeRequiredDescription
project_idintegeryesThe numeric ID of the project

Behavior

  • Marked as #[IsReadOnly] and #[IsIdempotent] — safe to call repeatedly with no side effects
  • sprints contains only Planned (0) and Active (1) sprints, ordered by start date. Completed sprints are excluded — use get-sprints with status=2 for those
  • active_sprint is a shortcut to the Active sprint from sprints, or null when none is Active
  • members returns every user who reaches the project via team membership or direct membership, ordered by first name then last name
  • members_count companion field lets you shortcut without iterating
  • current_user is the authenticated MCP user — use this instead of guessing from git config user.email when deciding the assignee for a "start working on this" flow
  • The full issue list is not included; for a single issue's payload (comments, branches, attachments), call prepare-issue-context — typically in parallel

Response Fields

FieldTypeDescription
projectobjectProject payload — same shape as kendo://projects/{id} (id, name, description, issues_count, github_repos)
lanesobject[]Project lanes ordered by position (id, title, color, order, issues_count)
sprintsobject[]Planned and Active sprints ordered by start date (id, title, status, start, end, issues_count). Completed sprints excluded.
active_sprintobject | nullShortcut to the currently Active sprint from sprints (id, title, status, start, end, issues_count), or null
labelsobject[]Project labels ordered by position (id, name, color, order) — use label.id as label_ids in search-issues or sync-issue-labels
membersobject[]Project members ordered by first_name, then last_name (id, name, email) — use member.id as assignee_id
members_countintegerTotal number of members returned
current_userobjectThe authenticated MCP user (id, name, email)

Example Prompt

Pull together the project context for kendo: lanes, sprints, labels, members, and tell me who I am.

prepare-issue-context

Bundle a single issue's full payload into one read: the issue (with comments, branch links, time spent, attachments) and its linked epic. For project meta (lanes, active sprint, members, calling user), call prepare-project-context — typically in parallel with this tool.

Pair with start-work-on-issue

Call prepare-issue-context and prepare-project-context in parallel to gather, then start-work-on-issue to act (assign, move lane, link branch) in one idempotent write. See Workflows → Prepare an issue.

Parameters

ParameterTypeRequiredDescription
issue_idintegerOne ofThe numeric ID of the issue (provide issue_id or issue_key, not both)
issue_keystringOne ofThe issue key, e.g. "KD-0042" (provide issue_id or issue_key, not both)

Behavior

  • Marked as #[IsReadOnly] and #[IsIdempotent] — safe to call repeatedly with no side effects
  • epic is null when the issue has no linked epic
  • Project meta (lanes, active sprint, members, current user) is not included by design — use prepare-project-context for that, in parallel when you need both

Response Fields

FieldTypeDescription
issueobjectFull issue payload — same shape as kendo://issues/{key} (id, key, title, description, priority, type, project, lane, assignee, sprint, comments, blocked_by_ids, blocks_ids, epic_id, user_id, branch_links, estimated_minutes, total_minutes_spent, attachments, created_at, updated_at)
epicobject | nullEpic linked to the issue (id, title, description, status, status_value, color, start, end), or null

Example Prompt

I want to start working on KD-42. Fire prepare-issue-context and prepare-project-context in parallel and tell me what I'm picking up.

start-work-on-issue

Pick up an issue in one idempotent call — assign it, move it to the target lane (e.g. "In Progress"), optionally add it to a sprint, and link a git branch. Re-running with the same values is a no-op. The GitHub repository is auto-resolved from the project's primary repo.

Pair with the prepare-context tools

Call prepare-issue-context and prepare-project-context in parallel to gather the issue payload and project meta, then start-work-on-issue to act — assign, move lane, link branch — in one write. See Workflows → Prepare an issue.

Parameters

ParameterTypeRequiredDescription
issue_idintegerOne ofThe numeric ID of the issue (provide issue_id or issue_key, not both)
issue_keystringOne ofThe issue key, e.g. "KD-0042" (provide issue_id or issue_key, not both)
branch_namestringYesThe git branch name to link to the issue
assignee_idintegerNoUser ID to assign the issue to
lane_idintegerNoTarget lane ID to move the issue to (must be in the same project)
sprint_idintegerNoSprint ID. Omit to preserve existing; pass null to remove from sprint; pass an ID to set.
repo_idintegerConditionalTarget GitHub repo ID. Omit on single-repo projects. On multi-repo projects, omit on the first attempt; if you get a candidate-listing error, retry with one of the listed repo IDs (look up IDs via the kendo://projects/{id}/github-repos resource) or ask the human to pick.

Behavior

  • Idempotent — re-running with the same branch_name, assignee_id, lane_id, and sprint_id produces no further state change
  • The branch is linked against the project's only GitHub repo when there is exactly one — no repo_id needed
  • On multi-repo projects without repo_id, the tool returns a candidate-listing error rather than guessing — retry with the right repo_id
  • Returns the updated issue (with lane, assignee, sprint) and the branch-link record (existing on replay, otherwise newly created)

Example Prompt

Start work on KD-0042: assign it to me, move it to "In Progress", add it to the active sprint, and link branch KD-0042-fix-login-form.

kendo-today

Render the Kendo Today card inline in Claude Desktop (MCP Apps / SEP-1865). Returns the user's active sprints, open issues grouped per project, and today's logged minutes as a single atomic snapshot. Prefer this over get-my-issues for daily-overview questions like "what's on my plate today" — the widget bundles the deep-links and quick-log chips the user needs.

Parameters

No parameters — operates on the authenticated user.

Response Fields

FieldTypeDescription
activeSprintsobject[]Active sprints across accessible projects — each with id, title, projectId, projectName, myOpenIssuesCount
myIssuesobject[]User's open issues (excluding final-lane) — each with id, key, title, type (feature | bug | task), projectId, projectName
todayMinutesintegerTotal minutes logged by the user today across accessible projects

Example Prompt

What's on my plate today?

See Also

  • Resources — Read issue data via kendo://issues/{id} and kendo://projects/{id}/issues
  • Issues & Board Guide — Understanding the board, lanes, and blocking relationships
  • Issues API — REST endpoints for issue management