2.12.2npm · litejira-mcp · current release
Observed 2026-08-22T16:49:52.442Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.
{
"tools": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
},
"prompts": {
"listChanged": false
}
}| Tool | Category | Annotations | Risk |
|---|---|---|---|
litejira.addCommentPost a comment on a ticket WITHOUT status transition. For comment + status change use replyFeedback instead.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"content": {
"type": "string",
"description": "留言內容(Markdown 支援)"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"content",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "新增留言"
} | — | — · — | — |
litejira.attachLinkAttach a reference URL (doc, design, external page) to a ticket's attachment list. NOT for MR/PR links — use updateField(field='mrUrl') for code review links.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"url": {
"type": "string",
"description": "參考連結 URL,必須 http:// 或 https:// 開頭"
},
"name": {
"type": "string",
"description": "顯示名稱(省略則用 url)"
},
"kind": {
"type": "string",
"description": "連結分類提示(server 端不限制,free-form)如 doc / design / external"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"url",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "附加 URL 連結"
} | — | — · — | — |
litejira.batchReassignBatch reassign MANY tickets to the SAME new assignee in ONE call, with a shared reason comment. Triggers a notification per ticket. Returns { success:[id], failed:[{id,error}] }. For a single ticket use litejira.reassignTicket.Input schema{
"type": "object",
"properties": {
"ids": {
"type": "array",
"description": "工單 ID 陣列(1-100 張,皆 PREFIX-NNN)。一發呼叫由伺服器內部迴圈處理全部,取代逐張單獨呼叫。",
"items": {
"type": "string",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"minItems": 1,
"maxItems": 100
},
"newAssignee": {
"type": "string",
"description": "新 assignee 顯示名稱(不是 email)。動態值,請先讀 litejira://members。"
},
"reason": {
"type": "string",
"description": "轉派原因(會作為留言寫入每張工單)"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ids",
"newAssignee",
"reason",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "批量轉派工單"
} | — | — · — | — |
litejira.batchSetFieldBatch set ONE field to the SAME value across MANY tickets in ONE call. Whitelist: priority / version / module / parentId (NOT status — for status use litejira.batchTransition). Goes through the same updateTicket path (workflow/member validation per field). Returns { success:[id], failed:[{id,error}] }.Input schema{
"type": "object",
"properties": {
"ids": {
"type": "array",
"description": "工單 ID 陣列(1-100 張,皆 PREFIX-NNN)。一發呼叫由伺服器內部迴圈處理全部,取代逐張單獨呼叫。",
"items": {
"type": "string",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"minItems": 1,
"maxItems": 100
},
"field": {
"type": "string",
"description": "批量改的欄位(白名單 4 個)。status 不在此 — 改狀態請用 litejira.batchTransition。",
"enum": [
"priority",
"version",
"module",
"parentId"
]
},
"value": {
"type": [
"string",
"number",
"null"
],
"description": "新值(全批共用)。priority 用 P0-緊急/P1-高/P2-中/P3-低;version 動態值請先讀 litejira://versions(GH-229:meta 已不含版本清單);module 動態值請先讀 litejira://meta;parentId 為 PREFIX-NNN 或 null 解除掛載。"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ids",
"field",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"destructiveHint": true,
"openWorldHint": true,
"title": "批量改工單欄位"
} | — | — · Destructive | — |
litejira.batchTransitionBatch status transition for MANY tickets in ONE call, by action-button label, WITH automatic role-based reassignment (same semantics as litejira.transitionTicket, applied to every id). All tickets SHOULD currently be at the same status so the action label is valid for each — call litejira.searchTickets to filter a same-status batch first. Tickets where the action is not valid (or not found) land in failed[] without aborting the rest (partial success). NO optimistic lock (batch status changes intentionally skip it to avoid concurrent-write conflicts). Returns { success:[{id,status,assignee}], failed:[{id,error}] }. 退回類動作(direction=back)須帶 reason,否則每張落 failed[](GH-215)。Input schema{
"type": "object",
"properties": {
"ids": {
"type": "array",
"description": "工單 ID 陣列(1-100 張,皆 PREFIX-NNN)。一發呼叫由伺服器內部迴圈處理全部,取代逐張單獨呼叫。",
"items": {
"type": "string",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"minItems": 1,
"maxItems": 100
},
"action": {
"type": "string",
"description": "動作標籤(如「送release測試」「alpha不通過」),對全批工單當前狀態須合法;不合法的工單落在 failed[]。合法值依當前狀態而定,請先 litejira.getTransitions 取得。"
},
"extraFields": {
"type": "object",
"description": "連帶欄位(全批共用,不覆蓋 status/assignee)。LJ-188 送測三欄必備,缺項在此帶入:{ fixMethod: \"修復方式\", verifyMethod: \"驗證方式\", releaseMethod: \"熱更/換包/停服\" }。"
},
"reason": {
"type": "string",
"description": "GH-215:退回類動作(direction=back)必填的原因,批次共用;會記入每張工單歷程。前進類動作可省略。"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ids",
"action",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "批量流轉工單狀態(含自動轉派)"
} | — | — · — | — |
litejira.convertTicketTypeConvert ticket type (e.g. BUG→REQ, IDEA→TASK). Allowed conversions: any of BUG/REQ/IDEA/TASK/EPIC can convert to any other. STD type is NOT convertible.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"newType": {
"type": "string",
"description": "目標類型(STD 不可轉,故只 5 選 1)",
"enum": [
"EPIC",
"REQ",
"BUG",
"IDEA",
"TASK"
]
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"newType",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"destructiveHint": true,
"openWorldHint": true,
"title": "轉換工單類型"
} | — | — · Destructive | — |
litejira.createTicketCreate a new ticket. Required: type (BUG/REQ/EPIC/IDEA/TASK/STD), title. Optional: priority, assignee, version, description, subtype, module, releaseMethod, etc. BUG type also accepts reproSteps, expectedResult, foundVersion. STD type (LJ-106 客服申訴) also accepts stdLevel2 (二級類目) + stdLevel3 (三級類目); 不支援 subtype / module / parentId。Input schema{
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "工單類型",
"enum": [
"EPIC",
"REQ",
"BUG",
"IDEA",
"TASK",
"STD"
]
},
"title": {
"type": "string",
"description": "工單標題"
},
"priority": {
"type": "string",
"description": "優先級(含中文後綴)",
"enum": [
"P0-緊急",
"P1-高",
"P2-中",
"P3-低"
]
},
"assignee": {
"type": "string",
"description": "Member 顯示名稱(不是 email);省略則自動指派(處理人)"
},
"owner": {
"type": "string",
"description": "GH-242 負責人(最終負責人,固定)顯示名稱(不是 email);省略留空,之後首次進入開發/進行中類狀態自動補為推進者"
},
"version": {
"type": "string",
"description": "目標版本。動態值請先讀 litejira://versions(GH-229:合法版本清單只在此資源,meta 不含版本;後端不會擋臆造字串,寫錯不會報錯)"
},
"description": {
"type": "string",
"description": "工單描述 / body(Markdown 支援)"
},
"subtype": {
"type": "string",
"description": "子類型。動態值依 type 而定,請先讀 litejira://meta。"
},
"module": {
"type": "string",
"description": "模塊。動態值,請先讀 litejira://meta。"
},
"releaseMethod": {
"type": "string",
"description": "發布方式(熱更=能上現役熱修線含純後端修復/換包=需重新打包發版/停服=需停機維護),送測必填非待定",
"enum": [
"待定",
"熱更",
"換包",
"停服"
]
},
"notes": {
"type": "string",
"description": "內部備註"
},
"reproSteps": {
"type": "string",
"description": "BUG 重現步驟(BUG type 專用)"
},
"expectedResult": {
"type": "string",
"description": "BUG 預期結果(BUG type 專用)"
},
"foundVersion": {
"type": "string",
"description": "BUG 發現版本(BUG type 專用)"
},
"parentId": {
"type": "string",
"description": "父工單 ID(REQ/BUG → EPIC)",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"dueDate": {
"type": "string",
"description": "到期日(YYYY-MM-DD)"
},
"startDate": {
"type": "string",
"description": "開始日(YYYY-MM-DD)"
},
"stdLevel2": {
"type": "string",
"description": "STD 客服申訴二級類目。動態值,請先讀 litejira://meta(STD type 專用)。"
},
"stdLevel3": {
"type": "string",
"description": "STD 客服申訴三級類目。動態值(依 stdLevel2 cascade),請先讀 litejira://meta。"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"type",
"title",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "建立工單"
} | — | — · — | — |
litejira.getActivityLogGet full activity timeline (comments + system events like status changes, reassignments). Paginated.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"limit": {
"type": "integer",
"description": "Max results (1-100). 超過上限請改用 cursor 分頁。",
"minimum": 1,
"maximum": 100
},
"cursor": {
"type": "string",
"description": "分頁 cursor(從前一次回應的 nextCursor 帶入)"
},
"includeComments": {
"type": "boolean",
"description": "是否含留言事件(預設 true)"
},
"includeSystemEvents": {
"type": "boolean",
"description": "是否含系統事件如狀態變更 / 轉派(預設 true)"
}
},
"required": [
"ticketId"
],
"additionalProperties": false
}Annotations{
"readOnlyHint": true,
"openWorldHint": true,
"title": "取工單時間軸"
} | — | Read only · — | — |
litejira.getTransitionsGet the currently available action-button transitions for a ticket (by its current status). Returns { group, status, transitions, actions: [{ label, toStatus, direction }], isFinal }. ONLY actions[].label is a valid "action" arg for litejira.transitionTicket / litejira.batchTransition. GH-253: the "transitions" array is NOT an action list — it is the backend validation whitelist of target STATUS names (non-final states always include 廢單/退單 even when no such button exists for that type), and its values differ from action labels (e.g. BUG at 待開發 → transitions = 開發中/已取消/廢單/退單, actions = 開始開發/取消). Sending a transitions[] value as "action" will be rejected.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
}
},
"required": [
"ticketId"
],
"additionalProperties": false
}Annotations{
"readOnlyHint": true,
"openWorldHint": true,
"title": "查工單當前可用流轉動作"
} | — | Read only · — | — |
litejira.linkTicketsSet or remove parent-child relationship between tickets (e.g. link BUG to EPIC). Pass parentId=null to unlink.Input schema{
"type": "object",
"properties": {
"childId": {
"type": "string",
"description": "子工單 ID",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"parentId": {
"type": [
"string",
"null"
],
"description": "父工單 ID;傳 null 解除關聯"
},
"expectedUpdatedAt": {
"type": "number",
"description": "樂觀鎖:上一次讀到的 updatedAt(ms timestamp),用於偵測併寫衝突"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"childId",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"destructiveHint": true,
"openWorldHint": true,
"title": "關聯/解除工單父子"
} | — | — · Destructive | — |
litejira.listCommentsList comments for a ticket (paginated). Returns comment content + author + timestamps.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"limit": {
"type": "integer",
"description": "Max results (1-100). 超過上限請改用 cursor 分頁。",
"minimum": 1,
"maximum": 100
},
"cursor": {
"type": "string",
"description": "分頁 cursor(從前一次回應的 nextCursor 帶入)"
},
"order": {
"type": "string",
"description": "Sort order:asc 或 desc",
"enum": [
"asc",
"desc"
]
}
},
"required": [
"ticketId"
],
"additionalProperties": false
}Annotations{
"readOnlyHint": true,
"openWorldHint": true,
"title": "列出工單留言"
} | — | Read only · — | — |
litejira.reassignTicketReassign a ticket to a different member with an optional reason comment. Triggers notification to new assignee. For changing assignee without comment use updateField(field='assignee').Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"newAssignee": {
"type": "string",
"description": "新 assignee 顯示名稱(不是 email)。動態值,請先讀 litejira://members。"
},
"reason": {
"type": "string",
"description": "轉派原因(會作為留言寫入工單)"
},
"expectedUpdatedAt": {
"type": "number",
"description": "樂觀鎖:上一次讀到的 updatedAt(ms timestamp),用於偵測併寫衝突"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"newAssignee",
"reason",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "轉派工單"
} | — | — · — | — |
litejira.removeAttachmentRemove a previously attached reference URL from a ticket's attachment list, matched by url. Idempotent: removing a url that is not attached returns removed:false without error. NOT for MR/PR links — those live in the mrUrl field.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"url": {
"type": "string",
"description": "要移除的附件 URL(以 attachLink 當初附上的 url 為準)"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"url",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"destructiveHint": true,
"openWorldHint": true,
"title": "移除附件連結"
} | — | — · Destructive | — |
litejira.replyFeedbackPost a comment AND optionally transition ticket status in one call. Use this when the comment is paired with a status change. For comment-only use addComment instead.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"content": {
"type": "string",
"description": "留言內容(Markdown 支援)"
},
"transition": {
"type": "object",
"description": "可選的狀態轉換。Shape: { toStatus: string }。server 端只看 toStatus 欄。"
},
"expectedUpdatedAt": {
"type": "number",
"description": "樂觀鎖:上一次讀到的 updatedAt(ms timestamp),用於偵測併寫衝突"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"content",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "回覆反饋(含可選狀態轉換)"
} | — | — · — | — |
litejira.searchTicketsSearch and filter tickets. Defaults to compact 12-field items; use responseMode=count for totals, responseMode=full only when list-level full fields are required, or litejira://ticket/{id} for one complete ticket.Input schema{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Keyword search across title + description"
},
"type": {
"type": "string",
"description": "Filter by ticket type",
"enum": [
"EPIC",
"REQ",
"BUG",
"IDEA",
"TASK",
"STD"
]
},
"status": {
"type": "string",
"description": "Filter by status. 動態值依工單 type 而定,請先讀 litejira://workflow/{type}。"
},
"assignee": {
"type": "string",
"description": "Filter by assignee 處理人顯示名稱(不是 email)"
},
"owner": {
"type": "string",
"description": "GH-242 Filter by owner 負責人(最終負責人)顯示名稱(不是 email)"
},
"creator": {
"type": "string",
"description": "Filter by creator 顯示名稱"
},
"version": {
"type": "string",
"description": "Filter by 目標版本(version name)"
},
"module": {
"type": "string",
"description": "Filter by module 模塊。動態值,請先讀 litejira://meta。"
},
"subtype": {
"type": "string",
"description": "Filter by subtype 子類型。動態值依 type 而定,請先讀 litejira://meta。"
},
"responseMode": {
"type": "string",
"description": "Response size: count=只回總數,compact=12 個核心欄位(MCP 預設),full=既有完整清單欄位",
"enum": [
"count",
"compact",
"full"
],
"default": "compact"
},
"limit": {
"type": "integer",
"description": "Max results (1-100). 超過上限請改用 cursor 分頁。",
"minimum": 1,
"maximum": 100
},
"cursor": {
"type": "string",
"description": "分頁 cursor(從前一次回應的 nextCursor 帶入)"
},
"sort": {
"type": "string",
"description": "Sort field",
"enum": [
"createdAt",
"updatedAt",
"priority",
"dueDate"
]
},
"order": {
"type": "string",
"description": "Sort order:asc 或 desc",
"enum": [
"asc",
"desc"
]
}
},
"required": [],
"additionalProperties": false
}Annotations{
"readOnlyHint": true,
"openWorldHint": true,
"title": "搜尋工單"
} | — | Read only · — | — |
litejira.toggleWatchToggle watch/unwatch on a ticket. Watched tickets appear in "我關注的" sidebar filter.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "切換工單關注"
} | — | — · — | — |
litejira.transitionTicketOne-shot status transition by action-button label, WITH automatic role-based reassignment (首次認領→點按者 / 回流→上一手開發者 / 前進→目標 role 預設人). Equivalent to the webapp Drawer action buttons. The "action" label must be one currently available for the ticket — call litejira.getTransitions FIRST to get valid labels. To set status WITHOUT auto-reassign use updateField(field='status') instead. 退回類動作(getTransitions 回傳 direction=back,如 alpha不通過/release不通過/MR打回/退回/退單)必須帶 reason,否則後端拒絕(GH-215:原因會記入工單歷程供被打回的開發者查看)。Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"action": {
"type": "string",
"description": "動作標籤(如「開始開發」「送alpha測試」「alpha不通過」)。合法值依工單當前狀態而定,請先呼叫 litejira.getTransitions 取得。"
},
"expectedUpdatedAt": {
"type": "number",
"description": "樂觀鎖:上一次讀到的 updatedAt(ms timestamp),用於偵測併寫衝突"
},
"extraFields": {
"type": "object",
"description": "連帶欄位(不覆蓋 status/assignee)。LJ-188 送測(進 alpha/release 測試 / 熱修待合 release)三欄必備,缺項在此帶入:{ fixMethod: \"修復方式\", verifyMethod: \"驗證方式\", releaseMethod: \"熱更/換包/停服\" }。"
},
"reason": {
"type": "string",
"description": "GH-215:退回類動作(direction=back)必填的原因,說明測試哪裡不通過;會記入工單歷程。前進類動作可省略。"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"action",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"idempotentHint": true,
"openWorldHint": true,
"title": "流轉工單狀態(動作按鈕,含自動轉派)"
} | — | — · — | — |
litejira.updateFieldUpdate a single ticket field. Whitelist: title, priority, version, dueDate, startDate, description, notes, subtype, tags, mrUrl, reproSteps, expectedResult, verifyMethod, fixMethod, verifiableVersionAlpha, verifiableVersionRelease, foundVersion, module, parentId, stdLevel2, stdLevel3, releaseMethod, status, assignee, owner. For MR/PR links: field='mrUrl'. Assignee (處理人) follows member validation; LJ-188/GH-249: changing assignee here also notifies old+new assignee via team Chat (same as reassignTicket, without a reason comment). GH-242: field='owner'(負責人 / 最終負責人,固定,不隨狀態流轉變化)可設成員名或清空(value=null / "");與 assignee 處理人區分。releaseMethod(發布方式)值域受控 待定/熱更/換包/停服(送測必填非待定). LJ-188 WELDED: field='status' WITHOUT force is REJECTED (use_transitionTicket) — all normal transitions MUST go through litejira.transitionTicket (carries send-test 3-field gate 發布方式/修復方式/驗證方式 + role auto-reassign + notification). ADMIN ONLY escape hatch: pass force=true with field='status' to bypass workflow path validation (LJ-153) — target must still be a defined status of the ticket's flow group; the audit comment is marked 「(管理者強制)」. field='version' 改為不同值時必帶 reason(後端 version_reason_required 守衛,LJ-168)。Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "string",
"description": "Ticket ID with prefix (FB/BUG/REQ/EPIC/IDEA/TASK/STD)-NNN,例如 BUG-481 / REQ-205。注意:LJ/DEV 是 LiteJira 自身開發編號(住 BACKLOG.md),非試算表工單,不接受。",
"pattern": "^(FB|BUG|REQ|EPIC|IDEA|TASK|STD)-\\d+$"
},
"field": {
"type": "string",
"description": "Whitelist 欄位名(25 個合法值)",
"enum": [
"title",
"priority",
"version",
"dueDate",
"startDate",
"description",
"notes",
"subtype",
"tags",
"mrUrl",
"reproSteps",
"expectedResult",
"verifyMethod",
"fixMethod",
"verifiableVersionAlpha",
"verifiableVersionRelease",
"foundVersion",
"module",
"parentId",
"stdLevel2",
"stdLevel3",
"releaseMethod",
"status",
"assignee",
"owner"
]
},
"value": {
"type": [
"string",
"number",
"null"
],
"description": "新值。型別依 field 而定:status/subtype/module 等動態值請先讀 litejira://meta;version 動態值請先讀 litejira://versions(GH-229:合法版本清單只在此資源,meta 不含版本;後端不會擋臆造字串,寫錯不會報錯);priority 用 P0-緊急/P1-高/P2-中/P3-低;releaseMethod 用 待定/熱更/換包/停服(發布方式,送測必填非待定);null 代表清空。"
},
"force": {
"type": "boolean",
"description": "LJ-153 管理者強制改狀態:true 時繞過工作流路徑驗證(僅 field=status 可用、僅 admin 放行;目標仍須是該流程組已定義的狀態)。一般流轉請不要帶此參數。"
},
"reason": {
"type": "string",
"description": "GH-234:改 field=version 且新舊版本不同時必填(後端 version_reason_required 守衛,LJ-168),說明為何改版本;會記入工單歷程。其他欄位可省略。"
},
"expectedUpdatedAt": {
"type": "number",
"description": "樂觀鎖:上一次讀到的 updatedAt(ms timestamp),用於偵測併寫衝突"
},
"idempotencyKey": {
"type": "string",
"description": "Idempotency key(16-64 字元 alphanumeric / _ / -),retry 同語意操作請傳同一個 key。注意:server 端未真正去重,純 client 契約紀律。",
"minLength": 16,
"maxLength": 64,
"pattern": "^[a-zA-Z0-9_-]{16,64}$"
}
},
"required": [
"ticketId",
"field",
"idempotencyKey"
],
"additionalProperties": false
}Annotations{
"destructiveHint": true,
"openWorldHint": true,
"title": "更新工單欄位"
} | — | — · Destructive | — |
各狀態計數、逾期數
{
"resource_key": "litejira://dashboard",
"uri": "litejira://dashboard",
"name": "Dashboard 統計",
"description": "各狀態計數、逾期數",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "62472fef50807f671e97d533c3ff5b09782ff5fff58780314a66c1cebd937d25"
}類型/優先級/狀態/子類型/模塊/STD類目清單(不含流轉規則,見 workflow 資源)
{
"resource_key": "litejira://meta",
"uri": "litejira://meta",
"name": "LiteJira 元資料",
"description": "類型/優先級/狀態/子類型/模塊/STD類目清單(不含流轉規則,見 workflow 資源)",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "9fe8e4ec0903bac10f617e7cdb65e789dbf6f03c2afc3fd04b739cf6570da84f"
}啟用成員(name/email/role)
{
"resource_key": "litejira://members",
"uri": "litejira://members",
"name": "成員清單",
"description": "啟用成員(name/email/role)",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "b36acf742ec7a4c98315848cbf143c58c566799ec519d6202a3827b1c9d30927"
}版本列表(name/status/dates)
{
"resource_key": "litejira://versions",
"uri": "litejira://versions",
"name": "版本清單",
"description": "版本列表(name/status/dates)",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "dc0a79a45b62abc112880fed8a1cd533ed2822f90a273146dec1d80d6049c3f6"
}指定類型的狀態流轉規則
{
"template_key": "litejira://workflow/{type}",
"uri_template": "litejira://workflow/{type}",
"name": "工作流規則",
"description": "指定類型的狀態流轉規則",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "88777508263d99c4b58a2d46096f3424601593645147b9aa8756dd3cc1a2589c"
}單張工單完整資料(28 欄位)
{
"template_key": "litejira://ticket/{id}",
"uri_template": "litejira://ticket/{id}",
"name": "工單詳情",
"description": "單張工單完整資料(28 欄位)",
"mime_type": "application/json",
"annotations": null,
"metadata_hash": "852354bd5f9461084220dde38bc3e4a00f05a630ce6369ffae0c430f5ab2c1a0"
}關閉工單 — 檢查合法狀態轉換路徑,標記完成並附留言
{
"prompt_key": "close-ticket",
"name": "close-ticket",
"description": "關閉工單 — 檢查合法狀態轉換路徑,標記完成並附留言",
"arguments": [
{
"name": "ticketId",
"description": "要關閉的工單 ID",
"required": true
}
],
"metadata_hash": "32d6d74b2341f3a9d764185e454558fab71c0c9244c55858e98d424aa8c9b71a"
}回報 BUG — 引導填寫標題/重現步驟/預期結果,自動判斷子類型+負責人+版本,建單
{
"prompt_key": "report-bug",
"name": "report-bug",
"description": "回報 BUG — 引導填寫標題/重現步驟/預期結果,自動判斷子類型+負責人+版本,建單",
"arguments": [
{
"name": "title",
"description": "BUG 標題(可選,會再確認)",
"required": false
}
],
"metadata_hash": "a81e4ef466caddc96e919b5b33fac1cb1e66145a1be15a187b552445f0b7c430"
}分類工單 — 讀取完整工單+工作流規則+成員清單,建議優先級/負責人/狀態
{
"prompt_key": "triage-ticket",
"name": "triage-ticket",
"description": "分類工單 — 讀取完整工單+工作流規則+成員清單,建議優先級/負責人/狀態",
"arguments": [
{
"name": "ticketId",
"description": "要 triage 的工單 ID",
"required": true
}
],
"metadata_hash": "26b352f2bf484ad2ba90349b87b7cd3ef33465d6e1b75f5cea99a4c996677657"
}本週進度報告 — 統計本週完成/進行中/新開/逾期工單,按版本分組
{
"prompt_key": "weekly-status",
"name": "weekly-status",
"description": "本週進度報告 — 統計本週完成/進行中/新開/逾期工單,按版本分組",
"arguments": [],
"metadata_hash": "89f55127fac23e3167c4a25612df6b1cd730d25f0c0d5fa3191a98f0cec6e16f"
}