orquestra-mcp 1.8.0 → 1.9.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 +2 -2
  2. package/src/server.mjs +26 -2
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "orquestra-mcp",
3
- "version": "1.8.0",
4
- "description": "Servidor MCP de Orquestra -- 69 tools para leer y escribir tareas, ideas, changelog, infraestructura, contenido, QA y más desde un agente de IA",
3
+ "version": "1.9.0",
4
+ "description": "Servidor MCP de Orquestra -- 71 tools para leer y escribir tareas, ideas, changelog, infraestructura, contenido, QA y más desde un agente de IA",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "orquestra-mcp": "./bin/orquestra-mcp.mjs"
package/src/server.mjs CHANGED
@@ -44,7 +44,7 @@ const SETUP_GUIDE = {
44
44
  { step: 4, section: 'Módulos', check: 'list_modules', createOrUpdate: 'create_module / update_module', matchBy: 'name', dependsOn: ['statusId (paso 1)', 'categoryId (paso 2)'] },
45
45
  { step: 5, section: 'Tareas', check: 'list_tasks', createOrUpdate: 'create_task / update_task', matchBy: 'title', dependsOn: ['statusId', 'categoryId', 'moduleId'] },
46
46
  { step: 6, section: 'Ideas', check: 'search', createOrUpdate: 'create_idea / update_idea / convert_idea_to_task', matchBy: 'title' },
47
- { step: 7, section: 'Notas', check: 'search', createOrUpdate: 'create_note (sin update_note todavía)', matchBy: 'title' },
47
+ { step: 7, section: 'Notas', check: 'list_notes', createOrUpdate: 'create_note / update_note', matchBy: 'title' },
48
48
  { step: 8, section: 'Changelog', check: 'list_changelog', createOrUpdate: 'create_changelog_entry / update_changelog_entry', matchBy: 'text' },
49
49
  { step: 9, section: 'Docs', check: 'search', createOrUpdate: 'create_doc (sin update_doc todavía)', matchBy: 'title' },
50
50
  ],
@@ -796,6 +796,10 @@ export function createServer() {
796
796
  }
797
797
  )
798
798
 
799
+ registerRead('list_notes', '/v1/notes',
800
+ 'Lista TODAS las notas de un proyecto de Orquestra, con todos sus campos -- a diferencia de get_project_context/search (resumen recortado), útil para auditar o encontrar el id exacto antes de update_note.',
801
+ {}, (args, projectId) => ({ projectId }))
802
+
799
803
  registerCreate(
800
804
  'create_note',
801
805
  '/v1/notes',
@@ -816,6 +820,24 @@ export function createServer() {
816
820
  }
817
821
  )
818
822
 
823
+ registerUpdate('update_note', '/v1/notes',
824
+ 'Edita una nota existente. Todos los campos son opcionales -- solo se cambian los que mandes.',
825
+ {
826
+ title: z.string().optional(),
827
+ body: z.string().optional(),
828
+ pinned: z.boolean().optional(),
829
+ moduleId: z.string().optional(),
830
+ taskId: z.string().optional(),
831
+ type: z.enum(NOTE_TYPES).optional(),
832
+ alternativesConsidered: z.string().optional(),
833
+ wouldRevertIf: z.string().optional(),
834
+ visibility: z.enum(NOTE_VISIBILITY).optional(),
835
+ relatedNoteId: z.string().optional(),
836
+ adrDocId: z.string().optional().describe('Liga esta nota a un doc ADR ya creado. No lo mandes junto con publishAsAdr.'),
837
+ publishAsAdr: z.boolean().optional().describe('Genera el doc ADR recién ahora (útil si la nota se marcó "decision" después de creada) y liga adrDocId -- falla si la nota ya tiene uno.'),
838
+ }
839
+ )
840
+
819
841
  registerCreate(
820
842
  'create_doc',
821
843
  '/v1/docs',
@@ -1251,6 +1273,7 @@ export function createServer() {
1251
1273
  description: z.string().optional(),
1252
1274
  phase: z.string().optional().describe('idea | mvp | v1 | v2 | beta | produccion (default: idea)'),
1253
1275
  projectType: z.enum(['code', 'content', 'hybrid']).optional().describe('Default: hybrid'),
1276
+ scale: z.enum(['landing', 'app', 'platform']).optional().describe('Default implícito: app. Eje ORTOGONAL a projectType -- "landing" es una página estática sin backend/auth/db propios (evita que las sugerencias de setup propongan infra que no aplica).'),
1254
1277
  url: z.string().optional(),
1255
1278
  distributions: z.array(z.enum(PLATFORM_TYPES)).optional().describe('Plataformas a crear, ej: ["web","ios"]'),
1256
1279
  categories: z.array(z.string()).optional().describe('Nombres de categorías a crear (default: ["General"])'),
@@ -1269,13 +1292,14 @@ export function createServer() {
1269
1292
  server.registerTool(
1270
1293
  'update_project',
1271
1294
  {
1272
- 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.',
1295
+ description: 'Edita el proyecto configurado (name, description, phase, projectType, scale, 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.',
1273
1296
  inputSchema: {
1274
1297
  projectId: z.string().optional().describe(PROJECT_ID_DESC),
1275
1298
  name: z.string().optional(),
1276
1299
  description: z.string().optional(),
1277
1300
  phase: z.string().optional().describe('idea | mvp | v1 | v2 | beta | produccion'),
1278
1301
  projectType: z.enum(['code', 'content', 'hybrid']).optional(),
1302
+ scale: z.enum(['landing', 'app', 'platform']).optional().describe('Eje ORTOGONAL a projectType, no lo reemplaza -- "landing" es una página estática sin backend/auth/db propios (ej. un portafolio o sitio de marketing): marcalo así si el proyecto es claramente eso, para que las sugerencias de setup dejen de proponer backend/auth/database. Default implícito "app" si no se manda -- sin este campo, el comportamiento es igual que antes.'),
1279
1303
  url: z.string().optional(),
1280
1304
  },
1281
1305
  },