orquestra-mcp 1.49.0 → 1.50.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.
- package/package.json +1 -1
- package/src/server.mjs +25 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orquestra-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.50.0",
|
|
4
4
|
"description": "Servidor MCP de Orquestra -- 135 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": {
|
package/src/server.mjs
CHANGED
|
@@ -25,6 +25,8 @@ function textResult(data) {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
const PROJECT_ID_DESC = 'ID del proyecto dentro del workspace configurado. Si hay un proyecto default configurado (via "setup" o ORQUESTRA_DEFAULT_PROJECT_ID), este argumento se ignora -- el server queda fijo a ese proyecto y no puede leer/escribir otro.'
|
|
28
|
+
// ORQ-411: los textos largos de idea, riesgo y módulo también cuentan para [[...]] y "Mencionado en".
|
|
29
|
+
const WIKILINK_DESC = 'Admite [[Título]], [[Título|texto]] o [[ORQ-123]] para enlazar otra nota, doc, tarea, reunión, idea, riesgo, módulo, contenido o distribución del proyecto.'
|
|
28
30
|
|
|
29
31
|
const TASK_TYPES = ['feature', 'bug', 'improvement', 'tech', 'docs', 'idea', 'design', 'security', 'meeting', 'call', 'followup', 'business']
|
|
30
32
|
// Actividades (ORQ-295): reunión/llamada/seguimiento. 'business' sigue siendo tarea (entregable). Mismas listas que
|
|
@@ -1008,10 +1010,10 @@ export function createServer() {
|
|
|
1008
1010
|
registerRead(
|
|
1009
1011
|
'get_backlinks',
|
|
1010
1012
|
'/v1/backlinks',
|
|
1011
|
-
'Backlinks ("Mencionado en"): qué notas, docs, tareas
|
|
1013
|
+
'Backlinks ("Mencionado en"): qué notas, docs, tareas, reuniones, ideas, riesgos y módulos enlazan con [[...]] a la entidad pedida (también cuentan los puntos a revisar de una reunión y las instrucciones de las verificaciones). Útil antes de editar o cerrar algo para ver qué depende de eso.',
|
|
1012
1014
|
{
|
|
1013
|
-
type: z.enum(['note', 'doc', 'task', 'idea']),
|
|
1014
|
-
id: z.string().describe('id
|
|
1015
|
+
type: z.enum(['note', 'doc', 'task', 'activity', 'idea', 'risk', 'module', 'content', 'distribution']).describe('"activity" para reunión/llamada/seguimiento'),
|
|
1016
|
+
id: z.string().describe('id del ítem'),
|
|
1015
1017
|
},
|
|
1016
1018
|
(args, projectId) => ({ projectId, type: args.type, id: args.id })
|
|
1017
1019
|
)
|
|
@@ -1993,7 +1995,7 @@ export function createServer() {
|
|
|
1993
1995
|
{
|
|
1994
1996
|
relatedTo: RELATED_TO,
|
|
1995
1997
|
title: z.string().describe('Título de la idea'),
|
|
1996
|
-
description: z.string().optional(),
|
|
1998
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
1997
1999
|
priority: z.enum(TASK_PRIORITIES).optional().describe('Default: medium -- se puede derivar de impact+effort si los mandas (alto+bajo→high, alto+alto o bajo+bajo→medium, bajo+alto→low).'),
|
|
1998
2000
|
categoryId: z.string().optional(),
|
|
1999
2001
|
dueDate: z.string().optional().describe('YYYY-MM-DD'),
|
|
@@ -2014,7 +2016,7 @@ export function createServer() {
|
|
|
2014
2016
|
|
|
2015
2017
|
registerUpdate('update_idea', '/v1/ideas', 'Edita una idea existente. Todos los campos son opcionales -- solo se cambian los que mandes.', {
|
|
2016
2018
|
title: z.string().optional(),
|
|
2017
|
-
description: z.string().optional(),
|
|
2019
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2018
2020
|
priority: z.enum(TASK_PRIORITIES).optional(),
|
|
2019
2021
|
categoryId: z.string().optional(),
|
|
2020
2022
|
dueDate: z.string().optional().describe('YYYY-MM-DD'),
|
|
@@ -2236,14 +2238,19 @@ export function createServer() {
|
|
|
2236
2238
|
'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.',
|
|
2237
2239
|
{}, (args, projectId) => ({ projectId }))
|
|
2238
2240
|
|
|
2241
|
+
// ORQ-414: puntos de la idea, mismo shape que agendaItems de las actividades.
|
|
2242
|
+
const NOTE_ITEMS = z.array(z.union([z.string(), z.object({ id: z.string().optional(), text: z.string() })])).optional()
|
|
2243
|
+
.describe('Puntos de la idea, debajo de la descripción (body). Lista simple, NO checklist (sin palomitas). Reemplaza la lista COMPLETA: para agregar uno, lee la actual con list_notes y manda todos (con sus id para conservarlos).')
|
|
2244
|
+
|
|
2239
2245
|
registerCreate(
|
|
2240
2246
|
'create_note',
|
|
2241
2247
|
'/v1/notes',
|
|
2242
|
-
'Crea una nota en un proyecto de Orquestra. En el texto, [[Título]] o [[Título|texto]] enlaza otra nota, doc, tarea
|
|
2248
|
+
'Crea una nota en un proyecto de Orquestra. En el texto, [[Título]] o [[Título|texto]] enlaza otra nota, doc, tarea, reunión, idea, riesgo, módulo, contenido o distribución del proyecto (o [[ORQ-123]] por folio) -- úsalo para conectar el conocimiento en vez de pegar ids.',
|
|
2243
2249
|
{
|
|
2244
2250
|
relatedTo: RELATED_TO,
|
|
2245
2251
|
title: z.string().describe('Título de la nota'),
|
|
2246
|
-
body: z.string().optional(),
|
|
2252
|
+
body: z.string().optional().describe('Descripción de la nota.'),
|
|
2253
|
+
noteItems: NOTE_ITEMS,
|
|
2247
2254
|
pinned: z.boolean().optional(),
|
|
2248
2255
|
moduleId: z.string().optional().describe('Módulo relacionado, si la nota es sobre uno específico -- ligarla ayuda a encontrarla después (ver list_modules)'),
|
|
2249
2256
|
taskId: z.string().optional().describe('Tarea relacionada, si la nota es sobre una específica (ver list_tasks)'),
|
|
@@ -2265,6 +2272,7 @@ export function createServer() {
|
|
|
2265
2272
|
{
|
|
2266
2273
|
title: z.string().optional(),
|
|
2267
2274
|
body: z.string().optional(),
|
|
2275
|
+
noteItems: NOTE_ITEMS,
|
|
2268
2276
|
pinned: z.boolean().optional(),
|
|
2269
2277
|
moduleId: z.string().optional(),
|
|
2270
2278
|
taskId: z.string().optional(),
|
|
@@ -2315,7 +2323,7 @@ export function createServer() {
|
|
|
2315
2323
|
registerCreate(
|
|
2316
2324
|
'create_doc',
|
|
2317
2325
|
'/v1/docs',
|
|
2318
|
-
'Crea un documento en un proyecto de Orquestra. En el texto, [[Título]] o [[Título|texto]] enlaza otra nota, doc, tarea
|
|
2326
|
+
'Crea un documento en un proyecto de Orquestra. En el texto, [[Título]] o [[Título|texto]] enlaza otra nota, doc, tarea, reunión, idea, riesgo, módulo, contenido o distribución del proyecto (o [[ORQ-123]] por folio) -- úsalo para conectar el conocimiento en vez de pegar ids.',
|
|
2319
2327
|
{
|
|
2320
2328
|
relatedTo: RELATED_TO,
|
|
2321
2329
|
type: z.enum(DOC_TYPES).optional().describe('Tipo de documento -- obligatorio salvo que mandes templateId (la plantilla trae su tipo)'),
|
|
@@ -2352,7 +2360,7 @@ export function createServer() {
|
|
|
2352
2360
|
'Edita un documento existente. Solo se cambian los campos que mandes; content REEMPLAZA el texto entero (lee primero con get_doc y manda el documento completo, no solo el cambio). La versión anterior queda en el historial del doc ("Versiones"). Si cambias el título, los [[Título viejo]] de todo el proyecto se reescriben solos.',
|
|
2353
2361
|
{
|
|
2354
2362
|
title: z.string().optional(),
|
|
2355
|
-
content: z.string().optional().describe('Markdown completo del doc. [[Título]] enlaza otra nota, doc, tarea o
|
|
2363
|
+
content: z.string().optional().describe('Markdown completo del doc. [[Título]] enlaza otra nota, doc, tarea, reunión, idea, riesgo, módulo, contenido o distribución.'),
|
|
2356
2364
|
type: z.enum(DOC_TYPES).optional(),
|
|
2357
2365
|
adrStatus: z.enum(ADR_STATUSES).optional().describe('Solo para type=\'adr\'.'),
|
|
2358
2366
|
adrContext: z.string().optional().describe('Solo para type=\'adr\'.'),
|
|
@@ -2372,7 +2380,7 @@ export function createServer() {
|
|
|
2372
2380
|
const MODULE_KEY = z.string().optional().describe('Clave del módulo (ej. "AUTH", "PAGOS"): 2-10 letras/números, empieza con letra, única en el proyecto. Numera sus tareas (AUTH-1, AUTH-2...) en moduleCode, además del folio ORQ-N. Solo si el usuario la pidió o el proyecto ya usa claves -- no la inventes.')
|
|
2373
2381
|
registerCreate('create_module', '/v1/modules', 'Crea un módulo en un proyecto de Orquestra.', {
|
|
2374
2382
|
name: z.string().describe('Nombre del módulo'),
|
|
2375
|
-
description: z.string().optional(),
|
|
2383
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2376
2384
|
statusId: z.string().optional(),
|
|
2377
2385
|
categoryId: z.string().optional(),
|
|
2378
2386
|
scope: SCOPE_SCHEMA.describe('Alcance por distribución, ej: [{distId, layer, done}]'),
|
|
@@ -2381,12 +2389,12 @@ export function createServer() {
|
|
|
2381
2389
|
shippedVersion: z.string().optional().describe('Versión del changelog en la que se envió, ej: "1.4.0"'),
|
|
2382
2390
|
ownerUid: z.string().optional().describe('uid del miembro responsable del avance del módulo'),
|
|
2383
2391
|
dependsOnModuleIds: z.array(z.string()).optional().describe('IDs de módulos de los que este depende (dependencia planeada, manual)'),
|
|
2384
|
-
closureCriteria: z.string().optional().describe(
|
|
2392
|
+
closureCriteria: z.string().optional().describe(`Texto libre: cuándo se considera verdaderamente cerrado. ${WIKILINK_DESC}`),
|
|
2385
2393
|
key: MODULE_KEY,
|
|
2386
2394
|
})
|
|
2387
2395
|
registerUpdate('update_module', '/v1/modules', 'Edita un módulo existente (incluido su scope multiplataforma).', {
|
|
2388
2396
|
name: z.string().optional(),
|
|
2389
|
-
description: z.string().optional(),
|
|
2397
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2390
2398
|
statusId: z.string().optional(),
|
|
2391
2399
|
categoryId: z.string().optional(),
|
|
2392
2400
|
scope: SCOPE_SCHEMA,
|
|
@@ -2395,7 +2403,7 @@ export function createServer() {
|
|
|
2395
2403
|
shippedVersion: z.string().optional().describe('Versión del changelog en la que se envió, ej: "1.4.0"'),
|
|
2396
2404
|
ownerUid: z.string().optional().describe('uid del miembro responsable del avance del módulo'),
|
|
2397
2405
|
dependsOnModuleIds: z.array(z.string()).optional().describe('IDs de módulos de los que este depende (dependencia planeada, manual)'),
|
|
2398
|
-
closureCriteria: z.string().optional().describe(
|
|
2406
|
+
closureCriteria: z.string().optional().describe(`Texto libre: cuándo se considera verdaderamente cerrado. ${WIKILINK_DESC}`),
|
|
2399
2407
|
key: MODULE_KEY.describe(`${MODULE_KEY.description} Poner o cambiar la clave numera las tareas del módulo que todavía no tienen una (por orden de creación; la respuesta trae assignedCodes). "" la quita: las tareas conservan la suya.`),
|
|
2400
2408
|
})
|
|
2401
2409
|
|
|
@@ -2678,10 +2686,10 @@ export function createServer() {
|
|
|
2678
2686
|
registerCreate('create_risk', '/v1/risks', 'Registra un riesgo/bloqueo a nivel de proyecto -- algo que puede hacer fallar o atrasar el proyecto en general, no el bloqueo puntual de una tarea (para eso usa relatedTaskId en update_task).', {
|
|
2679
2687
|
relatedTo: RELATED_TO,
|
|
2680
2688
|
title: z.string(),
|
|
2681
|
-
description: z.string().optional(),
|
|
2689
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2682
2690
|
probability: z.enum(RISK_LEVELS).optional().describe('Default: medium'),
|
|
2683
2691
|
impact: z.enum(RISK_LEVELS).optional().describe('Default: medium'),
|
|
2684
|
-
mitigation: z.string().optional().describe(
|
|
2692
|
+
mitigation: z.string().optional().describe(`Plan o texto libre de qué se hace para reducir este riesgo. ${WIKILINK_DESC}`),
|
|
2685
2693
|
status: z.enum(RISK_STATUSES).optional().describe('Default: open. "closed" en vez de borrar -- nunca se borra un riesgo.'),
|
|
2686
2694
|
ownerUid: z.string().optional().describe('Dueño del riesgo -- le avisa solo a esa persona al asignarla (ver list de miembros del workspace)'),
|
|
2687
2695
|
moduleId: z.string().optional().describe('Módulo relacionado, si aplica (ver list_modules)'),
|
|
@@ -2689,10 +2697,10 @@ export function createServer() {
|
|
|
2689
2697
|
|
|
2690
2698
|
registerUpdate('update_risk', '/v1/risks', 'Edita un riesgo existente -- típicamente para actualizar su mitigación o cerrarlo (status: "closed") cuando deja de aplicar.', {
|
|
2691
2699
|
title: z.string().optional(),
|
|
2692
|
-
description: z.string().optional(),
|
|
2700
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2693
2701
|
probability: z.enum(RISK_LEVELS).optional(),
|
|
2694
2702
|
impact: z.enum(RISK_LEVELS).optional(),
|
|
2695
|
-
mitigation: z.string().optional(),
|
|
2703
|
+
mitigation: z.string().optional().describe(WIKILINK_DESC),
|
|
2696
2704
|
status: z.enum(RISK_STATUSES).optional(),
|
|
2697
2705
|
ownerUid: z.string().optional(),
|
|
2698
2706
|
moduleId: z.string().optional(),
|