get_work_item_comments
Retrieve all comments for a specific Azure DevOps work item to review discussion history, see team feedback, and understand task evolution.
Instructions
Retrieves all comments associated with a specific work item.
Use this tool when you need to:
- Review discussion history about a work item
- See feedback or notes left by team members
- Check if specific questions have been answered
- Understand the context and evolution of a work item
Args:
id: The work item ID
project: Optional project name. If not provided, will be
determined from the work item.
Returns:
Formatted string containing all comments on the work item,
including author names, timestamps, and content, organized
chronologically and formatted as markdown
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| project | No |
Implementation Reference
- MCP tool handler 'get_work_item_comments' that orchestrates comment retrieval by getting the client and calling the implementation helper, with error handling.@mcp.tool() def get_work_item_comments( id: int, project: Optional[str] = None ) -> str: """ Retrieves all comments associated with a specific work item. Use this tool when you need to: - Review discussion history about a work item - See feedback or notes left by team members - Check if specific questions have been answered - Understand the context and evolution of a work item Args: id: The work item ID project: Optional project name. If not provided, will be determined from the work item. Returns: Formatted string containing all comments on the work item, including author names, timestamps, and content, organized chronologically and formatted as markdown """ try: wit_client = get_work_item_client() return _get_work_item_comments_impl(id, wit_client, project) except AzureDevOpsClientError as e: return f"Error: {str(e)}"
- Core helper function '_get_work_item_comments_impl' that implements the logic to fetch comments from the Azure DevOps WIT client, auto-detect project if needed, and format them for output.def _get_work_item_comments_impl( item_id: int, wit_client: WorkItemTrackingClient, project: Optional[str] = None ) -> str: """ Implementation of work item comments retrieval. Args: item_id: The work item ID wit_client: Work item tracking client project: Optional project name Returns: Formatted string containing work item comments """ # If project is not provided, try to get it from the work item if not project: project = _get_project_for_work_item(item_id, wit_client) if not project: return f"Error retrieving work item {item_id} to determine project" # Get comments using the project if available comments = wit_client.get_comments(project=project, work_item_id=item_id) # Format the comments formatted_comments = [ _format_comment(comment) for comment in comments.comments ] if not formatted_comments: return "No comments found for this work item." return "\n\n".join(formatted_comments)
- Helper function to format individual comment objects into readable markdown strings with author, date, and text.def _format_comment(comment) -> str: """ Format a work item comment for display. Args: comment: Comment object to format Returns: Formatted string representation of the comment """ # Format the date if available created_date = "" if hasattr(comment, 'created_date') and comment.created_date: created_date = f" on {comment.created_date}" # Format the author if available author = "Unknown" if hasattr(comment, 'created_by') and comment.created_by: if (hasattr(comment.created_by, 'display_name') and comment.created_by.display_name): author = comment.created_by.display_name # Format the comment text text = "No text" if hasattr(comment, 'text') and comment.text: text = comment.text return f"## Comment by {author}{created_date}:\n{text}"
- Helper function to retrieve the project name from a work item, used when project is not provided.def _get_project_for_work_item( item_id: int, wit_client: WorkItemTrackingClient ) -> Optional[str]: """ Get the project name for a work item. Args: item_id: The work item ID wit_client: Work item tracking client Returns: Project name or None if not found """ try: work_item = wit_client.get_work_item(item_id) if work_item and work_item.fields: return work_item.fields.get("System.TeamProject") except Exception: pass return None
- Registration point where comments.register_tools(mcp) is called, which in turn defines and registers the get_work_item_comments tool.def register_tools(mcp) -> None: """ Register all work item tools with the MCP server. Args: mcp: The FastMCP server instance """ query.register_tools(mcp) read.register_tools(mcp) comments.register_tools(mcp) create.register_tools(mcp) types.register_tools(mcp) templates.register_tools(mcp) process.register_tools(mcp)