Other formats agents might prefer:
markdownjsonllms.txt

Agent? You probably want markdown or json, or Pod over MCP.

Reported issues for redmine-mcp-server

Pod holds 23 of 36 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to redmine-mcp-server.

Most discussed

get_redmine_issue throwing SSL errors even with verification disabled !?

Bug Description

2026-08-03 17:53:37 WARNING  SSL verification is DISABLED - use only for development!
2026-08-03 17:53:37 ERROR    SSL error during fetching issue 56789: HTTPSConnectionPool(host='redmine.local', port=443): Max retries exceeded with url: /issues/56789.json?include=journals%2Cattachments (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1032)')))

Steps to Rep

Read the thread · 2026-08-03 · closed · external user · 5 comments

OAuth token scopes are advertised but not enforced on MCP tool calls

Bug Description

In oauth / oauth-proxy modes, Redmine Doorkeeper scopes are advertised (scopes_supported via oauth_scopes.py) and appear on the access token, but the MCP server does not enforce those scopes when listing or calling tools.

IntrospectionTokenVerifier is built with required_scopes unset. _auth.py documents per-tool enforcement as a follow-up. Any active Bearer token can therefore invoke any registered tool, including tools that need permissions absent from the to

Read the thread · 2026-07-17 · closed · external user · 5 comments

create_redmine_issue returns "Requested resource not found" on success, causing silent duplicate creation

Bug Description

When calling create_redmine_issue, the tool returns an error response of "Requested resource not found" even though the issue was successfully created in Redmine. The caller has no way to distinguish a genuine failure from a successful creation, leading to unnecessary retries and risk of duplicate issues.

Note: This bug report was drafted by Claude AI (Anthropic) during an active development session. The observed behavior is real and reproducible. Root cause analysis

Read the thread · 2026-06-04 · closed · external user · 18 comments

OAuth mode (v2.1.0): discovery metadata is internally inconsistent for a non-DCR upstream - client treats the MCP server as the authorization server

Bug Description

In OAuth mode (v2.1.0, RemoteAuthProvider + introspection), the two discovery documents disagree about the identity of the authorization server, and a current MCP client (VS Code 1.122.1) consequently treats the MCP server itself as the authorization server. The browser is opened to <mcp-base-url>/authorize (which the MCP server does not serve) instead of Redmine's /oauth/authorize, and the flow fails with a 404.

The two documents:

  • `/.well-known/oauth-protected-res

Read the thread · 2026-06-01 · closed · external user · 9 comments

OAuth discovery doc omits scopes_supported; tokens lack permissions for many tools

Bug Description

When REDMINE_AUTH_MODE=oauth, the OAuth discovery endpoints (/.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server) don't advertise a scopes_supported field. MCP clients therefore don't request specific scopes in the authorisation URL, and Redmine grants only Doorkeeper's default scopes (view_project, search_project, view_members).

Tools whose underlying Redmine endpoint requires any other permission then return 403, even when the u

Read the thread · 2026-05-20 · closed · external user · 11 comments

List Project Time Entry Activities

Problem Statement

When trying to add a time entry on a project on redmine, each project might have unique IDs for said activities. Current functionality does not work and leads to failed rest requests towards redmine on issue creation, leading to increased context (and cost)

Proposed Solution

+The MCP `list_time_entry_activities` tool returns **global** IDs only — these differ from
          +project-specific ones and will cause `"Activity is not included in the list"` err

[Read the thread](https://github.com/jztan/redmine-mcp-server/issues/92) · 2026-04-16 · closed · outside contributor · 6 comments

### Support for the Agile plugin

### Problem Statement

We are using redmine boards and moving tickets through sprints. But redmine does not return the Sprint field as a custom field because it is part of the Agile plugin. Is there a way to add support for it?

### Proposed Solution

With the help of some AI, I saw that agile-related fields can be set and extracted with the following endpoints
`PUT /issues/:issue_id.json?key=<your_api_key>`
`GET /issues/:issue_id/agile_data.json`

### Use Case

It would enable the mcp server t

[Read the thread](https://github.com/jztan/redmine-mcp-server/issues/83) · 2026-04-09 · closed · outside contributor · 7 comments

### The result indicates an error occurred while fetching issue

Hi,你好。请大侠帮忙看看,以下的报错是什么原因?
----
I can use the get_redmine_issue tool to retrieve the details of issue 4730 and check its status.

redmine : get_redmine_issue
已完成

{
  "params": {
    "issue_id": 4730,
    "include_journals": false,
    "include_attachments": false
  },
  "response": {
    "content": [
      {
        "type": "text",
        "text": "{\n  \"error\": \"An error occurred while fetching issue 4730.\"\n}"
      }
    ],
    "structuredContent": {
      "result": {
        "error": "A

[Read the thread](https://github.com/jztan/redmine-mcp-server/issues/31) · 2025-07-24 · closed · external user · 6 comments

## Most recent

### `list_redmine_issues` cannot express Redmine's operator filter forms, and documents the `filters` route that can as not applying to them

## Bug Description

`list_redmine_issues` offers "find unassigned issues" in its own description and then refuses the only value that expresses it.

Redmine carries a filter's operator *inside* the value. `Query#add_short_filter` detects an operator prefix for the filter's type and splits the remainder on `|`, defaulting to `=` over the split list, so `"56|57"` is either tracker, `"!*"` is "none" and `"!4"` is "not 4". `tracker_id`, `priority_id` and `fixed_version_id` are typed `Optional[int]`,

[Read the thread](https://github.com/jztan/redmine-mcp-server/issues/250) · 2026-08-27 · closed · outside contributor · 0 comments

### `list_redmine_projects` cannot be narrowed or measured, drops six fields Redmine sends, and is documented as complete when it is active-only

## Problem Statement

`list_redmine_projects` cannot be narrowed, cannot be measured, and does not return most of what Redmine sends it — and its documentation describes none of that. The whole signature is one argument (`tools/projects.py`):

```python
def list_redmine_projects(
    include_custom_fields: bool = False,
) -> Union[List[Dict[str, Any]], Dict[str, Any]]:

The body calls project.all() unconditionally, hand-builds five keys per project, and returns a bare array. Four things fo

Read the thread · 2026-08-24 · closed · outside contributor · 0 comments

get_current_user cannot return the caller's memberships, so "which projects do I hold" costs one call per project

Problem Statement

get_current_user cannot return the caller's project memberships, so there is no way to ask "which projects do I hold, and with which roles" in one call.

The tool takes no arguments (tools/enumeration.py), calls user.get("current") with no include, and hand-builds eight keys: id, login, firstname, lastname, mail, admin, created_on, last_login_on. Memberships are not among them and nothing else on the tool surface answers the question for the current

Read the thread · 2026-08-24 · closed · outside contributor · 0 comments

manage_contact list returns no pagination metadata, discarding the total_count Redmine sent beside the contacts

Problem Statement

manage_contact with action="list" returns a bare array and no pagination metadata at all — no total, no count, no pagination block. A caller cannot tell a complete read from a truncated one, and the only way to find the end of a collection is to keep paging until an empty page comes back, which costs an extra request to learn something the response could have stated.

list_redmine_issues already solves this, in the same codebase, with include_pagination_info=True re

Read the thread · 2026-08-24 · closed · outside contributor · 0 comments

list_project_issue_custom_fields invents six metadata keys Redmine never sends

Bug Description

list_project_issue_custom_fields returns eight keys per field. Redmine sends two. The other six are getattr fallbacks, so the tool reports field_format: "", is_required: false, multiple: false, default_value: null, possible_values: [] and trackers: [] for every custom field, always, on every deployment.

is_required: false is the sharp edge. It is byte-identical to a genuine "this field is optional", so a caller cannot detect that it was invented. It acts on

Read the thread · 2026-08-24 · closed · outside contributor · 0 comments

list_redmine_projects discards the project custom field values Redmine already sent

Problem Statement

Nothing in the tool surface returns project custom field values. Not list_redmine_projects, not get_project_dashboard_data, not get_project_modules, not issue payloads (which carry only project: {id, name}), and search_entire_redmine does not accept projects as a scope.

Redmine does return them. app/views/projects/index.api.rsb calls render_api_custom_values project.visible_custom_field_values, api unconditionally — no include parameter needed. `list_redmi

Read the thread · 2026-08-21 · closed · outside contributor · 1 comment

list_redmine_issues discards the custom fields and relations Redmine already sent

Problem Statement

Reading a custom field value, or a relation, across a set of issues costs one API request per issue — even though Redmine already returns that data in the list response the server just made and then discards.

list_redmine_issues drops it twice over:

  • It serializes through _issue_to_dict_selective, which delegates to _issue_to_dict with include_custom_fields=False, so no custom_fields key is ever emitted. Naming custom_fields in the fields parameter does no

Read the thread · 2026-08-21 · closed · outside contributor · 1 comment

manage_contact drops contact fields the CRM API returns, and discards eight of its own list parameters

manage_contact builds its output from a fixed dict of key names, and several of those names differ from the ones the RedmineUP CRM API actually sends. The affected fields come back empty for every contact no matter how populated the record is, and three fields are dropped outright. Separately, list accepts eight parameters that its handler never forwards, so filtering on them silently returns every contact.

Verified against a Redmine running RedmineUP CRM, reading the raw API responses alon

Read the thread · 2026-08-21 · closed · outside contributor · 1 comment

Add a manage_deal tool for RedmineUP CRM deals

Problem Statement

The RedmineUP CRM plugin exposes two resources over its REST API, contacts and deals. manage_contact covers contacts. Nothing covers deals, so a pipeline is only reachable by calling /deals.json directly, outside this server.

Deals are the half of the plugin that carries the commercial state — amount, currency, probability, close date, stage — so the gap tends to land on exactly the questions a CRM gets asked.

There is a second, less obvious half. Even with a tool, de

Read the thread · 2026-08-20 · closed · outside contributor · 1 comment

include=relations is discarded and re-fetched per issue, requiring manage_issue_relations

Bug Description

get_redmine_issue(include_relations=True), get_gantt_chart and delete_redmine_issue all ask Redmine for include=relations and then read the result with getattr(issue, "relations"). That attribute never reads the include payload.

python-redmine lists relations in both Issue._includes and Issue._relations (redminelib/resources/standard.py), and BaseResource.__getattr__ tests _relations first, so the attribute returns a lazy ResourceSet that issues

Read the thread · 2026-08-20 · closed · outside contributor · 1 comment

manage_contact is denied for every action in OAuth mode: CRM permissions are never advertised as scopes

Bug Description

manage_contact is denied by Redmine for every action in oauth and oauth-proxy mode, even with REDMINE_CRM_ENABLED=true, the RedmineUP CRM plugin installed, the Contacts module enabled on the project, and a user whose Redmine role grants the CRM permissions.

The cause is that the CRM permissions are never advertised as scopes, so no access token can carry them — and Redmine intersects a token's scopes with the user's role permissions:

  • `Role#allowed_permissions

Read the thread · 2026-08-20 · closed · outside contributor · 2 comments

Call to get_redmine_issue hangs the mcp server

Bug Description

If a call the server makes to the Redmine REST API never gets a response back (Redmine is slow, a connection drops silently, etc.), the server waits for it forever - there is no timeout configured anywhere. Because this wait blocks the server's single request-handling thread, it doesn't just affect the one request: the entire server stops responding to anything, including its own /health endpoint, until the process is killed and restarted.

Steps to Reproduce

  1. A `ge

Read the thread · 2026-08-11 · closed · external user · 2 comments

Add MCP ToolAnnotations so clients can distinguish read-only tools

Problem statement

The tools exposed by redmine-mcp-server do not currently include MCP ToolAnnotations. In particular, pure read tools such as list_redmine_projects, get_redmine_issue, and search_entire_redmine do not advertise readOnlyHint=true.

Clients therefore have to treat every tool conservatively as potentially mutating. For example, ChatGPT asks for approval before calling read-only query tools.

This is reproducible with v2.10.0 and current develop: tools/list retur

Read the thread · 2026-08-10 · closed · outside contributor · 5 comments

manage_redmine_wiki_page has no uploads parameter

Title: manage_redmine_wiki_page has no uploads parameter (attachments work for issues, not wiki pages)

Summary

create_redmine_issue / update_redmine_issue support an uploads parameter that lets a caller attach files by threading upload tokens through _build_issue_uploads() (in files.py) into client.issue.create/update(...). Redmine's REST API supports the exact same uploads mechanism for wiki pages (PUT /projects/:id/wiki/:title.json with `wiki_page.uploads: [{token, filen

Read the thread · 2026-08-07 · closed · external user · 3 comments

update_redmine_issue ignores agile_sprint_id

Bug Description

update_redmine_issue silently ignores agile_sprint_id, so an issue cannot be moved to or removed from a sprint through the MCP server. With REDMINE_AGILE_ENABLED=true, the function extracts and writes story_points to the RedmineUP Agile plugin, but no other agile field is handled. Passing agile_sprint_id — either top-level or nested as fields={"agile_data_attributes": {"agile_sprint_id": <id>}} — is dropped: the call returns a success response while the sprint is

Read the thread · 2026-07-27 · closed · outside contributor · 1 comment

The remaining reports are on the project's issue tracker.