MCP server exposing GoCD over Streamable HTTP, authenticated per-user via GoCD Personal Access Tokens
gocd-mcp demonstrates solid fundamentals: all 23 tools have clear verb-noun naming (trigger_pipeline, pause_pipeline, etc.), descriptions present for all tools and parameters, and proper JSON Schema with types. Input schemas are complete and well-structured. However, descriptions are terse (avg ~60 chars, below the 194-char baseline), lack dependency hints and recovery guidance, and error handling is minimal. Output schemas are not documented. Tool composition is clean (single responsibility), but parameter descriptions could be more actionable (e.g., 'counter (must be >= 1)' lacks context on what counter represents). No tool annotations (readOnlyHint, destructiveHint) despite clear risk stratification in metadata.
Cancel a running stage
Add a comment to a pipeline instance
Create a new pipeline in the given group
Create a template from a full template object with valid name
Delete a pipeline by name
Delete a template by name
Get the console log of a job run, optionally trimmed to the last N lines
List all build agents
Descriptions are terse (avg ~60 chars vs 194-char baseline). Missing context on WHEN to use each tool and recovery guidance for common failures.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification (READ_ONLY, WRITE, DESTRUCTIVE). LLM cannot infer safety properties from tool names alone.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., pipeline_id for chaining). Responses are opaque.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
List all pipelines from the GoCD dashboard, optionally filtered to one group
List all pipeline templates with the pipelines using each one
Pause a pipeline with a required cause
Get a pipeline's config and ETag
Get one page of a pipeline's past runs with pagination support
Get the detail of one pipeline run
Get the pause/lock state of a pipeline
Get a template's config and ETag
Schedule a pipeline run and confirm an instance was created for this trigger
Run one stage of an existing pipeline instance: a manual-approval stage that has not run yet, or a fresh run of a stage that already has
Resume a paused pipeline
Patch a build agent
Replace a pipeline's config using optimistic locking (ETag required)
Replace a template's config using optimistic locking (ETag required, name must match)
Identity check - returns the authenticated user
Error handling minimal. toolError() maps HTTP status codes to generic messages ('GoCD refused the request') without recovery guidance. LLM cannot self-correct or retry intelligently.
Parameter descriptions lack actionable constraints. E.g., 'counter (must be >= 1)' does not explain what counter represents or how to obtain it. LLMs must infer from context.