Redmine MCP Server
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.
README Documentation
Redmine MCP Server
A Model Context Protocol (MCP) server for Redmine integration, enabling Claude Code to directly interact with Redmine project management systems.
๐ Features
โ Issue Management
- Query Issues: Get detailed issue information and lists
- Create Issues: Create new issues and set related attributes
- Update Issues: Modify issue content, status, priority, etc.
- Assign Issues: Assign or unassign issues to specific users
- Add Notes: Add public or private notes to issues
- Close Issues: Automatically set issues to completed status
โ Project Management
- Project Lists: Get accessible project lists
- Project Issues: Filter by status and list all issues in projects
โ Search Features
- Keyword Search: Search for keywords in issue titles and descriptions
- My Issues: Quick view of issues assigned to current user
โ System Tools
- Health Check: Verify MCP server and Redmine connection status
- Status Query: Get available issue status lists
๐ System Requirements
- Python: 3.12 or higher
- Redmine: Version with REST API support (recommended 4.0+)
- Package Manager: uv or pip
๐ง Installation & Setup
1. Clone the Project
git clone https://github.com/snowild/redmine-mcp.git
cd redmine-mcp
2. Install Dependencies
Using uv (recommended):
uv sync
Or using pip:
pip install -e .
3. Environment Configuration
Create a .env file:
cp .env.example .env
Edit the .env file and set the following environment variables:
REDMINE_DOMAIN=https://your-redmine-domain.com
REDMINE_API_KEY=your_api_key_here
# Project-specific variables (avoid conflicts with other projects)
REDMINE_MCP_LOG_LEVEL=INFO
REDMINE_MCP_TIMEOUT=30
# Backward compatibility variables (fallback)
REDMINE_TIMEOUT=30
LOG_LEVEL=info
Environment Variables Reference
| Variable | Description | Default | Example |
|---|---|---|---|
REDMINE_DOMAIN | Redmine server URL | Required | https://redmine.example.com |
REDMINE_API_KEY | Your Redmine API key | Required | abc123... |
REDMINE_MCP_LOG_LEVEL | Log level for this MCP server | INFO | DEBUG, INFO, WARNING, ERROR |
REDMINE_MCP_TIMEOUT | Request timeout (seconds) | 30 | 60 |
REDMINE_MCP_TRANSPORT | Transport mode | stdio | stdio, sse |
REDMINE_MCP_HOST | SSE bind address | 0.0.0.0 | 127.0.0.1 |
REDMINE_MCP_PORT | SSE listen port | 8000 | 3000 |
LOG_LEVEL | Legacy log level (backward compatibility) | - | debug, info |
REDMINE_TIMEOUT | Legacy timeout (backward compatibility) | - | 30 |
Log Level Priority:
REDMINE_MCP_LOG_LEVEL(highest priority - project-specific)LOG_LEVEL(backward compatibility)INFO(default if neither is set)
Note: The system automatically handles case conversion and ensures FastMCP compatibility.
4. Redmine API Setup
4.1 Enable REST API
- Log in to Redmine as administrator
- Go to Administration โ Settings โ API
- Check "Enable REST web service"
- Click Save
4.2 Configure Redmine Basic Data (Administrator)
Before using MCP tools, you need to configure Redmine's basic data:
Configure Roles and Permissions
- Go to Administration โ Roles and permissions
- Create or edit roles (e.g.: Developer, Tester, Project Manager)
- Assign appropriate permissions to roles (recommend at least: View issues, Add issues, Edit issues)
Configure Trackers
- Go to Administration โ Trackers
- Create tracker types (e.g.: Bug, Feature, Support)
- Set default status and workflow for each tracker
Configure Issue Statuses
- Go to Administration โ Issue statuses
- Create statuses (e.g.: New, In Progress, Resolved, Closed, Rejected)
- Set status attributes (whether it's a closed status, etc.)
Configure Workflow
- Go to Administration โ Workflow
- Set allowed status transitions for each role and tracker combination
- Ensure basic status transition paths (New โ In Progress โ Resolved โ Closed)
Create Projects
- Go to Projects โ New project
- Set project name, identifier, description
- Select enabled modules (at least enable "Issue tracking")
- Assign members and set roles
4.3 Get API Key
- Log in to your Redmine system (can be administrator or regular user)
- Go to My account โ API access key
- Click Show or Reset to get the API key
- Copy the key to
REDMINE_API_KEYin the.envfile
โ ๏ธ Important Notes:
- If you can't find the API key option, please ensure step 4.1 (Enable REST API) is completed
- Complete basic setup before you can properly create and manage issues
๐ Detailed Setup Guide: For complete Redmine setup steps, please refer to Redmine Complete Setup Guide
๐ Claude Code Integration
Install to Claude Code
# Install from local
uv tool install .
# Or using pip
pip install .
# Add to Claude Code MCP configuration
claude mcp add redmine "redmine-mcp" \
-e REDMINE_DOMAIN="https://your-redmine-domain.com" \
-e REDMINE_API_KEY="your_api_key_here"
Verify Installation
# Test MCP server
uv run python -m redmine_mcp.server
# Test Claude Code integration
uv run python tests/scripts/claude_integration.py
๐ SSE Mode & Docker Deployment
Transport Modes
Redmine MCP supports two transport modes:
| Mode | Use Case | Multi-Client | Deployment |
|---|---|---|---|
| stdio (default) | Local CLI usage with Claude Code | โ Single | Auto-started by Claude Code |
| sse | Team sharing, remote access, containerized | โ Multiple | Manual start required |
Running in SSE Mode
Quick Start (Development)
# Navigate to project directory (where .env file is located)
cd /path/to/redmine-mcp
# Run with uv (reads .env automatically)
uv run redmine-mcp --transport sse
# Custom host and port
uv run redmine-mcp --transport sse --host 127.0.0.1 --port 3000
Global Installation
# Install globally
uv tool install . --force --reinstall
# Set environment variables
export REDMINE_DOMAIN=https://your-redmine.com
export REDMINE_API_KEY=your_api_key_here
# Run from anywhere
redmine-mcp --transport sse
Using .env File
Create a .env file in your working directory:
REDMINE_DOMAIN=https://your-redmine.com
REDMINE_API_KEY=your_api_key_here
REDMINE_MCP_TRANSPORT=sse
REDMINE_MCP_PORT=8000
Note:
uv runautomatically loads.envfrom the project directory. Global installation requires explicit environment variables or running from the directory containing.env.
Docker Deployment
Quick Start with Docker
# Build the image
docker build -t redmine-mcp .
# Run with environment variables
docker run -d \
-e REDMINE_DOMAIN=https://your-redmine.com \
-e REDMINE_API_KEY=your_api_key \
-p 8000:8000 \
--name redmine-mcp \
redmine-mcp
Using Docker Compose
# Edit docker-compose.yml with your Redmine settings
# Then start the service
docker compose up -d
# View logs
docker compose logs -f
# Stop the service
docker compose down
Docker Compose with .env file (Recommended)
- Create
.envfile:
REDMINE_DOMAIN=https://your-redmine.com
REDMINE_API_KEY=your_api_key_here
- Update
docker-compose.ymlto use environment variables:
environment:
- REDMINE_DOMAIN=${REDMINE_DOMAIN}
- REDMINE_API_KEY=${REDMINE_API_KEY}
- Start the service:
docker compose up -d
Connecting Claude Code to SSE Server
Once the SSE server is running, configure Claude Code to connect:
# Add MCP with SSE transport
claude mcp add --transport sse redmine http://localhost:8000/sse
Or manually edit ~/.claude.json:
{
"mcpServers": {
"redmine": {
"transport": "sse",
"url": "http://localhost:8000/sse"
}
}
}
Note: Environment variables (
REDMINE_DOMAIN,REDMINE_API_KEY) are configured on the SSE server side, not in Claude Code.
Connecting VS Code (GitHub Copilot) to SSE Server
VS Code with GitHub Copilot can also connect to the SSE server. Edit the MCP configuration file:
macOS: ~/Library/Application Support/Code/User/mcp.json
Windows: %APPDATA%\Code\User\mcp.json
Linux: ~/.config/Code/User/mcp.json
Add the following configuration:
{
"servers": {
"redmine": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}
Reference: For more details on VS Code MCP configuration, see VS Code MCP Servers Documentation.
๐ Updating/Reinstalling MCP
If you need to update to the latest version of the MCP server or reinstall it:
Quick Update (Recommended)
# Navigate to project directory
cd /path/to/redmine-mcp
# Pull latest changes (if from git)
git pull origin main
# Force reinstall with uv tool
uv tool install . --force --reinstall
# Restart Claude Code to reload MCP server
Full Reinstallation
If quick update doesn't work, follow these steps:
1. Remove Previous Installation
# Remove from Claude Code
claude mcp remove redmine
# Uninstall the package (if installed with uv tool)
uv tool uninstall redmine-mcp
# Or if installed with pip
pip uninstall redmine-mcp
2. Install Latest Version
# Navigate to project directory
cd /path/to/redmine-mcp
# Pull latest changes (if from git)
git pull origin main
# Install latest version
uv tool install .
# Or using pip
pip install .
3. Re-register with Claude Code
# Use full path to avoid PATH conflicts
claude mcp add redmine "$(which redmine-mcp)" \
-e REDMINE_DOMAIN="https://your-redmine-domain.com" \
-e REDMINE_API_KEY="your_api_key_here" \
-e REDMINE_MCP_LOG_LEVEL="INFO" \
-e REDMINE_MCP_TIMEOUT="30"
4. Verify Updated Installation
# Check installed version
uv tool list | grep redmine
# Verify MCP registration
claude mcp list
# Or check in Claude Code using slash command
# /mcp
Troubleshooting Update Issues
Problem: Old version still running after update
- This usually happens when PATH has multiple
redmine-mcpexecutables - Solution: Use full path in Claude Code MCP config
# Find the correct path
ls -la ~/.local/bin/redmine-mcp
# Update MCP config with full path
claude mcp remove redmine
claude mcp add redmine "/Users/YOUR_USERNAME/.local/bin/redmine-mcp" \
-e REDMINE_DOMAIN="https://your-redmine-domain.com" \
-e REDMINE_API_KEY="your_api_key_here"
Problem: "Failed to reconnect to redmine" after update
- Restart Claude Code completely (close and reopen)
- Or use
/mcpcommand and selectrestartfor redmine server
Important Notes:
- Always restart Claude Code after updating MCP server
- Use
--force --reinstallflags to ensure clean installation- Check tool count in
/mcpto verify update (current: 26 tools)
๐ ๏ธ Available MCP Tools (26 tools)
Basic Tools
| Tool Name | Description |
|---|---|
server_info | Display server information and configuration status |
health_check | Check server and Redmine connection health status |
refresh_cache | Manually refresh enum values and user cache |
Issue Operations
| Tool Name | Description |
|---|---|
get_issue | Get detailed information of specified issue |
create_new_issue | Create a new issue (supports name parameters) |
update_issue_status | Update issue status |
update_issue_content | Update issue content (title, description, etc.) |
add_issue_note | Add notes to issues (supports time tracking) |
assign_issue | Assign or unassign issues |
close_issue | Close issue and set completion rate |
Journal Tools
| Tool Name | Description |
|---|---|
list_issue_journals | List all journals/notes for an issue |
get_journal | Get detailed information of a specific journal |
Attachment Tools โจ New
| Tool Name | Description |
|---|---|
get_attachment_info | Get attachment metadata (without downloading) |
get_attachment_image | Download image for AI visual analysis (supports thumbnail) |
Query Tools
| Tool Name | Description |
|---|---|
list_project_issues | List issues in projects |
get_my_issues | Get list of issues assigned to me |
search_issues | Search for issues containing keywords |
get_projects | Get list of accessible projects |
get_issue_statuses | Get all available issue statuses |
get_trackers | Get all available tracker lists |
get_priorities | Get all available issue priorities |
get_time_entry_activities | Get all available time tracking activities |
get_document_categories | Get all available document categories |
User Tools
| Tool Name | Description |
|---|---|
search_users | Search users by name or login |
list_users | List all users |
get_user | Get detailed information of a specific user |
๐ก Usage Examples
Using in Claude Code
# Check server status
Please run health check
# Get project list
Show all accessible projects
# View system settings
Get all available issue statuses
Get all available tracker lists
Get all available issue priorities
Get all available time tracking activities
Get all available document categories
# View specific issue
Get detailed information for issue #123
# Create new issue
Create an issue in project ID 1:
- Title: Fix login error
- Description: Users cannot log in to the system properly
- Priority: High
# Search issues
Search for issues containing "login" keyword
# Update issue status
Update issue #123 status to "In Progress" with note "Starting to handle this issue"
๐งช Testing
Run Test Suite
# Run all tests
uv run python -m pytest
# Run MCP integration tests
uv run python tests/scripts/mcp_integration.py
# Run Claude Code integration tests
uv run python tests/scripts/claude_integration.py
Docker Environment Testing
If you want to test in a local Docker environment:
# Start Redmine test environment
docker-compose up -d
# Quick start complete test environment
./quick_start.sh
๐ Project Structure
redmine-mcp/
โโโ src/redmine_mcp/ # Main source code
โ โโโ __init__.py # Package initialization
โ โโโ server.py # MCP server main program
โ โโโ redmine_client.py # Redmine API client
โ โโโ config.py # Configuration management
โ โโโ validators.py # Data validation
โโโ tests/ # Test files
โโโ docs/ # Documentation directory
โโโ Dockerfile # Docker build configuration
โโโ docker-compose.yml # Docker Compose configuration
โโโ .dockerignore # Docker build exclusions
โโโ CHANGELOG.md # Version history
โโโ pyproject.toml # Project configuration
โโโ README.md # Project documentation
๐ค Contributing
- Fork this project
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ฆ Changelog
See CHANGELOG.md for version history and release notes.
๐ Related Links
If you have any questions or suggestions, feel free to open an Issue or contact the project maintainers.