Skip to main content
Glama
UditMahaldar

HP ALM MCP Server

by UditMahaldar

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ALM_DOMAINYesALM domain name
ALM_PROJECTYesALM project name
ALM_BASE_URLYesBase URL of your ALM server, e.g. https://alm.company.com/qcbin
ALM_PASSWORDYesALM login password
ALM_USERNAMEYesALM login username
ALM_REQUEST_DELAYNoSeconds between API calls — increase if ALM throttles requests2.0

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
alm_refresh_sessionA

Refresh or reconnect the ALM session.

Use this if other tools start returning authentication or session errors. Tries a heartbeat first; reconnects fully if that fails.

Returns: {"refreshed": true, "reconnected": true/false}

alm_ensure_test_plan_folderA

Ensure a Test Plan folder path exists, creating any missing folders.

Args: folder_path: '/' separated path, e.g. 'AppName/Sprint1/Regression'.

Returns: {"folder_id": "", "folder_path": ""}

alm_ensure_test_lab_folderA

Ensure a Test Lab (test-set) folder path exists, creating any missing folders.

Args: folder_path: '/' separated path, e.g. 'Automation/Sprint1'.

Returns: {"folder_id": "", "folder_path": ""}

alm_list_test_casesB

List all test cases inside a Test Plan folder.

Args: folder_id: ALM numeric ID of the test plan folder.

Returns: {"tests": [{"id", "name", "status", "owner"}, ...], "count": , "folder_id": ""}

alm_get_test_caseA

Get the full details of a test case by ID, including all ALM fields.

Args: test_id: ALM numeric ID of the test case.

Returns: {"test_id": "", "fields": {all ALM field names and values}}

alm_find_test_by_nameA

Look up a test case ID by its exact name.

Args: test_name: Exact name of the test case in ALM.

Returns: {"found": true/false, "test_id": "", "test_name": ""}

alm_create_test_caseA

Create a manual test case in a Test Plan folder, optionally with design steps.

Handles check-out/check-in automatically when steps are provided.

Args: folder_id: ID of the parent folder. test_name: Name for the new test case. steps: Optional list of design steps. Each step is a dict with keys: "name" (step number/title), "description", "expected".

Returns: {"test_id": "", "test_name": "", "folder_id": "", "steps_added": }

alm_update_test_caseA

Update any field(s) on an existing test case.

Common fields: "name", "status", "description", "owner", "priority", "subtype-id". The test case must be checked out — set auto_checkout=true to handle this automatically.

Args: test_id: ALM ID of the test case. fields: Dict of ALM field names → new values. Example: {"status": "Ready", "owner": "jsmith", "description": "Updated desc"}. auto_checkout: If true (default), checks out before and checks in after editing.

Returns: {"test_id", "fields_updated": [...], "vc_status": ""}

alm_bulk_create_test_casesA

Create multiple test cases with design steps under a folder path in one call.

Creates any missing folders along the path automatically.

Args: folder_path: '/' separated path e.g. 'AppName/Sprint1/Smoke'. test_cases: List of test case dicts: [{"name": "TC-001", "steps": [{"name": "Step 1", "description": "Navigate to login", "expected": "Login page is shown"}]}]

Returns: {"folder_id": "", "created": [...], "failed": [...]}

alm_get_test_version_statusA

Get the version control status of a test case (Checked_In or Checked_Out).

Args: test_id: ALM ID of the test case.

Returns: {"test_id": "", "vc_status": "Checked_In" | "Checked_Out" | null}

alm_checkout_testA

Check out a test case so its fields and design steps can be edited.

Args: test_id: ALM ID of the test case.

Returns: {"test_id": "", "vc_status": ""}

alm_checkin_testA

Check in a test case after editing to save a new version in ALM.

Args: test_id: ALM ID of the test case.

Returns: {"test_id": "", "vc_status": ""}

alm_add_design_stepsA

Add design steps to a test case (test must already be checked out).

Args: test_id: ALM ID of the test case (must be in Checked_Out state). steps: List of steps, each a dict with "name", "description", "expected". Example: [{"name": "Step 1", "description": "Open browser", "expected": "Browser opens"}] delete_existing: If true, deletes all current steps before adding new ones.

Returns: {"test_id": "", "steps_added": , "delete_existing": true/false}

alm_find_test_setA

Find a test set in Test Lab by its exact name and return its ID.

Args: test_set_name: Exact name of the test set.

Returns: {"found": true/false, "test_set_id": "", "test_set_name": ""}

alm_create_test_setA

Create a new test set inside a Test Lab folder.

Args: parent_folder_id: ID of the test-set folder (use alm_ensure_test_lab_folder). test_set_name: Name for the new test set.

Returns: {"test_set_id": "", "test_set_name": "", "parent_folder_id": ""}

alm_add_test_to_setA

Pull (add) a test case from Test Plan into a Test Lab test set.

This is the 'Move TC from Test Plan to Test Lab' operation in ALM.

Args: test_set_id: ID of the target test set. test_id: ID of the test case in Test Plan. status: Initial run status — 'No Run', 'Passed', 'Failed', 'Blocked'.

Returns: {"success": true/false, "test_instance_id": "", "test_set_id", "test_id"}

alm_list_test_instancesA

List all test instances (pulled tests) inside a test set.

Args: test_set_id: ID of the test set.

Returns: {"instances": [{"id", "name", "status"}, ...], "count": , "test_set_id": ""}

alm_find_test_instanceA

Find a test instance inside a test set by test case name (partial match supported).

Args: test_set_id: ID of the test set. test_case_name: Name of the test case (exact or partial match).

Returns: {"found": true/false, "test_instance_id": "", "test_case_name", "test_set_id"}

alm_get_test_configA

Get the test configuration ID for a test case (required internally to create test runs).

Args: test_id: ALM ID of the test case.

Returns: {"found": true/false, "test_config_id": "", "test_id": ""}

alm_create_test_runB

Create a manual test run record for an existing test instance.

Args: test_id: ALM ID of the test case. test_set_id: ALM ID of the test set (cycle). test_instance_id: ALM ID of the test instance inside the test set. test_name: Display name/label for this run. status: Initial status — 'Not Completed', 'Passed', 'Failed', 'Blocked'. peer_reviewer: Optional ALM username to set as peer reviewer (user-template-06 field).

Returns: {"success": true/false, "test_run_id": "", "test_name", "status"}

alm_update_run_statusA

Update the overall pass/fail status of a test run.

Args: test_run_id: ALM ID of the run. status: 'Passed', 'Failed', 'Not Completed', 'Blocked'.

Returns: {"test_run_id": "", "status": "", "updated": true}

alm_get_run_stepsA

Get all run steps for a test run, sorted by step order.

Returns step IDs and order numbers — use these to map evidence (screenshots) to the correct step before calling alm_update_run_step or alm_attach_to_entity.

Args: test_run_id: ALM ID of the run.

Returns: {"test_run_id": "", "run_steps": [{"id", "step_order", "name"}, ...], "count": }

alm_update_run_stepA

Update the status and actual-result comment for a single run step.

Args: test_run_id: ALM ID of the run. run_step_id: ALM ID of the run step (from alm_get_run_steps). status: 'Passed', 'Failed', 'Not Completed'. comments: Actual result / comments text to record against this step.

Returns: {"test_run_id", "run_step_id", "status", "updated": true}

alm_execute_testA

Full end-to-end test execution in a single call.

Finds the test instance → creates a run → updates run status → updates all run steps. This is the primary tool for recording automation results in ALM.

Args: test_set_id: ALM ID of the test set containing the test instance. test_id: ALM ID of the test case in Test Plan. test_name: Name matching the test instance in the test set. status: 'Passed' or 'Failed'. comments: Optional comment written to step actual-result field. peer_reviewer: Optional ALM username to set as peer reviewer (user-template-06).

Returns: {"success": true/false, "test_run_id", "status", "steps_updated": }

alm_list_defectsA

List defects from the project with optional HPQL filter.

Args: query: HPQL filter string (without braces). Examples: "status[Open]" "status[Open];priority[4-Very High]" "owner[jsmith]" "name[login]" Leave empty to list all defects up to page_size. page_size: Maximum number of defects to return (default 100).

Returns: {"defects": [...], "count": }

alm_get_defectA

Get the full details of a defect by its ID.

Args: defect_id: ALM numeric ID of the defect.

Returns: {"defect_id": "", "fields": {all ALM field names and values}}

alm_create_defectA

Create a new defect (bug) in the ALM project.

Args: name: Defect summary / title (required). severity: '1-Low', '2-Medium', '3-High', '4-Very High'. priority: '1-Low', '2-Medium', '3-High', '4-Very High'. description: Detailed description of the defect. extra_fields: Any additional ALM field names → values, e.g. {"owner": "jsmith", "status": "Open", "detected-in-rel": "2.1", "environment": "QA", "component": "Login"}.

Returns: {"success": true, "defect_id": "", "name": ""}

alm_update_defectA

Update any field(s) on an existing defect.

Common fields: "status", "priority", "severity", "owner", "description", "closing-version", "fix-version", "environment", "component".

Args: defect_id: ALM ID of the defect to update. fields: Dict of ALM field names → new values. Example: {"status": "Fixed", "owner": "jsmith", "closing-version": "2.1"}

Returns: {"defect_id": "", "fields_updated": [...], "updated": true}

alm_list_requirementsA

List requirements from the project with optional HPQL filter.

Args: query: HPQL filter string, e.g. "status[Not Covered]", "priority[4-Very High]". Leave empty to list all requirements up to page_size. page_size: Maximum number of results (default 100).

Returns: {"requirements": [...], "count": }

alm_get_requirementA

Get the full details of a requirement by ID.

Args: req_id: ALM numeric ID of the requirement.

Returns: {"req_id": "", "fields": {all ALM field names and values}}

alm_create_requirementA

Create a new requirement in the ALM project.

Args: name: Requirement name / title (required). req_type: Requirement type, e.g. 'Business', 'Functional', 'Testing', 'Undefined'. description: Detailed requirement description. extra_fields: Optional dict of additional ALM field names → values.

Returns: {"success": true, "req_id": "", "name": ""}

alm_attach_to_entityA

Upload a local file as an attachment to any ALM entity.

Supports screenshots, test reports, logs, and any other file type.

Args: entity_type: ALM collection name — one of: 'runs' → attach to a test run (reports, screenshots) 'run-steps' → attach a screenshot/evidence to a single run step (use the run-step ID from alm_get_run_steps) 'defects' → attach to a defect (screenshots, logs, evidence) 'tests' → attach to a test case 'test-sets' → attach to a test set 'requirements' → attach to a requirement entity_id: Numeric ALM ID of the entity. For 'run-steps', this is the run-step ID (not the run ID). file_path: Absolute path to the file on the machine running this server. Example: 'C:/reports/screenshot.png'

Returns: {"success": true, "entity_type", "entity_id", "file_path"}

alm_searchA

Generic HPQL search across any ALM entity collection.

Use this for advanced queries not covered by the specific tools above.

Args: entity_type: ALM entity collection — e.g. 'defects', 'tests', 'requirements', 'test-sets', 'test-instances', 'runs', 'test-folders'. query: HPQL filter string (without braces). Examples: "status[Open];severity[4-Very High]" "name[login]" "owner[jsmith];creation-time[> '2026-01-01']" "owner[u1197976];parent-id[2400]" ← filter tests by folder + owner Leave empty to return all entities up to page_size. NOTE: For 'tests', use 'parent-id' to filter by folder — there is no 'subject' field. Combining 'parent-id' with multiple OR values (e.g. parent-id[1|2|3]) may cause HTTP 500 on some ALM servers; query each folder separately in that case. fields: Comma-separated ALM field names to include in the response. Example: 'id,name,status,owner,creation-time' For 'tests': valid fields include id,name,status,owner,parent-id, creation-time,subtype-id,description. 'subject' is NOT a valid field. page_size: Maximum records to return (default 100).

Returns: {"entity_type", "results": [...], "count": }

alm_list_domains_projectsA

List all ALM domains and their projects accessible to the current user.

Use this to discover available domains and project names.

Returns: {"domains": [{"domain": "", "projects": ["", ...]}, ...]}

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/UditMahaldar/opentext-alm-mcp'

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