Skip to main content
Glama
Redmine MCP Server

Redmine MCP Server

by compasify

Redmine MCP Server

Model Context Protocol (MCP) server for Redmine that provides comprehensive access to the Redmine REST API.

Overview

This project is an MCP server that comprehensively covers Redmine's REST API. It allows you to operate Redmine from MCP clients (such as Claude Desktop).

Related MCP server: Redmine MCP Server

Demonstration

Here are example videos showing how to use the Redmine MCP server with Claude Desktop:

Creating an Issue

https://github.com/user-attachments/assets/075fb079-104c-404d-91f5-755b3882853b

This demonstration also uses the Playwright MCP for browser automation alongside the Redmine MCP server.

Getting Issue Information

https://github.com/user-attachments/assets/8f551082-6982-4513-8fe7-b0f111be982d

Features

  • 📋 Comprehensive API Coverage: Supports all functions available in Redmine's REST API

  • 🔒 Read-Only Mode: Supports safe data reference mode

  • 🎛️ Feature Flags: Selectively disable tool groups via environment variables

Prerequisites

Getting Redmine API Key

  1. Log in to Redmine with administrator privileges

  2. Go to "Administration" → "Settings" → "API" tab

  3. Check "Enable REST web service"

  4. Generate "API access key" in personal settings

For details, refer to Redmine REST API documentation.

Configuration

Environment Variables

The following environment variables are required (specified in MCP client configuration files):

  • REDMINE_URL (Required): Base URL of the Redmine instance

    • Example: https://redmine.example.com

  • REDMINE_API_KEY (Required): API key generated in Redmine

    • Set the API key obtained in prerequisites

  • REDMINE_MCP_READ_ONLY (Optional): Enable read-only mode

    • true: Read-only mode (disables data modification operations)

    • false or unset: Allow all operations (default)

Feature Flags (Optional)

You can selectively disable tool groups to reduce the number of tools loaded by the MCP server. By default, all features are enabled. Set any of the following to true to disable a group:

Environment Variable

Tools Disabled

REDMINE_MCP_DISABLE_RELATIONS

Issue relations (list, create, show, delete)

REDMINE_MCP_DISABLE_TIME_ENTRIES

Time entries & activities (list, create, show, update, delete)

REDMINE_MCP_DISABLE_VERSIONS

Versions (list, create, show, update, delete)

REDMINE_MCP_DISABLE_WATCHERS

Watchers (add, remove)

REDMINE_MCP_DISABLE_WIKI

Wiki pages (list, show, create/update, delete)

REDMINE_MCP_DISABLE_NEWS

News (list, show, create, update, delete)

REDMINE_MCP_DISABLE_USERS

User management (list, show, create, update, delete, current user)

REDMINE_MCP_DISABLE_GROUPS

Group management (list, show, create, update, delete, add/remove user)

REDMINE_MCP_DISABLE_MEMBERSHIPS

Memberships (list, show, create, update, delete)

REDMINE_MCP_DISABLE_ATTACHMENTS

Attachments (show, update, delete, upload/download, thumbnails)

REDMINE_MCP_DISABLE_FILES

Files (list, create)

REDMINE_MCP_DISABLE_PROJECTS

Project management (list, show, create, update, delete, archive/unarchive, close/reopen)

Full Configuration Example

You can copy and paste this into your MCP client configuration (e.g., claude_desktop_config.json).

Option 1: Using npx (no installation required)

{
  "mcpServers": {
    "redmine": {
      "command": "npx",
      "args": ["-y", "@compasify/redmine-mcp-server"],
      "env": {
        "REDMINE_URL": "https://your-redmine.example.com",
        "REDMINE_API_KEY": "your-api-key-here",
        "REDMINE_MCP_READ_ONLY": "false",
        "REDMINE_MCP_DISABLE_RELATIONS": "false",
        "REDMINE_MCP_DISABLE_TIME_ENTRIES": "false",
        "REDMINE_MCP_DISABLE_VERSIONS": "false",
        "REDMINE_MCP_DISABLE_WATCHERS": "false",
        "REDMINE_MCP_DISABLE_WIKI": "false",
        "REDMINE_MCP_DISABLE_NEWS": "false",
        "REDMINE_MCP_DISABLE_USERS": "false",
        "REDMINE_MCP_DISABLE_GROUPS": "false",
        "REDMINE_MCP_DISABLE_MEMBERSHIPS": "false",
        "REDMINE_MCP_DISABLE_ATTACHMENTS": "false",
        "REDMINE_MCP_DISABLE_FILES": "false",
        "REDMINE_MCP_DISABLE_PROJECTS": "false"
      }
    }
  }
}

Option 2: Using node with a local server.mjs file

Download server.mjs from the releases page and specify its local path:

{
  "mcpServers": {
    "redmine": {
      "command": "node",
      "args": [
        "/path/to/server.mjs"
      ],
      "env": {
        "REDMINE_URL": "https://your-redmine.example.com",
        "REDMINE_API_KEY": "your-api-key-here",
        "REDMINE_MCP_READ_ONLY": "false",
        "REDMINE_MCP_DISABLE_RELATIONS": "false",
        "REDMINE_MCP_DISABLE_TIME_ENTRIES": "false",
        "REDMINE_MCP_DISABLE_VERSIONS": "false",
        "REDMINE_MCP_DISABLE_WATCHERS": "false",
        "REDMINE_MCP_DISABLE_WIKI": "false",
        "REDMINE_MCP_DISABLE_NEWS": "false",
        "REDMINE_MCP_DISABLE_USERS": "false",
        "REDMINE_MCP_DISABLE_GROUPS": "false",
        "REDMINE_MCP_DISABLE_MEMBERSHIPS": "false",
        "REDMINE_MCP_DISABLE_ATTACHMENTS": "false",
        "REDMINE_MCP_DISABLE_FILES": "false",
        "REDMINE_MCP_DISABLE_PROJECTS": "false"
      }
    }
  }
}

Windows example path: "args": ["D:\\path\\to\\server.mjs"]

MCP Client Configuration

Add the following as MCP configuration for your AI agent:

{
  "mcpServers": {
    "redmine": {
      "command": "npx",
      "args": ["-y", "@compasify/redmine-mcp-server"],
      "env": {
        "REDMINE_URL": "https://your-redmine.example.com",
        "REDMINE_API_KEY": "your-api-key-here",
        "REDMINE_MCP_READ_ONLY": "true"
      }
    }
  }
}

Using Docker (Alternative)

If you prefer using Docker:

{
  "mcpServers": {
    "redmine": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "REDMINE_URL=https://your-redmine.example.com",
        "-e", "REDMINE_API_KEY=your-api-key-here",
        "-e", "REDMINE_MCP_READ_ONLY=true",
        "ghcr.io/compasify/redmine-mcp-server:latest"
      ]
    }
  }
}

When to use Docker:

  • Enterprise environments requiring container isolation

  • Reproducible deployments across different systems

  • Environments where Node.js installation is restricted

Below are specific configuration methods for several MCP clients:

Claude Desktop

Add the following to claude_desktop_config.json:

{
  "mcpServers": {
    "redmine": {
      "command": "npx",
      "args": ["-y", "@compasify/redmine-mcp-server"],
      "env": {
        "REDMINE_URL": "https://your-redmine.example.com",
        "REDMINE_API_KEY": "your-api-key-here",
        "REDMINE_MCP_READ_ONLY": "true"
      }
    }
  }
}

Claude Code

In Claude Code, you can add MCP servers using the following commands:

Local configuration:

claude mcp add redmine -e REDMINE_URL=https://your-redmine.example.com -e REDMINE_API_KEY=your-api-key-here -e REDMINE_MCP_READ_ONLY=true -- npx -y @compasify/redmine-mcp-server

Project configuration:

claude mcp add -s project redmine -e REDMINE_URL=https://your-redmine.example.com -e REDMINE_API_KEY=your-api-key-here -e REDMINE_MCP_READ_ONLY=true -- npx -y @compasify/redmine-mcp-server

User configuration (global):

claude mcp add -s user redmine -e REDMINE_URL=https://your-redmine.example.com -e REDMINE_API_KEY=your-api-key-here -e REDMINE_MCP_READ_ONLY=true -- npx -y @compasify/redmine-mcp-server

Visual Studio Code

Project configuration (.vscode/mcp.json):

{
  "servers": {
    "redmine": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@compasify/redmine-mcp-server"],
      "env": {
        "REDMINE_URL": "https://your-redmine.example.com",
        "REDMINE_API_KEY": "your-api-key-here",
        "REDMINE_MCP_READ_ONLY": "true"
      }
    }
  }
}

User configuration (settings.json):

{
  "mcp": {
    "servers": {
      "redmine": {
        "type": "stdio",
        "command": "npx",
        "args": ["-y", "@compasify/redmine-mcp-server"],
        "env": {
          "REDMINE_URL": "https://your-redmine.example.com",
          "REDMINE_API_KEY": "your-api-key-here",
          "REDMINE_MCP_READ_ONLY": "true"
        }
      }
    }
  }
}

Available Features

This MCP server comprehensively supports the functions provided by Redmine's REST API:

Main Features

  • Issues: Create, update, delete, search, and manage related issues

  • Projects: Create, update, delete, archive, and manage memberships

  • Users: Create, update, delete, and manage groups

  • Time Entries: Record, update, and delete time entries

  • Wiki: Create, update, delete pages, and manage versions

  • News: Create, update, and delete news

  • Files: Upload and download files

  • Attachments: Upload, download files, and get thumbnails

  • Queries: Execute saved queries

  • Custom Fields: Get and manage custom fields

  • Roles: Get and manage roles

  • Trackers: Get and manage trackers

  • Issue Statuses: Get and manage issue statuses

  • Search: Cross-search functionality

Read-Only Mode

By setting REDMINE_MCP_READ_ONLY=true, you can disable data modification operations. This allows safe data reference.

License

MIT License

Author

compasify

Original Author

onozaty

Acknowledgments

Available Tools

90 tools
addRelatedIssueD

Add related issue

Inputs: bodyParams (required), pathParams (required).

addUserToGroupC

Add user to group

Inputs: bodyParams (required), pathParams (required).

addWatcherD

Add watcher

Inputs: bodyParams (required), pathParams (required).

archiveProjectD

Archive project

Inputs: pathParams (required).

closeProjectC

Close project

Inputs: pathParams (required).

createFileD

Create file

Inputs: bodyParams (required), pathParams (required).

createGroupD

Create group

Inputs: bodyParams (required), pathParams (required).

createIssueC

Create issue

Inputs: bodyParams (required), pathParams (required).

createIssueCategoryC

Create issue category

Inputs: bodyParams (required), pathParams (required).

createIssueRelationD

Create issue relation

Inputs: bodyParams (required), pathParams (required).

createMembershipD

Create membership

Inputs: bodyParams (required), pathParams (required).

createNewsD

Create news

Inputs: bodyParams (required), pathParams (required).

createProjectD

Create project

Inputs: bodyParams (required), pathParams (required).

createTimeEntryC

Create time entry

Inputs: bodyParams (required), pathParams (required).

createUserD

Create user

Inputs: bodyParams (required), pathParams (required).

createVersionD

Create version

Inputs: bodyParams (required), pathParams (required).

deleteAttachmentC

Delete attachment

Inputs: pathParams (required).

deleteGroupC

Delete group

Inputs: pathParams (required).

deleteIssueC

Delete issue

Inputs: pathParams (required).

deleteIssueCategoryC

Delete issue category

Inputs: pathParams (required), queryParams (required).

deleteIssueRelationC

Delete issue relation

Inputs: pathParams (required).

deleteMembershipD

Delete membership

Inputs: pathParams (required).

deleteNewsC

Delete news

Inputs: pathParams (required).

deleteProjectD

Delete project

Inputs: pathParams (required).

deleteTimeEntryC

Delete time entry

Inputs: pathParams (required).

deleteUserD

Delete user

Inputs: pathParams (required).

deleteVersionD

Delete version

Inputs: pathParams (required).

deleteWikiPageC

Delete wiki page

Inputs: pathParams (required).

downloadAttachmentAsBase64ContentB

Download attachment file from Redmine as Base64 encoded content

Inputs: pathParams (required).

downloadAttachmentToLocalFileC

Download attachment file from Redmine to local file system

Inputs: pathParams (required).

downloadThumbnailAsBase64ContentB

Download thumbnail from Redmine as Base64 encoded content

Inputs: pathParams (required).

downloadThumbnailToLocalFileB

Download thumbnail from Redmine to local file system

Inputs: pathParams (required).

getAttachmentD

Show attachment

Inputs: pathParams (required).

getCurrentUserB

Show current user

Inputs: pathParams (required), queryParams (required).

getCustomFieldsC

List custom fields

Inputs: pathParams (required).

getDocumentCategoriesC

List document categories

Inputs: pathParams (required).

getFilesD

List files

Inputs: pathParams (required).

getGroupD

Show group

Inputs: pathParams (required), queryParams (required).

getGroupsC

List groups

Inputs: pathParams (required).

getIssueD

Show issue

Inputs: pathParams (required), queryParams (required).

getIssueCategoriesC

List issue categories

Inputs: pathParams (required), queryParams (required).

getIssueCategoryC

Show issue category

Inputs: pathParams (required).

getIssuePrioritiesC

List issue priorities

Inputs: pathParams (required).

getIssueRelationC

Show issue relation

Inputs: pathParams (required).

getIssueRelationsD

List issue relations

Inputs: pathParams (required).

getIssuesC

List issues

Inputs: pathParams (required), queryParams (required).

getIssueStatusesC

List issue statuses

Inputs: pathParams (required).

getMembershipD

Show membership

Inputs: pathParams (required).

getMembershipsC

List memberships

Inputs: pathParams (required), queryParams (required).

getMyAccountD

Show my account

Inputs: pathParams (required).

getNewsD

Show news

Inputs: pathParams (required), queryParams (required).

getNewsListD

List news

Inputs: pathParams (required), queryParams (required).

getNewsListByProjectC

List news by project

Inputs: pathParams (required), queryParams (required).

getProjectD

Show project

Inputs: pathParams (required), queryParams (required).

getProjectsC

List projects

Inputs: pathParams (required), queryParams (required).

getQueriesC

List queries

Inputs: pathParams (required), queryParams (required).

getRoleD

Show role

Inputs: pathParams (required).

getRolesC

List roles

Inputs: pathParams (required).

getTimeEntriesC

List time entries

Inputs: pathParams (required), queryParams (required).

getTimeEntryD

Show time entry

Inputs: pathParams (required).

getTimeEntryActivitiesC

List time entry activities

Inputs: pathParams (required).

getTrackersC

List trackers

Inputs: pathParams (required).

getUserC

Show user

Inputs: pathParams (required), queryParams (required).

getUsersC

List users

Inputs: pathParams (required), queryParams (required).

getVersionsD

Show version

Inputs: pathParams (required).

getVersionsByProjectC

List versions by project

Inputs: pathParams (required), queryParams (required).

getWikiPageC

Show wiki page

Inputs: pathParams (required), queryParams (required).

getWikiPageByVersionC

Show wiki page by specific version

Inputs: pathParams (required), queryParams (required).

getWikiPagesC

List wiki pages

Inputs: pathParams (required).

removeRelatedIssueC

Remove related issue

Inputs: pathParams (required).

removeUserFromGroupC

Remove user from group

Inputs: pathParams (required).

removeWatcherC

Remove watcher

Inputs: pathParams (required).

reopenProjectD

Reopen project

Inputs: pathParams (required).

unarchiveProjectD

Unarchive project

Inputs: pathParams (required).

updateAttachmentD

Update attachment

Inputs: bodyParams (required), pathParams (required).

updateGroupD

Update group

Inputs: bodyParams (required), pathParams (required).

updateIssueD

Update issue

Inputs: bodyParams (required), pathParams (required).

updateIssueCategoryC

Update issue category

Inputs: bodyParams (required), pathParams (required).

updateJournalC

Update journal

Inputs: bodyParams (required), pathParams (required).

updateMembershipD

Update membership

Inputs: bodyParams (required), pathParams (required).

updateMyAccountC

Update my account

Inputs: bodyParams (required), pathParams (required).

updateNewsD

Update news

Inputs: bodyParams (required), pathParams (required).

updateProjectD

Update project

Inputs: bodyParams (required), pathParams (required).

updateTimeEntryC

Update time entry

Inputs: bodyParams (required), pathParams (required).

updateUserD

Update user

Inputs: bodyParams (required), pathParams (required).

updateVersionD

Update version

Inputs: bodyParams (required), pathParams (required).

updateWikiPageC

Create or update wiki page

Inputs: bodyParams (required), pathParams (required).

uploadAttachmentFromBase64ContentB

Upload attachment file from Base64 encoded content to Redmine and get upload token

Inputs: pathParams (required).

uploadAttachmentFromLocalFileA

Upload attachment file from local file system to Redmine and get upload token

Inputs: pathParams (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.2/5.0

    Scored across 90 tools

    Disambiguation4/5

    Most tools follow a clear resource-action pattern (e.g., createIssue, updateIssue, deleteIssue) that makes their purposes distinct. However, there is some potential confusion between addRelatedIssue and createIssueRelation, as both deal with issue relationships, and getVersions appears to be mis-named (listed as 'Show version' but plural), which could cause misselection.

    Naming Consistency4/5

    The majority of tools use a consistent camelCase verb-first pattern (get, create, update, delete, add, remove, upload, download) followed by a resource name (e.g., deleteProject, getUsers). Minor deviations include getNewsList and getNewsListByProject instead of getNews for listing, and getVersionsByProject vs getVersions, which breaks the plural/singular consistency but is still readable.

    Tool Count1/5

    With 90 tools, this server has an extreme abundance of operations, far exceeding the 50+ threshold for mismatch. While the scope is broad (Redmine's many resources), the sheer number makes the tool set unwieldy and hard to navigate, and many tools are trivial enumerations (e.g., getIssueStatuses, getTrackers).

    Completeness4/5

    The tool set covers a wide range of Redmine resources with CRUD operations for issues, projects, users, time entries, news, versions, wiki pages, attachments, categories, groups, etc. Minor gaps exist, such as no deleteFile for files and no create/update/delete for queries, but these are not critical for typical workflows.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A Model Context Protocol server for interacting with Redmine using its REST API, enabling the management of tickets, projects, and user data through integration with LLMs.
      78
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      A Model Context Protocol server that enables Claude Code to directly interact with Redmine project management systems, supporting issue management, project operations, and search features.
      22
      9
      MIT
    • A
      license
      C
      quality
      B
      maintenance
      Model Context Protocol (MCP) server for Redmine that provides comprehensive access to the Redmine REST API. It allows you to operate Redmine from MCP clients such as Claude Desktop.
      90
      3,460 npm
      30
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides an MCP server for interacting with Redmine's REST API, enabling LLMs to manage issues, projects, users, and time entries.
      MIT