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.

La centralita de OPeratorSeis agentes, Claude Code, Claude Desktop, Codex CLI, Gemini CLI, Cursor y opencode, están conectados con cables al panel de Op, la operadora, y una sola línea va de Op a tu instancia de OpenProject.OPERATORCENTRALITA · LÍNEA 1LÍNEA ABIERTAClaude CodeClaude DesktopCodex CLIGemini CLICursoropencodeOPtuoperadoraOpenProjectopenproject.acme.comLa centralita de OPeratorSeis agentes, Claude Code, Claude Desktop, Codex CLI, Gemini CLI, Cursor y opencode, están conectados con cables al panel de Op, la operadora, y una sola línea va de Op a tu instancia de OpenProject.OPERATORLÍNEA ABIERTAClaude CodeClaude DesktopCodex CLIGemini CLICursoropencodeOPtuoperadoraOpenProjectopenproject.acme.com
Una ilustración de OPerator como una centralita telefónica.

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.

tu agente · openproject.acme.com

tú ¿qué tengo pendiente?

my_work

3 paquetes de trabajo asignados a ti en Acme:

Paquetes de trabajo asignados a ti
IDTipoEstadoAsunto
#1284ErrorEn cursoArreglar el bucle de redirección del login
#1301TareaNuevaMigrar la exportación de facturas
#1312TareaNuevaRevisar la auditoría de accesos del T3

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.

  1. 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ó.

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

  3. Pregunta

    Elige tus agentes con las flechas y cada uno queda conectado. Reinicia el tuyo y pregúntale qué tienes pendiente.

curl -fsSL https://operator.daer.dev/install.sh | sh
▄▄▄▄▄▄
▄▀▀▄▄▄▄▄▄▀▀▄ OPerator instalador
▄█▄█▀ ▀█▄█▄ ─────────────────────
███ ██ ██ ███ Sistema Fedora Linux 44 (KDE Plasma Desktop Edition) · x86_64
███▀▀ ▄ ▄ ▀▀███ Instalado todavía no
█▀▄ ▀▀ ▄▀ Versión 1.3.0
▀▄▄▀▀▀▀▀▀▀▀ Destino ~/.local/bin
Comprobando ● ● ● github.com responde
Marcando ━━━━━━━━━━━━━━━━━━━━━━━━ 100% operator-mcp-linux-x64 · 49.2 MB
Verificando listo SHA-256 coincide
Conectando listo ~/.local/bin/operator-mcp
Conectándote con la configuración…
▄▄▄▄▄▄
▄▀▀▄▄▄▄▄▄▀▀▄ OPerator configuración
▄█▄█▀ ▀█▄█▄ ─────────────────────
███ ██ ██ ███ Perfil default
███▀▀ ▄ ▄ ▀▀███ Carpeta ~/.config/operator-mcp/default
█▀▄ ▀▀ ▄▀ Versión 1.3.0
▀▄▄▀▀▀▀▀▀▀▀
¿Dónde está tu OpenProject? p. ej. openproject.acme.com
› https://openproject.acme.com
Tu clave de API. Créala en https://openproject.acme.com/my/access_tokens
(en versiones antiguas: Mi cuenta → Token de acceso). No sale de este equipo.
› •••••••••••••
Línea abierta listo Ada Lovelace (ada@example.com) · 200 proyectos
Proyecto por defecto, para cuando no nombres ninguno Customer Portal
Guardado listo ~/.config/operator-mcp/default/config.json
Manual listo ~/.config/operator-mcp/default/conventions.md · tus normas de la casa
¿En qué agentes conecto OPerator? Claude Code, Cursor
Conectando listo Claude Code añadido ~/.claude.json
listo Cursor añadido ~/.cursor/mcp.json
No instalados aquí: Codex CLI, Gemini CLI, opencode.
Cuando instales uno, ejecuta: operator-mcp install
✓ Configuración en ~/.config/operator-mcp/default/config.json
✓ https://openproject.acme.com responde
✓ Clave de API aceptada — Ada Lovelace (ada@example.com)
✓ Claude Code ejecuta: ~/.local/bin/operator-mcp
✓ Cursor ejecuta: ~/.local/bin/operator-mcp
╭────────────────────────────────────────────────────────────────────────╮
│ │
│ Ya tienes línea. │
│ │
│ Reinicia Claude Code y Cursor y pregunta: │
│ ¿qué tengo pendiente? │
│ │
│ Responde con tus paquetes de trabajo reales: │
│ #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 │
│ │
│ Revisa la línea cuando quieras: operator-mcp doctor │
│ │
╰────────────────────────────────────────────────────────────────────────╯
Una ejecución grabada. La dirección de la instancia se cambió para la demo.

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.

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.

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

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

    Lo garantizasrc/tools/
  2. La vía de escape rechaza DELETE.

    api_request llega al resto de la API, pero rechaza DELETE salvo que definas OPENPROJECT_ALLOW_DELETE=1 en el entorno del servidor. Un agente no puede definirlo por su cuenta.

    Lo garantizasrc/tools/raw.ts
  3. 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.

    Lo garantizasrc/client.ts
  4. Solo habla con tu instancia.

    Cada petición se construye bajo la raíz /api/v3 de tu instancia, y cualquier enlace que apunte fuera se rechaza.

    Lo garantizasrc/client.ts
  5. 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 como https://.

    Lo garantizasrc/config.ts
  6. Las credenciales viven en un archivo privado.

    La clave se guarda con permisos 0600 en ~/.config/operator-mcp, nunca en la configuración de tu agente, así que ese archivo se puede subir al repositorio sin riesgo.

    Lo garantizasrc/config.ts
  7. El instalador comprueba antes de instalar.

    El binario se compara con las sumas SHA-256 de la versión publicada. Si no coinciden, no se instala nada.

    Lo garantizainstall/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 personal

Preguntas, 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.