orquestra-mcp 1.0.5 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/server.mjs +48 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orquestra-mcp",
3
- "version": "1.0.5",
3
+ "version": "1.2.0",
4
4
  "description": "Servidor MCP de Orquestra -- 35 tools para leer y escribir tareas, ideas, changelog, infraestructura y más desde un agente de IA",
5
5
  "type": "module",
6
6
  "bin": {
package/src/server.mjs CHANGED
@@ -38,9 +38,33 @@ const SETUP_GUIDE = {
38
38
  ],
39
39
  }
40
40
 
41
+ // Instrucciones a nivel de servidor (campo "instructions" del protocolo MCP)
42
+ // -- la mayoría de los clientes (Claude Code/Desktop, Cursor, Gemini CLI...)
43
+ // las inyectan solas como contexto del modelo al conectarse, sin que el
44
+ // usuario tenga que escribir nada en su CLAUDE.md/AGENTS.md. Acá vive el
45
+ // "modo automático": cuándo respaldar trabajo como tarea/changelog sin que
46
+ // se lo pidan, cómo llenar un proyecto vacío la primera vez, y cuándo sí
47
+ // preguntar en vez de adivinar.
48
+ const SERVER_INSTRUCTIONS = `Este server conecta con Orquestra, la app de gestión de proyectos del usuario -- úsalo para mantener su proyecto sincronizado con el trabajo real, sin que tenga que pedírtelo cada vez.
49
+
50
+ Al empezar una sesión de trabajo en este proyecto, llama una vez a get_project_context para saber en qué fase está, qué tareas hay abiertas/vencidas/bloqueadas y qué se hizo recientemente. Úsalo como contexto de fondo, no lo repitas en cada mensaje.
51
+
52
+ Si get_project_context devuelve un proyecto vacío (sin módulos ni tareas), es la primera vez que se usa este MCP aquí -- pero "vacío en Orquestra" NO significa "recién empezado en la realidad". Antes de ofrecer nada, pregúntale al usuario: ¿este proyecto es una idea nueva, o ya existe y solo lo estás conectando por primera vez? Según la respuesta:
53
+ - Si es una idea nueva: llama a get_setup_guide y ofrece un playbook de etapa "pre" (get_stage_playbook + apply_stage_playbook).
54
+ - Si ya existe y está avanzado: usa update_project para poner la fase real (mvp/v1/beta/producción, no "idea"), crea una distribution por cada plataforma real que te mencione, y ofrece el playbook de etapa "build" en vez de "pre" -- no le apliques la plantilla de idea/diseño a un proyecto que ya está en desarrollo activo.
55
+
56
+ Durante el trabajo normal de código, sin que el usuario te lo pida explícitamente:
57
+ - Si te pide una funcionalidad o arreglo real (no una pregunta rápida ni exploración de código sin cambios), revisa con list_tasks/search si ya existe una tarea relacionada; si no, créala con create_task antes de empezar a trabajar.
58
+ - Al terminar, mueve la tarea de estatus con update_task y registra una entrada de changelog con create_changelog_entry -- así el usuario nunca tiene que documentar esto a mano.
59
+ - Antes de crear un módulo/estatus/categoría/servicio/entorno/distribución, revisa con el list_* correspondiente que no exista ya uno con ese nombre.
60
+
61
+ No le preguntes al usuario por workspaceId ni projectId -- ya están configurados. Solo pregúntale por el proyecto si tiene más de uno y no queda claro a cuál te refieres.
62
+
63
+ No crees tareas ni entradas de changelog por preguntas triviales o exploración sin cambios reales -- solo por trabajo que de verdad avanza el proyecto.`
64
+
41
65
  export function createServer() {
42
66
  const config = loadConfig()
43
- const server = new McpServer({ name: 'orquestra-mcp', version: '1.0.0' })
67
+ const server = new McpServer({ name: 'orquestra-mcp', version: '1.0.0' }, { instructions: SERVER_INSTRUCTIONS })
44
68
 
45
69
  function resolveProjectId(projectId) {
46
70
  if (config.defaultProjectId) return config.defaultProjectId
@@ -509,6 +533,29 @@ export function createServer() {
509
533
  }
510
534
  )
511
535
 
536
+ server.registerTool(
537
+ 'update_project',
538
+ {
539
+ description: 'Edita el proyecto configurado (name, description, phase, projectType, url). Útil para sincronizar la fase real de un proyecto que ya estaba avanzado antes de conectarlo a Orquestra -- get_project_context puede verse "vacío" (sin módulos/tareas) sin que eso signifique que el proyecto recién empieza.',
540
+ inputSchema: {
541
+ projectId: z.string().optional().describe(PROJECT_ID_DESC),
542
+ name: z.string().optional(),
543
+ description: z.string().optional(),
544
+ phase: z.string().optional().describe('idea | mvp | v1 | v2 | beta | produccion'),
545
+ projectType: z.enum(['code', 'content', 'hybrid']).optional(),
546
+ url: z.string().optional(),
547
+ },
548
+ },
549
+ async ({ projectId, ...body }) => {
550
+ try {
551
+ const data = await apiPatch(config, '/v1/projects', { id: resolveProjectId(projectId), ...body })
552
+ return textResult(data)
553
+ } catch (err) {
554
+ return errorResult(err)
555
+ }
556
+ }
557
+ )
558
+
512
559
  server.registerTool(
513
560
  'apply_stage_playbook',
514
561
  {