HP ALM MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ALM_DOMAIN | Yes | ALM domain name | |
| ALM_PROJECT | Yes | ALM project name | |
| ALM_BASE_URL | Yes | Base URL of your ALM server, e.g. https://alm.company.com/qcbin | |
| ALM_PASSWORD | Yes | ALM login password | |
| ALM_USERNAME | Yes | ALM login username | |
| ALM_REQUEST_DELAY | No | Seconds between API calls — increase if ALM throttles requests | 2.0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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