Tu agente, esta mañana
«No veo tu gestor de proyectos. ¿Me pegas aquí el ticket?»
«Tienes 3 paquetes de trabajo en Acme. #1284, el bucle de redirección del login, está en curso.»
Tu agente, con línea directa a OpenProject.
Lee tu trabajo, actualiza tus tareas y sigue las normas de tu equipo.
curl -fsSL https://operator.daer.dev/install.sh | sh macOS o Linux, x64 o arm64. Sin Node y sin sudo. Comprueba el SHA-256 y abre el asistente.
npx operator-mcp setupNode 22 o posterior. También es la vía para Windows y Alpine.
Pregunta, y responde con tu trabajo real.
Se acabó pegar tickets en el chat. Tu agente busca el trabajo, registra las horas y cambia el estado por su cuenta, siguiendo las normas que escribió tu equipo.
tú ¿qué tengo pendiente?
my_work
3 paquetes de trabajo asignados a ti en Acme:
| ID | Tipo | Estado | Asunto |
|---|---|---|---|
| #1284 | Error | En curso | Arreglar el bucle de redirección del login |
| #1301 | Tarea | Nueva | Migrar la exportación de facturas |
| #1312 | Tarea | Nueva | Revisar la auditoría de accesos del T3 |
tú registra 2 h en #1284, hice pair programming en el arreglo de la redirección
log_timeworkPackageId 1284 · hours 2 · comment “Pair programming en el arreglo de la redirección”
Registré 2 h de hoy en #1284 Arreglar el bucle de redirección del login, con tu comentario. Aparece en las horas del paquete de trabajo.
tú empieza con #1301
conventions
get_work_packageid 1301
update_work_packageid 1301 · status “En curso”
Tu manual nombra las ramas {type}/{wp-id}-{slug}, así que creé tarea/1301-migrar-exportacion-facturas.
La rama ya existe, así que #1301 pasó a En curso, como pide el manual.
Una conversación guionizada. Acme y sus paquetes de trabajo son inventados.
Unos 13 segundos de máquina. El resto es pegar una clave.
Medido desde curl hasta la última tarjeta del asistente: 4,8 s en una ejecución local, más unos 8 s para descargar el binario de 49 MiB a 50 Mbit/s.
Instala
Una línea descarga un único binario, comprueba su SHA-256 con el de la versión publicada y lo deja en ~/.local/bin. Vuelve a ejecutarla para actualizar: te dice qué encontró.
Responde dos preguntas
Dónde está tu OpenProject (basta con openproject.acme.com) y tu clave de API, que se comprueba con tu instancia antes de guardar nada. Luego busca un proyecto por defecto entre los que puedes escribir.
Pregunta
Elige tus agentes con las flechas y cada uno queda conectado. Reinicia el tuyo y pregúntale qué tienes pendiente.
Escribe las normas de la casa una vez. Todos los agentes las siguen.
Cada lugar de trabajo tiene un manual corto en markdown que el agente lee al empezar cada sesión. Cambia la regla de ramas de abajo y mira cómo cambia la respuesta.
~/.config/operator-mcp/default/conventions.md
## Git / GitLab
``
- Asunto del commit: `[#1234] <resumen en imperativo>`
- El título del MR lleva `#1234` para que GitLab enlace.
## Flujo
- Pasa a `En curso` solo cuando exista la rama.
- No cierres tú un paquete de trabajo. Lo cierra QA.
Variables: {type} {wp-id} {slug} {user}. O prueba una:
tú empieza con #1284
conventions
Tu manual dice cómo nombrarla, así que:
$ git switch -c error/1284-arreglar-bucle-redireccion-login
#1284 pasa a En curso ahora que existe la rama.
20 herramientas. Cada una hace una cosa.
Esta lista es lo que anuncia el propio servidor por MCP, obtenida con una llamada real a tools/list al generar la página.
Los nombres y descripciones van en inglés, tal como los envía el servidor a tu agente.
20 de 20 herramientas
Identidad
whoamiIdentity and connection state.Identity and connection state. Call this first: it tells you which user you are acting as, which OpenProject instance you are on, the default project, whether writes are permitted, and whether this workplace has a conventions manual.
Consulta
list_projectsProjects visible to you.Projects visible to you. Use the `identifier` value wherever a tool asks for a project.
list_usersPeople you can assign work to.People you can assign work to. Pass a project to get exactly its assignable members; omit it to search everyone visible to you.
get_work_packageFull detail for one work package, including its description and the lockVersion an update needs.Full detail for one work package, including its description and the lockVersion an update needs.
search_work_packagesFind work packages by project, assignee, status, type, priority, text, or recency.Find work packages by project, assignee, status, type, priority, text, or recency. Descriptions are omitted; use get_work_package for one item's full detail.
my_workWork packages assigned to you, soonest due first.Work packages assigned to you, soonest due first. The usual starting point for a working session.
Tareas
create_work_packageCreate a work package in a project.Create a work package in a project. Type and subject are required; everything else is optional.
update_work_packageChange any subset of a work package's fields.Change any subset of a work package's fields. The optimistic lock is handled for you. Pass null for assignee or parent to clear it.
comment_work_packageAdd a markdown comment.Add a markdown comment. Everyone watching the work package gets a notification.
list_activitiesComments and field changes for one work package, oldest first.Comments and field changes for one work package, oldest first.
link_work_packagesCreate a relation between two work packages, such as one blocking another.Create a relation between two work packages, such as one blocking another.
Notificaciones
list_notificationsYour in-app notification feed, newest first.Your in-app notification feed, newest first. Each row carries the work package it concerns, so you can triage without a second lookup.
mark_notifications_readMark specific notifications read by id, or every notification matching a filter with all: true.Mark specific notifications read by id, or every notification matching a filter with all: true. Use this after triaging so the feed stays meaningful.
watch_work_packageControl whether you get notified about a work package's future activity.Control whether you get notified about a work package's future activity.
Horas y metadatos
list_metadataIds and names for work package types, statuses, priorities, or time entry activities.Ids and names for work package types, statuses, priorities, or time entry activities. Call this when a write is rejected for an unknown value, or when you need the exact wording this instance uses.
log_timeRecord time spent on a work package.Record time spent on a work package. Hours are given as a decimal number; 2.5 means two and a half.
Convenciones
conventionsThe rules this workplace expects you to follow in OpenProject: branch and commit naming, workflow states, required fields.The rules this workplace expects you to follow in OpenProject: branch and commit naming, workflow states, required fields. These are also delivered in the server instructions; re-read them here whenever you are unsure.
add_conventionAppend a rule to the workplace manual so it survives this session.Append a rule to the workplace manual so it survives this session. Use it when the user states a working rule you would otherwise forget. Appending never removes anything.
remove_conventionDelete a rule from the workplace manual.Delete a rule from the workplace manual. Set confirm only when the user has explicitly asked you, in this conversation, to remove that rule — never on your own initiative. The file is backed up before any change.
Vía de escape
api_requestEscape hatch for anything the other tools do not cover.Escape hatch for anything the other tools do not cover. DELETE is refused unless the user set OPENPROJECT_ALLOW_DELETE=1. Returns the raw HAL+JSON response, unflattened. Prefer a dedicated tool when one exists — this one requires you to know APIv3 request shapes, and its responses are large.
Ninguna herramienta coincide. api_request llega al resto de la API de OpenProject, y aun así no puede borrar salvo que tú lo permitas.
Tu agente no puede borrar nada. Por diseño.
Para quien tenga que aprobar la instalación: cada promesa enlaza con el código que la cumple. Léelo antes de decir que sí.
- Lo garantiza
No hay herramienta para borrar.
Cuéntalas: 20 herramientas, y ninguna borra. Un agente no puede eliminar un paquete de trabajo por malinterpretar una instrucción vaga.
src/tools/ - Lo garantiza
La vía de escape rechaza DELETE.
api_requestllega al resto de la API, pero rechazaDELETEsalvo que definasOPENPROJECT_ALLOW_DELETE=1en el entorno del servidor. Un agente no puede definirlo por su cuenta.src/tools/raw.ts - Lo garantiza
Solo lectura es solo lectura.
Con
OPENPROJECT_READ_ONLY=1, toda creación, actualización, comentario, registro de horas o cambio de seguimiento se rechaza antes de que la petición salga de tu equipo.src/client.ts - Lo garantiza
Solo habla con tu instancia.
Cada petición se construye bajo la raíz
/api/v3de tu instancia, y cualquier enlace que apunte fuera se rechaza.src/client.ts - Lo garantiza
Tu clave nunca viaja en claro.
Una dirección
http://se rechaza salvo que el host sea tu propio equipo, o que definas túOPENPROJECT_ALLOW_INSECURE_HTTP=1. Una dirección sin esquema se toma comohttps://.src/config.ts - Lo garantiza
Las credenciales viven en un archivo privado.
La clave se guarda con permisos
0600en~/.config/operator-mcp, nunca en la configuración de tu agente, así que ese archivo se puede subir al repositorio sin riesgo.src/config.ts - Lo garantiza
El instalador comprueba antes de instalar.
El binario se compara con las sumas
SHA-256de la versión publicada. Si no coinciden, no se instala nada.install/install.sh
Funciona con el agente que ya usas.
El asistente encuentra los agentes de tu equipo, te deja elegirlos con las flechas y conecta cada uno, con copia de seguridad de cualquier archivo que toque.
Los conecta el asistente
- Claude Code
- Claude Desktop
- Codex CLI
- Gemini CLI
- Cursor
- opencode
Claude Desktop en macOS y Windows; no existe versión para Linux.
A un fragmento de configuración
- VS Code
- Windsurf
- Cline
- Zed
- cualquiera que hable MCP por stdio
Dos lugares de trabajo a la vez.
Cada lugar de trabajo es un perfil con su propia clave y su propio manual. Cada uno se registra con su propio nombre de servidor, así que ambos pueden estar conectados a la vez y tu agente nunca confunde una instancia con la otra.
$ npx operator-mcp setup --profile acme
$ npx operator-mcp setup --profile personalPreguntas, respondidas.
¿Mi clave de API sale de mi equipo?
Solo para hablar con tu propio OpenProject. Vive en ~/.config/operator-mcp/<perfil>/config.json con permisos 0600, y nunca aparece en la configuración MCP de tu agente.
¿Necesito Node.js?
No para la instalación con curl: descarga un único binario para macOS o Linux, x64 o arm64. La vía de npx necesita Node 22 o posterior.
¿Funciona en Windows?
Sí, con npx operator-mcp setup y Node 22 o posterior. Lo mismo vale para Alpine.
¿Puede un agente informar sin cambiar nada?
Define OPENPROJECT_READ_ONLY=1 en la entrada del servidor en tu configuración MCP. Las lecturas funcionan con normalidad y cada escritura se rechaza antes de que la petición salga de tu equipo.
Mi agente no está en la lista.
Funciona cualquier cliente que ejecute un servidor MCP por stdio. Apúntalo a npx con los argumentos -y operator-mcp, o a la ruta absoluta del binario instalado. El README tiene fragmentos para VS Code y la forma JSON habitual.
¿Puede todo el equipo compartir un manual?
Define OPENPROJECT_CONVENTIONS_PATH con un archivo de tu repositorio. Así las normas quedan versionadas, revisadas en merge requests e iguales para todos.
¿Cómo compruebo que funciona, o lo actualizo?
operator-mcp doctor hace las mismas comprobaciones que el asistente. Para actualizar, vuelve a ejecutar la línea de instalación: te dice qué encontró (un binario anterior, o una instalación por npx), el asistente te ofrece mantener tu conexión y cada agente pasa a usar el binario.
¿Habla español?
El instalador, setup, install, doctor y --help sí, cuando tu idioma del sistema es español o pasas --lang es. Lo que lee tu agente, descripciones de herramientas y errores, sigue en inglés.
¿Cuánto cuesta? ¿Lo hace OpenProject?
Es gratis y con licencia MIT. Es un proyecto independiente, sin relación con OpenProject GmbH.
Conecta a tu agente.
Ejecuta la línea, responde dos preguntas y pregunta qué tienes pendiente.
curl -fsSL https://operator.daer.dev/install.sh | sh macOS o Linux, x64 o arm64. Sin Node y sin sudo. Comprueba el SHA-256 y abre el asistente.
npx operator-mcp setupNode 22 o posterior. También es la vía para Windows y Alpine.