list_stories
Retrieve and filter stories from ServiceNow with options to limit results, apply state filters, and search by assignment group or timeframe.
Instructions
List stories from ServiceNow
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| assignment_group | No | Filter by assignment group | |
| limit | No | Maximum number of records to return | |
| offset | No | Offset to start from | |
| query | No | Additional query string | |
| state | No | Filter by state | |
| timeframe | No | Filter by timeframe (upcoming, in-progress, completed) |
Implementation Reference
- The handler function that implements the list_stories tool logic: validates params, builds ServiceNow query, makes GET request to rm_story table, returns stories list.def list_stories( auth_manager: AuthManager, server_config: ServerConfig, params: Dict[str, Any], ) -> Dict[str, Any]: """ List stories from ServiceNow. Args: auth_manager: The authentication manager. server_config: The server configuration. params: The parameters for listing stories. Returns: A list of stories. """ # Unwrap and validate parameters result = _unwrap_and_validate_params( params, ListStoriesParams ) if not result["success"]: return result validated_params = result["params"] # Build the query query_parts = [] if validated_params.state: query_parts.append(f"state={validated_params.state}") if validated_params.assignment_group: query_parts.append(f"assignment_group={validated_params.assignment_group}") # Handle timeframe filtering if validated_params.timeframe: now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") if validated_params.timeframe == "upcoming": query_parts.append(f"start_date>{now}") elif validated_params.timeframe == "in-progress": query_parts.append(f"start_date<{now}^end_date>{now}") elif validated_params.timeframe == "completed": query_parts.append(f"end_date<{now}") # Add any additional query string if validated_params.query: query_parts.append(validated_params.query) # Combine query parts query = "^".join(query_parts) if query_parts else "" # Get the instance URL instance_url = _get_instance_url(auth_manager, server_config) if not instance_url: return { "success": False, "message": "Cannot find instance_url in either server_config or auth_manager", } # Get the headers headers = _get_headers(auth_manager, server_config) if not headers: return { "success": False, "message": "Cannot find get_headers method in either auth_manager or server_config", } # Make the API request url = f"{instance_url}/api/now/table/rm_story" params = { "sysparm_limit": validated_params.limit, "sysparm_offset": validated_params.offset, "sysparm_query": query, "sysparm_display_value": "true", } try: response = requests.get(url, headers=headers, params=params) response.raise_for_status() result = response.json() # Handle the case where result["result"] is a list stories = result.get("result", []) count = len(stories) return { "success": True, "stories": stories, "count": count, "total": count, # Use count as total if total is not provided } except requests.exceptions.RequestException as e: logger.error(f"Error listing stories: {e}") return { "success": False, "message": f"Error listing stories: {str(e)}", }
- Pydantic model defining input parameters for the list_stories tool.class ListStoriesParams(BaseModel): """Parameters for listing stories.""" limit: Optional[int] = Field(10, description="Maximum number of records to return") offset: Optional[int] = Field(0, description="Offset to start from") state: Optional[str] = Field(None, description="Filter by state") assignment_group: Optional[str] = Field(None, description="Filter by assignment group") timeframe: Optional[str] = Field(None, description="Filter by timeframe (upcoming, in-progress, completed)") query: Optional[str] = Field(None, description="Additional query string")
- src/servicenow_mcp/utils/tool_utils.py:851-857 (registration)Registration of the list_stories tool in the central tool definitions dictionary, mapping name to (handler, params schema, return type, description, serialization)."list_stories": ( list_stories_tool, ListStoriesParams, str, # Expects JSON string "List stories from ServiceNow", "json", # Tool returns list/dict ),