An MCP server that lets Claude Code (and other MCP clients) read and write a Redmine instance in natural language.
Redmine MCP has clear verb-based naming (list_, get_, create_, add_, update_) and structured schemas with type definitions. However, descriptions are inconsistent in depth and quality. Most tool descriptions are brief (10-50 chars) and lack context on WHEN to use them or what happens on failure. Parameter descriptions are present but often minimal. Output schemas are partially documented in code but not formally declared. Error handling is absent, no guidance on recovery, retryable vs. fatal errors, or actionable error messages. The server lacks tool annotations (readOnlyHint, destructiveHint) despite having clear read/write semantics. Overall, this is a functional but below-average implementation.
이슈에 댓글 추가 (선택적으로 상태 변경).
새 이슈 생성.
이슈 상세 조회 (본문 + 댓글 + 첨부파일).
오늘 봐야 할 일감 한 번에 조회. - my_open_issues: 나에게 할당된 미완료 일감 - recently_updated: 최근 2일 이내 갱신된 내 일감 매일 아침 알림 스크립트에서 호출하기 좋게 구조화됨.
위키 페이지 내용 조회.
일감 목록 조회.
Redmine 프로젝트 목록 조회 (식별자, 이름, 설명).
Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like create_issue, add_comment, and update_wiki modify state but lack destructiveHint annotation. list_* and get_* tools lack readOnlyHint. This prevents clients from applying safety policies.
No error handling or recovery guidance. Tools call _ensure_client() and raise_for_status() but return no actionable error messages. If API returns 404 or 403, the LLM receives a raw exception with no guidance on what to do next (retry, ask user, check credentials).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
프로젝트의 위키 페이지 목록.
위키 페이지 생성/수정 (없으면 생성, 있으면 수정).
Descriptions are too brief and lack context. Most tool descriptions are 10-50 characters (e.g., 'Redmine 프로젝트 목록 조회' = 16 chars). Rubric baseline is 194 chars average. Descriptions do not explain WHEN to use the tool, what it returns, or dependencies on other tools.
Output schemas not formally documented. While code shows return structures (e.g., _issue_brief returns dict with id, subject, tracker, status, etc.), there is no JSON Schema or formal output type declaration. LLMs cannot plan downstream tool calls without knowing what fields to expect.
Parameter descriptions lack format/constraint details. E.g., 'status' param accepts 'open', 'closed', '*', or status ID, but description does not clarify which are enums vs. free-form. 'start_date' and 'due_date' accept 'YYYY-MM-DD' but no validation or error message if format is wrong.