Skip to main content
Glama
javerthl

ServiceNow MCP Server

by javerthl

list_workflow_versions

Retrieve and display available versions of a specific ServiceNow workflow, allowing users to manage workflow evolution and track changes over time.

Instructions

List workflow versions from ServiceNow

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of records to return
offsetNoOffset to start from
workflow_idYesWorkflow ID or sys_id

Implementation Reference

  • The core handler function for the 'list_workflow_versions' tool. It validates parameters using ListWorkflowVersionsParams, constructs a ServiceNow API query for the wf_workflow_version table filtered by workflow_id, fetches the data via REST GET, and returns versions list with metadata.
    def list_workflow_versions( auth_manager: AuthManager, server_config: ServerConfig, params: Dict[str, Any], ) -> Dict[str, Any]: """ List versions of a specific workflow. Args: auth_manager: Authentication manager server_config: Server configuration params: Parameters for listing workflow versions Returns: Dict[str, Any]: List of workflow versions """ # Unwrap parameters if needed params = _unwrap_params(params, ListWorkflowVersionsParams) # Get the correct auth_manager and server_config try: auth_manager, server_config = _get_auth_and_config(auth_manager, server_config) except ValueError as e: logger.error(f"Error getting auth and config: {e}") return {"error": str(e)} workflow_id = params.get("workflow_id") if not workflow_id: return {"error": "Workflow ID is required"} # Convert parameters to ServiceNow query format query_params = { "sysparm_query": f"workflow={workflow_id}", "sysparm_limit": params.get("limit", 10), "sysparm_offset": params.get("offset", 0), } # Make the API request try: headers = auth_manager.get_headers() url = f"{server_config.instance_url}/api/now/table/wf_workflow_version" response = requests.get(url, headers=headers, params=query_params) response.raise_for_status() result = response.json() return { "versions": result.get("result", []), "count": len(result.get("result", [])), "total": int(response.headers.get("X-Total-Count", 0)), "workflow_id": workflow_id, } except requests.RequestException as e: logger.error(f"Error listing workflow versions: {e}") return {"error": str(e)} except Exception as e: logger.error(f"Unexpected error listing workflow versions: {e}") return {"error": str(e)}
  • Pydantic BaseModel defining the input schema for the tool: requires workflow_id, optional limit and offset.
    class ListWorkflowVersionsParams(BaseModel): """Parameters for listing workflow versions.""" workflow_id: str = Field(..., description="Workflow ID or sys_id") limit: Optional[int] = Field(10, description="Maximum number of records to return") offset: Optional[int] = Field(0, description="Offset to start from")
  • Registers the tool in the central get_tool_definitions() dictionary used by the MCP server, mapping name to (handler, param_model, return_type, description, serialization).
    "list_workflow_versions": ( list_workflow_versions_tool, ListWorkflowVersionsParams, str, # Expects JSON string "List workflow versions from ServiceNow", "json", # Tool returns list/dict ),
  • Imports the list_workflow_versions function into the tools package namespace for exposure.
    from servicenow_mcp.tools.workflow_tools import ( activate_workflow, add_workflow_activity, create_workflow, deactivate_workflow, delete_workflow_activity, get_workflow_activities, get_workflow_details, list_workflow_versions, list_workflows, reorder_workflow_activities, update_workflow, update_workflow_activity, )
  • Helper function used by the handler to unwrap and validate parameters using the schema model.
    def _unwrap_params(params: Any, param_class: Type[T]) -> Dict[str, Any]: """ Unwrap parameters if they're wrapped in a Pydantic model. This helps handle cases where the parameters are passed as a model instead of a dict. """ if isinstance(params, dict): return params if isinstance(params, param_class): return params.dict(exclude_none=True) return params

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/javerthl/servicenow-mcp'

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