orquestra-mcp 1.3.2 → 1.4.1
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 +12 -12
- package/package.json +2 -2
- package/src/server.mjs +31 -0
package/README.md
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# orquestra-mcp
|
|
2
2
|
|
|
3
|
-
Servidor MCP (Model Context Protocol) para Orquestra. Expone **
|
|
3
|
+
Servidor MCP (Model Context Protocol) para Orquestra. Expone **38 tools**
|
|
4
4
|
que llaman a la API de `orquestra-infra`: lectura de contexto/dashboard/
|
|
5
|
-
workspace/infra/paridad/listados,
|
|
6
|
-
notas/docs/módulos/flujo/categorías/infra/proyectos
|
|
5
|
+
workspace/infra/paridad/listados, escritura de tareas/ideas/changelog/
|
|
6
|
+
notas/docs/módulos/flujo/categorías/infra/proyectos, y corridas de QA —
|
|
7
|
+
un agente puede
|
|
7
8
|
prácticamente todo lo que un humano hace en la web, directo desde la
|
|
8
9
|
conversación. `get_setup_guide` documenta el orden recomendado para
|
|
9
10
|
configurar/sincronizar un proyecto completo sin crear duplicados.
|
|
@@ -185,12 +186,11 @@ create/update sigue siendo criterio del agente y del humano.
|
|
|
185
186
|
|
|
186
187
|
## Estado
|
|
187
188
|
|
|
188
|
-
|
|
189
|
-
paridad/playbook) + 6 `list_*` +
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
apply_stage_playbook). No hay `delete_*`, ni
|
|
193
|
-
`update_doc`/`update_changelog_entry`
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
npmjs.com).
|
|
189
|
+
38 tools: 9 de lectura (contexto/tasks/search + dashboard/workspace/infra/
|
|
190
|
+
paridad/setup guide/stage playbook) + 6 `list_*` + 19 de creación/edición
|
|
191
|
+
(tasks/ideas/changelog/notes/docs + módulos/flujo/categorías/servicios/
|
|
192
|
+
entornos/distribuciones/proyecto) + 2 de QA (create_qa_run/get_qa_run) +
|
|
193
|
+
2 compuestas (init_project, apply_stage_playbook). No hay `delete_*`, ni
|
|
194
|
+
`update_idea`/`update_note`/`update_doc`/`update_changelog_entry`
|
|
195
|
+
todavía. Publicado en npm como `orquestra-mcp` (unscoped) -- `npx
|
|
196
|
+
orquestra-mcp setup`.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orquestra-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Servidor MCP de Orquestra --
|
|
3
|
+
"version": "1.4.1",
|
|
4
|
+
"description": "Servidor MCP de Orquestra -- 38 tools para leer y escribir tareas, ideas, changelog, infraestructura, 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
|
@@ -58,6 +58,7 @@ Durante el trabajo normal de código, sin que el usuario te lo pida explícitame
|
|
|
58
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
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
60
|
- Si tienes acceso al repo real de una distribución (ej. puedes correr "git remote get-url origin" en ese código), llena repoUrl en create_distribution/update_distribution sin preguntar -- es solo informativo, no requiere credenciales. Esto es distinto de conectar el repo con PAT para el changelog automático (Workspace → Conexiones en orquestra-web): eso sí es un paso deliberado del usuario, con una credencial real -- nunca lo hagas tú solo ni sugieras que ya está conectado por haber llenado repoUrl.
|
|
61
|
+
- No todas las tareas necesitan una corrida de QA -- clasifica antes de disparar una: cambios que afectan comportamiento real (features, bugs, UI, lógica de negocio, endpoints/API) sí la necesitan; cambios que no alteran comportamiento (docs, comentarios, refactors sin cambio funcional, config/tooling interno, notas/reuniones/ideas) no. Si decides que sí, llama a create_qa_run en la rama real de ese trabajo y deja la tarea en "En revisión" -- NUNCA la muevas a "Listo" ni digas que "QA lo revisó" sin haber confirmado con get_qa_run un estatus terminal "passed" de verdad (las corridas son asíncronas, tardan minutos en otra máquina). Si tarda, dile al usuario que quedó en cola (con el runId) y que confirmas cuando termine -- no lo des por hecho nunca.
|
|
61
62
|
|
|
62
63
|
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.
|
|
63
64
|
|
|
@@ -517,6 +518,36 @@ export function createServer() {
|
|
|
517
518
|
repoUrl: z.string().optional().describe('URL del repo de este código -- solo informativo, no requiere credenciales.'),
|
|
518
519
|
})
|
|
519
520
|
|
|
521
|
+
// ═══ QA (módulo de runners -- ver orquestra-qa-agent) ═══════════════════════
|
|
522
|
+
// Asíncronas: una corrida puede tardar minutos en otra máquina. Ver
|
|
523
|
+
// SERVER_INSTRUCTIONS para la regla de no asumir "passed" sin confirmar.
|
|
524
|
+
|
|
525
|
+
registerCreate('create_qa_run', '/v1/qa/runs', 'Dispara una corrida de QA (lint/tests/build/E2E según el stack) en la rama indicada. El proyecto necesita QA activado (Workspace → QA + sección QA del proyecto) o falla explícito. La corrida queda "queued" -- nunca asumas que pasó, confirma con get_qa_run.', {
|
|
526
|
+
branch: z.string().optional().describe('Rama a probar -- default: la configurada para el proyecto, o "main"'),
|
|
527
|
+
commit: z.string().optional(),
|
|
528
|
+
trigger: z.enum(['manual', 'push', 'schedule']).optional().describe('Default: manual'),
|
|
529
|
+
runnerId: z.string().optional().describe('Máquina específica -- default: la configurada para el proyecto, o cualquiera disponible'),
|
|
530
|
+
})
|
|
531
|
+
|
|
532
|
+
server.registerTool(
|
|
533
|
+
'get_qa_run',
|
|
534
|
+
{
|
|
535
|
+
description: 'Consulta el estatus real de una corrida de QA por id (queued|running|passed|failed|error|cancelled, con steps y summary). Única forma válida de confirmar un resultado -- nunca lo des por hecho.',
|
|
536
|
+
inputSchema: {
|
|
537
|
+
runId: z.string().describe('ID de la corrida, devuelto por create_qa_run'),
|
|
538
|
+
projectId: z.string().optional().describe(PROJECT_ID_DESC),
|
|
539
|
+
},
|
|
540
|
+
},
|
|
541
|
+
async ({ runId, projectId }) => {
|
|
542
|
+
try {
|
|
543
|
+
const data = await apiGet(config, `/v1/qa/runs/${runId}`, { projectId: resolveProjectId(projectId) })
|
|
544
|
+
return textResult(data)
|
|
545
|
+
} catch (err) {
|
|
546
|
+
return errorResult(err)
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
)
|
|
550
|
+
|
|
520
551
|
// ═══ COMPUESTAS (nivel C) ═══════════════════════════════════════════════════
|
|
521
552
|
|
|
522
553
|
server.registerTool(
|