MCP server for OpenProject API integration, providing tools to interact with projects, work packages, and user information
Server has 4 tools with basic verb-noun naming (get_*). All tools have descriptions (10-60 chars, below the 194-char baseline). Input schemas are present with type definitions and descriptions for most parameters. However, output schemas are completely undocumented, tools return free-text strings rather than structured objects. No error handling guidance, no pagination support despite potentially large result sets, and no tool annotations. The fallback implementation shows manual tool registration, but schemas lack depth for production use.
Get work packages that are due within specified days
Get work packages for a specific project with status filtering
Get all projects from OpenProject
Get detailed information about a specific user
All tools return unstructured free-text strings instead of structured JSON objects. LLMs cannot parse or chain results reliably. E.g., get_projects returns 'Projects retrieved successfully: {...}' as a string, not a typed object.
No output schema documentation. LLMs cannot predict what fields to expect, forcing them to parse unstructured responses and guess at downstream tool parameters.
Tool descriptions are too short (30-45 chars vs. 194-char baseline). 'Get all projects from OpenProject' lacks context on when to use this vs. other discovery tools, what structure is returned, or prerequisites.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
No pagination support. get_project_work_packages limits results to 10 items in code but does not expose limit/offset parameters or document the cap in the description. Large projects will silently truncate.
No error handling guidance. Catch-all exception handlers return 'Error retrieving X: {str(e)}' with no recovery hints. LLMs cannot determine if errors are retryable, user-fixable, or fatal.