orquestra-mcp 1.48.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/README.md +17 -13
- package/package.json +1 -1
- package/src/server.mjs +55 -17
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# orquestra-mcp
|
|
2
2
|
|
|
3
|
-
Servidor MCP (Model Context Protocol) para Orquestra. Expone **
|
|
3
|
+
Servidor MCP (Model Context Protocol) para Orquestra. Expone **144 tools**
|
|
4
|
+
(conteo al 24 oct 2026, v1.49.0; la lista real está en `src/server.mjs`)
|
|
4
5
|
que llaman a la API de `orquestra-infra`: lectura de contexto/dashboard/
|
|
5
6
|
workspace/infra/paridad/listados, escritura de tareas/ideas/changelog/
|
|
6
7
|
notas/docs/módulos/flujo/categorías/infra/proyectos, y corridas de QA —
|
|
@@ -47,7 +48,7 @@ vez de contra producción).
|
|
|
47
48
|
|
|
48
49
|
## Setup manual (alternativa, sin el flujo de navegador)
|
|
49
50
|
|
|
50
|
-
Si
|
|
51
|
+
Si prefieres generar el token tú mismo en vez de usar `setup`:
|
|
51
52
|
|
|
52
53
|
1. **Cuenta + workspace en `orquestra-web`**: entra a la app, si no tienes
|
|
53
54
|
`workspaceId` te manda al wizard de onboarding.
|
|
@@ -75,7 +76,7 @@ Variables de entorno (todas opcionales si ya corriste `setup` — se leen de
|
|
|
75
76
|
| `ORQUESTRA_API_TOKEN` | sí | — |
|
|
76
77
|
| `ORQUESTRA_WORKSPACE_ID` | sí | — |
|
|
77
78
|
| `ORQUESTRA_DEFAULT_PROJECT_ID` | no | — |
|
|
78
|
-
| `ORQUESTRA_API_BASE` | no | `
|
|
79
|
+
| `ORQUESTRA_API_BASE` | no | `https://api.orquestra.me` |
|
|
79
80
|
| `ORQUESTRA_WEB_URL` (solo `setup`) | no | `https://app.orquestra.me` |
|
|
80
81
|
|
|
81
82
|
### Claude Code
|
|
@@ -152,23 +153,24 @@ Lectura de contexto:
|
|
|
152
153
|
| `get_platform_playbook` | `platform` | Guía de referencia + checklist de publicación en tienda (`ios`\|`android`) — sin red |
|
|
153
154
|
| `get_skills_catalog` | — | Catálogo de Claude Skills de terceros recomendadas — sin red |
|
|
154
155
|
| `preview_skill` | `key?` / `sourceRepo?`+`sourcePath?` | Trae el SKILL.md real de una skill de terceros, sin instalar nada |
|
|
155
|
-
| `install_skill` | `key?` / `sourceRepo?`+`sourcePath?`, `scope`, `confirmed` | Descarga e instala una skill en `.claude/skills/` — solo después de `preview_skill` + confirmación del usuario; además registra la instalación en Orquestra (best-effort) |
|
|
156
|
+
| `install_skill` | `key?` / `sourceRepo?`+`sourcePath?`, `scope`, `confirmed` | Descarga e instala una skill en `.claude/skills/{key}/` de la carpeta actual (`scope:'project'`) o en `~/.claude/skills/{key}/` (`scope:'global'`) — solo después de `preview_skill` + confirmación del usuario; además registra la instalación en Orquestra (best-effort) |
|
|
156
157
|
| `list_installed_skills` | `projectId?` | Registros reales de skills instaladas en el proyecto (colección `skills`, no el catálogo) |
|
|
157
158
|
| `create_skill_install` / `update_skill_install` | ver server.mjs | Self-report manual de una skill instalada a mano, fuera del flujo de `install_skill` |
|
|
158
159
|
| `get_setup_guide` | — | Orden recomendado (flujo→categorías→infra→módulos→tareas→ideas→notas→changelog→docs) para configurar/sincronizar sin duplicar — sin red |
|
|
159
160
|
| `list_modules` / `list_statuses` / `list_categories` / `list_services` / `list_environments` / `list_distributions` | `projectId?` | Lista completa de cada entidad — revísalos antes de `create_*` para no duplicar (patrón upsert) |
|
|
160
161
|
|
|
161
162
|
Creación (`create_*`) y edición (`update_*`) — mismo patrón en todos, solo
|
|
162
|
-
crear/editar,
|
|
163
|
+
crear/editar (los únicos borrados acotados están en "Estado", abajo). Tabla
|
|
164
|
+
parcial: la lista completa está en `src/server.mjs`:
|
|
163
165
|
|
|
164
166
|
| Entidad | Tools | Notas |
|
|
165
167
|
|---|---|---|
|
|
166
168
|
| Tareas | `create_task`, `update_task` | `update_task` incluye `scope` — úsalo para resolver desfases de paridad |
|
|
167
169
|
| Verificaciones por plataforma | `list_verifications`, `add_verification`, `update_verification`, `delete_verification`, `verify_with_agent` | Confirmaciones (humanas o de agente) de que la tarea quedó bien en web/iOS/Android/API — NO van en el checklist. La tarea no cierra con verificaciones abiertas y se cierra sola al aprobarse la última; `failed` (con `note`) la regresa a su estatus anterior. También: `verifications` en `create_task`, `waiveVerifications` en `update_task` (solo con confirmación del usuario) y `verificationId` en `create_agent_run` |
|
|
168
|
-
| Ideas | `create_idea` | |
|
|
169
|
-
| Changelog | `create_changelog_entry` | Estilo Keep a Changelog |
|
|
170
|
-
| Notas | `create_note` | |
|
|
171
|
-
| Docs | `create_doc` | |
|
|
170
|
+
| Ideas | `list_ideas`, `create_idea`, `update_idea` | |
|
|
171
|
+
| Changelog | `list_changelog`, `create_changelog_entry`, `update_changelog_entry` | Estilo Keep a Changelog |
|
|
172
|
+
| Notas | `list_notes`, `create_note`, `update_note` | |
|
|
173
|
+
| Docs | `create_doc`, `get_doc`, `update_doc` | |
|
|
172
174
|
| Módulos | `create_module`, `update_module` | `scope` también editable |
|
|
173
175
|
| Flujo (estatus) | `create_status`, `update_status` | `nextIds` define las transiciones válidas |
|
|
174
176
|
| Categorías | `create_category`, `update_category` | |
|
|
@@ -181,7 +183,7 @@ Compuestas:
|
|
|
181
183
|
| Tool | Args | Descripción |
|
|
182
184
|
|---|---|---|
|
|
183
185
|
| `init_project` | `name`, `description?`, `phase?`, `projectType?`, `distributions?`, `categories?` | Crea un proyecto nuevo en el workspace — categorías+distribuciones+flujo conectado en un paso |
|
|
184
|
-
| `apply_stage_playbook` | `stageId`, `moduleName
|
|
186
|
+
| `apply_stage_playbook` | `stageId`, `moduleName?` | Crea el módulo + todas las tareas de la plantilla de una etapa |
|
|
185
187
|
|
|
186
188
|
Los campos enum (`type`, `priority`, `status`, etc.) están fijos y
|
|
187
189
|
documentados en el `inputSchema` de cada tool — el modelo los ve sin
|
|
@@ -227,7 +229,7 @@ create/update sigue siendo criterio del agente y del humano.
|
|
|
227
229
|
|
|
228
230
|
## Estado
|
|
229
231
|
|
|
230
|
-
|
|
232
|
+
144 tools (ver arriba): lectura (contexto, dashboard, workspace, infra, paridad, standup,
|
|
231
233
|
sync report, setup guide, playbooks de etapa y de plataforma, catálogo de
|
|
232
234
|
skills, search) + `list_*` de cada colección + creación/edición de tareas
|
|
233
235
|
(con checklist, verificaciones por plataforma, tiempo, adjuntos, merge), ideas (con comentarios), notas,
|
|
@@ -236,6 +238,8 @@ infraestructura, proyecto, contenido (canales, campañas, contenido,
|
|
|
236
238
|
Postproxy), agentes, skills, sugerencias y vínculos entre ítems
|
|
237
239
|
(`link_items`/`unlink_items`/`list_relations`) + compuestas (init_project,
|
|
238
240
|
apply_stage_playbook, apply_platform_playbook, install_skill). Sin
|
|
239
|
-
`delete_*` salvo adjuntos, ítems de checklist, verificaciones
|
|
240
|
-
(`unlink_items`)
|
|
241
|
+
`delete_*` salvo adjuntos, ítems de checklist, verificaciones, vínculos
|
|
242
|
+
(`unlink_items`) y el link del portal del cliente (`revoke_client_portal_link`).
|
|
243
|
+
Comando extra de CLI (no tool): `npx orquestra-mcp vault sync <carpeta> [--apply]`
|
|
244
|
+
(base de conocimiento ↔ vault de Obsidian). Publicado en npm como
|
|
241
245
|
`orquestra-mcp` (unscoped) -- `npx orquestra-mcp setup`.
|
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
|
|
@@ -89,7 +91,7 @@ const SETUP_GUIDE = {
|
|
|
89
91
|
{ step: 6, section: 'Ideas', check: 'list_ideas', createOrUpdate: 'create_idea / update_idea / convert_idea_to_task', matchBy: 'title' },
|
|
90
92
|
{ step: 7, section: 'Notas', check: 'list_notes', createOrUpdate: 'create_note / update_note', matchBy: 'title' },
|
|
91
93
|
{ step: 8, section: 'Changelog', check: 'list_changelog', createOrUpdate: 'create_changelog_entry / update_changelog_entry', matchBy: 'text' },
|
|
92
|
-
{ step: 9, section: 'Docs', check: 'search', createOrUpdate: 'create_doc
|
|
94
|
+
{ step: 9, section: 'Docs', check: 'search', createOrUpdate: 'create_doc / update_doc (get_doc para leer el texto completo)', matchBy: 'title' },
|
|
93
95
|
],
|
|
94
96
|
}
|
|
95
97
|
|
|
@@ -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)'),
|
|
@@ -2335,6 +2343,36 @@ export function createServer() {
|
|
|
2335
2343
|
}
|
|
2336
2344
|
)
|
|
2337
2345
|
|
|
2346
|
+
// Editar docs (ORQ-409): get_doc trae el texto completo (search solo da fragmentos) para que
|
|
2347
|
+
// update_doc no pise el contenido con una versión recortada.
|
|
2348
|
+
server.registerTool(
|
|
2349
|
+
'get_doc',
|
|
2350
|
+
{
|
|
2351
|
+
description: 'Lee un documento completo del proyecto (contenido, tipo, carpeta, módulo, visibilidad). Úsala antes de update_doc: content se reemplaza entero, así que parte del texto actual. El id sale de search (types=["doc"]).',
|
|
2352
|
+
inputSchema: { projectId: z.string().optional().describe(PROJECT_ID_DESC), id: z.string() },
|
|
2353
|
+
},
|
|
2354
|
+
async ({ projectId, id }) => {
|
|
2355
|
+
try { return textResult(await apiGet(config, `/v1/docs/${id}`, { projectId: resolveProjectId(projectId) })) } catch (err) { return errorResult(err) }
|
|
2356
|
+
}
|
|
2357
|
+
)
|
|
2358
|
+
|
|
2359
|
+
registerUpdate('update_doc', '/v1/docs',
|
|
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.',
|
|
2361
|
+
{
|
|
2362
|
+
title: z.string().optional(),
|
|
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.'),
|
|
2364
|
+
type: z.enum(DOC_TYPES).optional(),
|
|
2365
|
+
adrStatus: z.enum(ADR_STATUSES).optional().describe('Solo para type=\'adr\'.'),
|
|
2366
|
+
adrContext: z.string().optional().describe('Solo para type=\'adr\'.'),
|
|
2367
|
+
adrConsequences: z.string().optional().describe('Solo para type=\'adr\'.'),
|
|
2368
|
+
moduleId: z.string().optional(),
|
|
2369
|
+
folder: z.enum(DOC_FOLDERS).optional(),
|
|
2370
|
+
visibility: z.enum(DOC_VISIBILITY).optional().describe('"team" | "workspace" | "public" (expone el doc sin sesión).'),
|
|
2371
|
+
reviewOwnerUid: z.string().optional(),
|
|
2372
|
+
reviewIntervalDays: z.number().optional(),
|
|
2373
|
+
}
|
|
2374
|
+
)
|
|
2375
|
+
|
|
2338
2376
|
// ═══ ESCRITURA (nivel B -- módulos, flujo, categorías, infra) ═══════════════
|
|
2339
2377
|
|
|
2340
2378
|
const SCOPE_SCHEMA = z.array(z.object({ distId: z.string(), layer: z.string().optional(), done: z.boolean().optional(), ...SCOPE_EVIDENCE })).optional()
|
|
@@ -2342,7 +2380,7 @@ export function createServer() {
|
|
|
2342
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.')
|
|
2343
2381
|
registerCreate('create_module', '/v1/modules', 'Crea un módulo en un proyecto de Orquestra.', {
|
|
2344
2382
|
name: z.string().describe('Nombre del módulo'),
|
|
2345
|
-
description: z.string().optional(),
|
|
2383
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2346
2384
|
statusId: z.string().optional(),
|
|
2347
2385
|
categoryId: z.string().optional(),
|
|
2348
2386
|
scope: SCOPE_SCHEMA.describe('Alcance por distribución, ej: [{distId, layer, done}]'),
|
|
@@ -2351,12 +2389,12 @@ export function createServer() {
|
|
|
2351
2389
|
shippedVersion: z.string().optional().describe('Versión del changelog en la que se envió, ej: "1.4.0"'),
|
|
2352
2390
|
ownerUid: z.string().optional().describe('uid del miembro responsable del avance del módulo'),
|
|
2353
2391
|
dependsOnModuleIds: z.array(z.string()).optional().describe('IDs de módulos de los que este depende (dependencia planeada, manual)'),
|
|
2354
|
-
closureCriteria: z.string().optional().describe(
|
|
2392
|
+
closureCriteria: z.string().optional().describe(`Texto libre: cuándo se considera verdaderamente cerrado. ${WIKILINK_DESC}`),
|
|
2355
2393
|
key: MODULE_KEY,
|
|
2356
2394
|
})
|
|
2357
2395
|
registerUpdate('update_module', '/v1/modules', 'Edita un módulo existente (incluido su scope multiplataforma).', {
|
|
2358
2396
|
name: z.string().optional(),
|
|
2359
|
-
description: z.string().optional(),
|
|
2397
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2360
2398
|
statusId: z.string().optional(),
|
|
2361
2399
|
categoryId: z.string().optional(),
|
|
2362
2400
|
scope: SCOPE_SCHEMA,
|
|
@@ -2365,7 +2403,7 @@ export function createServer() {
|
|
|
2365
2403
|
shippedVersion: z.string().optional().describe('Versión del changelog en la que se envió, ej: "1.4.0"'),
|
|
2366
2404
|
ownerUid: z.string().optional().describe('uid del miembro responsable del avance del módulo'),
|
|
2367
2405
|
dependsOnModuleIds: z.array(z.string()).optional().describe('IDs de módulos de los que este depende (dependencia planeada, manual)'),
|
|
2368
|
-
closureCriteria: z.string().optional().describe(
|
|
2406
|
+
closureCriteria: z.string().optional().describe(`Texto libre: cuándo se considera verdaderamente cerrado. ${WIKILINK_DESC}`),
|
|
2369
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.`),
|
|
2370
2408
|
})
|
|
2371
2409
|
|
|
@@ -2648,10 +2686,10 @@ export function createServer() {
|
|
|
2648
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).', {
|
|
2649
2687
|
relatedTo: RELATED_TO,
|
|
2650
2688
|
title: z.string(),
|
|
2651
|
-
description: z.string().optional(),
|
|
2689
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2652
2690
|
probability: z.enum(RISK_LEVELS).optional().describe('Default: medium'),
|
|
2653
2691
|
impact: z.enum(RISK_LEVELS).optional().describe('Default: medium'),
|
|
2654
|
-
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}`),
|
|
2655
2693
|
status: z.enum(RISK_STATUSES).optional().describe('Default: open. "closed" en vez de borrar -- nunca se borra un riesgo.'),
|
|
2656
2694
|
ownerUid: z.string().optional().describe('Dueño del riesgo -- le avisa solo a esa persona al asignarla (ver list de miembros del workspace)'),
|
|
2657
2695
|
moduleId: z.string().optional().describe('Módulo relacionado, si aplica (ver list_modules)'),
|
|
@@ -2659,10 +2697,10 @@ export function createServer() {
|
|
|
2659
2697
|
|
|
2660
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.', {
|
|
2661
2699
|
title: z.string().optional(),
|
|
2662
|
-
description: z.string().optional(),
|
|
2700
|
+
description: z.string().optional().describe(WIKILINK_DESC),
|
|
2663
2701
|
probability: z.enum(RISK_LEVELS).optional(),
|
|
2664
2702
|
impact: z.enum(RISK_LEVELS).optional(),
|
|
2665
|
-
mitigation: z.string().optional(),
|
|
2703
|
+
mitigation: z.string().optional().describe(WIKILINK_DESC),
|
|
2666
2704
|
status: z.enum(RISK_STATUSES).optional(),
|
|
2667
2705
|
ownerUid: z.string().optional(),
|
|
2668
2706
|
moduleId: z.string().optional(),
|