A stateless MCP server for Redmine project management. Provides tools to list/get projects, list/get/create/update issues, search issues, manage comments, and retrieve metadata like statuses, trackers, and priorities.
Server has 12 tools with consistent naming (verb_noun pattern) and reasonable descriptions (avg ~100 chars). All tools have input schemas with type definitions. However, parameter descriptions are sparse or missing context. Output schemas are not documented. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Missing pagination documentation for list tools. Overall: fair baseline with room for improvement in parameter clarity and output documentation.
Creates a new issue.
Returns details of the specified issue, including comments and attachments.
Returns details of the specified project.
Returns a list of issues.
Returns a list of issues with all comments. Useful for reviewing progress per assignee.
Returns a list of available issue priorities. Used for priority_id in create_issue / update_issue.
Parameter descriptions lack actionable constraints. E.g., 'status_id' in list_issues says 'Status ID or "open" / "closed" / "*"' but does not explain when to use each or what the default is. LLMs cannot infer valid values without explicit enums or format guidance.
Output schemas are not documented. Tools return structured dicts but LLMs cannot see the field names, types, or which fields are required. E.g., get_issue returns journals and attachments but the response structure is not declared.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Returns a list of Redmine projects.
Returns a list of available issue statuses.
Returns a list of available trackers.
Full-text search for issues by keyword. Returns results with description and all comments. Searches across subject, description, and all comments.
Updates an issue.
Edits a journal (comment) on an issue. Requires Redmine 5.0+.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Clients cannot distinguish safe read-only tools from destructive ones. create_issue, update_issue, and update_journal should be marked destructiveHint=true; list_* and get_* should be marked readOnlyHint=true.
Error messages lack recovery guidance. RedmineError exceptions are caught and re-raised with generic messages like 'list_issues failed: {e}'. LLMs cannot determine if the error is retryable, user-fixable, or fatal.
Pagination not documented. list_issues, list_statuses, list_trackers, list_priorities, search_issues_full, and list_issues_with_journals accept limit/offset but do not document max results, whether a total count is returned, or when pagination is required.