A Model Context Protocol (MCP) server for interacting with Prow CI/CD systems, retrieving build logs, and diagnosing PR build issues.
- 🔍 Job Management: Get latest job runs and retrieve job logs
- 📊 Build Analysis: Find builds for specific PRs and analyze results
- 🚀 Smart Discovery: Multi-strategy PR build finding with fallback mechanisms
- 🔧 Diagnostics: Comprehensive PR build status diagnosis and test failure extraction
The server exposes 7 MCP tools:
get_latest_job_run
- Get the latest job run information for a specific job nameget_job_logs
- Retrieve logs for a specific Prow job IDget_build_logs
- Get logs for a specific build ID and job nameget_latest_prow_build_for_pr
- Find the latest Prow build for a GitHub PRget_prow_logs_from_pr
- Get comprehensive logs for a specific PRdiagnose_pr_build_status
- Comprehensive diagnostic tool for PR build issuesget_test_failures_from_artifacts
- Extract test failures from build artifacts
cd /path/to/prow-mcp-server
uv sync # Creates venv and installs dependencies from uv.lock
source .venv/bin/activate # On Windows: .venv\Scripts\activate
Add to your ~/.cursor/mcp.json
:
{
"mcpServers": {
"prow": {
"command": "uv",
"args": ["run", "/path/to/prow-mcp-server/.venv/bin/python", "/path/to/prow-mcp-server/main.py"],
"description": "MCP server for Prow CI/CD integration"
}
}
}
For web applications or services that need HTTP-based communication:
{
"mcpServers": {
"prow": {
"url": "http://0.0.0.0:8000/sse/",
"description": "MCP server for Prow CI/CD integration with direct SSE",
"env": {
"MCP_TRANSPORT": "sse"
}
}
}
}
SSE Endpoint: http://0.0.0.0:8000/sse/
Note: Make sure to start the SSE server separately with
MCP_TRANSPORT=sse uv run main.py
before using this configuration.
Run the comprehensive test suite (18 tests):
uv run python run_tests.py # Recommended
uv run pytest tests/ -v # Direct pytest
All tests pass in under 0.25 seconds with full coverage of utilities, services, and MCP tools.
The server uses a modular architecture with clear separation of concerns:
mcp_server/
├── main.py # Server entry point
├── config.py # Configuration
├── models/ # Type definitions
├── utils/ # Helper functions
├── services/ # Business logic (Prow API, GCS)
└── tools/ # MCP tool implementations
The server uses intelligent fallback strategies to find PR builds:
- Active Prow Jobs (real-time) →
- GCS PR Logs (archived) →
- GCS Regular Logs (metadata scanning) →
- Pattern-based Search (heuristic fallback)
For standard MCP integration with Cursor IDE:
# Build
podman build -t prow-mcp:latest .
# Run
podman run -i --rm prow-mcp:latest
# MCP Config
{
"mcpServers": {
"prow-server": {
"command": "podman",
"args": ["run", "-i", "--rm", "localhost/prow-mcp:latest"]
}
}
}
For web-based integrations and HTTP communication:
# Build SSE container
podman build -f Containerfile.sse -t prow-mcp-sse:latest .
# Run SSE container
podman run -p 8000:8000 --rm prow-mcp-sse:latest
# MCP Config
{
"mcpServers": {
"prow-sse": {
"url": "http://localhost:8000/sse/",
"description": "MCP server for Prow CI/CD integration with SSE transport",
"env": {
"MCP_TRANSPORT": "sse"
}
}
}
}
SSE Endpoint: http://localhost:8000/sse/
Note: The SSE container automatically configures
MCP_TRANSPORT=sse
,MCP_HOST=0.0.0.0
, andMCP_PORT=8000
environment variables.
Required environment variables (configured in mcp.json
):
DEFAULT_ORG_REPO
: Organization and repository (e.g.,redhat-developer_rhdh
)DEFAULT_JOB_NAME
: Default Prow job name (e.g.,pull-ci-redhat-developer-rhdh-main-e2e-tests
)
Optional environment variables (can be configured in mcp.json
or shell):
API_KEY
: For authenticated requestsMCP_TRANSPORT
: Transport method (stdio
(default),sse
,http
)MCP_HOST
: Host for sse/http transport (default:127.0.0.1
)MCP_PORT
: Port for sse/http transport (default:8000
)
{
"mcpServers": {
"prow-stdio": {
"command": "uv",
"args": ["run", "python", "/path/to/prow-mcp-server/main.py"],
"description": "MCP server for Prow CI/CD integration",
"env": {
"DEFAULT_ORG_REPO": "redhat-developer_rhdh",
"DEFAULT_JOB_NAME": "pull-ci-redhat-developer-rhdh-main-e2e-tests",
"API_KEY": "your-api-key-here"
}
}
}
}
Default settings work for most other configurations:
- Prow URL:
https://prow.ci.openshift.org
- GCS URL:
https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results
stdio
(default): Standard input/output transport for Cursor IDEsse
: Server-Sent Events for web-based integration (runs HTTP server on port 8000)
- Import Errors: Use
main.py
entry point - Missing Tools: Verify all tool registration functions are called
- Authentication: Set
API_KEY
environment variable if needed - Network Issues: Check connectivity to Prow and GCS endpoints
Use the built-in diagnostic tool for PR-specific issues:
# Through MCP: "Diagnose why PR 3191 builds are failing"
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature
- Add tests for new functionality
- Run test suite:
uv run python run_tests.py
- Submit pull request
🚀 Clean, modular, and well-tested MCP Prow Server ready for use!