Redmine Mcp Connector

io.github.Nikhilprasad-rPublished by GitHub account Nikhilprasad-rv1.0.1Updated Oct 25, 2026

stdio MCP server wrapping the Redmine REST API: issues, projects, users, time, wiki, versions.

Overview

AI-generated overview

A local stdio MCP server that wraps the Redmine REST API, letting an assistant read and manage issues, projects, users, time entries, wiki pages and attachments

What you can do
List, read, create, update, comment on and delete issues, including watchers and relations, plus search and attachments (upload, download, update, delete). Manage projects, users, groups, memberships, versions and issue categories. Work with time entries, news and wiki pages. Look up queries, trackers, statuses, roles, custom fields and enumerations. Optionally call arbitrary REST paths through an escape-hatch request tool.
When to use it
Useful when an assistant should work with a self-hosted or hosted Redmine instance: triaging and updating tickets, logging time, editing wiki pages, or looking up project metadata without leaving the chat.
Requirements
Node.js 20+ (or Docker); launched via npx or a local build. Requires REDMINE_BASE_URL and a Redmine API access key in REDMINE_API_KEY, plus network access from the process to that Redmine instance. Optional variables control timeout, pagination, download size, impersonation, read-only mode and the raw request tool.
Before you install
The API key grants the Redmine permissions of its user; keep it out of shared configs. Many tools create, update or delete data, and deletes need confirm: true. REDMINE_READONLY=true blocks mutating methods. REDMINE_IMPERSONATE_USER is admin-only and acts as another user. REDMINE_ALLOW_RAW_REQUEST exposes arbitrary REST calls, including DELETE.

Installation

In SourceWeft

  1. Open Redmine Mcp Connector in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Redmine MCP Server

stdio-based Model Context Protocol server that wraps a Redmine instance through its REST API (*.json endpoints). It runs as a separate Node.js process; no changes to the Redmine Rails app are required.

Requirements

  • Node.js 20+
  • A Redmine user with an API access key (My account → Show API access key)
  • Network access from this process to your Redmine REDMINE_BASE_URL

Install

No install needed for normal use — coding agents launch it on demand via npx:

bash
npx -y redmine-mcp-connector

See CONNECTING.md for exact setup instructions for Claude Desktop, Claude Code, Cursor, Windsurf, Cline, VS Code, Zed, and any other MCP client, plus a local-build and Docker alternative.

To hack on the server itself, clone this repo instead:

bash
npm installnpm run build

Configuration

Environment variables (see .env.example):

VariableRequiredDescription
REDMINE_BASE_URLyesBase URL, e.g. https://redmine.example.com (no trailing slash)
REDMINE_API_KEYyesX-Redmine-API-Key value
REDMINE_IMPERSONATE_USERnoSets X-Redmine-Switch-User (admin-only in Redmine)
REDMINE_READONLYnoIf true / 1, blocks all mutating HTTP methods
REDMINE_ALLOW_RAW_REQUESTnoIf true / 1, registers the redmine_request escape-hatch tool
REDMINE_HTTP_TIMEOUT_MSnoDefault 15000
REDMINE_MAX_PAGESnoMax pages when using fetch_all on list tools (default 20)
REDMINE_MAX_DOWNLOAD_BYTESnoCap for redmine_attachment_download (default 5 MiB)

Run

bash
REDMINE_BASE_URL=https://your-redmine.example.com REDMINE_API_KEY=secret npm start# or during development:REDMINE_BASE_URL=... REDMINE_API_KEY=... npm run dev

Connecting to a coding agent

Full per-client instructions (Claude Desktop, Claude Code, Cursor, Windsurf, Cline, VS Code, Zed, and generic MCP clients) live in CONNECTING.md. Quick example (Claude Desktop / Cursor / Windsurf all share this shape):

json
{  "mcpServers": {    "redmine": {      "command": "npx",      "args": ["-y", "redmine-mcp-connector"],      "env": {        "REDMINE_BASE_URL": "https://redmine.example.com",        "REDMINE_API_KEY": "your_api_key_here"      }    }  }}

MCP resources (read-only)

URIDescription
redmine://projectsGET /projects.json (first 100)
redmine://meGET /users/current.json
redmine://me/issuesGET /issues.json?assigned_to_id=me (limit 100)
redmine://projects/{id}GET /projects/:id.json

Tools overview

Naming: redmine_<resource>_<action>.

Issues: redmine_issues_list, redmine_issue_get, redmine_issue_create, redmine_issue_update, redmine_issue_add_comment, redmine_issue_delete (requires confirm: true), watchers add/remove, relations list/add/remove.

Projects: redmine_projects_list, redmine_project_get, create/update/archive/unarchive/delete (confirm for delete).

Users: redmine_current_user, redmine_users_list, redmine_user_get, create/update/delete (confirm for delete).

Time entries: list/get/create/update/delete (confirm for delete).

News: list/get/create/update/delete (confirm for delete).

Wiki: list pages, get page, create/update (PUT), delete (confirm).

Versions & categories: versions CRUD (confirm on delete), issue categories CRUD (confirm on delete).

Queries & metadata: redmine_queries_list, redmine_enumerations_list, redmine_trackers_list, redmine_issue_statuses_list, redmine_roles_list, redmine_role_get, redmine_custom_fields_list.

Groups (read-only): redmine_groups_list, redmine_group_get.

Memberships: list/create/update/delete (confirm on delete).

Attachments & search: redmine_search, attachment get/update/delete/upload/download (download returns base64, size-capped).

Repository (limited REST in stock Redmine): redmine_repository_revision_link_issue, redmine_repository_revision_unlink_issue (confirm). Listing repositories/revisions over JSON is not exposed by core Redmine; use redmine_request if you enable it, or plugins.

Escape hatch: redmine_request — only if REDMINE_ALLOW_RAW_REQUEST=true; DELETE requires confirm: true.

Safety

  • Destructive tools require explicit confirm: true where noted.
  • Set REDMINE_READONLY=true for read-only deployments.
  • API keys are never logged by this server.

Docker

Build a local image:

bash
docker build -t redmine-mcp-server:local .

Run it (stdio MCP server):

bash
docker run --rm -i   -e REDMINE_BASE_URL="https://redmine.example.com"   -e REDMINE_API_KEY="your_api_key_here"   redmine-mcp-server:local

Use this image in MCP config:

json
{  "mcpServers": {    "redmine": {      "command": "docker",      "args": [        "run", "--rm", "-i",        "-e", "REDMINE_BASE_URL",        "-e", "REDMINE_API_KEY",        "docker.io/<docker-user>/redmine-mcp-server:latest"      ],      "env": {        "REDMINE_BASE_URL": "https://redmine.example.com",        "REDMINE_API_KEY": "your_api_key_here"      }    }  }}

Publish to Docker Hub Catalog

  1. Login:
bash
docker login
  1. Create and use a buildx builder (one-time):
bash
docker buildx create --name redmine-mcp-builder --use --bootstrap
  1. Build and push multi-arch image:
bash
export IMAGE=docker.io/<docker-user>/redmine-mcp-serverexport TAG=1.0.0
docker buildx build   --platform linux/amd64,linux/arm64   -t $IMAGE:$TAG   -t $IMAGE:latest   --push .
  1. In Docker Hub, set your repository description from this README and mark it as public for catalog discovery.

Development

bash
npm run lintnpm test

Contributing

Contributions are welcome.

License

GPL-2.0-or-later (same family as Redmine).

Source: README.md at commit bd5d8d5

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.1LatestSep 24, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts