Skip to main content
Glama
ISPW MCP Server

ISPW MCP Server

by markbsigler

ISPW MCP Server

A Model Context Protocol (MCP) server for BMC Compuware ISPW (Interactive Source Program Workbench) - a comprehensive source code management, release automation, and deployment automation tool for mainframe DevOps.

Overview

This MCP server enables LLMs to interact with ISPW through a comprehensive set of tools for:

  • Assignment Management: Create, list, and retrieve assignments (containers for development work)

  • Task Management: View tasks within assignments (individual modules/components)

  • Release Management: Create and manage releases for coordinated deployments

  • Operations: Generate, promote, and deploy code through the development lifecycle

  • Set & Package Management: List and view deployment sets and packages

Related MCP server: Lazy LLMs Project Management MCP Server

Features

  • ✅ Complete ISPW REST API coverage for core workflows

  • ✅ Token-based authentication with CES (Compuware Enterprise Services)

  • ✅ Dual output formats: Human-readable Markdown and machine-readable JSON

  • ✅ Comprehensive error handling with actionable messages

  • ✅ Pydantic validation for all inputs

  • ✅ Async/await for optimal performance

  • ✅ Support for both production and custom CES servers

Installation

Prerequisites

  • Python 3.11 or higher

  • uv for dependency management

  • Access to a BMC Compuware ISPW instance

  • Personal Access Token for CES authentication

Setup

  1. Clone the project directory:

    cd /path/to/ispw-mcp-server
  2. Create the environment and install locked dependencies:

    uv sync --locked
  3. Configure environment variables:

    cp .env.example .env

    Edit .env and set your values:

    # For custom CES server:
    CES_HOST=your-ces-host.example.com
    CES_PORT=2020
    
    # Or for production server:
    # ISPW_BASE_URL=https://ispw.api.compuware.com
    
    # Required: Your personal access token
    ISPW_API_TOKEN=your_token_here
    
    # Default SRID (optional, defaults to "ISPW")
    ISPW_DEFAULT_SRID=ISPW

Usage

Running the Server

With uv:

uv run ispw-mcp-server

Using the installed entry point directly:

.venv/bin/ispw-mcp-server

With the MCP Inspector (for testing):

npx @modelcontextprotocol/inspector uv run ispw-mcp-server

Configuration in Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "ispw": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/ispw-mcp-server",
        "run",
        "ispw-mcp-server"
      ],
      "env": {
        "ISPW_BASE_URL": "https://your-ces-host:2020",
        "ISPW_API_TOKEN": "your_token_here",
        "ISPW_DEFAULT_SRID": "ISPW"
      }
    }
  }
}

Alternatively, point command at the virtualenv entry point:

{
  "mcpServers": {
    "ispw": {
      "command": "/path/to/ispw-mcp-server/.venv/bin/ispw-mcp-server",
      "env": {
        "ISPW_BASE_URL": "https://your-ces-host:2020",
        "ISPW_API_TOKEN": "your_token_here",
        "ISPW_DEFAULT_SRID": "ISPW"
      }
    }
  }
}

Available Tools

Assignment Tools

ispw_list_assignments

List all assignments for a specific SRID, with optional filtering by level or assignment ID.

Parameters:

  • srid (str): System Resource Identifier (default: from env)

  • level (optional): Filter by level (DEV, INT, ACC, PRD)

  • assignment_id (optional): Filter by specific assignment ID

  • response_format (optional): "markdown" or "json" (default: markdown)

Example:

List all DEV level assignments for SRID ISPW

ispw_get_assignment

Get detailed information about a specific assignment.

Parameters:

  • srid (str): System Resource Identifier

  • assignment_id (str): Assignment identifier

  • response_format (optional): Output format

Example:

Get details for assignment PLAY000001 in ISPW

ispw_create_assignment

Create a new assignment.

Parameters:

  • srid (str): System Resource Identifier

  • assignment_id (str): Unique assignment identifier

  • stream (str): Stream name

  • application (str): Application name

  • description (optional): Assignment description

  • default_path (optional): Default path

  • response_format (optional): Output format

Example:

Create a new assignment PLAY000002 in ISPW for stream PLAY and application PLAY

Task Tools

ispw_list_tasks

List all tasks for a specific assignment.

Parameters:

  • srid (str): System Resource Identifier

  • assignment_id (str): Assignment identifier

  • response_format (optional): Output format

Example:

List all tasks for assignment PLAY000001

Release Tools

ispw_list_releases

List all releases for a specific SRID.

Parameters:

  • srid (str): System Resource Identifier

  • release_id (optional): Filter by specific release ID

  • response_format (optional): Output format

Example:

List all releases for ISPW

ispw_get_release

Get detailed information about a specific release.

Parameters:

  • srid (str): System Resource Identifier

  • release_id (str): Release identifier

  • response_format (optional): Output format

ispw_create_release

Create a new release.

Parameters:

  • srid (str): System Resource Identifier

  • release_id (str): Unique release identifier

  • stream (str): Stream name

  • application (str): Application name

  • description (optional): Release description

  • response_format (optional): Output format

Operation Tools

ispw_generate_assignment

Generate code for an assignment (compile and prepare).

Parameters:

  • srid (str): System Resource Identifier

  • assignment_id (str): Assignment identifier

  • level (optional): Target level for generation

  • runtime_configuration (optional): Runtime configuration

  • response_format (optional): Output format

Example:

Generate assignment PLAY000001 for level DEV

ispw_promote_assignment

Promote an assignment to the next level.

Parameters:

  • srid (str): System Resource Identifier

  • assignment_id (str): Assignment identifier

  • level (optional): Target level for promotion

  • change_type (optional): S (Standard), I (Incidental), E (Emergency)

  • execution_status (optional): Execution status

  • response_format (optional): Output format

Example:

Promote assignment PLAY000001 to INT level with Standard change type

ispw_deploy

Deploy an assignment, release, or set to target environment.

⚠️ CAUTION: This is a destructive operation that affects production or target environments.

Parameters:

  • srid (str): System Resource Identifier

  • target_id (str): Assignment, release, or set identifier

  • target_type (str): "assignment", "release", or "set"

  • level (optional): Target level for deployment

  • deploy_implementation_time (optional): Scheduled time (ISO 8601)

  • deploy_active (optional): Deploy to active libraries (boolean)

  • response_format (optional): Output format

Examples:

Deploy assignment PLAY000001 to production
Deploy release REL001 to PRD level
Schedule deployment of assignment PLAY000001 for 2026-01-15T10:00:00Z

Set and Package Tools

ispw_list_sets

List all sets for a specific SRID.

Parameters:

  • srid (str): System Resource Identifier

  • set_id (optional): Filter by specific set ID

  • response_format (optional): Output format

ispw_list_packages

List all packages for a specific SRID.

Parameters:

  • srid (str): System Resource Identifier

  • package_id (optional): Filter by specific package ID

  • response_format (optional): Output format

ispw_get_package

Get detailed information about a specific package.

Parameters:

  • srid (str): System Resource Identifier

  • package_id (str): Package identifier

  • response_format (optional): Output format

Architecture

Key Design Decisions

  1. Comprehensive API Coverage: Implements all major ISPW REST API endpoints for complete workflow support

  2. Dual Format Responses: Markdown for human readability, JSON for programmatic processing

  3. Shared Utilities: DRY principle with reusable API client, error handling, and formatting functions

  4. Strong Validation: Pydantic models ensure all inputs are validated before API calls

  5. Async Design: All I/O operations use async/await for optimal performance

  6. Flexible Configuration: Support for both production and custom CES servers

Project Structure

ispw-mcp-server/
├── src/ispw_mcp_server/
│   ├── __init__.py          # Package metadata and exports
│   └── server.py            # Main server implementation
├── tests/                   # pytest suite
├── ispw_openapi_spec.json   # OpenAPI specification (reference)
├── pyproject.toml           # Dependencies + tool configuration
├── uv.lock                  # Committed lockfile
├── Makefile                 # Development commands
├── .env.example             # Environment template
├── .env                     # Your configuration (not in git)
├── .gitignore               # Git ignore rules
└── README.md                # This file

Development

Running Tests

make test        # pytest with coverage

Code Quality

The project uses Ruff and mypy (strict):

make check       # lint + format check + typecheck + test
make fmt         # auto-fix and format

Adding New Tools

When adding new ISPW API endpoints:

  1. Define Pydantic input model with validation

  2. Create tool function with @mcp.tool() decorator

  3. Add proper annotations (readOnlyHint, destructiveHint, etc.)

  4. Implement using shared _make_api_request() utility

  5. Handle errors with _handle_api_error()

  6. Support both markdown and JSON output formats

  7. Update this README with tool documentation

Troubleshooting

Authentication Errors

Problem: "Error: Authentication failed. Check your ISPW_API_TOKEN is valid."

Solution:

  • Verify your Personal Access Token is correct

  • Ensure the token has appropriate permissions in CES

  • Check token hasn't expired

Connection Errors

Problem: "Error: Request timed out. The ISPW server may be slow or unavailable."

Solution:

  • Verify CES_HOST and CES_PORT are correct

  • Check network connectivity to the CES server

  • Increase ISPW_TIMEOUT if operations are legitimately slow

SSL Certificate Issues

Problem: SSL certificate verification fails for custom CES server

Solution: The server currently disables SSL verification for custom CES servers. For production use, configure proper SSL certificates.

Security Considerations

  1. Token Management: Store ISPW_API_TOKEN securely, never commit to version control

  2. SSL Verification: Consider enabling SSL verification for production deployments

  3. Access Control: Tokens should have minimal required permissions

  4. Audit Logging: ISPW maintains audit logs of all operations

Contributing

When contributing:

  1. Follow Python best practices and PEP 8

  2. Use type hints throughout

  3. Add comprehensive docstrings

  4. Include parameter validation

  5. Test with both markdown and JSON formats

  6. Update README documentation

License

Apache License 2.0. See LICENSE.md.

Support

For ISPW API issues, consult:

For MCP server issues:

  • Check server logs

  • Test with MCP Inspector

  • Review environment configuration

Changelog

Version 1.0.0 (2026-01-08)

Initial release with:

  • Complete assignment lifecycle management

  • Task viewing capabilities

  • Release creation and management

  • Generate, promote, and deploy operations

  • Set and package listing

  • Dual output formats (Markdown/JSON)

  • Comprehensive error handling

  • Full Pydantic validation

Available Tools

13 tools
ispw_create_assignmentA

Create a new ISPW assignment.

Creates a new assignment container for grouping related development work. The assignment must have a unique ID within the SRID.

Args: params (CreateAssignmentInput): Validated input parameters containing: - srid (str): System Resource Identifier - assignment_id (str): Unique assignment identifier - stream (str): Stream name for the assignment - application (str): Application name for the assignment - description (Optional[str]): Assignment description - default_path (Optional[str]): Default path for the assignment - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Created assignment details or error message

Examples: - Create assignment: srid="ISPW", assignment_id="PLAY000002", stream="PLAY", application="PLAY", description="New feature work"

Inputs: params (required). Returns: result

ispw_create_releaseA

Create a new ISPW release.

Creates a new release container for coordinating deployment of multiple assignments. The release must have a unique ID within the SRID.

Args: params (CreateReleaseInput): Validated input parameters containing: - srid (str): System Resource Identifier - release_id (str): Unique release identifier - stream (str): Stream name for the release - application (str): Application name for the release - description (Optional[str]): Release description - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Created release details or error message

Examples: - Create release: srid="ISPW", release_id="REL002", stream="PLAY", application="PLAY", description="Q1 2026 Release"

Inputs: params (required). Returns: result

ispw_deployA
Destructive

Deploy an ISPW assignment, release, or set to target environment.

Deploys code to the target environment. This is typically the final step in the deployment pipeline. Can deploy immediately or schedule for a future time.

CAUTION: This is a destructive operation that affects production or target environments.

Args: params (DeployInput): Validated input parameters containing: - srid (str): System Resource Identifier - target_id (str): Assignment, release, or set identifier - target_type (str): Type - 'assignment', 'release', or 'set' - level (Optional[str]): Target level for deployment - deploy_implementation_time (Optional[str]): Scheduled time (ISO 8601) - deploy_active (Optional[bool]): Deploy to active libraries - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Operation status including operation ID and status URL, or error message

Examples: - Deploy assignment: srid="ISPW", target_id="PLAY000001", target_type="assignment" - Deploy release: srid="ISPW", target_id="REL001", target_type="release", level="PRD" - Scheduled deploy: srid="ISPW", target_id="PLAY000001", target_type="assignment", deploy_implementation_time="2026-01-15T10:00:00Z"

Inputs: params (required). Returns: result

ispw_generate_assignmentA

Generate code for an ISPW assignment.

Initiates the generation process which compiles and prepares code within an assignment. This is typically the first step after code changes before promoting to higher environments.

Args: params (GenerateAssignmentInput): Validated input parameters containing: - srid (str): System Resource Identifier - assignment_id (str): Assignment identifier - level (Optional[str]): Target level for generation - runtime_configuration (Optional[str]): Runtime configuration - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Operation status including operation ID and status URL, or error message

Examples: - Generate assignment: srid="ISPW", assignment_id="PLAY000001" - Generate with level: srid="ISPW", assignment_id="PLAY000001", level="DEV"

Inputs: params (required). Returns: result

ispw_get_assignmentA
Read-onlyIdempotent

Get detailed information about a specific ISPW assignment.

Retrieves complete details for an assignment including owner, stream, application, level, status, and timestamps.

Args: params (GetAssignmentInput): Validated input parameters containing: - srid (str): System Resource Identifier - assignment_id (str): Assignment identifier to retrieve - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted assignment details or error message

Examples: - Get assignment: srid="ISPW", assignment_id="PLAY000001"

Inputs: params (required). Returns: result

ispw_get_packageA
Read-onlyIdempotent

Get detailed information about a specific ISPW package.

Retrieves complete details for a package including owner, application, status, and creation timestamp.

Args: params (GetPackageInput): Validated input parameters containing: - srid (str): System Resource Identifier - package_id (str): Package identifier to retrieve - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted package details or error message

Examples: - Get package: srid="ISPW", package_id="PKG001"

Inputs: params (required). Returns: result

ispw_get_releaseA
Read-onlyIdempotent

Get detailed information about a specific ISPW release.

Retrieves complete details for a release including owner, stream, application, status, and timestamps.

Args: params (GetReleaseInput): Validated input parameters containing: - srid (str): System Resource Identifier - release_id (str): Release identifier to retrieve - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted release details or error message

Examples: - Get release: srid="ISPW", release_id="REL001"

Inputs: params (required). Returns: result

ispw_list_assignmentsA
Read-onlyIdempotent

List ISPW assignments for a specific SRID.

Retrieves all assignments or filters by level or assignment ID. Assignments are containers for related development work in ISPW, grouping related changes together.

Args: params (ListAssignmentsInput): Validated input parameters containing: - srid (str): System Resource Identifier (default: from ISPW_DEFAULT_SRID env var) - level (Optional[AssignmentLevel]): Filter by assignment level (DEV, INT, ACC, PRD) - assignment_id (Optional[str]): Filter by specific assignment ID - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted list of assignments or error message

Examples: - List all assignments: srid="ISPW" - List DEV assignments: srid="ISPW", level="DEV" - Find specific assignment: srid="ISPW", assignment_id="PLAY000001"

Inputs: params (required). Returns: result

ispw_list_packagesA
Read-onlyIdempotent

List ISPW packages for a specific SRID.

Retrieves all packages or filters by package ID. Packages are deployment units that contain the actual components ready for deployment.

Args: params (ListPackagesInput): Validated input parameters containing: - srid (str): System Resource Identifier - package_id (Optional[str]): Filter by specific package ID - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted list of packages or error message

Examples: - List all packages: srid="ISPW" - Find specific package: srid="ISPW", package_id="PKG001"

Inputs: params (required). Returns: result

ispw_list_releasesA
Read-onlyIdempotent

List ISPW releases for a specific SRID.

Retrieves all releases or filters by release ID. Releases are collections of assignments for coordinated deployment to production or other environments.

Args: params (ListReleasesInput): Validated input parameters containing: - srid (str): System Resource Identifier - release_id (Optional[str]): Filter by specific release ID - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted list of releases or error message

Examples: - List all releases: srid="ISPW" - Find specific release: srid="ISPW", release_id="REL001"

Inputs: params (required). Returns: result

ispw_list_setsA
Read-onlyIdempotent

List ISPW sets for a specific SRID.

Retrieves all sets or filters by set ID. Sets are collections of components for deployment, providing another grouping mechanism for deployment units.

Args: params (ListSetsInput): Validated input parameters containing: - srid (str): System Resource Identifier - set_id (Optional[str]): Filter by specific set ID - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted list of sets or error message

Examples: - List all sets: srid="ISPW" - Find specific set: srid="ISPW", set_id="SET001"

Inputs: params (required). Returns: result

ispw_list_tasksA
Read-onlyIdempotent

List all tasks for a specific ISPW assignment.

Retrieves all tasks (individual work items) within an assignment. Tasks represent individual modules or components being worked on (e.g., COBOL programs, JCL, copybooks).

Args: params (ListTasksInput): Validated input parameters containing: - srid (str): System Resource Identifier - assignment_id (str): Assignment identifier - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Formatted list of tasks or error message

Examples: - List tasks: srid="ISPW", assignment_id="PLAY000001"

Inputs: params (required). Returns: result

ispw_promote_assignmentA

Promote an ISPW assignment to the next level.

Moves an assignment (and its tasks) through the development lifecycle to a higher level (e.g., from DEV to INT, INT to ACC, or ACC to PRD). Typically done after successful generation and testing.

Args: params (PromoteAssignmentInput): Validated input parameters containing: - srid (str): System Resource Identifier - assignment_id (str): Assignment identifier - level (Optional[str]): Target level for promotion - change_type (Optional[ChangeType]): S (Standard), I (Incidental), E (Emergency) - execution_status (Optional[str]): Execution status - response_format (ResponseFormat): Output format (default: markdown)

Returns: str: Operation status including operation ID and status URL, or error message

Examples: - Promote assignment: srid="ISPW", assignment_id="PLAY000001" - Promote to specific level: srid="ISPW", assignment_id="PLAY000001", level="INT", change_type="S"

Inputs: params (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.9/5.0

    Scored across 13 tools

    Disambiguation4/5

    Most tools pair a distinct resource with a distinct action (list/get/create assignment, release, package), so an agent can select correctly. Minor overlap remains: ispw_list_assignments can filter by assignment_id like ispw_get_assignment, ispw_deploy accepts assignment/release/set targets that overlap conceptually with ispw_promote_assignment, and sets vs packages are both described as 'collections of components for deployment'.

    Naming Consistency5/5

    Every tool uses the same ispw_ prefix followed by a verb_noun pattern in snake_case (ispw_list_tasks, ispw_create_release, ispw_promote_assignment). No camelCase or style mixing, and verbs are used consistently for the same semantic actions.

    Tool Count5/5

    13 tools is squarely in the well-scoped range and each one maps to a distinct ISPW lifecycle step (list/get/create containers, generate, promote, deploy). No obviously redundant or filler tools.

    Completeness3/5

    The generate/promote/deploy lifecycle and read paths are covered, but there is no update or delete for assignments, releases, or packages, and lists (tasks, sets) have no corresponding get/detail operations. Agents also cannot add/remove components or assignments from a release/set, which are common workflow steps in this domain.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers