redmine-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| REDMINE_BASE_URL | Yes | Base URL of the Redmine server, e.g. https://redmine.example.com. If Redmine lives under a path, include it, e.g. https://example.com/redmine. | |
| REDMINE_API_TOKEN | Yes | Redmine API token used for authentication, sent in the X-Redmine-API-Key header. |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_projectA | Read one visible Redmine project from GET /projects/:id.json for the configured API user. The required project_id is a positive numeric project ID or valid project identifier. Optionally include trackers, issue_categories, enabled_modules, time_entry_activities, and issue_custom_fields. This tool never changes Redmine data. |
| list_project_issue_categoriesA | Read one project's issue categories from GET /projects/:project_id/issue_categories.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid Redmine project identifier. This collection has no documented pagination, filters, include, or other query controls, so the request sends no query string and preserves Redmine's response order. Results map id, project, name, and optional assigned_to to camelCase, preserve total_count when Redmine returns it, and add a safe browser URL only to a returned project reference. Category HTML routes redirect to project settings, and assigned_to is a Principal that may be a user or group, so categories and assignees receive no browser URLs. This is a non-admin read authorized by the project's view_issues permission with the issue_tracking module enabled, subject to Redmine's project visibility and ordinary permission checks. Redmine may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| get_issue_categoryA | Read one visible Redmine issue category from GET /issue_categories/:id.json for the configured Redmine API user. The required issue_category_id is a positive safe integer. This endpoint accepts no query, include, or undocumented controls, and results contain only the current issue-category serializer fields with camelCase names, preserving explicit nulls and omitted associations. A safe browser URL is added only to the returned project reference. The category HTML show route redirects to member-only project settings, and assigned_to is a Principal that may be a user or group, so categories and assignees receive no browser URLs. This is a non-admin read authorized by the category project's view_issues permission with the issue_tracking module enabled, subject to Redmine's project visibility and ordinary permission checks. Redmine may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| list_project_membershipsA | Read the paginated memberships from GET /projects/:project_id/memberships.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid project identifier. Optional offset, limit, and page parameters use Redmine's collection pagination rules, including a default limit of 25 and a maximum limit of 100. Results distinguish user and group principals and preserve roles, including inherited roles. This is a non-admin read, but Redmine still enforces project visibility and permissions and may return HTTP 403 when the user lacks the relevant project permission. This tool never changes Redmine data. |
| list_project_versionsA | Read the visible/shared versions from GET /projects/:project_id/versions.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid Redmine project identifier. This route has no pagination, filters, or documented include controls, and Redmine preserves its response order. This tool never changes Redmine data. |
| list_project_filesA | Read a project's files from GET /projects/:project_id/files.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid project identifier. This endpoint has no documented pagination, filter, include, or other query controls, so the request sends no query string and preserves Redmine's response order. Results allowlist the file metadata fields, preserve optional and null values, sanitize upstream content and thumbnail URLs against the configured Redmine origin and subpath, and add safe browser and download links for the attachment plus ordinary version and author pages. Redmine authorizes this ordinary non-admin read with the project's view_files permission and project visibility and may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never downloads files or changes Redmine data. |
| list_project_wiki_pagesA | Read the wiki page index from GET /projects/:project_id/wiki/index.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid Redmine project identifier. This route has no pagination, filters, or documented include controls; results preserve Redmine's title-and-parent order, include only the current index fields, and add safe browser links. Redmine enforces the ordinary view_wiki_pages permission and may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| get_project_wiki_pageA | Read one current project wiki page from GET /projects/:project_id/wiki/:title.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid Redmine project identifier, and title must be a safe nonempty wiki page title. The only documented include is attachments. Results contain the current page fields and safe base-path browser links. Redmine enforces the ordinary view_wiki_pages permission and may return HTTP 401, 403, or 404. This tool does not read historic versions or change Redmine data. |
| get_project_wiki_page_versionA | Read one historic project wiki page revision from GET /projects/:project_id/wiki/:title/:version.json for the configured Redmine API user. The required project_id is a positive numeric project ID or valid Redmine project identifier, title must be a safe nonempty wiki page title, and version must be a positive safe integer. The only documented include is attachments. Results use the historic revision fields and a safe browser link that includes the revision number. Redmine authorizes the ordinary view_wiki_pages permission and separately requires view_wiki_edits for versioned reads; it may return HTTP 401, 403, or 404. This tool never reads the history listing or changes Redmine data. |
| get_attachmentA | Read one visible Redmine attachment from GET /attachments/:id.json for the configured API user. The required attachment_id is a positive safe integer. This endpoint has no documented query or include controls. Results contain the documented attachment metadata, sanitized content and thumbnail URLs, and safe base-path browser and download links. Redmine enforces attachment visibility and may return HTTP 401, 403, or 404. This tool never downloads files, changes attachment metadata, or deletes attachments. |
| get_versionA | Read one visible Redmine version from GET /versions/:id.json for the configured Redmine API user. The required version_id is a positive safe integer, and this route has no query parameters or documented include controls. Results include the documented version fields and visible custom fields, plus estimatedHours and spentHours only when Redmine returns them. Redmine enforces version and project visibility and may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| get_project_membershipA | Read one project membership from GET /memberships/:id.json for the configured Redmine API user. The required membership_id is a positive safe integer, and this endpoint has no query parameters. Results distinguish user and group principals, preserve roles including inherited flags, and never expose administrative group links. This is a non-admin read, but Redmine still enforces the membership's project visibility and permissions and may return HTTP 403 when the user lacks the relevant project permission. This tool never changes Redmine data. |
| get_userA | Read one visible Redmine user from GET /users/:id.json for the configured API user. The required user_id is a positive safe integer. Optionally include memberships, which Redmine documents for non-admin callers and filters to projects visible to the requesting user. Redmine omits private or administrator-only fields such as email when hidden, status, API keys, two-factor settings, authentication sources, groups, and password metadata. This is a non-admin read, but Redmine still enforces user visibility and may return HTTP 403 or 404. This tool never changes Redmine data. |
| get_current_userA | Read the Redmine user represented by the configured API credentials from GET /users/current.json. This non-admin read requires no user_id and accepts only the documented memberships include, which Redmine filters to projects visible to the requesting user. The result uses the same safe public profile contract as get_user and never exposes self-only API keys, administrator status, two-factor settings, password metadata, authentication-source data, or groups. Redmine may return HTTP 401 or 403 when credentials are rejected or the endpoint is not permitted. This tool never changes Redmine data. |
| get_my_accountA | Read the current user's own Redmine account from GET /my/account.json for the configured API credentials. This endpoint accepts an empty object only and sends no query, include, pagination, or administrator controls. The result allowlists the official account view's safe profile fields and visible custom fields, strips the API key and administrator flag, preserves explicit nulls and omitted version-dependent fields, and adds the ordinary-user /my/account browser URL. Redmine may return HTTP 401 or 403 when credentials are rejected or the endpoint is not permitted. This tool never changes Redmine data. |
| list_projectsA | Read projects visible to the configured Redmine API user from GET /projects.json. Supports the documented offset, limit, and page pagination controls, plus trackers, issue_categories, enabled_modules, time_entry_activities, and issue_custom_fields associations. This tool never changes Redmine data. |
| list_queriesA | Read visible saved issue queries from GET /queries.json for the configured Redmine API user. Supports the documented offset, limit, and page collection pagination controls; Redmine defaults to 25 items, caps the limit at 100, orders by query name, and applies ordinary public/private/role visibility. This tool does not expose project, resource-type, or include filters and never changes Redmine data. |
| searchA | Search visible global Redmine content through GET /search.json for the configured API user. The optional query maps to Redmine's q parameter. Supports only Redmine's documented offset, limit, scope, all_words, titles_only, result-type flags, open_issues, and attachments controls; project_id, page, include, and internal or administrator-only controls are rejected. Redmine defaults to 25 results and caps the limit at 100. Results preserve Redmine's upstream order and expose only id, title, type, url, description, and datetime. Unsafe result URLs are omitted, and this read never changes Redmine data. |
| list_issue_statusesA | Read all Redmine issue statuses from GET /issue_statuses.json for the configured Redmine API user. This endpoint accepts no query, include, or pagination controls. Results preserve Redmine's position order and map the current API fields id, name, is_closed, and description to id, name, isClosed, and description, preserving an explicit null or an omitted description. Redmine accepts ordinary API authentication for this index, but its HTML index is admin-or-API-only and there is no status show route, so the result has no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| list_issue_prioritiesA | Read all Redmine issue priorities from GET /enumerations/issue_priorities.json for the configured Redmine API user. This endpoint accepts no query, include, or pagination controls and returns shared global priorities in Redmine's lower-to-higher position order. Results map id, name, is_default, active, and visible custom_fields to id, name, isDefault, active, and customFields, preserving upstream order, explicit custom-field null values, and omitted version-dependent fields. The active field is available since Redmine 4.1.0 and enumeration custom-field values since 3.4.0. The HTML index is admin-or-API-only for non-admin users and Redmine has no priority show route, so results have no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| list_time_entry_activitiesA | Read all shared Redmine time-entry activities from GET /enumerations/time_entry_activities.json for the configured Redmine API user. This endpoint accepts no query, include, or pagination controls and preserves Redmine's shared position order. Results map id, name, is_default, active, and visible custom_fields to id, name, isDefault, active, and customFields, preserving upstream order, explicit custom-field null values, and omitted version-dependent fields. The active field is available since Redmine 4.1.0 and enumeration custom-field values since 3.4.0. Project-specific activity overrides are not returned by this global collection. The HTML index is admin-or-API-only for non-admin users and Redmine has no time-entry-activity show route, so results have no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| list_document_categoriesA | Read all shared Redmine document categories from GET /enumerations/document_categories.json for the configured Redmine API user. This endpoint accepts no query, include, or pagination controls and preserves Redmine's shared position order. Results map id, name, is_default, active, and visible custom_fields to id, name, isDefault, active, and customFields, preserving upstream order, explicit custom-field null values, and omitted version-dependent fields. The active field is available since Redmine 4.1.0 and enumeration custom-field values since 3.4.0. The shared collection includes inactive categories when Redmine returns them and does not include project-specific enumeration overrides. The HTML index is admin-or-API-only for non-admin users and Redmine has no document-category show route, so results have no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| list_trackersA | Read all Redmine trackers from GET /trackers.json for the configured Redmine API user. This endpoint accepts ordinary API authentication and has no documented query, include, or pagination controls. Results preserve Redmine's configured position order and map id, name, default_status, description, and enabled_standard_fields to id, name, defaultStatus, description, and enabledStandardFields. Description is available since Redmine 4.2.0 and enabledStandardFields since Redmine 5.0.0. The HTML index is admin-or-API-only and Redmine has no tracker show route, so results have no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| list_rolesA | Read Redmine's non-built-in project-member roles from GET /roles.json for the configured Redmine API user. This endpoint accepts no query, include, or pagination controls and preserves Redmine's position order. The list response contains only id and name; it does not expose permissions, visibility settings, or other fields from the separate role-detail response. Redmine accepts ordinary API authentication for this index, but the HTML roles page is restricted for non-admin users, so results have no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| get_roleA | Read one Redmine role from GET /roles/:id.json for the configured Redmine API user. The required role_id is a positive safe integer. This detail endpoint accepts ordinary API authentication, sends no query, include, pagination, or undocumented controls, and can return a built-in Non member or Anonymous role when its ID is known; unlike GET /roles.json, it is not limited to givable project-member roles. Results map the current serializer fields id, name, assignable, issues_visibility, time_entries_visibility, users_visibility, and ordered permissions to camelCase, validate the closed visibility enum domains, preserve permission order, preserve explicit nulls, and preserve omission of the Redmine 4.0+ assignable and visibility fields on older servers. The HTML roles page is admin-only for ordinary browser requests, so results have no browser links. Redmine may return HTTP 401, 403, or 404 without exposing the upstream response body. This tool never changes Redmine data. |
| get_issueA | Read one visible Redmine issue from GET /issues/:id.json for the configured API user. The required issue_id is a positive issue ID. Optionally include children, attachments, relations, changesets, journals, watchers, allowed_statuses, and reactions. This tool never changes Redmine data; include=journals also returns the issue's journal history. |
| list_issue_relationsA | Read the visible relations for one Redmine issue from GET /issues/:issue_id/relations.json for the configured API user. The required issue_id is one positive safe numeric ID. This Redmine route has no query controls or pagination. Results contain only relation fields and safe base-path browser links for valid issue and relation IDs. Redmine enforces issue and related-project visibility and may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| get_issue_relationA | Read one visible Redmine issue relation from GET /relations/:id.json for the configured API user. The required relation_id is one positive safe numeric ID. This route has no query controls. The result contains only documented relation fields and safe base-path browser links for valid issue and relation IDs, preserving Redmine's explicit null or omitted delay. Redmine accepts ordinary API authentication, enforces visibility for both linked issues, and may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| list_newsA | Read visible global Redmine news from GET /news.json for the configured API user. Supports the documented offset, limit, and page collection pagination controls. Redmine applies its ordinary news and project visibility rules; this tool never changes Redmine data. |
| list_project_newsA | Read visible news for one Redmine project from GET /projects/:project_id/news.json for the configured API user. The required project_id is a positive numeric project ID or valid project identifier. Supports the documented offset, limit, and page collection pagination controls. Redmine applies its ordinary project and news visibility rules; this tool never changes Redmine data. |
| get_newsA | Read one visible Redmine news item from GET /news/:id.json for the configured API user. The required news_id is one positive safe numeric ID. Optionally include the documented attachments, comments, and reactions associations. Redmine enforces news and project visibility and may return HTTP 401, 403, or 404. This tool never changes Redmine data. |
| list_issuesA | Read visible Redmine issues from GET /issues.json for the configured API user. Supports offset and limit up to 100, sorting, attachments and relations, issue_id, project_id, subproject_id, tracker_id, status_id, assigned_to_id, parent_id, query_id, created_on, updated_on, and numeric-ID custom-field filters. This tool never changes Redmine data. |
| list_time_entriesA | Read visible Redmine time entries from GET /time_entries.json for the configured API user. Supports offset, limit, and page pagination, a positive numeric user_id or |
| get_time_entryA | Read one visible Redmine time entry from GET /time_entries/:id.json for the configured API user. The required time_entry_id is one positive safe numeric ID. The result contains only the documented time-entry fields, visible custom fields when returned, and base-path-safe browser URLs. Redmine enforces the user's |
| list_my_assigned_issuesA | List Redmine issues assigned to the user represented by the server's configured API token. Results are ordered by most recently updated. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |