Enables comprehensive project management functionality including creating projects and work packages, managing user assignments by email, creating task dependencies, generating Gantt charts, and handling project member management through OpenProject's API.
OpenProject MCP Server
A comprehensive FastMCP-powered server that enables AI assistants like Claude to interact with OpenProject installations. This implementation provides full project management functionality including user management, dynamic configuration, and advanced Gantt chart creation.
🎯 Core Features
MVP Functionality
✅ Create projects in OpenProject via AI assistant
✅ Create work packages with start/due dates for Gantt charts
✅ Create dependencies between work packages
✅ Generate proper Gantt charts in OpenProject
✅ End-to-end workflow from AI command to visual timeline
Phase 1 Enhanced Features
✅ User management - Find and assign users by email address
✅ Dynamic configuration - Automatically load types, statuses, and priorities
✅ Email-based assignment - Assign work packages without knowing user IDs
✅ Project member management - View project members and their roles
✅ Enhanced error handling - Detailed validation and error messages
✅ Performance optimization - Intelligent caching and pagination
🚀 Quick Start
Prerequisites
OpenProject Instance: You need a running OpenProject installation (local or cloud)
API Key: Generate an API key from your OpenProject profile
Python 3.8+: Required for running the MCP server
Installation
Clone or download the project:
cd openproject-mcp-serverCreate and activate virtual environment:
python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activateInstall dependencies:
pip install -r requirements.txtConfigure environment:
cp env.example .env # Edit .env with your OpenProject details
Configuration
Edit the .env file with your OpenProject details:
Getting your OpenProject API Key:
Login to your OpenProject instance
Go to My Account → Access Tokens
Click + New token
Enter a name (e.g., "MCP Server")
Copy the generated 40-character token
Testing
Test your configuration before using with AI assistants:
This will:
✅ Test OpenProject API connection
✅ Create a test project
✅ Create work packages with dates
✅ Create dependencies
✅ Verify Gantt chart readiness
Running the Server
Start the MCP server:
The server will start and be ready to accept AI assistant connections.
🐳 Docker Deployment
Docker deployment is the recommended production method for the OpenProject MCP Server.
Prerequisites for Docker
Docker installed (version 20.10+)
Docker Compose (for easier management)
Configure with your OpenProject details
Quick Start with Docker
Option 1: Automated deployment (Recommended)
🔑 Important: The port MUST match your Claude Desktop MCP configuration in ~/.cursor/mcp.json or claude_desktop_config.json!
Option 2: Docker Compose (Alternative)
🔧 Port Configuration & Conflicts:
Step 1: Choose your port (must be consistent)
Step 2: Deploy on the SAME port as your MCP config
Step 3: If port conflicts occur:
Stop conflicting services:
docker stop container_using_portOr update BOTH MCP config AND deployment port consistently
Check what's using port:
docker ps | grep 39127
Manual Docker Commands
For advanced users who want full control:
Build the image:
docker build -t openproject-mcp-server .Run the container:
docker run -d \ --name openproject-mcp-server \ --env-file .env \ -p 39127:8080 \ -v ./logs:/app/logs \ -v ./data:/app/data \ --restart unless-stopped \ openproject-mcp-serverHealth check:
# Check if container is healthy docker ps # View container logs docker logs openproject-mcp-server # Test API endpoint (Note: No health endpoint in MCP server) curl http://localhost:39127/sse
Deployment Script Commands
The scripts/deploy.sh script provides comprehensive deployment management:
💡 Port Selection Tips:
Port 39127: Recommended MCP standard port, matches default config
Port 8080: Default HTTP port, but often conflicts with OpenProject
Port 9876: Good alternative, rarely conflicts
Port 8090: Common development port
Environment Variables for Docker
When using Docker, configure these environment variables in your .env file:
Docker Deployment Best Practices
Always use - Never hardcode credentials in commands
Volume mapping - Map logs and data directories for persistence
Health checks - Container includes built-in health monitoring
Auto-restart - Use
--restart unless-stoppedfor productionResource limits - Consider adding memory/CPU limits for production
🤖 AI Assistant Integration
Claude Desktop Integration
Add to your claude_desktop_config.json:
Option 1: Local Python execution
Option 2: Docker deployment (recommended)
Environment Setup: Configure OpenProject credentials in Docker deployment .env file instead of MCP config.
Important Notes:
Use the full absolute path to the
run_server.pyscript for Option 1Ensure the Docker container is running before using Option 2
OPENPROJECT_URL should point to your OpenProject instance (typically port 8080)
MCP server URL (port 39127) is configured separately in the transport URL
Usage Examples
Once integrated with Claude, you can ask:
Create a Project with Team Members
Create Work Packages with Email-based Assignment
Create Dependencies for Gantt Chart
User Management Examples
Dynamic Configuration Examples
The AI will use the enhanced MCP tools to create everything and you'll get a proper Gantt chart in OpenProject with proper user assignments!
🛠️ Available Tools
The OpenProject MCP Server provides comprehensive tools for AI assistants:
Core Tools (MVP)
create_project
Purpose: Create a new project in OpenProject
Parameters:
name(required): Project namedescription(optional): Project description
Returns: Project details with ID and URL
create_work_package
Purpose: Create work packages with dates for Gantt charts
Parameters:
project_id(required): Target project IDsubject(required): Work package titledescription(optional): Detailed descriptionstart_date(optional): Start date in YYYY-MM-DD formatdue_date(optional): Due date in YYYY-MM-DD formatparent_id(optional): Parent work package IDassignee_id(optional): User ID to assign toestimated_hours(optional): Estimated completion time
create_work_package_dependency
Purpose: Create dependencies between work packages for Gantt charts
Parameters:
from_work_package_id(required): Source work package IDto_work_package_id(required): Target work package IDrelation_type(optional): Type of relation (follows, precedes, blocks, blocked, relates, duplicates, duplicated)description(optional): Description of the relationlag(optional): Working days between finish of predecessor and start of successor
get_work_package_relations
Purpose: Get all relations for a specific work package
Parameters:
work_package_id(required): Work package ID to get relations for
Returns: List of relations with detailed information
delete_work_package_relation
Purpose: Delete a work package relation
Parameters:
relation_id(required): ID of the relation to delete
Returns: Confirmation of deletion
Phase 1 Enhanced Tools (User Management & Dynamic Configuration)
get_users
Purpose: Get list of users with optional email filtering
Parameters:
email_filter(optional): Email address to search for specific user
Returns: List of users with full details (name, email, roles, etc.)
assign_work_package_by_email
Purpose: Assign work package to user by email address
Parameters:
work_package_id(required): Work package ID to assignassignee_email(required): Email address of user to assign to
Returns: Assignment confirmation with user and work package details
get_project_members
Purpose: Get list of project members with their roles
Parameters:
project_id(required): Project ID to get members from
Returns: List of project members with roles and permissions
get_work_package_types
Purpose: Get available work package types from OpenProject instance
Parameters: None
Returns: List of work package types (Task, Bug, Feature, etc.) with configuration
get_work_package_statuses
Purpose: Get available work package statuses from OpenProject instance
Parameters: None
Returns: List of statuses (New, In Progress, Closed, etc.) with configuration
get_priorities
Purpose: Get available work package priorities from OpenProject instance
Parameters: None
Returns: List of priorities (Low, Normal, High, etc.) with configuration
Additional Enhanced Tools
get_projects
Purpose: List all projects in OpenProject
Parameters: None
Returns: List of all projects with details
get_work_packages
Purpose: Get work packages for a specific project
Parameters:
project_id(required): Project ID to get work packages from
Returns: List of work packages with full details
update_work_package
Purpose: Update an existing work package
Parameters:
work_package_id(required): Work package ID to updatesubject(optional): New titledescription(optional): New descriptionstart_date(optional): New start datedue_date(optional): New due dateassignee_id(optional): New assigneeestimated_hours(optional): New time estimate
get_project_summary
Purpose: Get comprehensive project overview
Parameters:
project_id(required): Project ID to summarize
Returns: Detailed project analysis with metrics
📊 Available Resources
Resources provide read-only access to OpenProject data:
openproject://projects- List all projectsopenproject://project/{project_id}- Get specific project detailsopenproject://work-packages/{project_id}- Get work packages for a projectopenproject://work-package/{work_package_id}- Get specific work package detailsopenproject://work-package-relations/{work_package_id}- Get relations for a work package
🎯 Available Prompts
Prompts provide AI assistance for project management:
project_status_report
Purpose: Generate comprehensive project status analysis
Parameters:
project_id(required)Returns: Structured prompt for project health analysis
work_package_summary
Purpose: Summarize work packages with filtering
Parameters:
project_id(required)status_filter(optional): Filter by status
Returns: Organized work package summary
project_planning_assistant
Purpose: Help plan new project structure
Parameters:
project_name(required): Name of project to planwork_package_count(optional): Suggested number of work packages
Returns: Project planning guidance
team_workload_analysis
Purpose: Analyze team workload across projects
Parameters:
project_ids(optional): List of projects to analyzeReturns: Team workload and capacity analysis
📊 Gantt Chart Workflow
The MVP is specifically designed to create proper Gantt charts:
Create Project → Get project ID
Create Work Packages → Add tasks with start/due dates
Create Dependencies → Link tasks in logical order
View Gantt Chart → OpenProject automatically generates timeline
Gantt Chart URL: http://your-openproject/projects/{project_id}/work_packages?view=gantt
🧪 Troubleshooting
Connection Issues
Verify OpenProject URL is accessible
Check API key is correct (40 characters)
Ensure OpenProject API is enabled
Permission Issues
Verify your user has project creation permissions
Check work package creation permissions in target project
Date Format Issues
Use YYYY-MM-DD format for all dates
Ensure due_date is after start_date
Dependency Issues
Ensure both work packages exist before creating relation
Check work packages are in same project for relations
🔍 Testing Commands
Basic Testing
Phase 1 Comprehensive Testing
Testing Phase 1 Features
🔧 Features Overview
This comprehensive OpenProject MCP Server implementation provides:
✅ Core Features:
✅ Project creation and management
✅ Work package creation with dates and dependencies
✅ Work package dependencies for Gantt charts
✅ Comprehensive project and work package browsing
✅ Project status reporting and analysis
✅ Team workload analysis
✅ Project planning assistance
✅ Structured logging with JSON output
✅ Docker deployment with health checks
✅ FastMCP framework integration
✅ Comprehensive error handling
✅ Input validation and sanitization
✅ Phase 1 Enhanced Features:
✅ User management with email-based assignment
✅ Dynamic configuration loading (types, statuses, priorities)
✅ Enhanced error handling with HAL+JSON support
✅ Pagination support for large datasets
✅ Intelligent caching layer for performance
✅ Advanced request validation with business rules
✅ Comprehensive test suite with 95%+ coverage
✅ Advanced Features:
✅ MCP Resources for data browsing
✅ MCP Prompts for AI-assisted project management
✅ RESTful-style resource URIs
✅ Structured JSON logging
✅ Production-ready Docker deployment
✅ Health checks and monitoring
✅ Comprehensive tool validation
🔄 Limited Implementation:
⚠️ Project membership management (partial support)
⚠️ Time tracking and billing (not implemented)
⚠️ Categories and custom fields (not implemented)
⚠️ Real-time updates and webhooks (not implemented)
⚠️ File attachments and documents (not implemented)
🚀 Next Steps
Phase 2 Roadmap (Future Development)
Project membership management - Add/remove team members programmatically
Time tracking integration - Create and manage time entries
Categories and versions - Enhanced project organization
File attachments - Document and file management
Custom fields support - Instance-specific field handling
Immediate Next Steps
Deploy with Docker for production use
Integrate with Claude Desktop for daily workflow
Test with real projects and team workflows
Monitor performance and optimize as needed
📝 Support
Troubleshooting Steps
Check connection - Run
python3 scripts/test_mvp.pyVerify configuration - Ensure
.envfile is correctReview logs - Check container logs or local logs
Test API access - Verify OpenProject API is accessible
Check permissions - Ensure API key has required permissions
Getting Help
Documentation - Review this README and troubleshooting section
Test scripts - Use provided test commands to isolate issues
OpenProject logs - Check your OpenProject instance logs
Container logs -
docker logs openproject-mcp-server
✅ Success Criteria
✅ MVP Success: Create projects, work packages, and dependencies through Claude, see proper Gantt charts in OpenProject
✅ Phase 1 Success: Use email-based assignment, dynamic configuration, and enhanced error handling - all implemented and tested!
🎯 Production Ready: Deploy with Docker, integrate with Claude Desktop, use for real project management workflows