Redmine MCP Server
This server provides an MCP interface to the Redmine REST API, letting AI agents read and modify Redmine data with optional safety controls.
Issues: list, show, create, update, delete issues; add/remove watchers; add/remove related issues
Projects: list, show, create, update, delete, archive, unarchive, close, reopen projects
Project memberships: list, show, create, update, delete memberships
Users and groups: list, show, create, update, delete users/groups; get current user; manage group memberships
Time entries: list, show, create, update, delete time entries
Wiki pages: list, show (including by version), create/update, delete wiki pages
News: list, show, create, update, delete news (global or per project)
Files and attachments: list files, create files, upload/download attachments and thumbnails (local file or Base64)
Relations and versions: manage issue relations and project versions
Queries and enumerations: run saved queries; list issue statuses, trackers, priorities, categories, roles, custom fields
Search: perform cross-resource searches
My account: show and update current user account settings
Journals: update journal notes/private flags
Safety controls: read-only mode, allow/deny tool filtering by regex, and read-only hints on tools
Provides comprehensive access to the Redmine REST API, enabling operations on issues, projects, users, time entries, wiki, news, files, attachments, queries, custom fields, roles, trackers, issue statuses, and more.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Redmine MCP Server show me all issues with high priority"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
readOnlyHintso clients can tell read operations from write ones
Prerequisites
Getting Redmine API Key
Log in to Redmine with administrator privileges
Go to "Administration" → "Settings" → "API" tab
Check "Enable REST web service"
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)falseor 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
Using npx (Recommended for quick start)
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-serverProject 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-serverUser 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-serverVisual 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:
^getenables only read-oriented tools likegetIssues,getProjects, etc.
REDMINE_MCP_TOOLS_DENY_PATTERN: Tools whose names match this regex are disabled.Example:
^deletedisables 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
Acknowledgments
OpenAPI specification: d-yoshi/redmine-openapi
Code generation: Orval - TypeScript client and schema generator from OpenAPI
Available Tools
90 toolsaddRelatedIssueD
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).
downloadAttachmentAsBase64ContentBRead-only
Download attachment file from Redmine as Base64 encoded content
Inputs: pathParams (required).
downloadAttachmentToLocalFileARead-only
Download attachment file from Redmine to local file system
Inputs: pathParams (required).
downloadThumbnailAsBase64ContentARead-only
Download thumbnail from Redmine as Base64 encoded content
Inputs: pathParams (required).
downloadThumbnailToLocalFileCRead-only
Download thumbnail from Redmine to local file system
Inputs: pathParams (required).
getAttachmentDRead-only
Show attachment
Inputs: pathParams (required).
getCurrentUserCRead-only
Show current user
Inputs: pathParams (required), queryParams (required).
getCustomFieldsCRead-only
List custom fields
Inputs: pathParams (required).
getDocumentCategoriesCRead-only
List document categories
Inputs: pathParams (required).
getFilesCRead-only
List files
Inputs: pathParams (required).
getGroupDRead-only
Show group
Inputs: pathParams (required), queryParams (required).
getGroupsCRead-only
List groups
Inputs: pathParams (required).
getIssueDRead-only
Show issue
Inputs: pathParams (required), queryParams (required).
getIssueCategoriesCRead-only
List issue categories
Inputs: pathParams (required), queryParams (required).
getIssueCategoryDRead-only
Show issue category
Inputs: pathParams (required).
getIssuePrioritiesCRead-only
List issue priorities
Inputs: pathParams (required).
getIssueRelationCRead-only
Show issue relation
Inputs: pathParams (required).
getIssueRelationsCRead-only
List issue relations
Inputs: pathParams (required).
getIssuesCRead-only
List issues
Inputs: pathParams (required), queryParams (required).
getIssueStatusesCRead-only
List issue statuses
Inputs: pathParams (required).
getMembershipDRead-only
Show membership
Inputs: pathParams (required).
getMembershipsCRead-only
List memberships
Inputs: pathParams (required), queryParams (required).
getMyAccountCRead-only
Show my account
Inputs: pathParams (required).
getNewsDRead-only
Show news
Inputs: pathParams (required), queryParams (required).
getNewsListDRead-only
List news
Inputs: pathParams (required), queryParams (required).
getNewsListByProjectCRead-only
List news by project
Inputs: pathParams (required), queryParams (required).
getProjectDRead-only
Show project
Inputs: pathParams (required), queryParams (required).
getProjectsCRead-only
List projects
Inputs: pathParams (required), queryParams (required).
getQueriesDRead-only
List queries
Inputs: pathParams (required), queryParams (required).
getRoleDRead-only
Show role
Inputs: pathParams (required).
getRolesCRead-only
List roles
Inputs: pathParams (required).
getTimeEntriesCRead-only
List time entries
Inputs: pathParams (required), queryParams (required).
getTimeEntryCRead-only
Show time entry
Inputs: pathParams (required).
getTimeEntryActivitiesDRead-only
List time entry activities
Inputs: pathParams (required).
getTrackersCRead-only
List trackers
Inputs: pathParams (required).
getUserDRead-only
Show user
Inputs: pathParams (required), queryParams (required).
getUsersCRead-only
List users
Inputs: pathParams (required), queryParams (required).
getVersionsDRead-only
Show version
Inputs: pathParams (required).
getVersionsByProjectCRead-only
List versions by project
Inputs: pathParams (required), queryParams (required).
getWikiPageDRead-only
Show wiki page
Inputs: pathParams (required), queryParams (required).
getWikiPageByVersionBRead-only
Show wiki page by specific version
Inputs: pathParams (required), queryParams (required).
getWikiPagesBRead-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).
searchDRead-only
Search
Inputs: pathParams (required), queryParams (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
Scored across 90 tools
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.
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.
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.
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
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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.78MIT
- AlicenseBqualityCmaintenanceA Model Context Protocol server that enables Claude Code to directly interact with Redmine project management systems, supporting issue management, project operations, and search features.229MIT
- AlicenseCqualityDmaintenanceModel 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.9014 npmMIT
- AlicenseNot gradedqualityDmaintenanceProvides an MCP server for interacting with Redmine's REST API, enabling LLMs to manage issues, projects, users, and time entries.MIT