Skip to main content
Glama

update_work_item_state

Change the status of a PingCode work item (bug, requirement, or task) by specifying a target state name like 'Completed' or 'In Progress'.

Instructions

更新工作项(缺陷/需求/任务)的状态。通过状态名称指定目标状态。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
work_item_idYes工作项编号,如 LFY-2527
state_nameYes目标状态名称,如 "已完成"、"进行中"、"待处理"

Implementation Reference

  • Primary handler function for the 'update_work_item_state' tool. Resolves the state name to a state ID by fetching selectable states and calls the API client to update the work item.
    export async function updateWorkItemState( workItemId: string, stateName: string ): Promise<{ success: boolean; data?: string; error?: string; }> { try { // 1. 获取可选状态列表 const states = await pingcodeClient.getSelectableStates(workItemId); if (states.length === 0) { return { success: false, error: `工作项 ${workItemId} 没有可用的状态选项`, }; } // 2. 根据状态名称查找状态 ID const targetState = states.find((s: any) => s.name === stateName || s.display_name === stateName || s.name?.includes(stateName) || s.display_name?.includes(stateName) ); if (!targetState) { const availableStates = states.map((s: any) => s.display_name || s.name).join('、'); return { success: false, error: `未找到名为 "${stateName}" 的状态。可用状态: ${availableStates}`, }; } // 3. 更新状态 await pingcodeClient.updateWorkItemState(workItemId, targetState._id); return { success: true, data: `✅ 工作项 ${workItemId} 状态已更新为 "${targetState.display_name || targetState.name}"`, }; } catch (error: any) { return { success: false, error: error.message, }; } }
  • src/index.ts:138-155 (registration)
    Tool registration in the MCP server's listTools response, defining the tool name, description, and input schema.
    { name: 'update_work_item_state', description: '更新工作项(缺陷/需求/任务)的状态。通过状态名称指定目标状态。', inputSchema: { type: 'object', properties: { work_item_id: { type: 'string', description: '工作项编号,如 LFY-2527', }, state_name: { type: 'string', description: '目标状态名称,如 "已完成"、"进行中"、"待处理"', }, }, required: ['work_item_id', 'state_name'], }, },
  • Dispatch handler in the CallToolRequestSchema that extracts arguments and invokes the updateWorkItemState function.
    case 'update_work_item_state': { const { work_item_id, state_name } = args as { work_item_id: string; state_name: string; }; const result = await updateWorkItemState(work_item_id, state_name); return { content: [ { type: 'text', text: result.success ? result.data! : `错误: ${result.error}`, }, ], isError: !result.success, }; }
  • API client method that performs the actual HTTP PUT request to update the work item state on PingCode.
    async updateWorkItemState(workItemId: string, stateId: string): Promise<any> { const headers = this.getAuthHeaders(); // 清理编号格式 const cleanId = workItemId.replace(/^#/, '').trim(); try { const response = await this.client.put( `/api/agile/work-items/${cleanId}`, { state: stateId }, { headers } ); return response.data?.data?.value || response.data?.value || response.data; } catch (error: any) { if (error.response?.status === 401) { throw new Error('登录已过期,请重新调用 login 工具登录'); } throw error; } }
  • Helper method to fetch the list of selectable states for a work item, used to resolve state name to ID.
    async getSelectableStates(workItemId: string): Promise<any[]> { const headers = this.getAuthHeaders(); // 清理编号格式 const cleanId = workItemId.replace(/^#/, '').trim(); try { const response = await this.client.get( `/api/agile/work-items/${cleanId}/selectable-states`, { headers } ); // API 返回格式: { "data": [...] } return response.data?.data || response.data?.value || []; } catch (error: any) { if (error.response?.status === 401) { throw new Error('登录已过期,请重新调用 login 工具登录'); } throw error; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ratatatat1/pingcode-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server