MCP server that analyzes git repositories to extract application requirements and determines if an application can be installed on an OpenShift/Kubernetes cluster
This server has three clearly defined tools with verbose, LLM-friendly descriptions that explain WHEN and WHY to use each tool. However, there are significant gaps in schema definition, parameter validation guidance, and output documentation that prevent a higher score. The descriptions are exceptionally detailed (averaging ~400 chars per tool, well above the 194-char baseline), which is a strength, but the input/output schemas lack formal structure and validation rules. Error handling is present but could be more specific about recovery paths. The tool names follow verb-noun convention correctly (fetch_*, scan_*, check_*), but the server lacks key production patterns like pagination, structured error responses, and explicit output schemas.
Check if an application CAN BE DEPLOYED on the user's cluster. ⚠️ ONLY USE THIS when user explicitly asks about deployment/installation: - "can I deploy X on my cluster?" - "can I install X?" - "is my cluster compatible with X?" - "will X work on my cluster?" ⛔ DO NOT USE when user only asks about requirements without mentioning deployment. For "what are the requirements?" questions, use fetch_repo_content instead. This tool scans BOTH the repository AND the cluster, then compares them.
Extract and list application requirements from a repository. NO cluster involvement. ⚠️ ALWAYS USE THIS TOOL when user asks about requirements WITHOUT mentioning cluster: - "what are the requirements for X?" - "what does X need to run?" - "analyze requirements for X" - "list the requirements for X" - "what hardware/software does X need?" KEY: If the question is ONLY about the app's needs (not about "can I install it?"), use this tool. ⛔ DO NOT USE when user asks about deployment/installation/compatibility with their cluster. For those questions, use check_feasibility instead. This tool ONLY analyzes the repository. It does NOT: - Scan any cluster - Check cluster compatibility - Determine if installation is possible
Scan the connected OpenShift/Kubernetes cluster for available resources. This performs a FULL cluster scan, returning all available resources. USE THIS TOOL WHEN: - User asks "what resources are available in my cluster?" - User asks "what does my cluster have?" - User asks "scan my cluster" - User wants to know their cluster's capabilities WITHOUT comparing to any app For Example, questions like: - "How many available GPUs are on the cluster?" - "How many available CPU cores are on the cluster?" And also question that might regard other cluster resources. DO NOT USE when user asks about installing/deploying an app (use check_feasibility instead) DO NOT USE when user asks about app requirements (use fetch_repo_content instead) Returns comprehensive cluster information including: - Node resources (CPU, memory, allocatable, available, usage) - GPU availability, models, and memory (VRAM) - Storage classes - Installed operators (OpenShift only) - Custom Resource Definitions (CRDs) Fails with clear error if cluster is not accessible.
Input schemas present but lack formal JSON Schema validation. fetch_repo_content accepts repo_url as string with basic description, but no regex pattern, length constraints, or format specification. No validation rules for URL format.
Output schemas are documented in docstrings but not formally specified in code. The main.py returns dict objects with fields like 'success', 'repo_info', 'readme_content', etc., but there is no structured schema definition (e.g., Pydantic models, JSON Schema) visible in the tool registration that an MCP client can introspect.
Error handling returns dict with 'success' and 'error' fields, but lacks recovery guidance. When cluster is not accessible, the error message states the problem but does not guide the LLM toward alternative actions (e.g., 'Try running `oc login` first, then retry'). No error classification (retryable, user-fixable, fatal).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 50 | - | v1 |
scan_cluster has no input parameters but documentation is verbose. No pagination, limits, or filtering options despite potentially returning large result sets (all nodes, GPUs, storage classes, operators, CRDs). scan_cluster() could return thousands of items and blow context window.
Tool names 'fetch_repo_content' and 'check_feasibility' are somewhat domain-specific. 'fetch_repo_content' could be clearer as 'extract_repo_requirements' or 'analyze_repo_requirements'. 'check_feasibility' lacks a noun (e.g., 'check_deployment_feasibility'). Not critical, but naming could be more self-documenting.