ISPW MCP Server
by markbsigler
README.md
# 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
## 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.10 or higher
- Access to a BMC Compuware ISPW instance
- Personal Access Token for CES authentication
### Setup
1. **Clone or create the project directory:**
```bash
cd /path/to/ispw-mcp-server
```
2. **Create and activate a virtual environment:**
```bash
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```
3. **Install dependencies:**
```bash
pip install -e .
```
4. **Configure environment variables:**
```bash
cp .env.example .env
```
Edit `.env` and set your values:
```bash
# 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
#### As a standalone script:
```bash
python ispw_mcp_server.py
```
#### Using the installed command:
```bash
ispw-mcp-server
```
#### With the MCP Inspector (for testing):
```bash
npx @modelcontextprotocol/inspector python ispw_mcp_server.py
```
### Configuration in Claude Desktop
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"ispw": {
"command": "python",
"args": ["/path/to/ispw-mcp-server/ispw_mcp_server.py"],
"env": {
"ISPW_BASE_URL": "https://your-ces-host:2020",
"ISPW_API_TOKEN": "your_token_here",
"ISPW_DEFAULT_SRID": "ISPW"
}
}
}
}
```
Or using a virtual environment:
```json
{
"mcpServers": {
"ispw": {
"command": "/path/to/ispw-mcp-server/venv/bin/python",
"args": ["/path/to/ispw-mcp-server/ispw_mcp_server.py"],
"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/
├── ispw_mcp_server.py # Main server implementation
├── ispw_openapi_spec.json # OpenAPI specification (reference)
├── pyproject.toml # Project configuration
├── .env.example # Environment template
├── .env # Your configuration (not in git)
├── .gitignore # Git ignore rules
└── README.md # This file
```
## Development
### Running Tests
```bash
pytest
```
### Code Quality
The project uses Ruff for linting:
```bash
ruff check .
```
### 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
[Specify your license here]
## Support
For ISPW API issues, consult:
- BMC Compuware ISPW documentation
- BMC Compuware Support: https://www.bmc.com/support/
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
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues