Model Context Protocol server for Jenkins CI/CD integration
The server demonstrates solid foundational quality with well-structured tool definitions, consistent naming conventions, and comprehensive parameter schemas. All 12 tools follow verb_noun naming (jenkins_get_*, jenkins_start_*, jenkins_stop_*, jenkins_wait_*, jenkins_search_*) which aligns with the 90th percentile baseline. Descriptions are present for all tools and most parameters. However, several critical gaps prevent a higher score: (1) Output schemas are not explicitly documented in the source code, types are inferred from Go struct definitions but not formally described in tool registration; (2) Parameter descriptions lack specificity around constraints and formats in some cases; (3) Error handling patterns are not visible in the provided source, making it unclear whether error responses guide LLM recovery; (4) No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite clear risk classifications in the specification. The tools address a cohesive domain (Jenkins CI/CD operations) with good composition (separate tools for each action) and proper chaining potential (e.g., jenkins_start_job returns queueId, used by jenkins_wait_for_queue_item). Most parameter descriptions (72 chars average baseline) are met or exceeded. Tool descriptions average ~120-150 chars, within the 10-1024 char guidance. The main issue is that formalized output schema documentation and error recovery guidance are missing from the visible code.
Get detailed information about a specific Jenkins build
Get the tail/end of a Jenkins build log
Get build logs for a specific Jenkins build with optional offset and length parameters
Get detailed information about a specific Jenkins job
Get a list of all Jenkins jobs
Get information about a queued Jenkins job
Output schemas are not explicitly documented. Responses are typed Go structs (BuildLogs, Build, RunningBuild, etc.) visible in source but not formally described as JSON Schema in tool registration. LLMs cannot reliably plan downstream tool calls without knowing the response structure.
Tool annotations are missing. jenkins_stop_build and jenkins_start_job are marked with Risk=WRITE and DESTRUCTIVE in the spec, but the server does not use readOnlyHint, destructiveHint, or idempotentHint annotations in tool registration. LLMs cannot infer safety/replay semantics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 70 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get a list of currently running builds and queued builds
Search for builds matching specified criteria
Start a Jenkins job with optional build parameters
Stop a running Jenkins build
Wait for a queued Jenkins job to start building
Wait for a running Jenkins build to complete
Error handling patterns are not visible in the provided source code. No evidence of recovery guidance (e.g., 'job not found, try jenkins_search_builds'), error categorization (retryable vs. fatal), or actionable error messages. LLMs cannot self-correct on failures.
Parameter descriptions lack specificity about constraints. E.g., 'max_builds' in jenkins_get_job is described as 'Maximum number of recent builds to return (default: 20)' but does not state minimum/maximum bounds (e.g., 1 - 500). 'result' filter in jenkins_search_builds says 'Filter by build result: SUCCESS, FAILURE, ABORTED' but is not declared as an enum in the schema.
No pagination support visible. jenkins_get_jobs and jenkins_get_running_builds return unbounded lists without limit or offset parameters. Large result sets could exhaust context windows. No evidence of result limiting or pagination controls.
jenkins_start_job accepts a 'parameters' map with no schema constraints or description of expected key/value types or format. LLMs cannot predict valid parameter names or structures without domain knowledge.