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