Skip to main content
Glama
Redmine MCP Server

Redmine MCP Server

by onozaty

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

  • 🔧 Tool Filtering: Control which tools are available using regex patterns

  • 🏷️ Tool Annotations: Declares readOnlyHint so clients can tell read operations from write ones

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)

  • REDMINE_MCP_TOOLS_ALLOW_PATTERN (Optional): Regex pattern to allow only matching tools

    • Example: ^get (enable only tools starting with "get")

    • If unset, all tools are allowed (subject to other settings)

  • REDMINE_MCP_TOOLS_DENY_PATTERN (Optional): Regex pattern to disable matching tools

    • Example: ^delete (disable all tools starting with "delete")

    • If unset, no tools are denied (subject to other settings)

    • Deny pattern takes priority over allow pattern

MCP Client Configuration

Add the following as MCP configuration for your AI agent:

{
  "mcpServers": {
    "redmine": {
      "command": "npx",
      "args": ["-y", "@onozaty/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/onozaty/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", "@onozaty/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 @onozaty/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 @onozaty/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 @onozaty/redmine-mcp-server

Visual Studio Code

Project configuration (.vscode/mcp.json):

{
  "servers": {
    "redmine": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@onozaty/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", "@onozaty/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.

Tool Filtering

You can control which tools are available using the following environment variables:

  • REDMINE_MCP_TOOLS_ALLOW_PATTERN: Only tools whose names match this regex are enabled.

    • Example: ^get enables only read-oriented tools like getIssues, getProjects, etc.

  • REDMINE_MCP_TOOLS_DENY_PATTERN: Tools whose names match this regex are disabled.

    • Example: ^delete disables all delete operations.

When both are set, deny takes priority. These can also be combined with REDMINE_MCP_READ_ONLY.

Example: Allow only issue-related tools

"env": {
  "REDMINE_MCP_TOOLS_ALLOW_PATTERN": "Issue"
}

Example: Disable all delete and archive operations

"env": {
  "REDMINE_MCP_TOOLS_DENY_PATTERN": "^(delete|archive)"
}

Tool Annotations

Every tool declares the readOnlyHint annotation, so clients do not have to guess from the tool name whether a call modifies data: it is true for read operations (getIssues, getProjects, ...) and false for the ones that create, update or delete. Clients that honour the annotation can, for instance, run read operations without asking the user for confirmation.

Available Tools

The following tools are available (based on Redmine REST API categories):

Category

Tools

Issues

getIssues, getIssue, createIssue, updateIssue, deleteIssue, addWatcher, removeWatcher, addRelatedIssue, removeRelatedIssue

Projects

getProjects, getProject, createProject, updateProject, deleteProject, archiveProject, unarchiveProject, closeProject, reopenProject

Project Memberships

getMemberships, getMembership, createMembership, updateMembership, deleteMembership

Users

getUsers, getUser, createUser, updateUser, deleteUser, getCurrentUser

Time Entries

getTimeEntries, getTimeEntry, createTimeEntry, updateTimeEntry, deleteTimeEntry

News

getNewsList, getNewsListByProject, getNews, createNews, updateNews, deleteNews

Issue Relations

getIssueRelations, getIssueRelation, createIssueRelation, deleteIssueRelation

Versions

getVersionsByProject, getVersions, createVersion, updateVersion, deleteVersion

Wiki Pages

getWikiPages, getWikiPage, getWikiPageByVersion, updateWikiPage, deleteWikiPage

Queries

getQueries

Attachments

getAttachment, updateAttachment, deleteAttachment, uploadAttachmentFromLocalFile, uploadAttachmentFromBase64Content, downloadAttachmentToLocalFile, downloadAttachmentAsBase64Content, downloadThumbnailToLocalFile, downloadThumbnailAsBase64Content

Issue Statuses

getIssueStatuses

Trackers

getTrackers

Enumerations

getIssuePriorities, getTimeEntryActivities, getDocumentCategories

Issue Categories

getIssueCategories, getIssueCategory, createIssueCategory, updateIssueCategory, deleteIssueCategory

Roles

getRoles, getRole

Groups

getGroups, getGroup, createGroup, updateGroup, deleteGroup, addUserToGroup, removeUserFromGroup

Custom Fields

getCustomFields

Search

search

Files

getFiles, createFile

My Account

getMyAccount, updateMyAccount

Journals

updateJournal

License

MIT License

Author

onozaty

Acknowledgments

Available Tools

90 tools
addRelatedIssueD

Add related issue

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

addUserToGroupD

Add user to group

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

addWatcherC

Add watcher

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

archiveProjectD

Archive project

Inputs: pathParams (required).

closeProjectD

Close project

Inputs: pathParams (required).

createFileD

Create file

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

createGroupD

Create group

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

createIssueD

Create issue

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

createIssueCategoryC

Create issue category

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

createIssueRelationC

Create issue relation

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

createMembershipC

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).

createUserC

Create user

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

createVersionD

Create version

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

deleteAttachmentC

Delete attachment

Inputs: pathParams (required).

deleteGroupD

Delete group

Inputs: pathParams (required).

deleteIssueD

Delete issue

Inputs: pathParams (required).

deleteIssueCategoryD

Delete issue category

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

deleteIssueRelationC

Delete issue relation

Inputs: pathParams (required).

deleteMembershipC

Delete membership

Inputs: pathParams (required).

deleteNewsC

Delete news

Inputs: pathParams (required).

deleteProjectD

Delete project

Inputs: pathParams (required).

deleteTimeEntryC

Delete time entry

Inputs: pathParams (required).

deleteUserC

Delete user

Inputs: pathParams (required).

deleteVersionC

Delete version

Inputs: pathParams (required).

deleteWikiPageC

Delete wiki page

Inputs: pathParams (required).

downloadAttachmentAsBase64ContentB
Read-only

Download attachment file from Redmine as Base64 encoded content

Inputs: pathParams (required).

downloadAttachmentToLocalFileA
Read-only

Download attachment file from Redmine to local file system

Inputs: pathParams (required).

downloadThumbnailAsBase64ContentA
Read-only

Download thumbnail from Redmine as Base64 encoded content

Inputs: pathParams (required).

downloadThumbnailToLocalFileC
Read-only

Download thumbnail from Redmine to local file system

Inputs: pathParams (required).

getAttachmentD
Read-only

Show attachment

Inputs: pathParams (required).

getCurrentUserC
Read-only

Show current user

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

getCustomFieldsC
Read-only

List custom fields

Inputs: pathParams (required).

getDocumentCategoriesC
Read-only

List document categories

Inputs: pathParams (required).

getFilesC
Read-only

List files

Inputs: pathParams (required).

getGroupD
Read-only

Show group

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

getGroupsC
Read-only

List groups

Inputs: pathParams (required).

getIssueD
Read-only

Show issue

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

getIssueCategoriesC
Read-only

List issue categories

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

getIssueCategoryD
Read-only

Show issue category

Inputs: pathParams (required).

getIssuePrioritiesC
Read-only

List issue priorities

Inputs: pathParams (required).

getIssueRelationC
Read-only

Show issue relation

Inputs: pathParams (required).

getIssueRelationsC
Read-only

List issue relations

Inputs: pathParams (required).

getIssuesC
Read-only

List issues

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

getIssueStatusesC
Read-only

List issue statuses

Inputs: pathParams (required).

getMembershipD
Read-only

Show membership

Inputs: pathParams (required).

getMembershipsC
Read-only

List memberships

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

getMyAccountC
Read-only

Show my account

Inputs: pathParams (required).

getNewsD
Read-only

Show news

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

getNewsListD
Read-only

List news

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

getNewsListByProjectC
Read-only

List news by project

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

getProjectD
Read-only

Show project

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

getProjectsC
Read-only

List projects

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

getQueriesD
Read-only

List queries

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

getRoleD
Read-only

Show role

Inputs: pathParams (required).

getRolesC
Read-only

List roles

Inputs: pathParams (required).

getTimeEntriesC
Read-only

List time entries

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

getTimeEntryC
Read-only

Show time entry

Inputs: pathParams (required).

getTimeEntryActivitiesD
Read-only

List time entry activities

Inputs: pathParams (required).

getTrackersC
Read-only

List trackers

Inputs: pathParams (required).

getUserD
Read-only

Show user

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

getUsersC
Read-only

List users

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

getVersionsD
Read-only

Show version

Inputs: pathParams (required).

getVersionsByProjectC
Read-only

List versions by project

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

getWikiPageD
Read-only

Show wiki page

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

getWikiPageByVersionB
Read-only

Show wiki page by specific version

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

getWikiPagesB
Read-only

List wiki pages

Inputs: pathParams (required).

removeRelatedIssueC

Remove related issue

Inputs: pathParams (required).

removeUserFromGroupC

Remove user from group

Inputs: pathParams (required).

removeWatcherD

Remove watcher

Inputs: pathParams (required).

reopenProjectD

Reopen project

Inputs: pathParams (required).

unarchiveProjectD

Unarchive project

Inputs: pathParams (required).

updateAttachmentC

Update attachment

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

updateGroupC

Update group

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

updateIssueD

Update issue

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

updateIssueCategoryD

Update issue category

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

updateJournalC

Update journal

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

updateMembershipC

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).

updateTimeEntryD

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).

uploadAttachmentFromBase64ContentA

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

Inputs: pathParams (required).

uploadAttachmentFromLocalFileC

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.1/5.0

    Scored across 90 tools

    Disambiguation3/5

    Most tools target distinct Redmine resources and actions, but the large surface contains several overlapping or confusing pairs: addRelatedIssue vs createIssueRelation, getNewsList vs getNewsListByProject, getVersions vs getVersionsByProject, and singular/plural pairs like getMembership/getMemberships. Descriptions help somewhat, but an agent can still misselect among these similar tools.

    Naming Consistency4/5

    The set is predominantly camelCase with verb_noun naming such as getIssue, createIssue, updateProject, and deleteUser. There are minor deviations like the bare search tool and inconsistent use of List in getNewsList/getVersions, but the overall convention is readable and predictable.

    Tool Count1/5

    With 90 tools, the surface is far beyond a well-scoped MCP tool set and exceeds the 50+ threshold for extreme mismatch. Even for a broad system like Redmine, this many tools makes discovery, selection, and maintenance unnecessarily difficult.

    Completeness4/5

    Core Redmine workflows are well covered: projects, issues, users, groups, memberships, time entries, versions, wiki pages, news, attachments, watchers, relations, and issue categories. There are still notable gaps such as document CRUD, boards/forums/messages, repository operations, and admin CRUD for roles/custom fields/queries, but agents can work around most of these for common tasks.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    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
      D
      maintenance
      Model Context Protocol (MCP) server for Redmine that provides comprehensive access to the Redmine REST API, enabling users to operate Redmine from MCP clients such as Claude Desktop.
      90
      14 npm
      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