OpenProject MCP Server
OpenProject MCP Server
Un servidor Model Context Protocol (MCP) de alta calidad para conectar Claude con tu instancia de OpenProject. Permite a Claude consultar, buscar y gestionar proyectos, paquetes de trabajo (work packages), usuarios y entradas de tiempo directamente desde conversaciones.
🚀 Características
✅ Acceso a Proyectos - Listar, filtrar y obtener detalles de proyectos
✅ Gestión de Work Packages - Ver tareas, bugs, features con filtrado avanzado
✅ Búsqueda de Texto Completo - Buscar paquetes de trabajo por contenido
✅ Historial de Actividades - Ver cambios y comentarios en trabajo packages
✅ Gestión de Usuarios - Listar y obtener información de usuarios
✅ Entradas de Tiempo - Consultar tiempo registrado por proyecto, usuario, período
✅ Paginación Inteligente - Soporte para grandes conjuntos de datos
✅ Manejo de Errores Robusto - Mensajes claros y ActionAbles
✅ Tipado Completo - TypeScript para máxima seguridad de tipos
Related MCP server: OpenProject MCP Server
📋 Requisitos Previos
Node.js 18+ o Bun 1.0+
Una instancia de OpenProject 13+ con acceso a API
Un API Token de OpenProject (generable en Settings)
🔧 Instalación
1. Clonar o descargar el servidor
cd openproject-mcp-server2. Instalar dependencias
npm install
# o con bun
bun install3. Configurar variables de entorno
Copia .env.example a .env y completa los valores:
cp .env.example .envEdita .env:
OPENPROJECT_URL=https://openproject.empresa.com
OPENPROJECT_API_TOKEN=tu-token-api-aqui
OPENPROJECT_PAGE_SIZE=50Cómo generar un API Token en OpenProject:
En OpenProject, ve a Administration → API & Webhooks → Personal Access Tokens
Haz clic en "+ New Personal Access Token"
Asigna un nombre descriptivo (ej. "Claude MCP")
Marca los permisos requeridos:
✅
view_work_packages✅
view_projects✅
view_users✅
view_time_entries✅
edit_work_packages(si deseas crear/editar)
Copia el token generado a
.env
4. Compilar el servidor
npm run build🎯 Uso
Opción A: En Claude Code
Abre Claude Code
Ve a Settings → MCP Servers
Haz clic en + Add Local Server
Configura:
Name:
openprojectCommand:
nodeArguments:
["path/to/openproject-mcp-server/dist/index.js"]Environment Variables: Los valores de
.env
Guarda y reconecta a Claude
Opción B: Ejecutar localmente para testing
npm run devLuego en otra terminal, usa el MCP Inspector:
npm run inspectEsto abre una interfaz web donde puedes probar cada herramienta.
Opción C: En Claude.ai
Abre claude.ai/code
Ve a Settings → MCP Servers
Agrega un servidor remoto si desplegaste este servidor en un host accesible
Configura credenciales de acceso
🛠️ Herramientas Disponibles
📦 Proyectos
list_projects
Lista todos los proyectos con filtrado opcional.
Parámetros:
offset(number, optional): Para paginaciónname_filter(string, optional): Filtrar por nombrestatus(enum: "active" | "archived", optional): Filtrar por estado
Ejemplo:
Claude: List all active projects
→ OpenProject: Muestra proyectos activosget_project
Obtiene detalles completos de un proyecto.
Parámetros:
project_id(string | number): ID o identificador del proyecto
📋 Work Packages (Tareas)
list_work_packages
Lista paquetes de trabajo con filtrado avanzado.
Parámetros:
project_id(string | number, optional): Filtrar por proyectostatus(string, optional): Estado (ej. "Open", "In Progress")priority(string, optional): Prioridadassignee_id(number, optional): Asignado a usuariosearch(string, optional): Búsqueda de textooffset(number, optional): Paginación
get_work_package
Obtiene detalles completos de un work package.
Parámetros:
work_package_id(number): ID del paquete de trabajo
get_work_package_activities
Obtiene el historial de cambios y comentarios.
Parámetros:
work_package_id(number): ID del paquete de trabajo
search_work_packages
Búsqueda de texto completo en paquetes de trabajo.
Parámetros:
query(string, required): Término de búsquedaproject_id(string | number, optional): Limitar a proyectostatus(string, optional): Filtrar por estadopriority(string, optional): Filtrar por prioridad
👤 Usuarios
list_users
Lista todos los usuarios en OpenProject.
Parámetros:
offset(number, optional): Paginación
get_user
Obtiene detalles de un usuario específico.
Parámetros:
user_id(number): ID del usuario
⏱️ Entradas de Tiempo
list_time_entries
Lista entradas de tiempo con filtrado por período, usuario, proyecto.
Parámetros:
work_package_id(number, optional): Filtrar por paquete de trabajouser_id(number, optional): Filtrar por usuarioproject_id(string | number, optional): Filtrar por proyectofrom_date(string, optional): Fecha inicial (YYYY-MM-DD)to_date(string, optional): Fecha final (YYYY-MM-DD)offset(number, optional): Paginación
get_time_entry
Obtiene detalles de una entrada de tiempo.
Parámetros:
time_entry_id(number): ID de la entrada de tiempo
✍️ Escritura (Crear Épicas e Historias de Usuario)
list_project_types
Lista los tipos de work package disponibles en un proyecto (Epic, User Story, Task, Bug...) con su ID. Úsala primero — los IDs de tipo varían entre instancias de OpenProject.
Parámetros:
project_id(string | number): ID o identificador del proyecto
create_work_package
Crea un work package (Épica, Historia de Usuario, Tarea, etc.). Usa parent_id para colgar una Historia de Usuario bajo su Épica.
Parámetros:
project_id(string | number)subject(string)description(string, optional, Markdown)type_id(number, optional): ID del tipo, obtenido conlist_project_typesparent_id(number, optional): ID de la Épica padrepriority_id,assignee_id,start_date,due_date(optional)
create_work_packages_bulk
Crea varios work packages en una sola llamada (ideal para subir todas las Historias de Usuario extraídas de un Word). Cada item puede tener su propio parent_id, así que historias de distintas épicas pueden crearse en la misma llamada. Devuelve un reporte por item (éxito/error), no aborta el lote completo si una falla.
Parámetros:
project_id(string | number)items(array, máx 100): cada uno con los mismos campos quecreate_work_package(menosproject_id)
📋 Flujo: Subir Épicas e Historias de Usuario desde Word
Caso de uso típico del equipo: tienen historias de usuario redactadas en .docx y necesitan cargarlas a OpenProject respetando la relación Épica → Historia.
Genera tu API Token personal (cada developer usa el suyo, ver arriba) y configura tu
.envlocal.Abre la conversación con Claude y adjunta o referencia el archivo
.docxcon las épicas/historias (Claude puede leerlo directamente).Pide a Claude: "Lee este Word, identifica las épicas y sus historias de usuario, y súbelas al proyecto X de OpenProject".
Claude normalmente hará, sin que tengas que orquestarlo manualmente:
list_project_typessobre el proyecto para saber eltype_idde Epic y de User Story.create_work_packagepara cada Épica (pocas, se hace una por una para tener sus IDs).create_work_packages_bulkpara las Historias de Usuario, usando elparent_idde la Épica correspondiente a cada una.
Revisa el reporte final (qué se creó, qué falló) y corrige en OpenProject si hace falta.
Nota: el token necesita el permiso
edit_work_packages(ver sección de generación de token) para poder crear, no solo leer.
📊 Casos de Uso
1. Análisis de Proyectos
Claude: "Análiza todos los proyectos activos y resume cuáles tienen más work packages abiertos"
→ El servidor lista proyectos, luego itera para contar paquetes abiertos2. Búsqueda de Tareas
Claude: "Busca todas las tareas sobre 'API' en estado 'In Progress' del proyecto BACKEND"
→ search_work_packages con query="API", status="In Progress", project_id="BACKEND"3. Reporte de Tiempo
Claude: "¿Cuántas horas registró Juan en la última semana?"
→ list_time_entries con user_id=juan, from_date=última_semana4. Estado del Proyecto
Claude: "Dame un resumen del proyecto FRONTEND: qué se completó, qué está en progreso y qué sigue"
→ get_project + list_work_packages con diferentes status5. Auditoría de Cambios
Claude: "¿Quién cambió el estado del work package #123 y cuándo?"
→ get_work_package_activities para ver el historial🏗️ Arquitectura
src/
├── index.ts # Entry point del servidor MCP
├── client/
│ └── openproject.ts # Cliente HTTP para OpenProject API
├── tools.ts # Registro e implementación de herramientas
├── schemas/
│ └── index.ts # Validación Zod de inputs
└── utils/
└── formatters.ts # Formatos de salida Markdown🔐 Seguridad
✅ Autenticación Bearer Token (segura, no requiere credenciales en texto plano)
✅ Validación de inputs con Zod (previene inyecciones)
✅ Manejo de errores granular (no expone datos sensibles)
✅ TypeScript strict mode (previene errores de tipo)
⚠️ El token se almacena en
.env- NO comitas este archivo a git
🚨 Troubleshooting
"Authentication failed"
Verifica que el token en
.enves válidoRegenera un token nuevo en OpenProject
"Connection error"
Verifica que
OPENPROJECT_URLes accesible desde tu máquinaSi usas proxy/VPN, configura variables de entorno de proxy
"No projects found"
Verifica que tu usuario tiene permisos para ver proyectos
Verifica que existen proyectos en tu instancia
Server no inicia
npm run build
npm run devRevisa la salida de errores en la terminal.
📈 Próximas Mejoras
Soporte para crear/editar work packages desde Claude
Soporte para comentarios en work packages
Integración con Gantt charts
Webhooks para notificaciones en tiempo real
Caché de datos para mejor performance
Evaluaciones comprehensivas (SEP)
📦 Distribuir a tu equipo de desarrollo
Cada developer necesita su propia copia + su propio API Token (nunca compartir un token entre varias personas — las acciones quedan auditadas por usuario en OpenProject).
Opción recomendada: repo Git compartido
Sube esta carpeta a un repositorio privado (GitHub org o el Gitea/GitLab de
linux.ie). No olvides que.envya está en.gitignore— nunca se sube.Cada developer:
git clone <url-del-repo> cd openproject-mcp-server npm install npm run build cp .env.example .envCada uno genera su propio token (Administration → API & Webhooks → Personal Access Tokens, con permiso
edit_work_packagessi van a crear historias) y lo pega en su.env.Cada uno lo agrega en Claude Code (Settings → MCP Servers → Add Local Server) apuntando a su
dist/index.jslocal.
Alternativa sin Git: carpeta comprimida
Si aún no quieres montar el repo, puedes compartir un .zip de la carpeta (excluyendo node_modules, dist y .env) y que cada dev haga npm install && npm run build localmente. Es la misma mecánica, solo cambia el medio de distribución — no requiere CI/CD porque no hay un servidor central que desplegar: el MCP corre en stdio en la máquina de cada developer.
Si más adelante lo corres como servidor remoto compartido
Si en vez de que cada dev lo corra localmente prefieres un único servidor (en linux.ie, por ejemplo) que todos consuman, ahí sí aplica CI/CD (build + deploy en cada push) y habría que migrar el transporte de stdio a HTTP. Es un salto de arquitectura mayor — dímelo si es el camino que quieres y lo planeamos aparte.
🤝 Contribuir
Este es un servidor MCP de código abierto. Para mejorar:
Haz fork del repositorio
Crea una rama para tu feature (
git checkout -b feature/mi-feature)Commitea cambios (
git commit -am 'Agrego mi-feature')Push a la rama (
git push origin feature/mi-feature)Abre un Pull Request
📄 Licencia
MIT - Siéntete libre de usar, modificar y distribuir
💬 Soporte
Para reportar bugs, hacer preguntas o sugerencias:
Abre un issue en el repositorio
Consulta la documentación de MCP
Revisa la documentación de OpenProject API
Creado con ❤️ para Integral de Empaques S.A.S.
This server cannot be installed
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
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with OpenProject's API v3 for comprehensive project management operations including work packages, projects, time tracking, users, and all other OpenProject features through natural language.4MIT
- FlicenseAqualityDmaintenanceEnables comprehensive management of OpenProject work packages, projects, comments, and relations through natural language. Supports creating, updating, and organizing tasks with assignees, watchers, hierarchies, and inter-task relationships.21
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with OpenProject installations for comprehensive project management, including creating projects and work packages, managing users and assignments, creating dependencies, and generating Gantt charts through natural language commands.14
- AlicenseBqualityDmaintenanceEnables AI assistants to manage OpenProject work packages, projects, and time tracking. It provides comprehensive tools for creating, updating, and querying tasks and project metadata through the OpenProject API.11151MIT
Related MCP Connectors
Manage projects, tasks, time tracking, and team collaboration through natural language.
Connect to Atlassian Jira, Confluence, and Compass to search, create, and manage your work.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
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/devsergioherrera/openproject-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server