mcp-redmine
The mcp-redmine server connects AI agents to a Redmine instance via its REST API, exposing 73 tools for natural-language management of projects, issues, users, and more.
Issue Management: Create, read, update (including bulk updates), and delete issues; manage watchers and journal notes.
Issue Relations: List, create, and delete relations (
blocks,precedes, etc.); chain a sequence of issues in one call.Project Administration: Create, update, archive/unarchive projects; manage members, versions (milestones), categories, and project files.
User & Group Management: Create, list, update users (lock instead of delete, user deletion intentionally omitted); update own account; create, update, delete groups; add/remove users from groups.
Roles: List roles and get detailed permissions for a role.
Wiki: List pages, read with version history, create/update with nesting support, attach files, delete pages.
Time Tracking: Log, list, get, update, delete time entries; list available time entry activities.
Attachments: Attach local files to issues or wiki pages; get, update (rename/describe), and delete attachments.
Project Files: List and upload files to a project’s Files tab.
News: List, get, create, update, delete project news items.
Search & Saved Queries: Perform full-text search across the instance or a specific project; list saved queries.
Metadata: List issue statuses, priorities, trackers, custom fields, and document categories.
Safety & Constraints: Project and user deletion tools are intentionally excluded (use archiving or locking). File uploads are disabled by default unless REDMINE_UPLOAD_ROOTS is configured to prevent prompt injection. Passwords are never passed through the conversation. Central error handling provides readable messages.
Provides tools for interacting with a Redmine instance, enabling AI agents to manage issues, projects, wiki pages, time tracking, users, groups, and more through the Redmine REST API.
Click on "Install 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., "@mcp-redmineList open issues in the Website project assigned to me."
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.
mcp-redmine
A Model Context Protocol server that connects Claude (Desktop or Code) — or any other MCP client — to a Redmine instance through its REST API.
It exposes 73 tools covering, in practice, the entire stable Redmine REST API: issues, relations, projects, memberships, versions, categories, users, groups, roles, wiki, time tracking, attachments, project files, news, and search. Point your agent at a Redmine project and let it read and manage issues, log time, edit wiki pages, and administer users — all through natural conversation.
Features
Full read/write coverage of issues, including bulk updates, relations, watchers, and comments.
Project administration: create/update/archive projects, manage members, versions, and categories.
User and group administration, with deliberately no "delete user" or "delete project" tool — see Security.
Wiki, including nested pages and file attachments.
Time tracking, attachments, project files, news, and full-text search.
Readable errors: every failure comes back as a clear sentence pulled from Redmine's own validation response, not a raw stack trace.
Nothing to run: a single Python process talking stdio to your MCP client — no database, no server to host, no Docker required.
Related MCP server: redmine-mcp
Prerequisites
Python 3.10+
A Redmine instance with the REST API enabled:
In Redmine, go to Administration → Settings → API and enable "Enable REST web service" (if not already on).
Go to My account → API access key and copy the value.
Installation
The distribution is published as mcp-redmine-rest, and the command it
installs is mcp-redmine-rest. The shorter mcp-redmine name on PyPI belongs
to an unrelated project — don't
install that one expecting this server.
If you're pointing an AI agent at this repository to do the setup for you, llms-install.md is written for exactly that.
With uv (recommended)
uv tool install mcp-redmine-restWith pip
pip install mcp-redmine-restFrom source
git clone https://github.com/alsimoes/mcp-redmine-rest.git
cd mcp-redmine-rest
python3 -m venv venv && source venv/bin/activate # Linux/Mac
pip install -e .On Windows, use py and PowerShell rather than a Git Bash/WSL shell — creating
or recreating the venv from a Unix-style shell on Windows overwrites
venv\pyvenv.cfg with a Unix home path, and every subsequent launch of
venv\Scripts\python.exe fails with No Python at '/usr/bin\python.exe' (or
similar):
git clone https://github.com/alsimoes/mcp-redmine-rest.git
cd mcp-redmine-rest
py -3 -m venv venv
.\venv\Scripts\Activate.ps1
pip install -e .Configuration
The server reads its configuration from environment variables:
Variable | Required | Description |
| Yes | Base URL of your Redmine instance (no trailing slash). |
| Yes | Your API access key, from My account → API access key. |
| No | Per-request timeout in seconds. Defaults to 15. |
| No | Directories the file-upload tools may read from, separated by |
Keeping the key out of the client configuration
Values missing from the environment are read from a .env file, so the API
key does not have to sit in plain text in your MCP client's configuration.
Copy .env.example to .env in the repository root and fill it in — every
variable in the table above is honoured, so the client's env block can be
dropped entirely:
REDMINE_URL=https://redmine.example.com
REDMINE_API_KEY=your_api_key_here
REDMINE_TIMEOUT=15The file is gitignored. Variables already present in the environment always
win, so an env block in your client's configuration still overrides it. To
keep the file somewhere else, set REDMINE_ENV_FILE to its full path.
This matters on Claude Desktop in particular: it launches MCP servers with a
minimal environment it builds itself, so variables you export in your shell
or set with setx never reach the server. Use the env block or a .env
file.
Claude Desktop
Edit (or create) the Claude Desktop configuration file:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"redmine": {
"command": "mcp-redmine-rest",
"env": {
"REDMINE_URL": "https://redmine.example.com",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}If you installed from source instead of via uv tool install / pip install, point command at the interpreter in your virtual environment and
pass the script as an argument:
{
"mcpServers": {
"redmine": {
"command": "/full/path/to/mcp-redmine/venv/bin/python",
"args": ["-m", "mcp_redmine"],
"env": {
"REDMINE_URL": "https://redmine.example.com",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}On Windows, point command at venv\Scripts\python.exe (with \\ escaped
in JSON):
{
"mcpServers": {
"redmine": {
"command": "C:\\full\\path\\to\\mcp-redmine\\venv\\Scripts\\python.exe",
"args": ["-m", "mcp_redmine"],
"env": {
"REDMINE_URL": "https://redmine.example.com",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}Restart Claude Desktop afterwards. The tools icon (🔨) should show the Redmine tools as available.
Claude Code
claude mcp add redmine \
--env REDMINE_URL=https://redmine.example.com \
--env REDMINE_API_KEY=your_api_key_here \
-- mcp-redmine-restConfirm with:
claude mcp listCline (VS Code)
Open the MCP settings from the palette — Ctrl+Shift+P → Cline: Open MCP
Config File — or click the gear next to "MCP Servers" in the Cline sidebar
and choose Configure MCP Servers. Either one opens
cline_mcp_settings.json; add the server there:
{
"mcpServers": {
"redmine": {
"command": "mcp-redmine-rest",
"env": {
"REDMINE_URL": "https://redmine.example.com",
"REDMINE_API_KEY": "your_api_key_here"
}
}
}
}Use the palette command rather than editing the file by hand — it lives deep
in VS Code's global storage
(.../User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json),
and the path differs per platform.
If mcp-redmine-rest is not on the PATH that VS Code sees, use the module
form instead — "command" pointing at the interpreter that has the package
installed, with "args": ["-m", "mcp_redmine"], exactly like the Claude
Desktop examples above.
Reload the window (Ctrl+Shift+P → Developer: Reload Window) and the server
should come up as connected under "MCP Servers". A longer walkthrough,
covering the workspace .mcp.json and the Add-Server UI, is in
CLINE_SETUP.md.
Other MCP clients
Any client that can launch a local process and speak MCP over stdio works the
same way: run mcp-redmine-rest (or python -m mcp_redmine) with
REDMINE_URL and REDMINE_API_KEY set in its environment.
Run locally (optional)
Useful for a quick sanity check before wiring the server into a client:
cp .env.example .env # then edit .env with your values
export $(grep -v '^#' .env | xargs) # or use a tool like direnv
mcp-redmine-restIf there's no connection error, the server is ready — it waits for MCP messages on stdin/stdout, so seeing nothing happen in the terminal is normal. Press Ctrl+C to stop it.
Usage examples
Once configured, just talk to the agent:
"List the open issues assigned to me in the Website project."
"Create a bug in Website titled 'Login button unresponsive on mobile', priority high."
"Move issues #101, #104, and #110 to In Progress and assign them to Alice."
"Log 3.5 hours on issue #204 for today, activity Development."
"What's on the wiki page 'Deployment' for the Infra project?"
"Search for 'timeout' across all projects."
Available tools
73 tools, grouped by resource. The full reference — signatures, parameters,
return shape, and the caveats that matter (like how precedes reschedules
issues, or that list_custom_fields requires an administrator) — lives in
docs/TOOLS.md.
Resource | Tools |
Issues |
|
Issue relations |
|
Projects |
|
Project members |
|
Versions |
|
Categories |
|
Users |
|
Groups |
|
Roles |
|
Wiki |
|
Time tracking |
|
Attachments |
|
Project files |
|
News |
|
Search |
|
Metadata |
|
API coverage
Redmine API resource | Status |
Issues | Complete (list, read, create, update, bulk, delete, watchers) |
Issue relations | Complete |
Projects | Complete minus deletion |
Project members | Complete |
Versions | Complete |
Issue categories | Complete |
Users | Complete minus deletion |
Groups | Complete |
Roles | Complete (the API is read-only) |
Wiki | Complete, including nesting and attachments |
Attachments | Complete |
Project files | Complete |
News | Complete |
Time tracking | Complete |
Search and saved queries | Complete |
Trackers, statuses, priorities, activities, custom fields | Complete (the API is read-only) |
Document categories | Complete (the API is read-only) |
The two omissions are deliberate. delete_project and delete_user are
irreversible and take other people's content down with them — issues, time
entries, wiki pages, authorship. archive_project and update_user with
status=3 cover the real use case reversibly. Deleting for real remains a web
UI operation, where confirmation is explicit and human. See
SECURITY.md for the full reasoning.
Trackers, issue statuses, priorities, and roles have no write operations in the Redmine API — they're configurable only in Administration. That's not a gap in this server.
Outside the stable REST API, and therefore outside this server's scope: repositories and changesets, wiki page protection, and instance-wide settings screens.
Error messages
Errors are handled centrally: when Redmine rejects a call, the server reads
the response body — that's where the real explanation lives, in the errors
field — and returns that sentence. Without a useful body, it falls back to
the HTTP status with a likely reason:
Status | Message |
401 | invalid or missing API key |
403 | not allowed to perform this operation, or the module is disabled for this project |
404 | not found (check the ID, or this endpoint may not exist in this Redmine version) |
409 | conflict — the resource was changed by someone else |
422 | Redmine rejected the data during validation |
This applies to every tool, read and write alike.
Troubleshooting
"REDMINE_URL and REDMINE_API_KEY must be set": the server checks its configuration at startup and exits immediately with this message rather than starting up broken. Check the
envblock in your MCP client's configuration.Every call fails with a network error: confirm the server process can actually reach
REDMINE_URL— MCP clients run the server as a local process, so it needs the same network access as your machine, not the browser.401 on every call: the API key is wrong, or "Enable REST web service" is off in Redmine's settings.
403 on a specific tool: usually a missing permission on the role of the user who owns the API key.
get_roleshows exactly which permissions a role has.A tool responds 404 that you'd expect to work: a few endpoints (
update_journal_note,update_news/delete_news,update_attachment) were added in specific Redmine versions — see docs/TOOLS.md for the minimum version of each.
Security
See SECURITY.md for the full model. In short: an API key grants access equivalent to the user who owns it, so create a dedicated Redmine user with a role scoped to what you want the agent to do, and use that user's key — don't try to limit the agent by editing this server's code.
File uploads are disabled until you set REDMINE_UPLOAD_ROOTS. The
three tools that upload a local file (attach_file_to_issue,
attach_file_to_wiki_page, upload_project_file) refuse every path by
default, precisely because an agent can be steered by injected content
(an issue comment, a wiki page) into uploading a file it was never meant to
read. See SECURITY.md.
Contributing
See CONTRIBUTING.md.
License
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server providing 63 tools to interact with Redmine instances, covering issues, projects, time entries, and wiki pages. It utilizes streamable HTTP transport and supports per-client authentication for secure management of Redmine resources.20
- AlicenseNot gradedqualityAmaintenanceA stateless MCP server for Redmine that allows users to interact with issues, time entries, wiki, projects, and more via their own API keys.4MIT
- AlicenseBqualityDmaintenanceMCP server for Redmine project management, enabling tools for managing projects, issues, users, time entries, groups, memberships, versions, wiki, news, attachments, search, and Agile sprints via the Redmine REST API.8981MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for Redmine that enables interaction with issues, wiki pages, and time entries through natural language.ISC
Related MCP Connectors
MCP Server for JFrog, providing tools for development and artifact management.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
A MCP server built for developers enabling Git based project management with project and personal…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/alsimoes/mcp-redmine-rest'
If you have feedback or need assistance with the MCP directory API, please join our Discord server