ISPW MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ISPW MCP ServerList tasks for assignment PLAY000001"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Clone the project directory:
cd /path/to/ispw-mcp-serverCreate the environment and install locked dependencies:
uv sync --lockedConfigure environment variables:
cp .env.example .envEdit
.envand 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-serverUsing the installed entry point directly:
.venv/bin/ispw-mcp-serverWith the MCP Inspector (for testing):
npx @modelcontextprotocol/inspector uv run ispw-mcp-serverConfiguration 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 IDresponse_format(optional): "markdown" or "json" (default: markdown)
Example:
List all DEV level assignments for SRID ISPWispw_get_assignment
Get detailed information about a specific assignment.
Parameters:
srid(str): System Resource Identifierassignment_id(str): Assignment identifierresponse_format(optional): Output format
Example:
Get details for assignment PLAY000001 in ISPWispw_create_assignment
Create a new assignment.
Parameters:
srid(str): System Resource Identifierassignment_id(str): Unique assignment identifierstream(str): Stream nameapplication(str): Application namedescription(optional): Assignment descriptiondefault_path(optional): Default pathresponse_format(optional): Output format
Example:
Create a new assignment PLAY000002 in ISPW for stream PLAY and application PLAYTask Tools
ispw_list_tasks
List all tasks for a specific assignment.
Parameters:
srid(str): System Resource Identifierassignment_id(str): Assignment identifierresponse_format(optional): Output format
Example:
List all tasks for assignment PLAY000001Release Tools
ispw_list_releases
List all releases for a specific SRID.
Parameters:
srid(str): System Resource Identifierrelease_id(optional): Filter by specific release IDresponse_format(optional): Output format
Example:
List all releases for ISPWispw_get_release
Get detailed information about a specific release.
Parameters:
srid(str): System Resource Identifierrelease_id(str): Release identifierresponse_format(optional): Output format
ispw_create_release
Create a new release.
Parameters:
srid(str): System Resource Identifierrelease_id(str): Unique release identifierstream(str): Stream nameapplication(str): Application namedescription(optional): Release descriptionresponse_format(optional): Output format
Operation Tools
ispw_generate_assignment
Generate code for an assignment (compile and prepare).
Parameters:
srid(str): System Resource Identifierassignment_id(str): Assignment identifierlevel(optional): Target level for generationruntime_configuration(optional): Runtime configurationresponse_format(optional): Output format
Example:
Generate assignment PLAY000001 for level DEVispw_promote_assignment
Promote an assignment to the next level.
Parameters:
srid(str): System Resource Identifierassignment_id(str): Assignment identifierlevel(optional): Target level for promotionchange_type(optional): S (Standard), I (Incidental), E (Emergency)execution_status(optional): Execution statusresponse_format(optional): Output format
Example:
Promote assignment PLAY000001 to INT level with Standard change typeispw_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 Identifiertarget_id(str): Assignment, release, or set identifiertarget_type(str): "assignment", "release", or "set"level(optional): Target level for deploymentdeploy_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:00ZSet and Package Tools
ispw_list_sets
List all sets for a specific SRID.
Parameters:
srid(str): System Resource Identifierset_id(optional): Filter by specific set IDresponse_format(optional): Output format
ispw_list_packages
List all packages for a specific SRID.
Parameters:
srid(str): System Resource Identifierpackage_id(optional): Filter by specific package IDresponse_format(optional): Output format
ispw_get_package
Get detailed information about a specific package.
Parameters:
srid(str): System Resource Identifierpackage_id(str): Package identifierresponse_format(optional): Output format
Architecture
Key Design Decisions
Comprehensive API Coverage: Implements all major ISPW REST API endpoints for complete workflow support
Dual Format Responses: Markdown for human readability, JSON for programmatic processing
Shared Utilities: DRY principle with reusable API client, error handling, and formatting functions
Strong Validation: Pydantic models ensure all inputs are validated before API calls
Async Design: All I/O operations use async/await for optimal performance
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 fileDevelopment
Running Tests
make test # pytest with coverageCode Quality
The project uses Ruff and mypy (strict):
make check # lint + format check + typecheck + test
make fmt # auto-fix and formatAdding New Tools
When adding new ISPW API endpoints:
Define Pydantic input model with validation
Create tool function with
@mcp.tool()decoratorAdd proper annotations (readOnlyHint, destructiveHint, etc.)
Implement using shared
_make_api_request()utilityHandle errors with
_handle_api_error()Support both markdown and JSON output formats
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
Token Management: Store ISPW_API_TOKEN securely, never commit to version control
SSL Verification: Consider enabling SSL verification for production deployments
Access Control: Tokens should have minimal required permissions
Audit Logging: ISPW maintains audit logs of all operations
Contributing
When contributing:
Follow Python best practices and PEP 8
Use type hints throughout
Add comprehensive docstrings
Include parameter validation
Test with both markdown and JSON formats
Update README documentation
License
Apache License 2.0. See LICENSE.md.
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
Available Tools
13 toolsispw_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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-readonly, non-idempotent, non-destructive, closed-world operation. The description adds useful context by stating the uniqueness constraint on assignment_id and that the tool returns created details or an error message, but it does not cover permissions, duplicate-handling specifics, or broader side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured with Args, Returns, and Examples sections, and the key purpose is front-loaded. It contains some redundancy between the first two sentences, but overall it is appropriately sized for a create tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that annotations cover the safety profile and an output schema exists, the description provides sufficient information about required inputs and the uniqueness constraint. It could be more complete around failure modes or permissions, but nothing critical is missing for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the top-level schema description coverage is low, the description enumerates all nested input fields, including optional fields and the default response format, and provides a concrete example. It largely mirrors the nested schema descriptions rather than adding deep semantics, but it does compensate for the top-level gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: creating a new ISPW assignment container for grouping related development work. It is clear what the tool does, though it does not explicitly distinguish the tool from siblings such as ispw_generate_assignment or ispw_create_release.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by describing the assignment as a container for related development work and by noting that the assignment ID must be unique within the SRID. However, there is no explicit guidance on when to use this tool versus alternatives, nor any when-not-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered. The description adds the conceptual role (release container coordinating assignments) and a uniqueness constraint that also appears in the schema; it says nothing about permissions, idempotency across retries, or error conditions beyond a generic 'error message'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose statement is front-loaded and the example is useful, but the Args block is a near-verbatim restatement of the input schema and the Returns section duplicates information already carried by the output schema. Meaningful trimming is possible without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description needn't explain return values, and annotations cover the safety profile; what remains (unique ID constraint, coordinating assignments, default response format) is present. Only the absence of permission/error context keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Reported schema description coverage is 0%, so the description must compensate and it does: every field (srid, release_id, stream, application, description, response_format) is listed with meaning, and a worked example supplies concrete values. It stops short of explaining value formats or valid stream/application references, keeping it at 4 rather than 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new ISPW release') and adds scope: a container for coordinating deployment of multiple assignments. The verb alone distinguishes it from the ispw_get_release / ispw_list_releases siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The uniqueness constraint on release_id within the SRID implies when creation will fail, but there is no explicit guidance on when to use this versus ispw_create_assignment or other siblings, and no prerequisites are stated. Usage is inferable from the verb only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_deployADestructive
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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is covered. The description adds real value beyond them: it warns that production/target environments are affected and reveals that the call returns an operation ID and status URL, implying an asynchronous job rather than a synchronous mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and safety warning are front-loaded well, and the examples section earns its space. However, the opening two sentences restate the same idea ('Deploy ... to target environment' / 'Deploys code to the target environment'), and the Args block largely duplicates descriptions already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be documented, yet the description still mentions operation ID and status URL helpfully. Examples cover the three target types and the scheduling path. What is missing is the async/polling contract and what happens to artifacts already in the target environment, which matters given the destructive hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported at 0%, so the description must carry the parameter burden, and it does enumerate every field with types and optionality (srid, target_id, target_type, level, deploy_implementation_time, deploy_active, response_format). The worked examples concretely show correct value shapes, notably target_type='assignment' with a PLAY ID and level='PRD' for releases, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Deploy) and resource (ISPW assignment, release, or set) plus the destination environment, which is far more precise than a bare 'deploy'. It does not, however, distinguish this from the sibling ispw_promote_assignment, which an agent could reasonably consider an alternative for moving code forward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'This is typically the final step in the deployment pipeline' and 'Can deploy immediately or schedule for a future time' give useful situational context. There is no explicit 'use this instead of X' routing against ispw_promote_assignment, and no stated prerequisites or conditions under which deployment should be avoided beyond a generic caution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new signals: the operation is asynchronous and returns an operation ID plus a status URL for polling — an important behavioral detail absent from annotations. It does not say whether generation can fail mid-run or what happens to prior generated output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The prose lead and the Returns/Examples blocks earn their place, but the Args section duplicates the schema field-for-field with identical wording, spending a third of the description on zero-information repetition. The useful content is front-loaded, so the structural ordering is sound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return description is a bonus rather than a necessity, and the async status-URL note is the key missing-from-schema fact an agent needs. Coverage of the workflow position and example invocations rounds it out; the gap is that the ambiguous optional parameters (level, runtime_configuration) remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description merely restates the schema verbatim ("srid: System Resource Identifier", "level: Target level for generation"), adding no meaning — it never explains what an SRID value looks like or what a "level" such as DEV implies. The examples contribute the only real value by showing concrete values (srid="ISPW", level="DEV"), which is useful but thin compensation for a 0% coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Generate code for an ISPW assignment") and expands it into concrete mechanics: compiles and prepares code within an assignment. It also places the action in the workflow — first step after code changes, before promoting to higher environments — which implicitly separates it from ispw_promote_assignment and ispw_deploy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"This is typically the first step after code changes before promoting to higher environments" gives a clear when-to-use context and names the subsequent step, letting an agent infer that promote/deploy are downstream. It stops short of explicit exclusions or prerequisites (e.g., what states an assignment must be in to be generated).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_get_assignmentARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false. The description adds useful behavioral context by naming the returned fields and noting that failures return an error message, though it does not discuss permissions or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the purpose and returned details, followed by standard Args/Returns/Examples sections. Some Args content repeats the schema, but the overall structure is efficient and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given rich annotations and an output schema, the description is largely complete for a simple getter. The main remaining gap is that it does not tell an agent how to obtain the required assignment_id when it is unknown.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description lists srid, assignment_id, and response_format with brief meanings plus one example. However, with low schema description coverage, it only partially compensates: it does not explain assignment_id format constraints or how callers should discover an assignment_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get detailed information about a specific ISPW assignment. It distinguishes a single-assignment retrieval from list-style siblings by emphasizing 'specific', though it does not explicitly name ispw_list_assignments as the discovery alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'specific ISPW assignment' and the example call, but there is no explicit when-to-use guidance, no when-not conditions, and no mention of using ispw_list_assignments to find an assignment_id. It is adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_get_packageARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds useful context about the returned details and error behavior, but does not discuss authorization, rate limits, or other operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and then uses structured Args, Returns, and Examples sections. It is somewhat verbose and repeats the retrieval idea across the opening sentences, but the example earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup tool, the description plus rich annotations and an output schema provide enough context to call the tool correctly. The main remaining gap is explicit routing guidance versus sibling package tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported as 0% at the top level, so the description carries the burden of documenting the nested inputs. It enumerates srid, package_id, and response_format with meanings and the default output format, which is enough to invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieve detailed information about a specific ISPW package. It clearly implies differentiation from list-style siblings such as ispw_list_packages by emphasizing a specific package, but it does not explicitly name the sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'specific ISPW package' and the example, which suggests retrieving one known package rather than listing packages. However, there is no explicit when-to-use guidance, no exclusions, and no named alternative such as ispw_list_packages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_get_releaseARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered. The description adds that it returns 'owner, stream, application, status, and timestamps' and can return an error message, but that field list largely duplicates the output schema rather than disclosing new behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose in the first sentence, followed by detail, args, returns, and a short example. The Args/Returns blocks restate schema content and could be trimmed, but overall it is compact and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-object read tool with an output schema and rich annotations, the description covers purpose, inputs, default format, error behavior, and includes an example. Nothing essential for correct invocation is missing, aside from guidance on how to obtain a valid release_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is reported at 0% for the top-level 'params' wrapper, so the description carries weight here: it names srid, release_id, and response_format (with its markdown default) and gives a concrete example value pairing. That compensates for the coverage gap, though it adds no format/validation detail for release_id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
First sentence uses a specific verb ('Get') plus resource ('a specific ISPW release'), and the word 'specific' implicitly distinguishes it from ispw_list_releases. It doesn't explicitly name the sibling, but an agent can tell it retrieves one release rather than a collection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the example ('Get release: srid="ISPW", release_id="REL001"') and the phrase 'release_id: Release identifier to retrieve' suggest you must already know the ID. No when-to-use/when-not guidance or explicit routing to ispw_list_releases for discovery is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_list_assignmentsARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive, closed-world operation. The description adds useful behavioral context by noting the default SRID source, the response formats, and that it returns a formatted list or error message.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses clear Args, Returns, and Examples sections. It is appropriately sized and each section contributes useful invocation guidance without excessive prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of annotations and an output schema, the description provides more than enough context: it covers purpose, all input fields, defaults, filtering modes, output format, and examples. An agent has everything needed to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the context reports 0% schema description coverage, the description documents every nested parameter: srid with its env-var default, level with allowed DEV/INT/ACC/PRD values, assignment_id filtering, and response_format defaults. The examples further clarify how these parameters are combined in practice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List ISPW assignments for a specific SRID.' It also clarifies the domain concept by explaining that assignments are containers grouping related changes, which helps distinguish this listing tool from sibling getters and creators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains that the tool retrieves all assignments or filters by level or assignment ID, and provides concrete examples for each mode. It does not explicitly contrast this with siblings such as ispw_get_assignment, so it stops short of full when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_list_packagesARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds context that packages are deployment units and that the return is a formatted list or error message. It does not disclose any additional behavioral traits like pagination, permissions, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then organized into Args, Returns, and Examples sections. The additional detail is useful given the low schema coverage, but some repetition of schema field definitions could be trimmed. Overall it is appropriately sized and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with read-only annotations and an output schema, the description covers the purpose, all parameters, and usage examples. It does not mention pagination or sorting, which could matter for large result sets, but the output schema handles return values. It is nearly complete for the expected agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is reported as 0%, so the description must compensate, and it does: it names srid, package_id, and response_format, explains their meanings, and gives concrete examples. This adds meaning beyond the raw schema, though it largely repeats the field descriptions present in the $defs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List ISPW packages for a specific SRID.' It also clarifies the scope by noting that it retrieves all packages or filters by package ID. It does not explicitly contrast with siblings like ispw_get_package, but the list-vs-get distinction is inherent in the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples for listing all packages and filtering by package ID, which implies the primary use case. However, it does not state when to use this tool versus alternatives such as ispw_get_package or ispw_list_sets. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_list_releasesARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by explaining the domain semantics of a release ('collections of assignments for coordinated deployment') and by stating that the result is either a formatted list or an error message. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the release definition follows as useful context. The Google-style 'Args:'/'Returns:' scaffolding restates container details ('Validated input parameters containing:') that add little, but the examples earn their space, so waste is minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not obliged to enumerate return fields, and it appropriately just notes 'formatted list or error message.' With one required wrapper object containing three documented fields, the description covers everything needed to call the tool correctly; only the meaning of SRID remains thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Measured schema coverage is 0%, so the description carries the burden, and it does document all three fields (srid, release_id, response_format) with defaults and worked examples. The weak spot is that 'srid' is only glossed as 'System Resource Identifier' — the acronym expanded but not explained — and the markdown/json choice is only noted for its default, not its effect on output shape.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource ('List ISPW releases') plus the scoping key (SRID), so intent is unambiguous. It also defines what a release is, which helps disambiguate from siblings like ispw_list_assignments. It stops short of explicitly contrasting with ispw_get_release (single-release retrieval), which would have earned a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Two concrete call patterns are given ('List all releases: srid="ISPW"' and 'Find specific release: srid="ISPW", release_id="REL001"'), making the when-to-use condition between full listing and filtering explicit. There is no exclusion guidance such as 'use ispw_get_release when you need details of one release,' so the alternative-routing bar for a 5 is not met.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_list_setsARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world behavior, so the safety profile is covered. The description adds that filtering is optional and that errors are returned as messages, but gives no detail on result size, ordering, or pagination that would help the agent reason about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action in the first line, then uses short labeled Args/Returns/Examples sections. The Args block partially duplicates the schema, which is mild waste, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the tool has one nested params object with three simple fields. Purpose, filtering behavior, and examples together give an agent enough to call it correctly; only sibling differentiation is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Reported schema description coverage is 0%, so the description must carry the parameter burden; its Args block and the two examples supply meanings and concrete sample values (srid='ISPW', set_id='SET001'). However, it merely restates the parameter names without adding type constraints, defaults for response_format, or the markdown/json distinction present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List ISPW sets for a specific SRID') and clarifies the scope by noting it can return all sets or filter by set ID. It also explains what a set is ('collections of components for deployment'), which distinguishes it conceptually from assignment/package siblings, though it never names an alternative tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the examples show 'list all' vs 'find specific set' by omitting or supplying set_id. There is no explicit statement of when to prefer this tool over siblings like ispw_list_packages or ispw_list_assignments, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ispw_list_tasksARead-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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a read-only, idempotent, non-destructive, closed-world operation. The description adds useful context that tasks represent modules or components such as COBOL programs, JCL, and copybooks, and that errors may be returned, but it does not disclose pagination, permissions, or response-shaping behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with the purpose and then structured into Args, Returns, and Examples sections. It is somewhat repetitive because 'List all tasks' and 'Retrieves all tasks' restate the same action, but the overall size is reasonable for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with rich annotations and an output schema, the description covers the core purpose, parameters, return type, and an example. It is largely complete, though it could say more about pagination or whether all tasks are always returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is reported as 0%, so the description must carry more of the parameter burden. It does list the three nested parameters and gives an example using srid and assignment_id, but the explanations largely restate the parameter names and do not add much format or validation detail beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'List all tasks for a specific ISPW assignment.' It also clarifies that tasks are individual work items within an assignment, distinguishing this tool from sibling tools that operate on assignments, releases, sets, or packages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose: it retrieves tasks inside a given assignment. However, the description does not explicitly say when to use this instead of ispw_get_assignment, ispw_list_assignments, or other sibling tools, and it offers no exclusions or alternative-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the description does not need to re-state the safety profile. It does add genuine context beyond annotations: promotion mutates the assignment AND all of its tasks, and the return value is an operation ID plus a status URL, implying an asynchronous operation the agent must poll. It does not say what happens on failure or whether a promotion can be reversed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first line, followed by lifecycle context, then Args/Returns/Examples. The structure is skimmable and every section serves a purpose. There is some redundancy in re-listing parameters already present in the schema, and 'Returns' largely duplicates what the output schema covers, but neither is wasteful enough to hurt.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, non-idempotent lifecycle tool with an output schema, the description covers purpose, timing, all inputs, and the shape of the response. Minor gaps remain: no statement about error/failure behavior, permissions, or whether the call is blocking versus poll-based, which matter given the operation-ID/status-URL return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema description coverage is 0% by the metric, the Args block restates and enriches every parameter: srid, assignment_id, the target level, change_type with its S/I/E meanings, execution_status, and response_format. The one soft spot is 'execution_status', which is repeated verbatim without any explanation of valid values or effect, and target levels are only implied via the body examples rather than listed as accepted values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb + resource ('Promote an ISPW assignment'), and the second pins down the exact effect: moving the assignment and its tasks from DEV to INT, INT to ACC, or ACC to PRD. This clearly distinguishes it from siblings like ispw_generate_assignment, ispw_deploy, and ispw_create_assignment, which do different lifecycle steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Typically done after successful generation and testing' gives a real precondition for calling this tool, and the lifecycle examples imply when in the workflow promotion applies. However, it never explicitly names alternatives (e.g., 'use ispw_deploy for the final move to production') or states when not to promote, so it falls short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v1.0.0- First observed
ispw_create_assignment - First observed
ispw_create_release - First observed
ispw_deploy - First observed
ispw_generate_assignment - First observed
ispw_get_assignment - First observed
ispw_get_package - First observed
ispw_get_release - First observed
ispw_list_assignments - First observed
ispw_list_packages - First observed
ispw_list_releases - First observed
ispw_list_sets - First observed
ispw_list_tasks - First observed
ispw_promote_assignment
TDQS
Scored across 13 tools
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'.
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.
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.
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
Related MCP Connectors
Plan Salesforce deploys, open pull requests and trigger pipelines from your AI client.
Provides capabilities that let LLM agents perform a range of infrastructure management tasks.
List, read, edit, and deploy your GenMB AI-generated apps from any MCP client.
MCP-Native LLM Orchestration Agent
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceEnables LLMs and AI applications to interact with Azure DevOps Work Items, supporting queries, filtering, status updates, date management, effort tracking, descriptions, and comments through natural language.-
- FlicenseNot gradedqualityDmaintenanceEnables LLM agents to manage projects, track issues, log work, and integrate with Git. Provides 23 MCP tools for full project management capabilities.15-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Azure DevOps APIs for managing projects, work items, repositories, pull requests, pipelines, and more through natural language.21,494 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to interact with IBM Engineering Lifecycle Management (ELM), including DOORS Next Generation, EWM, and ETM, for managing requirements, work items, tests, and project builds through natural language.MIT