redmine-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REDMINE_MCP_URL | Yes | URL of the Redmine server (environment fallback for the --redmine-url flag, e.g. https://redmine.example.com). | |
| REDMINE_MCP_SCOPES | No | Comma-separated permission scopes requested at login. Environment fallback for the --scopes flag. | |
| REDMINE_MCP_API_KEY | No | Redmine API key used for pre-6.1 servers (or when no browser is available) instead of OAuth sign-in. Environment fallback for the --api-key flag; can also be passed to `redmine-mcp login --api-key <KEY>` once. | |
| REDMINE_MCP_ORG_MODE | No | Enable the admin tool group (organization mode). Environment fallback for the --org-mode flag. | |
| REDMINE_MCP_CLIENT_ID | No | OAuth2 application client ID registered in Redmine (Administration → OAuth2 Applications). Environment fallback for the --client-id flag. | |
| REDMINE_MCP_DISCOVERY | No | Collapse the tool catalogue to discover_tools/call_tool plus the session tools, for small-context clients. Environment fallback for the --discovery flag. | |
| REDMINE_MCP_CLIENT_SECRET | No | OAuth2 application client secret registered in Redmine. Environment fallback for the --client-secret flag. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| completions | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| issues_listA | Lists issues with Redmine filters (project, tracker, status, assignee, saved query). Returns the page plus total_count; pass offset to walk further pages. |
| issues_getA | Returns one issue by id, with optional associated data via include. A 403 means the issue sits in a project you cannot see or is private to someone else — call users_my_access to list what is visible instead of retrying the id. |
| issues_createB | Creates an issue in a project. Returns the created issue (with its id). |
| issues_updateB | Updates issue attributes; only the fields passed change. Pass notes to append a journal entry with the update. |
| issues_add_noteA | Appends a journal note to an issue without changing anything else. |
| issues_deleteB | Deletes an issue. This cannot be undone. |
| issues_list_relationsC | Lists the relations (blocks, duplicates, …) of an issue. |
| issues_create_relationC | Links two issues (relates, blocks, duplicates, precedes, …). |
| issues_delete_relationB | Removes an issue relation by its relation id. |
| projects_listA | Lists visible projects. Returns the page plus total_count. |
| projects_getB | Returns one project by id or identifier, with optional associated data. |
| projects_createC | Creates a project. Returns the created project (with its id). |
| projects_updateC | Updates project attributes; only the fields passed change. |
| projects_list_membershipsB | Lists the members of a project with their roles. |
| projects_add_memberC | Adds a user to a project with the given roles. |
| projects_update_memberB | Sets the roles of a project membership by its membership id. |
| projects_remove_memberB | Removes a project membership by its membership id. |
| projects_list_categoriesB | Lists the issue categories of a project with their ids and assignees. |
| users_get_currentA | Returns the signed-in account (id, login, name, mail, admin flag) from /users/current.json. The live identity check; session_status reports the cached copy. |
| users_getB | Returns one user by id, with optional membership and group data. |
| users_update_currentB | Updates the signed-in account name or mail address. |
| users_my_accessA | Answers "what can I see" before anything 403s: admin flag, group memberships, and every visible project with its roles. Check this before querying issues or users outside your projects — a 403 almost always means the object lives where this list does not reach, not that the call was malformed. |
| time_list_entriesA | Lists time entries filtered by issue, project, user, or date range. |
| time_logB | Logs time on an issue or a project. Returns the created entry (with its id). |
| time_update_entryC | Updates a time entry; only the fields passed change. |
| time_delete_entryB | Deletes a time entry. This cannot be undone. |
| time_list_activitiesB | Lists the time-tracking activities (Design, Development, …) with their ids. |
| wiki_list_pagesB | Lists the wiki page index of a project. |
| wiki_get_pageB | Returns one wiki page with its text and attachments. |
| wiki_save_pageB | Creates the page when it does not exist, otherwise saves a new version. |
| wiki_delete_pageA | Deletes a wiki page. This cannot be undone. |
| files_get_attachmentA | Returns one attachment metadata (filename, size, content type, download URL). |
| files_downloadA | Downloads an attachment and returns base64 bytes plus metadata. Text files come back decoded as well. Refuses files over maxBytes with metadata only. |
| files_uploadA | Uploads raw bytes and returns an upload token. Reference it from issues_create or issues_update via uploads: [{token, filename}]. Tokens expire with the session. |
| files_list_project_filesC | Lists the files attached to a project's Files module. |
| files_list_documentsA | Lists the documents of a project's Documents module. Needs Redmine 7.1+. |
| search_queryB | Searches across issues, wiki pages, documents, files, and news. Returns ranked results with type, title, and excerpt. |
| queries_listB | Lists the visible saved issue queries with their filters and columns. |
| queries_runB | Runs a saved issue query and returns the matching issues plus total_count. |
| auth_begin_loginA | Starts a Redmine OAuth2 sign-in in the system browser and returns immediately. Ask the user to finish there, then call auth_login_status. Never ask for credentials, an API key, or an authorization code in the conversation. |
| auth_login_statusA | Reports where the background browser sign-in has got to: pending, signed in, or failed with the fix. Never returns a token. |
| session_statusA | Call once first. Reports the cached account, whether Redmine is reachable with a live GET /users/current.json, and the consent checklist for this configuration. |
| redmine_list_permissionsA | Lists the tool groups, the Redmine permission scopes each needs, and which groups are enabled. The first call when something returns 403. |
| redmine_requestA | Escape hatch: any Redmine REST path with the signed-in credential. GET by default; write methods need --allow-generic-write. Prefer the typed tools: they page, project, and explain errors. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| agent_start | Orients a new agent session: check session_status, sign in if needed via auth_begin_login plus auth_login_status, orient via discover_tools, and follow Hint and Blocked-by lines on errors. |
| triage_issue | Guides filing or triaging an issue: pick a project and an optional assignee (both complete from Redmine), then create or retarget the issue. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 44 tools
Most tools map cleanly to one resource+action (issues_*, projects_*, wiki_*, time_*, files_*), so selection is usually obvious. The only real confusion zone is the identity layer—session_status, users_get_current, auth_begin_login, auth_login_status, and users_my_access all touch 'who am I / am I signed in', and their descriptions have to explicitly cross-reference each other to sort it out. redmine_request also overlaps every typed tool, though it is clearly framed as a fallback.
The dominant pattern is resource_verb_noun snake_case (issues_create, projects_remove_member, time_list_entries, wiki_get_page), which is predictable and readable. Deviations are minor: session_status and auth_login_status are noun-first with no verb, and redmine_list_permissions/redmine_request use a server-name prefix rather than a resource prefix. No mixed casing or chaotic verb styles.
44 tools is heavy, but Redmine is genuinely a broad domain (projects, issues, wiki, files, time, users, queries, search), so most tools earn their place. Still, the set is larger than it needs to be: the five session/auth/identity tools and the generic redmine_request could be consolidated, and several list operations could be parameterized rather than split.
Coverage is strong: issues have full CRUD plus notes and relations, projects have list/get/create/update plus full membership management, wiki has list/get/save/delete, time entries are fully covered, and files/download/upload/search/queries are present. Gaps are minor but real—no users_list, no project delete, and no lookups for trackers/statuses/priorities that issue creation typically needs—though redmine_request serves as a workaround for all of them.